Un diseño bastante común para el menú de un sitio, cuando el contenedor que lo contiene ocupa todo el ancho disponible en la página. En este caso, el primer elemento está adyacente al borde izquierdo y el último al borde derecho, y la distancia entre todos los elementos es igual. Hoy te contamos cómo se hace esto.
Le ofrecemos un ejemplo de implementación de un menú elástico usando CSS para su recurso. En este menú, los elementos se ubicarán en una línea. No se utilizará Javascript. El contenido del menú se incluirá en una lista regular. La característica principal de este menú es su versatilidad, que se expresa en el hecho de que tanto el número como la longitud de los elementos pueden ser cualquiera.
¿Cómo implementar esto?Cada programador puede ofrecer su propia forma de resolver un problema determinado. Todo depende de su imaginación, nivel de profesionalismo y habilidades. La solución más común a este problema es utilizar una tabla. Además, muchos sugerirían usar javascript. Me apresuro a decepcionar a aquellos que sugerirían usar la propiedad de visualización con la tabla de valores o la celda de la tabla. Este método no es suficientemente compatible con todos los navegadores.
Nuestra soluciónNuestra oferta se basará en una base sólida de conocimientos de HTML5 y CSS3.
La esencia del proceso se basa en la propiedad de alineación de texto con el valor de justificación. Para aquellos que lo hayan olvidado, les recuerdo: esta propiedad orienta la alineación del texto en todo el ancho del contenedor.
Al utilizar nuestra solución, se deben observar dos reglas obligatorias. La primera es que el ancho del contenedor de elementos del menú debe ser menor que el texto. Es decir, no en una sola línea. La segunda regla importante es que las palabras se estiran por igual, independientemente de si pertenecen al mismo punto o no.
A continuación se muestra el código que sirve como ejemplo de creación de un menú elástico:
HTML
< ul> < li>< a href= "#" >hogar< li>< a href= "#" >Blog< li>< a href= "#" >Noticias< li>< a href= "#" >Popular< li>< a href= "#" >Nuevos objetos
ul ( text- align: justificar; overflow: oculto; /* elimina los efectos secundarios del método */ altura: 20px; /* también elimina innecesarios */ cursor: predeterminado ; /* establece la forma inicial del cursor */ margen : 50px 100px 0 100px; fondo: #eee; padding: 5px; ) li ( display: inline; /* convierte los elementos del menú en texto */ ) li a ( display: inline- block; /* elimina saltos de palabras en el menú */ color: #444; ) a : hover ( color: #ff0000; ) ul: after ( /* formando la segunda línea para calcular el método */ content: "1" ; margin- left: 100 %; height: 1px; desbordamiento: oculto; visualización: bloque en línea;)
Para trabajar en el viejo Internet Explorer, debe agregar adicionalmente el siguiente código al CSS
ul ( z- index: expresión(runtimeStyle. zIndex = 1 , insertAdjacentHTML("beforeEnd&apos, "< li class = "last" >")); ) ul .last ( margen izquierdo: 100%; ) * html ul ( /* solo necesita ie6 */ altura: 30px; )
Habiendo especificado los valores de propiedad y el código necesarios, obtenemos este menú de goma:
Desventajas del método.6.0+ | 6.0+ | 10.5+ | 5.0+ | 3.6+ | - | - |
Un menú horizontal es una lista de secciones de un sitio web, por lo que es más lógico colocarlo dentro del elemento.
- y luego aplicar estilos CSS a sus elementos. Este diseño de menú es el más común debido a las evidentes ventajas en su posicionamiento en una página web. Cómo hacer un menú horizontal: ejemplos de disposición y diseño.
Marcado HTML y estilos básicos para un menú horizontal.
- Opción del menú
- Opción del menú
- Opción del menú ...
- contenedor de bloque para menú
- el menú en sí, que se muestra a través de una lista con viñetas (etiqueta ul)
- Bueno, los elementos del menú están dentro y, en consecuencia, ya tienen enlaces.
- alineación vertical: parte inferior: esta propiedad es necesaria para que si el texto de un elemento del menú ocupa 2 líneas, se muestre de manera uniforme. Cuando creamos el menú, puede eliminar esta propiedad, hacer zoom para que los elementos se compriman y el texto se mueva a dos líneas y verá un problema de visualización. Devuelva la propiedad y todo estará bien.
- display: table-cell: dado que configuramos el menú de visualización en sí para que sea una fila de la tabla, sería lógico configurar sus elementos para que se muestren como celdas en una tabla. Es necesario.
- ancho: auto — el ancho se calculará automáticamente, dependiendo de la longitud del texto en el párrafo
- text-align: center - esto es solo para centrar el texto dentro
- altura: 50px: establezca la altura en 50 píxeles
- bueno, el borde derecho es solo un borde a la derecha, un separador de elementos
- la propiedad de decoración de texto anula el subrayado predeterminado para los enlaces
- ancho: 1000px es quizás la línea más importante. Debe configurar los enlaces a aproximadamente este ancho, tal vez menos, pero definitivamente más grande que el elemento de menú más ancho posible. Los enlaces no tendrán 1000 píxeles de ancho, ya que el ancho estará limitado por el elemento del menú li, cuyo ancho está configurado en automático, pero esto permitirá garantizar que para cualquier número de elementos del menú siempre será 100 por ciento del ancho.
- vertical-align: middle y display: table-cell: el primero alineará el texto verticalmente con el centro y el segundo también mostrará los enlaces como celdas. Se necesitan ambas propiedades.
- fuente: bueno, esto es solo un conjunto de configuraciones para la fuente. Lea sobre las propiedades CSS de las fuentes en este artículo.
- hogar
- Sobre nosotros
- Nuestros servicios
- Nuestro servicio nº1
- Nuestro servicio nº2
- Nuestro servicio nº3
- Nuestro servicio nº4
- Servicio 5
- Noticias
- Contactos
- el menú se dibujará dinámicamente;
- las sangrías desde el separador hasta el párrafo son las mismas en todas partes;
- Diseño más hermoso y flexible.
- con una plataforma vip cuando apunta hacia un lado
- con un menú desplegable emergente del tercer nivel
- hogar
- Sobre nosotros
- Nuestros servicios
- Nuestro servicio nº1
- Adición al servicio 1
- Adición al servicio 2
- Nuestro servicio nº2
- Adición al servicio 3
- Adición al servicio 4
- Nuestro servicio nº3
- Nuestro servicio nº4
- Servicio 5
- Nuestro servicio nº1
- Noticias
- Contactos
- Mapa vial
- Complemento de mapa
- Adición para el mapa 2
- Formulario de comentarios
- Mapa vial
De forma predeterminada, todos los elementos de la lista están dispuestos verticalmente, ocupando todo el ancho del elemento contenedor, que a su vez ocupa todo el ancho de su bloque contenedor.
Marcado HTML para navegación horizontal
Un menú horizontal ubicado dentro de una etiqueta también se puede colocar dentro del elemento ... y/o .... Gracias a esto, el marcado html adquiere un significado semántico y también brinda una oportunidad adicional para formatear el bloque de menú.
Hay varias formas de colocarlos en horizontal. Primero, debe restablecer los estilos predeterminados del navegador para los elementos de navegación:
Ul (estilo de lista: ninguno; /*eliminar marcadores de lista*/ margin: 0; /*eliminar el margen superior e inferior igual a 1em*/ padding-left: 0; /*eliminar el margen izquierdo igual a 40px*/ ) a (decoración de texto: ninguna; /*eliminar el subrayado del texto del enlace*/)
Método 1. li (pantalla: en línea;)Poner los elementos de la lista en minúsculas. Como resultado, se colocan horizontalmente, con un espacio de 0,4 em agregado en el lado derecho entre ellos (calculado en relación con el tamaño de fuente). Para eliminarlo, agregue un margen derecho negativo para li li (margin-right: -4px;) . A continuación, diseñamos los enlaces como deseamos.
Método 2. li (flotante: izquierda;)Hacer que los elementos de la lista floten. Como resultado, se colocan horizontalmente. La altura del bloque contenedor ul se vuelve cero. Para resolver este problema, agregamos (overflow: hide;) a ul, extendiéndolo y permitiéndole contener elementos flotantes. Para enlaces, agregue un (display: block;) y diseñelos como desee.
Método 3. li (pantalla: bloque en línea;)Hacer elementos de lista en bloque en línea. Se ubican horizontalmente, se forma un espacio en el lado derecho, como en el primer caso. Para enlaces, agregue un (display: block;) y diseñelos como desee.
Método 4. ul (pantalla: flex;)Hacer que ul enumere un contenedor flexible usando . Como resultado, los elementos de la lista están dispuestos horizontalmente. Agregamos un (display: block;) para los enlaces y les damos el estilo deseado.
1. Menú adaptable con efecto de subrayado al pasar el cursor sobre un enlace @import url("https://fonts.googleapis.com/css?family=Ubuntu+Condensed"); .menu-main (estilo de lista: ninguno; margen: 40px 0 5px; relleno: 25px 0 5px; alineación de texto: centro; fondo: blanco;) .menu-main li (pantalla: bloque en línea;).menu- main li:after ( contenido: "|"; color: #606060; display: inline-block; vertical-align:top; ) .menu-main li:last-child:after (contenido: none;) .menu-main a (decoración de texto: ninguna; familia de fuentes: "Ubuntu Condensed", sans-serif; espacio entre letras: 2 px; posición: relativa; relleno inferior: 20 px; margen: 0 34 px 0 30 px; tamaño de fuente: 17 px; transformación de texto: mayúsculas; visualización: bloque en línea; transición: color .2s; ) .menu-main a, .menu-main a:visited (color: #9d999d;) .menu-main a.current, .menu- principal a:hover(color: #feb386;) .menu-main a:antes, .menu-main a:después ( contenido: ""; posición: absoluta; altura: 4px; arriba: automático; derecha: 50%; abajo : -5px; izquierda: 50%; fondo: #feb386; transición: .8s; ) .menu-main a:hover:before, .menu-main .current:before (izquierda: 0;) .menu-main a: hover:después, .menu-main .current:after (derecha: 0;) @media (ancho máximo: 550px) ( .menu-main (padding-top: 0;).menu-main li (pantalla: bloque; ) .menu-main li:after (contenido: ninguno;) .menu-main a ( padding: 25px 0 20px; margen: 0 30px; ) ) 2. Menú adaptable para un sitio web de bodas. @import url("https://fonts.googleapis.com/css?family=PT+Sans"); .top-menu (posición: relativa; fondo: #fff; box-shadow: inset 0 0 10px #ccc; ) .top-menu:antes, .top-menu:después (contenido: ""; visualización: bloque; altura : 1px; borde superior: 3px sólido #575350; borde inferior: 1px sólido #575350; margen inferior: 2px; ) .top-menu:after ( borde inferior: 3px sólido #575350; borde superior: 1px sólido #575350; sombra de cuadro: 0 2px 7px #ccc; margen superior: 2px; ) .menu-main (estilo de lista: ninguno; relleno: 0 30px; margen: 0; tamaño de fuente: 18px; alineación de texto: centro; posición: relativa; ) .menu-main:antes, .menu-main:después ( contenido: "\25C8"; altura de línea: 1; posición: absoluta; arriba: 50%; transformación: traducirY(-50% ); ) .menu-main:antes (izquierda: 15px;) .menu-main:después (derecha: 15px;) .menu-main li ( pantalla: bloque en línea; relleno: 5px 0; ) .menu-main a (decoración de texto: ninguna; visualización: bloque en línea; margen: 2px 5px; relleno: 6px 15px; familia de fuentes: "PT Sans", sans-serif; tamaño de fuente: 16px; color: #777777; borde inferior : 1px sólido transparente; transición: .3s lineal; ) .menu-main .current, .menu-main a:hover ( radio de borde: 3px; fondo: #f3ece1; color: #313131; sombra de texto: 0 1px 0 #fff; color de borde: #c6c6c6; ) @media (ancho máximo: 500 px) ( .menu-main li (display: block;) ) 3. Menú festoneado responsivo @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .menu-main (estilo de lista: ninguno; relleno: 0 30px; margen: 0; tamaño de fuente: 18px; alineación de texto: centro; posición: relativa; fondo: blanco; ) .menu-main:after (contenido: ""; posición: absoluta; ancho: 100%; alto: 20px; izquierda: 0; abajo: -20px; fondo: gradiente radial (blanco 0%, blanco 70%, rgba(255,255,255,0) 70%, rgba( 255,255,255,0) 100%) 0 -10px; tamaño de fondo: 20px 20px; repetición de fondo: repetir-x; ) .menu-main li (pantalla: bloque en línea;) .menu-main a (decoración de texto: ninguno; pantalla: bloque en línea; margen: 0 15px; relleno: 10px 30px; familia de fuentes: "PT Sans Caption", sans-serif; color: #777777; transición: .3s lineal; posición: relativa; ) .menu -main a:antes, .menu-main a:después ( contenido: ""; posición: absoluta; arriba: calc(50% - 3px); ancho: 6px; alto: 6px; radio del borde: 50%; fondo: #F58262; opacidad: 0; transición: .5s facilidad de entrada y salida; ) .menu-main a:before (izquierda: 5px;) .menu-main a:after (derecha: 5px;) .menu-main a. actual:antes, .menu-main a.current:después, .menu-main a:hover:antes, .menu-main a:hover:después (opacidad: 1;) .menu-main a.current, .menu- main a:hover (color: #F58262;) @media(max-width:680px) ( .menu-main li (display: block;) ) 4. Menú adaptable en la cinta @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .top-menu (margen: 0 60px; posición: relativa; fondo: #5A394E; box-shadow: inserto 1px 0 0 rgba(255,255,255,.1), inserto -1px 0 0 rgba(255,255,255,.1), inserto 150px 0 150px -150px rgba(255,255,255,.12), inserto -150px 0 150px -150px rgba(255,255,255,.12); ) .top-menu:antes, .top-menu:después (contenido: ""; posición: absoluta ; índice z: 2; izquierda: 0; ancho: 100%; alto: 3px; ) .top-menu:before (arriba: 0; borde inferior: 1px discontinuo rgba(255,255,255,.2); ) .top- menú: después (abajo: 0; borde superior: 1px rgba discontinuo (255,255,255,.2);) .menu-main (estilo de lista: ninguno; relleno: 0; margen: 0; alineación de texto: centro;). menu-main:antes, .menu-main:después (contenido: ""; posición: absoluta; ancho: 50px; altura: 0; arriba: 8px; borde superior: 18px sólido #5A394E; borde inferior: 18px sólido # 5A394E; transformar: rotar (360 grados); índice z: -1; ) .menu-main:before ( izquierda: -30px; borde izquierdo: 12px solid rgba(255, 255, 255, 0); ) .menu- principal:después (derecha: -30px; borde derecho: 12px solid rgba(255, 255, 255, 0); ) .menu-main li ( pantalla: bloque en línea; margen derecho: -4px; ) .menu-main a ( decoración de texto: ninguna; pantalla: bloque en línea; relleno: 15px 30px; familia de fuentes: "PT Sans Caption", sans-serif; color: blanco; transición: .3s lineal; ) .menu-main a.current, .menu-main a:hover (fondo: rgba(0,0,0,.2);) @media (ancho máximo: 680 px) ( .top-menu (margen: 0;) .menu-main li ( pantalla: bloque; margen derecho: 0; ) .menu-main:antes, .menu-main:después (contenido: ninguno;) .menu-main a (display: block;) ) 5. Menú responsivo con un logo en el medio @import url("https://fonts.googleapis.com/css?family=Arimo"); .top-menu (posición: relativa; fondo: rgba(34,34,34,.2); ) .menu-main (estilo de lista: ninguno; margen: 0; relleno: 0; ) .menu-main:después ( contenido: ""; mostrar: tabla; borrar: ambos; ) .left-item (flotante: izquierda;) .right-item (flotante: derecha;).navbar-logo ( posición: absoluta; izquierda: 50%; arriba : 50%; transformar: traducir(-50%,-50%); ) .menu-main a (decoración de texto: ninguna; pantalla: bloque; altura de línea: 80px; relleno: 0 20px; tamaño de fuente: 18px ; espaciado entre letras: 2px; familia de fuentes: "Arimo", sans-serif; peso de fuente: negrita; color: blanco; transición: .3s lineal; ) .menu-main a:hover (fondo: rgba(0, 0,0,.3);) @media (ancho máximo: 830 px) ( .menu-main ( padding-top: 90 px; text-align: center; ) .navbar-logo ( posición: absoluta; izquierda: 50 % ; arriba: 10px; transformar: traducirX(-50%); ) .menu-main li ( flotante: ninguno; mostrar: bloque en línea; ) .menu-main a ( altura de línea: normal; relleno: 20px 15px; fuente -size: 16px; ) ) @media (ancho máximo: 630px) ( .menu-main li (display: block;) ) 6. Menú responsivo con logo a la izquierda @import url("https://fonts.googleapis.com/css?family=Arimo"); .top-menu (fondo: rgba(255,255,255,.5); box-shadow: 3px 0 7px rgba(0,0,0,.3); padding: 20px; ) .top-menu:after (contenido: "" ; mostrar: tabla; borrar: ambos; ) .navbar-logo (mostrar: bloque en línea;) .menu-main (estilo de lista: ninguno; margen: 0; relleno: 0; flotante: derecha; ) .menu-main li (pantalla: bloque en línea;).menú-principal a (decoración de texto: ninguna; pantalla: bloque; posición: relativa; altura de línea: 61 px; relleno izquierdo: 20 px; tamaño de fuente: 18 px; espacio entre letras : 2px; familia de fuentes: "Arimo", sans-serif; peso de fuente: negrita; color: #F73E24; transición:.3s lineal; ) .menu-main a:before ( contenido: ""; ancho: 9px; altura: 9px; fondo: #F73E24; posición: absoluta; izquierda: 50%; transformación: rotar (45 grados) traducirX (6.5px); opacidad: 0; transición: .3s lineal; ) .menu-main a:hover:before (opacidad: 1;) @media (ancho máximo: 660 px) ( .menu-main ( float: none; padding-top: 20px; ) .top-menu ( text-align: center; padding: 20px 0 0 0; ) .menu-main a (relleno: 0 10px;) .menu-main a:before (transformar: rotar(45deg) traducirX(-6px);) ) @media (ancho máximo: 600px) ( .menu-main li (bloqueo de pantalla;) )Buenas tardes
A menudo es necesario crear un menú horizontal que se extienda a lo largo de todo el ancho del bloque principal, independientemente de cuántos elementos contenga.
Hoy me gustaría mostrarles cómo crear un menú de este tipo.
Así nuestro menú quedará de la siguiente manera:
Se estira en todo su ancho y se destaca cuando se pasa el cursor sobre él. El menú está redondeado por los lados.
MARCADO HTML
|
|
...
|
Para que el menú tuviera todo el ancho, utilicé tablas con un ancho del 100%. Cada tabla tiene un contenedor div de elemento de menú. Dependiendo de si el primer, último o intermedio elemento del menú es un div, se asigna la clase correspondiente.
Cada contenedor div tiene 2 bordes laterales con posicionamiento absoluto, que son necesarios para una correcta visualización. Si usa bordes estándar, cuando cambie los elementos del menú, el texto saltará de 1 a 2 píxeles, lo cual es bueno.
La clase activa es responsable del elemento del menú seleccionado y lo resalta.
En cada artículo tenemos una imagen y un texto. Para que todo esto esté alineado estrictamente en el medio verticalmente, utilizamos una mesa. Gracias a la propiedad de alineación vertical, los elementos de nuestro menú siempre se mostrarán sin problemas y no se moverán.
REGLAS CSS
Primero, configuremos estilos para la visualización general del menú:
Menu_container ( padding-top: 40px; ancho: 100%; alto: 47px; border-spacing: 0px; ) .menu_container td ( vertical-align: middle; /* alineación vertical */ ) .last_point_menu, .first_point_menu, .middle_point_menu ( ancho: 100%; alto: 47px; borde: 1px sólido #dadbda; índice z: 1000; posición: relativa; borde izquierdo: ninguno; ) .inner_table ( ancho: 100%; alto: 100%; ) .inner_table td ( relleno: 0px; alineación vertical: medio; borde: ninguno; alineación de texto: izquierda; ancho: 150px; relleno-izquierda: 4px; ) .td.inner_table_title ( padding-top: 4px; peso de fuente: negrita; ) .td.inner_table_img (ancho: 40px!importante;) .inner_table_menu (alto: 100%; relleno: 0px; alineación vertical: medio; borde: ninguno; alineación de texto: izquierda;) .inner_table_title (relleno-izquierda: 10px; relleno-derecha: 10px; transformación de texto: mayúsculas; altura de línea: 13px; ) .inner_table_menu td.inner_table_img (ancho: 30px!importante; alto: 30px!importante; relleno-izquierda: 15px; )
Por belleza, redondeemos las esquinas a los lados del menú:
First_point_menu ( -webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-topleft: 5px; -moz-border-radius-bottomleft: 5px; borde-arriba-radio-izquierda: 5px; borde-abajo-radio-izquierda: 5px; borde-derecha: 1px sólido #dadbda; ) .last_point_menu ( -webkit-border-arriba-derecha-radius: 5px; -webkit-border -radio-inferior-derecha: 5px; -radio-de-borde-de-moz-arriba: 5px; -radio-de-borde-de-moz-abajo-derecha: 5px; radio-de-borde-arriba-derecha: 5px; radio-de-borde-inferior-derecha: 5px ; )
Ahora nuestro menú tiene un aspecto más bonito:
Hasta el momento, el primer punto no tiene borde izquierdo. Lo arreglaremos un poco más tarde.
Ahora agreguemos efectos de desplazamiento para el menú.
Middle_point_menu:hover, .last_point_menu:hover, .first_point_menu:hover, .middle_point_menu.active, .last_point_menu.active, .first_point_menu.active, .middle_point_menu.active (color de fondo: #CAE285; imagen de fondo: -moz-linear- gradiente (arriba, #CAE285, #9FCB56); imagen de fondo: -webkit-gradient (lineal, 0 0, 0 100%, desde (#CAE285), hasta (#9FCB56)); imagen de fondo: -webkit-linear -gradient(arriba, #CAE285, #9FCB56); imagen de fondo: -o-linear-gradient(arriba, #CAE285, #9FCB56); imagen de fondo: gradiente lineal (hacia abajo, #CAE285, #9FCB56); borde: 1px sólido #9FCB56; color del borde: #aec671 #9fbb62 #87ac4a; borde izquierdo: ninguno; índice z: 5000; ) /* resolverá los bordes al pasar el mouse */ .first_point_menu ( borde: 1px sólido #dadbda ; ) .first_point_menu:hover, .first_point_menu.active ( borde: 1px sólido #9FCB56; color del borde: #aec671 #9fbb62 #87ac4a; ) .last_point_menu ( borde: 1px sólido #dadbda; borde izquierdo: ninguno; ) .last_point_menu :hover (borde: 1px sólido #9FCB56; borde izquierdo: ninguno; color del borde: #aec671 #9fbb62 #87ac4a; ) .last_point_menu.active ( borde izquierdo: ninguno; )
Ahora nuestro menú se ve mucho mejor, pero por ahora no tenemos bordes para los elementos del menú resaltados. ¡Arreglemos esto!
/* estilos para bordes laterales */ .borderLeftSecond, .borderRightSecond ( display: none; posición: absoluta; ancho: 1px; alto: 47px; color de fondo: #9fbb62; top: 0px; índice z: 1000; ) /* desplazamientos absolutos para bordes */ .borderLeftSecond ( left: 0px; ). , .middle_point_menu:hover > .borderRightSecond, .last_point_menu:hover > .borderLeftSecond .first_point_menu:hover > .borderRightSecond ( display: block; ) /* maneja los casos de el primer y último elemento */ .first_point_menu.active .borderLeftSecond ( mostrar: ninguno; ) .last_point_menu.active .borderRightSecond ( mostrar: ninguno; ) .last_point_menu:hover .borderLeftSecond ( mostrar: bloquear; )
¡Eso es todo!
¡Tenemos un menú excelente que se extiende a lo largo de todo el ancho del bloque principal! Los elementos no se superponen entre sí cuando pasa el mouse y el diseño no salta.
Hola. Hace mucho tiempo que no escribo publicaciones sobre el tema del trabajo html/css. Recientemente comencé a armar un nuevo diseño y en el proceso encontré un truco interesante que te permite hacer que el menú sea flexible (puedes agregarle nuevos elementos y el tamaño no aumentará, pero siempre será el 100% del tamaño). bloque principal). Entonces, hoy implementaremos un menú elástico usando CSS.
Si eres demasiado vago para leer el artículo, puedes ver este vídeo. El autor además lo explica todo muy bien:
El primer paso es siempre el marcado html, ¿dónde estaríamos sin él? Pero en nuestro caso todo será sencillo:
Todo está claro, aquí está mi código de marcado:
Todo parece estándar, así:
Ahora pondremos todo en la forma deseada, CSS se pondrá a trabajar.
Paso 2 - Estilos básicosA continuación, agregaré estilos al bloque contenedor. Es decir, estableceré el ancho máximo en 600 píxeles (solo para que sea más fácil tomar una captura de pantalla para que el menú encaje) y también centraré el bloque.
Envoltura(
fondo: #fff;
ancho máximo: 600px;
margen: 0 automático;
}
Ahora analicemos el menú en sí. Le quitaré los marcadores (la etiqueta ul), crearé un degradado lineal de fondo y, lo más importante, usaré la propiedad display: table-row para hacer que el contenedor del menú se comporte como una fila de una tabla. Es importante hacer esto para futuras manipulaciones.
Menú R(
fondo: gradiente lineal (a la derecha, #b0d4e3 0%,#88bacf 100%);
mostrar: fila de tabla;
estilo de lista: ninguno;
}
Como puede ver, el código anterior resolvió todo lo que escribí. Por cierto, es conveniente generar degradados utilizando la herramienta generadora de degradados Ultimate CSS. Algún día volveré a escribir sobre él.
Menú R(
alineación vertical: abajo;
mostrar: celda de tabla;
ancho: automático;
alineación de texto: centro;
altura: 50 píxeles;
borde derecho: 1px sólido #222;
}
Hasta ahora el menú parece desagradable, pero está bien, es hora de recordarlo.
Lo último que debe hacer es diseñar los enlaces dentro de los elementos. Aquí tengo este código:
Menú R li a(
decoración de texto: ninguna;
ancho: 1000px;
altura: 50 píxeles;
alineación vertical: medio;
mostrar: celda de tabla;
color: #fff;
fuente: normal 14px Verdana;
}
Y así es como se ve el menú ahora:
De nuevo, déjame explicarte algunas líneas:
Por ejemplo, para que el color de un elemento del menú cambie al pasar el cursor sobre él. Esto se puede implementar de forma bastante sencilla, utilizando la pseudoclase de desplazamiento:
Menú R li: pasar el cursor (
color de fondo: #6bba70;
}
Genial, los menús están listos, pero no hemos comprobado lo más importante: qué tan gomoso está, como te prometí. Bueno, agregaré 2 elementos más al menú:
El menú sigue teniendo 600 píxeles de ancho. Los elementos restantes simplemente se redujeron un poco para dar cabida a 2 nuevos.
Agregaré un punto más largo:
Como puede ver, el menú se ha reducido un poco más y el elemento largo se muestra con bastante normalidad. Y si no fuera por la propiedad vertical-align: bottom de la que les hablé, el menú se vería peor.
Reduciré el menú a tres elementos.
Los elementos se han vuelto mucho más libres, pero el menú en sí no ha cambiado de ancho. ¡Así que hicimos un menú 100% caucho!
En principio, si configura el bloque de envoltura con un ancho máximo en lugar de uno fijo, ni siquiera será necesario adaptarlo. En mi caso, tengo la propiedad max-width: 600px y cuando el ancho sea inferior a 600 píxeles, el bloque simplemente se reducirá junto con la pantalla, sin formar un desplazamiento horizontal.
Bueno, si desea cambiar o corregir de alguna manera el menú en dispositivos móviles o pantallas anchas, ¡las consultas de medios lo ayudarán! ¡Buena suerte en la creación de sitios web!
Continuamos la serie con una lección sobre menús desplegables. El siguiente es un menú desplegable horizontal que puedes hacer tú mismo usando CSS.
Si llegaste aquí por accidente o estabas buscando otra implementación del menú desplegable, te aconsejo que vayas a la sección principal.
Esta sección describirá un menú desplegable horizontal en CSS y HTML.
Navegación de página:
Entonces, nuestra tarea:
hacer un menú horizontal con una lista desplegable css (en listas ul li) sin usar jQuery y Javascript, y también sin usar tablas