Borda da fonte CSS?


491

Com todo o novo material de borda CSS3 em andamento ( -webkit, ...) agora é possível adicionar uma borda à sua fonte? (Como a borda branca sólida ao redor do logotipo azul do Twitter). Caso contrário, existem hacks não muito feios que conseguirão isso em CSS / XHTML ou ainda preciso iniciar o Photoshop?

Respostas:


1004

Existe uma propriedade CSS experimental chamada curso de texto , suportada em alguns navegadores por trás de um prefixo -webkit .

h1 {
    -webkit-text-stroke: 2px black; /* width and color */

    font-family: sans; color: yellow;
}
<h1>Hello World</h1>

Outro truque possível seria usar quatro sombras, um pixel cada em todas as direções, usando a propriedade text-shadow:

h1 {
    /* 1 pixel black shadow to left, top, right and bottom */
    text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;

    font-family: sans; color: yellow;
}
<h1>Hello World</h1>

Mas ficaria borrado por mais de 1 pixel de espessura.


4
Isso funcionou para mim pefrectly, eu adicionado apenas 1px "blur": text-shadow: -1px 0 1px preto, 0 1px 1px preto, 1px 0 1px preto, 0 -1px 1px preto
Jakub M.

84
ótimo se você só precisa de uma borda de 1px. Mas fica feio ao usar 2px ou mais.
Jules Colle

2
Nota: existe um erro no navegador Andriod ( code.google.com/p/android/issues/detail?id=7531 ), se você definir o "desfoque" como 0px, nenhum contorno será exibido.
Mark Rhodes

1
btw, você pode encontrar esse código em W3C página ponta CSS w3.org/Style/Examples/007/text-shadow.en.html (em DRAWING LETTERS AS OUTLINESparte)
luiges90

Descobri isso funciona melhor em um fundo cor e resposta da @ pixelass funciona melhor com um background image
SemanticZen

151

ATUALIZAR

Aqui está um SCSS mixin para gerar o acidente vascular cerebral: http://codepen.io/pixelass/pen/gbGZYL

/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {List}            - text-shadow list
@function stroke($stroke, $color) {
  $shadow: ();
  $from: $stroke*-1;
  @for $i from $from through $stroke {
   @for $j from $from through $stroke {
      $shadow: append($shadow, $i*1px $j*1px 0 $color, comma);
    }
  }
  @return $shadow;
}
/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {Style}           - text-shadow
@mixin stroke($stroke, $color) {
  text-shadow: stroke($stroke, $color);
}

insira a descrição da imagem aqui

SIM pergunta antiga .. com respostas aceitas (e boas) ..

MAS ... Caso alguém precise disso e odeie digitar código ...

ESTA é uma borda preta de 2px com suporte ao CrossBrowser (não o IE). Eu precisava disso para fontes @fontface, por isso precisava ser mais limpa do que as respostas vistas anteriormente ... fontes difusas "(desenhadas à mão ou semelhantes). Subpixels (0,5px) podem ser adicionados, mas não preciso.

Código longo para apenas a borda ??? ...SIM!!!

text-shadow: 1px 1px 0 #000,
    -1px 1px 0 #000,
    1px -1px 0 #000,
    -1px -1px 0 #000,
    0px 1px 0 #000,
    0px -1px 0 #000,
    -1px 0px 0 #000,
    1px 0px 0 #000,
    2px 2px 0 #000,
    -2px 2px 0 #000,
    2px -2px 0 #000,
    -2px -2px 0 #000,
    0px 2px 0 #000,
    0px -2px 0 #000,
    -2px 0px 0 #000,
    2px 0px 0 #000,
    1px 2px 0 #000,
    -1px 2px 0 #000,
    1px -2px 0 #000,
    -1px -2px 0 #000,
    2px 1px 0 #000,
    -2px 1px 0 #000,
    2px -1px 0 #000,
    -2px -1px 0 #000;

atualizou o código devido a uma duplicata de 0 2px 0 # 000 e seus elementos - / +. O desfoque (0 antes de # 000) pode ser removido, mas eu o mantenho mesmo que seja 0. Devo observar também que é recomendável ter uma versão CSS reduzida ou compactada do seu código nos sites de produção e manter uma versão descompacta comentada para edição. O código acima é um bom exemplo do motivo pelo qual um código CSS deve ser minificado, mas precisa ser separado linha por linha para edição.

Eu brinquei com a propriedade '-webkit-text-stroke' (principalmente para tornar as fontes mais agradáveis ​​nas janelas UGLY UGLY). No entanto, isso tornou os tempos de carregamento muito longos e até travou meu site (mac Chrome 16). Então eu o removi mais rápido do que a página poderia carregar. Eu acho que isso é destinado apenas para linhas únicas de fontes. (Eu estava usando-o para 'body')

1
Você já fez algum benchmarking de desempenho com isso? Encontrei sombra de texto para atolar a página ao rolar, por exemplo
Chris Bosco

1
Encontrei este melhores trabalhos sobre um fundo da imagem e @ resposta de Narcélio Filho funciona melhor com um fundo cor
SemanticZen

1
o codepen original "desapareceu", então criei um novo com o código original deste post e também fiz uma comparação das outras soluções mencionadas aqui codepen.io/Grienauer/pen/GRRdRJr
Grienauer

51

Talvez você possa emular um traço de texto usando o css text-shadow(ou -webkit-text-shadow/ -moz-text-shadow) e um desfoque muito baixo:

#element
{
  text-shadow: 0 0 2px #000; /* horizontal-offset vertical-offset 'blur' colour */
  -moz-text-shadow: 0 0 2px #000;
  -webkit-text-shadow: 0 0 2px #000;
}

Porém, embora isso esteja mais disponível do que a -webkit-text-strokepropriedade, duvido que esteja disponível para a maioria dos usuários, mas isso pode não ser um problema (degradação normal e tudo isso).


3
Deve-se notar que é possível omitir totalmente o terceiro argumento para não haver desfoque.
François Feugeas

23

Para elaborar mais algumas respostas que mencionaram -webkit-text-stroke, eis o código para fazê-lo funcionar:

div {
  -webkit-text-fill-color: black;
  -webkit-text-stroke-color: red;
  -webkit-text-stroke-width: 2.00px; 
}

Um artigo detalhado sobre o uso de traçado de texto está aqui e uma lista de navegadores que oferecem suporte a traçado de texto está aqui .



11

Aqui está o que estou usando:

.text_with_1px_border
{
    text-shadow: 
        -1px -1px 0px #000,
         0px -1px 0px #000,
         1px -1px 0px #000,
        -1px  0px 0px #000,
         1px  0px 0px #000,
        -1px  1px 0px #000,
         0px  1px 0px #000,
         1px  1px 0px #000;
}

.text_with_2px_border
{
    text-shadow: 
        /* first layer at 1px */
        -1px -1px 0px #000,
         0px -1px 0px #000,
         1px -1px 0px #000,
        -1px  0px 0px #000,
         1px  0px 0px #000,
        -1px  1px 0px #000,
         0px  1px 0px #000,
         1px  1px 0px #000,
        /* second layer at 2px */
        -2px -2px 0px #000,
        -1px -2px 0px #000,
         0px -2px 0px #000,
         1px -2px 0px #000,
         2px -2px 0px #000,
         2px -1px 0px #000,
         2px  0px 0px #000,
         2px  1px 0px #000,
         2px  2px 0px #000,
         1px  2px 0px #000,
         0px  2px 0px #000,
        -1px  2px 0px #000,
        -2px  2px 0px #000,
        -2px  1px 0px #000,
        -2px  0px 0px #000,
        -2px -1px 0px #000;
}

2

Caractere de fonte do traçado com um mixin Menos

Aqui está um mixin MENOS para gerar o AVC: http://codepen.io/anon/pen/BNYGBy?editors=110

/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {List}            - text-shadow list
.stroke(@stroke, @color) {
  @maxi: @stroke + 1;
  .i-loop (@i) when (@i > 0) {
    @maxj: @stroke + 1;
    .j-loop (@j) when (@j > 0) {
      text-shadow+: (@i - 1)*(1px)  (@j - 1)*(1px) 0 @color;
      text-shadow+: (@i - 1)*(1px)  (@j - 1)*(-1px) 0 @color;
      text-shadow+: (@i - 1)*(-1px)  (@j - 1)*(-1px) 0 @color;
      text-shadow+: (@i - 1)*(-1px)  (@j - 1)*(1px) 0 @color;
      .j-loop(@j - 1);
    }
    .j-loop (0) {}
    .j-loop(@maxj);
    .i-loop(@i - 1);
  }
  .i-loop (0) {}
  .i-loop(@maxi);
  text-shadow+: 0 0 0 @color;
}

(é baseado na resposta pixelass que usa SCSS)


1
text-shadow:
    1px  1px 2px black,
    1px -1px 2px black,
   -1px  1px 2px black,
   -1px -1px 2px black;


0

Uma vez tentei fazer os cantos arredondados e soltar sombras com o css3. Mais tarde, descobri que ainda é pouco suportado (Internet Explorer (s), é claro!)

Acabei tentando fazer isso em JS (canvas HTML com IE Canvas), mas isso afeta muito o desempenho (mesmo na minha máquina C2D). Em resumo, se você realmente precisa do efeito, considere as bibliotecas JS (a maioria delas deve ser capaz de executar no IE6), mas não faça isso devido a problemas de desempenho; se você ainda precisar de uma alternativa ... você pode usar o SFiR, PS e SFiR. CSS3 não está pronto hoje.


0

Desculpe o atraso, mas, falando sobre sombra de texto, achei que você também gostaria desse exemplo (eu o uso frequentemente quando preciso de boas sombras no texto):

                    text-shadow: -2px   -2px lightblue,
                                 -2px -1.5px lightblue,
                                 -2px   -1px lightblue,
                                 -2px -0.5px lightblue,
                                 -2px    0px lightblue,
                                 -2px  0.5px lightblue,
                                 -2px    1px lightblue,
                                 -2px  1.5px lightblue,
                                 -2px    2px lightblue,
                               -1.5px    2px lightblue,
                                 -1px    2px lightblue,
                               -0.5px    2px lightblue,
                                  0px    2px lightblue,
                                0.5px    2px lightblue,
                                  1px    2px lightblue,
                                1.5px    2px lightblue,
                                  2px    2px lightblue,
                                  2px  1.5px lightblue,
                                  2px    1px lightblue,
                                  2px  0.5px lightblue,
                                  2px    0px lightblue,
                                  2px -0.5px lightblue,
                                  2px   -1px lightblue,
                                  2px -1.5px lightblue,
                                  2px   -2px lightblue,
                                1.5px   -2px lightblue,
                                  1px   -2px lightblue,
                                0.5px   -2px lightblue,
                                  0px   -2px lightblue,
                               -0.5px   -2px lightblue,
                                 -1px   -2px lightblue,
                               -1.5px   -2px lightblue;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.