Existe alguma maneira no CSS de dar contornos ao texto com cores diferentes? Quero destacar algumas partes do meu texto para torná-lo mais intuitivo - como nomes, links, etc. Alterar as cores do link etc. é comum hoje em dia, por isso quero algo novo.
329
Respostas:
Existe uma propriedade experimental de webkit chamada
text-stroke
CSS3, estou tentando fazer com que isso funcione há algum tempo, mas até agora não obtive êxito.O que fiz foi usar a
text-shadow
propriedade já suportada (acredito que no Chrome, Firefox, Opera e IE 9).Use quatro sombras para simular um texto traçado:
Eu fiz uma demo para você aqui
E um exemplo pairado está disponível aqui
Como Jason C mencionou nos comentários, a
text-shadow
propriedade CSS agora é suportada por todos os principais navegadores, com exceção do Opera Mini. Onde esta solução funcionará para compatibilidade com versões anteriores (não é realmente um problema em navegadores que atualizam automaticamente), acredito que otext-stroke
CSS deve ser usado.fonte
text-shadow
até o IE10. Curiosamente, o IE9 suporta,box-shadow
mas nãotext-shadow
.text-shadow
. Parece que atualmente (três anos após a publicação desta resposta) ela é suportada por todos os principais navegadores, com exceção do Opera Mini, que mostra "suporte parcial" (ignorablur-radius
).text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
text-shadow
apoio, nãotext-stroke
. Que é suportado apenas pelo webkit no momento.Editar:
text-stroke
agora está bastante maduro e implementado na maioria dos navegadores . É mais fácil, mais nítido e mais preciso. Se o público do seu navegador puder suportá-lo, agora você deve usartext-stroke
primeiro, e nãotext-shadow
.Você pode e deve fazer isso apenas com o
text-shadow
efeito, sem compensações:Por quê? Ao compensar vários efeitos de sombra, você começará a notar cantos desajeitados e irregulares:
ter efeitos de sombra de texto em apenas uma posição elimina as compensações, o que significa que se você sentir que é muito fino e preferir um contorno mais escuro, não há problema - você pode repetir o mesmo efeito (mantendo a mesma posição e desfoque), várias vezes. Igual a:
Aqui está uma amostra de apenas um efeito (em cima) e o mesmo efeito repetido 14 vezes (em baixo):
Observe também: como as linhas ficam muito finas, é uma boa idéia desativar a renderização sub-pixel usando
-webkit-font-smoothing: antialiased
.fonte
font-smoothing
opção, melhorou bastante a saída no chrome!text-stroke
não é o mesmo que o esboço viatext-shadow
.text-stroke
não tem opção para fazer com que o contorno apareça fora do texto, o que significa que o contorno sangra no texto, fazendo com que pareça realmente horrível. Em outras palavrastext-stroke
não é um substituto paratext-shadow
a contornosFácil! SVG para o resgate.
Este é um método simplificado:
Aqui está uma demonstração mais complexa .
fonte
Você pode tentar empilhar várias sombras manchadas até que as sombras pareçam um traço, assim:
Aqui está um violino: http://jsfiddle.net/GGUYY/
Mencionei isso apenas no caso de alguém estar interessado, embora eu não a chamasse de solução porque falha de várias maneiras:
fonte
Eu estava procurando uma solução de traçado de texto entre navegadores que funcionasse quando sobreposta em imagens de fundo. acho que tenho uma solução para isso que não envolve marcação extra, js e funciona no IE7-9 (não testei 6) e não causa problemas de alias.
Essa é uma combinação do uso da sombra de texto CSS3, que possui um bom suporte, exceto o IE ( http://caniuse.com/#search=text-shadow ), e o uso de uma combinação de filtros para o IE. O suporte a traços de texto CSS3 é ruim no momento.
Filtros IE
O filtro de brilho ( http://www.impressivewebs.com/css3-text-shadow-ie/ ) parece terrível, então eu não o usei.
A resposta de David Hewitt envolveu a adição de filtros dropshadow em uma combinação de direções. Infelizmente, o ClearType é removido e, portanto, acabamos com um texto com alias.
Em seguida, combinei alguns dos elementos sugeridos no useragentman com os filtros dropshadow.
Juntar as peças
Este exemplo seria texto em preto com um traço branco. Estou usando classes html condicionais a propósito de segmentar o IE ( http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ ).
fonte
filter: glow(color=white,strength=1);
Apenas adicionando esta resposta. "Acariciar" o texto não é o mesmo que "Descrever"
Esboçar parece ótimo. Acariciar parece horrível.
A solução SVG listada em outro lugar tem o mesmo problema. Você quer um esboço, precisa colocar o texto duas vezes. Uma vez acariciou e novamente não acariciou.
Acariciar NÃO É Delinear
PS: Adoraria saber como tornar o SVG o tamanho correto de qualquer texto arbitrário. Eu sinto que é bastante complicado envolver a geração do svg, consultá-lo com javascript para obter as extensões e aplicar os resultados. Se houver uma maneira não-js mais fácil, eu adoraria saber.
fonte
Obtive melhores resultados com 6 sombras diferentes:
fonte
fonte
Essa mixagem para o SASS fornecerá resultados suaves, usando 8 eixos:
E CSS normal:
fonte
Trabalhar com traços mais espessos fica um pouco confuso, se você tem o prazer de experimentar essa mistura, não é perfeito e, dependendo do peso do traço, gera uma boa quantidade de css.
fonte
Múltiplas sombras de texto ..
Algo assim:
Demonstração: http://jsfiddle.net/punosound/gv6zs58m/
fonte
Gerador de sombra de texto
Há muitas ótimas respostas aqui. Parece que a sombra do texto é provavelmente a maneira mais confiável de fazer isso. Não entrarei em detalhes sobre como fazer isso com sombra de texto, já que outras pessoas já fizeram isso, mas a idéia básica é que você crie várias sombras de texto em torno do elemento de texto. Quanto maior o contorno do texto, mais sombras serão necessárias.
Todas as respostas enviadas (a partir desta postagem) fornecem soluções estáticas para a sombra do texto. Adotei uma abordagem diferente e escrevi esse JSFiddle que aceita valores de cor, desfoque e largura do contorno como entradas e gera a propriedade de sombra de texto apropriada para o seu elemento. Basta preencher os espaços em branco, verificar a visualização e clicar para copiar o css e colá-lo em sua folha de estilo.
Apêndice desnecessário
Aparentemente, respostas que incluem um link para um JSFiddle não podem ser postadas, a menos que também contenham código. Você pode ignorar completamente este apêndice, se desejar. Este é o JavaScript do meu violino que gera a propriedade de sombra de texto. Observe que você não precisa implementar esse código em seus próprios trabalhos:
fonte
Eu também tinha esse problema, e
text-shadow
não era uma opção porque os cantos ficariam ruins (a menos que eu tivesse muitas sombras) e não quisesse desfoque, portanto, minha única outra opção era fazer o seguinte: 2 divs e, para a div de fundo, coloque uma-webkit-text-stroke
sobre ela, que permite o contorno maior que você desejar.Usando isso, consegui obter uma linha de saída , porque o
stroke-width
método não era uma opção se você deseja que seu texto permaneça legível com um contorno muito grande (porquestroke-width
o contorno começará dentro das letras, o que não torna legível quando a largura fica maior que as letras.Nota: a razão pela qual eu precisava de um esboço gordo era emular os rótulos das ruas no "google maps" e queria uma auréola branca e gorda em torno do texto. Esta solução funcionou perfeitamente para mim.
Aqui está um violino mostrando esta solução
fonte
Aqui está o arquivo CSS, espero que você obtenha o que deseja
fonte