Me preguntaba si hay alguna forma de cambiar el color de las viñetas en una lista.
Tengo una lista como esta:
<ul>
<li>House</li>
<li>Car</li>
<li>Garden</li>
</ul>
No es posible para mí insertar nada en los li, como un "intervalo" o una "p". Entonces, ¿puedo cambiar el color de las viñetas pero no el texto de alguna manera inteligente?
list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"><circle fill="red" cx="5" cy="5" r="2"/></svg>');
Logré esto sin agregar marcado, sino usando
li:before
. Obviamente, esto tiene todas las limitaciones de:before
(sin soporte antiguo de IE), pero parece funcionar con IE8, Firefox y Chrome después de algunas pruebas muy limitadas. El estilo de viñeta también está limitado por lo que está en Unicode.li { list-style: none; } li:before { /* For a round bullet */ content: '\2022'; /* For a square bullet */ /*content:'\25A0';*/ display: block; position: relative; max-width: 0; max-height: 0; left: -10px; top: 0; color: green; font-size: 20px; }
<ul> <li>foo</li> <li>bar</li> </ul>
fuente
font-size:1em
obtener una bala mejor proporcionada!)¡Podemos combinar
list-style-image
consvg
s, que podemos incorporar en css ! Este método ofrece un control increíble sobre las "balas", que pueden convertirse en cualquier cosa.Para obtener un círculo rojo, simplemente use el siguiente CSS:
ul { list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><circle fill="red" cx="5" cy="5" r="2"/></svg>'); }
Pero esto es solo el principio. Esto nos permite hacer cualquier locura que queramos con esas balas. los círculos o rectángulos son fáciles, ¡pero cualquier cosa que puedas dibujar
svg
se puede pegar allí! Mira el ejemplo de la diana a continuación:Mostrar fragmento de código
ul { list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><circle fill="red" cx="5" cy="5" r="5"/></svg>'); } ul ul { list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><rect fill="red" x="0" y="0" height="10" width="10"/></svg>'); } ul ul ul { list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><circle fill="red" cx="5" cy="5" r="3"/></svg>'); } ul ul ul ul { list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><rect fill="red" x="2" y="2" height="4" width="4"/></svg>'); } ul.bulls-eye { list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><circle fill="red" cx="5" cy="5" r="5"/><circle fill="white" cx="5" cy="5" r="4"/><circle fill="red" cx="5" cy="5" r="2"/></svg>'); } ul.multi-color { list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" width="15" height="15"><circle fill="blue" cx="6" cy="6" r="6"/><circle fill="pink" cx="6" cy="6" r="4"/><circle fill="green" cx="6" cy="6" r="2"/></svg>'); }
<ul> <li> Big circles! <ul> <li>Big rectangles!</li> <li>b <ul> <li>Small circles!</li> <li>c <ul> <li>Small rectangles!</li> <li>b</li> </ul> </li> </ul> </li> </ul> </li> <li>b</li> </ul> <ul class="bulls-eye"> <li>Bulls</li> <li>eyes.</li> </ul> <ul class="multi-color"> <li>Multi</li> <li>color</li> </ul>
Atributos de ancho / alto
Algunos navegadores requieren que se establezcan atributos
width
yheight
en el<svg>
, o no muestran nada. Al momento de escribir este artículo, las versiones recientes de Firefox presentan este problema. Establecí ambos atributos en los ejemplos.Codificaciones
Un comentario reciente me recordó las codificaciones del data-uri. Este fue un punto de dolor para mí recientemente, y puedo compartir un poco de información que he investigado.
La especificación data-uri , que hace referencia a la especificación URI , dice que el svg debe codificarse de acuerdo con la especificación URI . Eso significa que se deben codificar todo tipo de caracteres, por ejemplo, se
<
convierte en%3C
.Algunas fuentes sugieren la codificación base64, que debería solucionar los problemas de codificación, sin embargo, aumentará innecesariamente el tamaño del SVG, mientras que la codificación URI no. Recomiendo la codificación URI.
Más información:
soporte de navegador: > ie8
trucos css en svgs
mdn en svgs
fuente
<svg>
código "bonito" , intente ejecutarlo primero a través de un codificador uri.Partiendo de la solución de @ Marc: dado que el carácter de viñeta se representa de manera diferente con diferentes fuentes y navegadores, utilicé la siguiente técnica css3 con border-radius para hacer una viñeta sobre la que tengo más control:
li:before { content: ''; background-color: #898989; display: inline-block; position: relative; height: 12px; width: 12px; border-radius: 6px; -webkit-border-radius: 6px; -moz-border-radius: 6px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; margin-right: 4px; top: 2px; }
fuente
Sé que esta es una pregunta muy, muy antigua, pero estaba jugando con esto y se me ocurrió una forma que no he visto publicada. Dale un color a la lista y luego sobrescribe el color del texto usando el
::first-line
selector. No soy un experto, así que tal vez haya algo mal en este enfoque que me falta, pero parece funcionar.li { color: blue; } li::first-line { color: black; }
<ul> <li>House</li> <li>Car</li> <li>Garden</li> </ul>
fuente
Aprovechando las soluciones @Marc y @jessica: esta es la solución que uso:
li { position:relative; } li:before { content:''; display: block; position: absolute; width: 6px; height:6px; border-radius:6px; left: -20px; top: .5em; background-color: #000; }
Utilizo
em
para tamaños de fuente, por lo que si establece sutop
valor en.5em
, siempre se colocará en el punto medio de la primera línea de texto. Lo uséleft:-20px
porque esa es la posición predeterminada de las viñetas en los navegadores: padrepadding/2
fuente
También me gustó mucho la respuesta de Marc: necesitaba un conjunto de UL de diferentes colores y, obviamente, sería más fácil usar una clase. Esto es lo que usé para naranja, por ejemplo:
ul.orange { list-style: none; padding: 0px; } ul.orange > li:before { content: '\25CF '; font-size: 15px; color: #F00; margin-right: 10px; padding: 0px; line-height: 15px; }
Además, descubrí que el código hexadecimal que usé para "contenido:" era diferente al de Marc (ese círculo hexadecimal parecía estar demasiado alto). El que usé parece encajar perfectamente en el medio. También encontré varias otras formas (cuadrados, triángulos, círculos, etc.) aquí mismo
fuente
Para mí, la mejor opción es usar pseudo elementos CSS, por lo que para el
disc
estilo de viñeta se vería así:ul { list-style-type: none; } li { position: relative; } li:before { content: ''; display: block; position: absolute; width: 5px; /* adjust to suit your needs */ height: 5px; /* adjust to suit your needs */ border-radius: 50%; left: -15px; /* adjust to suit your needs */ top: 0.5em; background: #f00; /* adjust to suit your needs */ }
<ul> <li>first</li> <li>second</li> <li>third</li> </ul>
Notas:
width
yheight
debe tener valores iguales para mantener los punteros redondeadosborder-radius
en cero si desea tenersquare
viñetas de listaPara más estilos de viñetas, puede usar otras formas CSS https://css-tricks.com/examples/ShapesOfCSS/ (elija esto que no requiere pseudo elementos para funcionar, por ejemplo, triángulos)
fuente
::marcador
Puede utilizar el
::marker
pseudoelemento CSS para seleccionar el cuadro de marcador de un elemento de la lista (es decir, viñetas o números).ul li::marker { color: red; }
fuente
Sobre la base de la respuesta de @ ddilsaver. Quería poder usar un objeto para la bala. Esto parece funcionar:
li { list-style: none; position: relative; } li:before { content:''; display: block; position: absolute; width: 20px; height: 20px; left: -30px; top: 5px; background-image: url(i20.png); background-position: 0px -40px; /* or whatever offset you want */ }
fuente
Intenté esto hoy y escribí esto:
necesitaba mostrar marcadores de color en mis listas (tanto viñetas como números). Encontré este consejo y escribí en mi hoja de estilo con la mutualización de las propiedades:
ul, ol { list-style: none; padding: 0; margin: 0 0 0 15px; } ul {} ol { counter-reset: li; } li { padding-left: 1em; } ul li {} ul li::before, ol li::before { color: #91be3c; display: inline-block; width: 1em; } ul li::before { content: "\25CF"; margin: 0 0.1em 0 -1.1em; } ol li { counter-increment: li; } ol li::before { content: counter(li); margin: 0 0 0 -1em; }
Elegí un personaje diferente para mostrar una viñeta, mirándolo aquí . Necesitaba ajustar el margen de manera acorde, tal vez los valores no se apliquen con la fuente que eligió (los números usan su fuente web).
fuente
Intente usar esto en su lugar:
ul { color: red; }
fuente
Versión en línea, funciona para Outlook Desktop:
<ul style="list-style:square;"> <li style="color:red;"><span style="color:black;">Lorem.</span></li> <li style="color:red;"><span style="color:black;">Lorem.</span></li> </ul>
JSFiddle .
fuente