Podemos combinar list-style-imagecom svgs, que podemos embutir em css ! Este método oferece um controle incrível sobre as "balas", que podem se tornar qualquer coisa.
Para obter um círculo vermelho, basta usar o seguinte 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>');
}
Mas isso é apenas o começo. Isso nos permite fazer qualquer coisa maluca que quisermos com essas balas. círculos ou retângulos são fáceis, mas qualquer coisa com que você possa desenhar svgpode ficar ali! Confira o exemplo bullseye abaixo:
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 largura / altura
Alguns navegadores requerem widthe heightatributos para ser definida no<svg> , ou eles não apresentar nada. No momento em que este artigo foi escrito, as versões recentes do Firefox apresentavam esse problema. Eu defini ambos os atributos nos exemplos.
Codificações
Um comentário recente me lembrou de codificações para o data-uri. Isso foi um ponto doloroso para mim recentemente, e posso compartilhar um pouco das informações que pesquisei.
A especificação data-uri , que faz referência à especificação URI , diz que o svg deve ser codificado de acordo com a especificação URI . Isso significa que todos os tipos de caracteres devem ser codificados, por exemplo, <se torna %3C.
Algumas fontes sugerem a codificação base64, que deve corrigir os problemas de codificação; no entanto, aumentará desnecessariamente o tamanho do SVG, enquanto a codificação URI não. Eu recomendo a codificação URI.
Mais informações:
suporte do navegador: > ie8
truques de css em svgs
mdn em svgs