Separadores Para Navegación


Necesito añadir separadores entre elementos de navegación. Los separadores son imágenes.

Separadores entre elementos.

Mi estructura HTML es como: ol>li>a>img.

Aquí llego a dos posibles soluciones:

  1. Para agregar más li etiquetas para la separación (boo!),
  2. Incluir separador en la imagen de cada elemento (esto es mejor, pero hace posible que el usuario puede hacer clic en, ejemplo, "Inicio", pero llegar a "Servicios", porque son uno detrás del otro y el usuario puede hacer clic accidentalmente en el separador que pertenece a "Servicios");

¿Qué hacer?

Author: daGrevis, 2011-04-16

9 answers

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 de li, pero no en la primera.

Por ejemplo:

#nav li + li {
    background:url('seperator.gif') no-repeat top left;
    padding-left: 10px
}

Este CSS agrega la imagen a cada elemento de la lista que sigue a otro elemento de la lista, en otras palabras, a todos menos al primero.

NB. Tenga en cuenta que el selector adyacente (li + li) no funciona en IE6, por lo que tendrá que agregar el fondo imagen a la li convencional (con una hoja de estilo condicional) y tal vez aplicar un margen negativo a uno de los bordes.

 61
Author: ajcw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-17 23:28:59

Si no hay una necesidad urgente de usar imágenes para los separadores, podría hacerlo con CSS puro.

nav li + li:before{
    content: " | ";
    padding: 0 10px;
}

Esto pone una barra entre cada elemento de la lista, al igual que la imagen en la pregunta original descrita. Pero ya que estamos usando los selectores adyacentes , no pone la barra antes del primer elemento. Y ya que estamos usando el pseudo selector :before, no pone uno al final.

 123
Author: jrue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-20 07:30:17

La otra solución está bien, pero no hay necesidad de agregar separador al final si se usa :después de o al principio si se usa :antes de.

ASÍ QUE:

Caso: después de

.link:after {
  content: '|';
  padding: 0 1rem;
}

.link:last-child:after {
  content: '';
}

Caso :antes

.link:before {
  content: '|';
  padding: 0 1rem;
}

.link:first-child:before {
  content: '';
}
 3
Author: T04435,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-28 15:30:09

Para obtener el separador centrado verticalmente en relación con el texto del menú,

.menustyle li + li:before

    {
        content: " | ";
        padding: 0;
        position: relative; 
        top: -2px;
    }
 3
Author: user7149870,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-12 13:33:58

Agregue el separador al fondo li y asegúrese de que el enlace no se expanda para cubrir el separador, lo que significa que el separador no podrá hacer clic.

 2
Author: Soufiane Hassou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-16 19:01:33

Puede agregar un elemento li donde desea agregar divisor

<ul>
    <li> your content </li>
    <li class="divider-vertical-second-menu"></li>
    <li> NExt content </li>
    <li class="divider-vertical-second-menu"></li>
    <li> last item </li>
</ul>

En CSS puede Agregar el siguiente código.

.divider-vertical-second-menu{
   height: 40px;
   width: 1px;
   margin: 0 5px;
   overflow: hidden;
   background-color: #DDD;
   border-right: 2px solid #FFF;
}

Esto aumentará la velocidad de ejecución, ya que no cargará ninguna imagen. solo pruébalo.. :)

 2
Author: Rajiv Pingale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-15 05:50:32

Para aquellos que usan Sass , he escrito un mixin para este propósito:

@mixin addSeparator($element, $separator, $padding) {
    #{$element+'+'+$element}:before {
        content: $separator;
        padding: 0 $padding;
    }
}

Ejemplo:

@include addSeparator('li', '|', 1em);

Que te dará esto:

li+li:before {
  content: "|";
  padding: 0 1em;
}
 2
Author: d4nyll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-23 04:13:17

Ponlo como fondo en el elemento list:

<ul id="nav">
    <li><a><img /></a></li>
    ...
    <li><a><img /></a></li>
</ul>

#nav li{background: url(/images/separator.gif) no-repeat left; padding-left:20px;} 
/* left padding creates a gap between links */

A continuación, recomiendo un marcado diferente para la accesibilidad:
En lugar de incrustar las imágenes en línea, poner texto como texto, rodear cada uno con un lapso, aplicar la imagen como fondo el el, y luego ocultar el texto con pantalla:ninguno this esto le da mucho más estilo flexibilty, y le permite utilizar mosaico con una imagen bg de 1px de ancho, ahorra ancho de banda, y se puede incrustar en un sprite CSS, que guarda HTTP llamadas:

HTML:

<ul id="nav">
    <li><a><span>link text</span></a></li>
    ...
    <li><a><span>link text</span></a></li>
</ul

CSS:

#nav li{background: url(/images/separator.gif) no-repeat left; padding-left:20px;} 
#nav a{background: url(/images/nav-bg.gif) repeat-x;}
#nav a span{display:none;}

UPDATE OK, veo que otros obtuvieron una respuesta similar antes que yo John y observo 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.

 1
Author: Faust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-16 19:28:01

Creo que la mejor solución para esto, es lo que uso, y eso es un borde css natural:

border-right:1px solid;

Es posible que tenga que cuidar de relleno como:

padding-left: 5px;
padding-right: 5px;

Finalmente, si no quieres que el último li tenga ese borde separado, dale a su último hijo "ninguno" en "borde correcto" de esta manera:

li:last-child{
  border-right:none;
}

Buena suerte:)

 0
Author: Avi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-06 09:37:57