Adicionar Stroke ao Texto da Web

Fonts na Web são essencialmente gráficos baseados em vectores. É por isso que se podem mostrar a 12px ou 120px e permanecem estaladiços e relativamente afiados. Vectorial significa que a sua forma é determinada por pontos e matemática para descrever a forma, em vez de dados reais de pixel. Porque são vectoriais, faria sentido se pudéssemos fazer coisas que outros programas vectoriais (por exemplo Adobe Illustrator) podem fazer com texto vectorial, como desenhar um traço em torno dos caracteres individuais. Bem, nós podemos! Exemplo:

h1 { /* Prefix required. Even Firefox only supports the -webkit- prefix */ -webkit-text-stroke-width: 1px; -webkit-text-stroke-color: black;}

Or shorthand:

h1 { -webkit-text-stroke: 1px black;}

Você pode estar a pensar “Fixe, mas se apenas alguns browsers suportam isto, se eu definir a cor do meu texto para white e o meu fundo é white, o traço faz com que pareça fixe em browsers de suporte mas desaparece completamente em browsers não suportados!”

Uma possibilidade é esta:

h1 { color: black; -webkit-text-fill-color: white; /* Will override color (regardless of order) */ -webkit-text-stroke-width: 1px; -webkit-text-stroke-color: black;}

Mostrado aqui com a fonte @font-face Anime Ace 2 de Nate Piekos:

Fotografia de toque de bola!
Fallback to solid color. Mostrado aqui em Firefox

Outra possibilidade só se aplica quando suportado:

@supports (-webkit-text-stroke: 1px black) { h1 { -webkit-text-stroke: 1px black; -webkit-text-fill-color: white; }}

Suporte

Estes dados de suporte do navegador são da Caniuse, que tem mais detalhes. Um número indica que o navegador suporta a funcionalidade nessa versão e acima.

Desktop

Chrome Firefox IE Edge Safari
4* 49** No 15** 3.1*

Móvel / Tablet

>th>Android Firefoxth>Androidth>iOS Safari

Android Chrome
89* 86** 2.1* 4.0-4.1*

Simulação

Podemos levar isto um pouco mais longe, não confiando inteiramente na propriedade do WebKit. Podemos utilizar a propriedade text-shadow (suportada em Firefox, Opera, e IE 10 também) e simular um golpe. Usaremos quatro sombras, cada uma com 1px de offset de negro sem propagação, uma para cima à direita, outra para cima à esquerda, outra para baixo à esquerda, e outra para baixo à direita. Vamos usar o WebKit proprietário -webkit-text-fill-color a favor de color uma vez que agora somos compatíveis com o cross-browser. O único obstáculo seria o IE9 e para baixo, o qual, claro, pode usar folhas de estilo específicas do IE para contabilizar.

h1 { color: white; text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;}
Este é um traço usando todas as sombras de texto. Bastante perto de um traço tão bom como um traço real. A questão principal é que só se pode obter 1px de traço desta forma. Se for mais, verá lacunas. Mais com um traço de texto do WebKit e também há problemas, por isso é uma espécie de cavalo por peça.

Combinando

Usar tanto um traço como uma sombra pode ser um grande efeito. Vamos dar um traço WebKit, o traço de sombras de texto, bem como um traço de sombras de texto mais profundo.

h1 { -webkit-text-stroke: 1px black; color: white; text-shadow: 3px 3px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;}
Lookin’ good

Demo

Veja a Caneta
Texto com Alternativas por CSS-Truques (@css-tricks)
sobre CodePen.

Alinhamento

Se estiver familiarizado com o Adobe Illustrator, pode saber que pode alinhar um traço no interior de uma forma, no exterior, ou centrado. Essa opção parece-se com esta na paleta:

Da esquerda para a direita: centro, interior, exterior

Por razões que desconheço, o texto no Illustrator só pode ser definido para o alinhamento do traço central também. No entanto, uma vez expandido o texto em caminhos vectoriais regulares, as três opções tornam-se disponíveis. Lembrete de Sam Frysteen: adicione um novo traço no painel Appearance e desloque-o abaixo do seu texto (basicamente imita o alinhamento fora do traço).

From top to bottom: inside, centrered, outside.

Apenas fora do alinhamento do traçado do texto me parece algo de bom. É lamentável, tanto para o CSS como para o Illustrator, que o padrão imutável esteja centrado. A solução é simplesmente não enlouquecer demasiado com a espessura da borda do seu traço e as coisas devem ficar bem. Nota: a solução apenas de sombras de texto não tem este problema, mas também é incapaz de traçar mais de 1px.

Se usar um pseudo elemento, pode traçar o mesmo texto por detrás do texto original e um tipo de traço exterior falso.
Temos um artigo inteiro sobre esta questão de alinhamento: Traço de texto: Preso no meio contigo. Uma pequena boa notícia, o paint-order propriedade permite-lhe ter traços exteriores, uma vez mais os browsers suportam-no.

O que não podemos fazer

Existem outras coisas que os programas gráficos vectoriais podem fazer com o texto. É possível esticar a letra horizontalmente / esticar verticalmente. Este tipo de tratamento de texto é quase universalmente desaprovado, pelo que não há grandes perdas que não possamos fazer isso. Também se pode colocar o tipo numa linha irregular (como em torno de um círculo). Seria certamente fixe fazer isto com texto na web. Talvez pudéssemos definir texto para seguir o caminho de fronteira do seu elemento pai.

p.circular { width: 200px; height: 200px; border-radius: 100px; /* NOT REAL */ text-align: border-path;}

No Illustrator, também podemos dizer a um traço como lidar com cantos afiados: arredondados, biselados, ou mitrados. Estes podem ter efeitos agradáveis, não são possíveis na web. Contudo, o manuseamento de cantos do WebKit é bastante agradável no seu padrão (seja ele qual for), e indiscutivelmente mais agradável do que qualquer uma das opções no Illustrator.

Fancies

Para o registo, pode usar qualquer tipo de valor de cor para a cor do traço (hex, rgba, hsla, palavra-chave). Isto significa traços transparentes se os quiser, que de facto “empilham”, na medida em que se os traços se sobrepõem (comuns), serão mais escuros.

Até à animação do quadro-chave, a cor dos traços animará mas a largura dos traços não (estranho).

/* Only the color will change, not the width */@keyframes colorchange { 0% { -webkit-text-stroke: 10px red; } 100% { -webkit-text-stroke: 20px green; }}

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *