Menu horizontal con CSS

  • Feb
  • 14

11 comentarios! 108 palabras - 1 hits

Un pequeño ejemplo donde intento mostrar la facilidad con la que se pueden diseñar menus de navegacion con xhtml y css

Una manera de mantener la semántica en la estructura del documento, es la de presentar los menus como una lista de enlaces, que a base de css convertiremos en el tipo de menu que más se adapte a nuestro diseño.

EL formato más basico de este tipo de listas seria algo asi como:

  1.  
  2.     <ul>
  3.       <li>Enlace 1</li>
  4.       <li>Enlace 2</li>
  5.       <li>Enlace 3</li>
  6.     </ul>
  7.  

Que vendria siendo algo tal que,

  • Enlace 1
  • Enlace 2
  • Enlace 3

Viendolo asi, no es que se parezca demasiado a un menu, pero trabajandolo un poco podemos llegar a resultados muy originales.

Os pongo esta lista como ejemplo:

  1.  
  2.      <ul id="menu">
  3.        <li id="home-link"><a href="#">Inicio</a></li>
  4.        <li id="archive-link"><a href="#">Archivos</a></li>
  5.        <li id="contact-link"><a href="#">Contacto</a></li>
  6.        <li id="project-link"><a href="#">Proyectos</a></li>
  7.      </ul>
  8.  

Como podeis, cada uno de los elementos del menu cuenta con su identidad unica lo que nos permitira definirlos por separado en el fichero css.

Lo primero que haremos sera decidir el tipo de menu que queremos construir, en este caso, yo quiero hacer un menu sustituyendo los enlaces de texto por imagenes.

Para este ejemplo he creado cinco imagenes, una que me servira de base y las otras cuatro para los “rollovers”, lo siguiente es ponerse con el fichero css.

Para empezar, definimos las propiedaddes del contenedor de la lista:

  1.  
  2.     ul#menu {
  3.       width: 450px; /* Ancho de la imagen */
  4.       height: 45px; /* Alto de la imagen */
  5.       list-style: none;
  6.       background: url('/archives/examples/menu/horizontal01/menu.png') no-repeat 0 15px; /* Imagen de fondo */
  7.       padding: 0;
  8.       margin: -0.7em 0 1em 0;
  9.       position: relative;
  10.     }
  11.     ul#menu li { /* Convertimos la lista en horizontal */
  12.       padding: 0;
  13.       margin: 0;
  14.       position: absolute;
  15.       display: block;
  16.       height: 45px;
  17.       text-indent: -10000px; /* Sacamos el texto de los enlaces del campo de vision */
  18.       line-height: 0.1em;
  19.       font-size: 0.1em;
  20.     }
  21.  

En este punto ya tendremos casi terminado nuestro menu, solo queda posicionar las imagenes que daran el efecto de “rollover”.

  1.  
  2.     /* Definimos las dimensiones de cada elemento de la lista y le asignamos el orden de superposicion */
  3.     ul#menu li#home-link { width: 56px; z-index: 200; }
  4.     ul#menu li#archive-link { width: 160px; z-index: 190; }
  5.     ul#menu li#contact-link { width: 270px; z-index: 180; }
  6.     ul#menu li#project-link { width: 395px; z-index: 170; }
  7.     /* Asignamos una imagen de fondo a cada enlace de la lista */
  8.     li#home-link a { background: url('/archives/examples/menu/horizontal01/inicio.png') no-repeat; }
  9.     li#archive-link a { background: url('/archives/examples/menu/horizontal01/archivos.png'); }
  10.     li#contact-link a { background: url('/archives/examples/menu/horizontal01/contacto.png'); }
  11.     li#project-link a { background: url('/archives/examples/menu/horizontal01/proyectos.png'); }
  12.     /* Movemos la imagen de fondo para dar el efecto del rollover */
  13.     ul#menu li a:hover { background-position: 0 -30px; }
  14.  

Con esto habremos creado un sencillo menu totalmente accesible y manteniendo la sintaxis del documento.

Lo mejor de usar esta técnica para los rollovers, es que las imagenes que dan el efecto, se cargan como imagenes de fondo, y no al pasar el ratón sobre el enlace, dando un efecto más limpio.

Enlaces relacionados

1 enlace

11 comentarios

  • Oct
  • 28

# Escrito por alex hace 4 años, 9 meses

Hola buenisimas las explicaciones aunque pocos ejemplos pero esta muy bien.

En cuanto al sitio está muy bueno el tema. Muy bien pensado lo del header con la imagen. Yo habia intentado hacer efectos con css pero es poco lo que se puede hacer aunque con el uso de gif animados algo mas de atractivo se puede implementar. Respecto a las imagenes como decis en el codigo, jejeje mi mozilla las bajo antes de leer lo que el codigo decia. :D Saludos y felicitaciones. Muy lindo sitio, excelente estetica.


  • May
  • 13

# Escrito por pepe galleta hace 4 años, 2 meses

muy lindo los colorines y gracias del estilo en el artículo, pero el ejercicio esta pobremente explicado. tuve que bajarme el source y las imagenes de la página de ejemplo para entender como habías cortado las imágenes. en fin, que al final lleva horas descularlo. aunque poco didactico, gracias igual por el intento.


  • Jun
  • 13

# Escrito por Erudite hace 4 años, 1 mes

Vaya, se trago html el coment, si quieres des-htmlealo para que se pueda ver! xD


  • Feb
  • 01

# Escrito por Samuell hace 3 años, 6 meses

Hola que tal kisiera un menu con css horizontal, pero a mas de ke esten los menus en forma horizontal, haya una forma de ke salgan menus desplegables..

Espero que me ayuden

Samuell http://www.soydelau.com


  • Mar
  • 12

# Escrito por pagines web hace 3 años, 4 meses

muchas gracias y felicidades. Me ha servido de mucho!!


  • Dic
  • 20

# Escrito por andre hace 2 años, 7 meses

Hola, pasé para avisar que tu sitio no anda muy bien con opera… saludos


  • Nov
  • 20

# Escrito por DDDepressionnn hace 1 año, 8 meses

There has come winter :( It became cold and cloudy! Mood very bad :( Depression Begins


  • Nov
  • 21

# Escrito por DDDDepressionnnn hace 1 año, 8 meses

Depression Depression Depression aaaaaaaa HEEEEELP :( :( :( I hate winter! I want summer!


  • Nov
  • 29

# Escrito por wintervssummer hace 1 año, 8 meses

I very much love summer :) Someone very much loves winter :( I Wish to know whom more :) For what you love winter? For what you love summer? Let’s argue :)


  • May
  • 20

# Escrito por Mary hace 1 año, 2 meses

Lo intente hacer y no me salio . Talvez me puedas enviar las imagenes para poder intentar hacer le menu horizontal. Porfis!!!! Gracias y que tengas una linda semana


  • Dic
  • 11

# Escrito por hola hace 7 meses, 3 semanas

no funciona


Escribe tu comentario

Puedes utilizar este formulario para escribir tu opinion sobre esta entrada, no existe ningun tipo de limitacion a la hora de enviar opiniones, tan solo sigue unas reglas basicas de cortesia y todos estaremos mas contentos.

Puedes identificarte utilizando OpenID, solo tienes que introducir tu URL OpenID en el siguiente campo y pulsar el boton de validar.





Instrucciones para los comentarios

El simbolo * indica que se trata de un campo obligatorio.

Este sitio usa Markdown junto con Smartypants para educar los textos, tambien esta disponible para los comentarios.

A continuación os muestro algunas de las equivalencias:

  • [enlace de ejemplo](http://example.com/) resulta enlace de ejemplo.
  • **Texto en Negrita**
  • _Italica_
  • > blockquote
  • > > nested blockquote
  • * Esto es un elemento de una lista desordenada (ul)
  • 1. Esto es un elemento de una lista ordenada (ol)

MC Puedes seguir las respuestas a tus comentarios con MyComments.