Separadores Para Navegación
Necesito añadir 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 para la separación (boo!),
- 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?
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.
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.
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: '';
}
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;
}
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.
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.. :)
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;
}
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.
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:)
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