Necesito agregar separadores entre elementos de navegación. Los separadores son imágenes.
Mi estructura HTML es como: ol > li > a > img
.
Aquí llego a dos posibles soluciones:
- Para agregar más
li
etiquetas de separación (¡boo!), - Incluir un separador en la imagen de cada elemento (esto es mejor, pero existe la posibilidad de que el usuario haga clic en, por ejemplo, "Inicio", pero acceda a "Servicios", porque están uno detrás del otro y el usuario puede hacer clic accidentalmente en el separador que pertenece a "Servicios");
¿Qué hacer?
css
navigation
usability
separator
daGrevis
fuente
fuente
Respuestas:
Simplemente use la imagen del separador como imagen de fondo en el
li
.Para que solo aparezca entre los elementos de la lista, coloque la imagen a la izquierda del
li
primero, pero no en el primero.Por ejemplo:
Este CSS agrega la imagen a cada elemento de la lista que sigue a otro elemento de la lista; en otras palabras, todos ellos excepto el primero.
NÓTESE BIEN. Tenga en cuenta que el selector adyacente (li + li) no funciona en IE6, por lo que tendrá que agregar la imagen de fondo al li convencional (con una hoja de estilo condicional) y quizás aplicar un margen negativo a uno de los bordes.
fuente
:before
pseudo selector evita que aparezca después del último elemento.border-left
para dibujar una línea vertical entre los elementos.Si no hay una necesidad urgente de usar imágenes para los separadores, puede hacerlo con CSS puro.
Esto coloca una barra entre cada elemento de la lista, tal como se describe en la imagen de la pregunta original. Pero como estamos usando los selectores adyacentes , no coloca la barra antes del primer elemento. Y como estamos usando el
:before
pseudo selector, no pone uno al final.fuente
Puede agregar un
li
elemento donde desee agregar divisorEn CSS puede agregar el siguiente código.
Esto aumentará su velocidad de ejecución ya que no cargará ninguna imagen. solo pruébalo .. :)
fuente
La otra solución está bien, pero no es necesario agregar un separador al final si usa : after o al principio si usa : before .
ENTONCES:
caso: después
caso: antes
fuente
Para obtener el separador centrado verticalmente en relación con el texto del menú,
fuente
Agregue el separador al
li
fondo y asegúrese de que el enlace no se expanda para cubrir el separador, lo que significa que no se podrá hacer clic en el separador.fuente
Para aquellos que usan Sass , he escrito un mixin para este propósito:
Ejemplo:
Lo que te dará esto:
fuente
Creo que la mejor solución para esto es lo que uso, y ese es un borde css natural:
Es posible que deba cuidar el acolchado como:
Finalmente, si no quieres que el último li tenga ese borde separado, dale a su último hijo "none" en "border-right" así:
Buena suerte :)
fuente
Ponlo como fondo en el elemento de la lista:
A continuación, recomiendo un marcado diferente para la accesibilidad:
lugar de incrustar las imágenes en línea, coloque el texto como texto, rodee cada uno con un intervalo, aplique la imagen como fondo y luego oculte el texto con display: none - this brinda mucha más flexibilidad de estilo y le permite usar el mosaico con una imagen bg de 1px de ancho, ahorra ancho de banda y puede incrustarlo en un sprite CSS, lo que ahorra llamadas HTTP:
HTML:
CSS:
ACTUALIZAR OK, veo que otros obtuvieron una respuesta similar antes que yo, y noto que John también incluye un medio para evitar que el separador aparezca antes del primer elemento, usando el selector li + li, lo que significa que cualquier li viene después de otro li.
fuente