Obramowanie tekstu za pomocą CSS (obramowanie wokół tekstu)


108

Czy istnieje sposób na zintegrowanie obramowania wokół tekstu, jak na poniższym obrazku?

obramowanie tekstu

Odpowiedzi:


222

Użyj wielu cieni tekstu:

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

wprowadź opis obrazu tutaj

body {
  font-family: sans-serif;
  background: #222;
  color: darkred;
  }
h1 {
  text-shadow: 2px 0 0 #fff, -2px 0 0 #fff, 0 2px 0 #fff, 0 -2px 0 #fff, 1px 1px #fff, -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff;
}
<h1>test</h1>

Alternatywnie możesz użyć obrysu tekstu, który działa tylko w pakiecie webkit:

-webkit-text-stroke-width: 2px;
-webkit-text-stroke-color: #fff;

wprowadź opis obrazu tutaj

body {
  font-family: sans-serif;
  background: #222;
  color: darkred;
  }
h1 {
  -webkit-text-stroke-width: 2px;
-webkit-text-stroke-color: #fff;
}
<h1>test</h1>

Przeczytaj również więcej jako CSS-Tricks.


WARTO ZWRÓCIĆ UWAGĘ: Prosimy o przetestowanie możliwości tych metod w różnych przeglądarkach… Mam poważne problemy z klientami IE co najmniej 9… myślę o przejściu na PNG.
ErickBest

1
@ErickBest Drugi link wspomina o problemach z IE9. Chociaż ta strona nie była trudna do znalezienia w google caniuse.com/css-textshadow
AnnanFay,

Powoduje złe wyświetlanie tekstu z przezroczystością (przy użyciu rgba).
Alejandro Nava

14

Pewnie. Możesz użyć CSS3 text-shadow:

text-shadow: 0 0 2px #fff;

Jednak nie pojawi się od razu we wszystkich przeglądarkach. Korzystanie z biblioteki skryptów, takiej jak Modernizr , pomoże jednak uzyskać ją dobrze w większości przeglądarek.


1
Już tego próbowałem, ale potrzebuję jednolitej bieli wokół tekstu.
jho1086

8

Nie podoba mi się wiele rozwiązań opartych na mnożeniu cieni tekstu, nie jest to zbyt elastyczne, może działać dla obrysu o 2 piksele, w którym kierunki do dodania wynoszą 8, ale przy zaledwie 3 pikselach kierunki obrysu wynoszą 16 i tak dalej. , Niezbyt wygodne w zarządzaniu.

Właściwe narzędzie istnieje, to SVG <text> . Problem z obsługą przeglądarek nic nie jest wart w tym przypadku, ponieważ użycie text-shadow ma również swój własny problem z obsługą, filter: progid:DXImageTransformmoże być używany lub IE <10, ale często nie działa zgodnie z oczekiwaniami.

Dla mnie najlepszym rozwiązaniem pozostaje SVG z zapasowym tekstem nieobrysowanym dla starszej przeglądarki:

Ten rodzaj zatwierdzenia działa praktycznie we wszystkich wersjach Chrome i Firefox, Safari od wersji 3.04, Opera 8, IE 9

W porównaniu z text-shadowobsługą: Chrome 4.0, FF 3.5, IE 10, Safari 4.0, Opera 9, daje to jeszcze większą kompatybilność.

.stroke {
  margin: 0;
  font-family: arial;
  font-size:70px;
  font-weight: bold;
  }
  
  svg {
    display: block;
  }
  
  text {
    fill: black;
    stroke: red;
    stroke-width: 3;
  }
<p class="stroke">
  <svg xmlns="http://www.w3.org/2000/svg" width="700" height="72" viewBox="0 0 700 72">
    <text x="0" y="70">Stroked text</text>
  </svg>
</p>


1
dziękuję za udostępnienie rozwiązania. Myślę, że masz rację, jest bardziej elastyczny. Jednak w większości przypadków bardziej wydajne jest użycie CSS. Spróbuję później użyć SVG.
jho1086

6
text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;

3
Czy możesz też dodać wyjaśnienie?
Robert

5

Poniższe informacje obejmują wszystkie przeglądarki, które warto uwzględnić:

text-shadow: 0 0 2px #fff; /* Firefox 3.5+, Opera 9+, Safari 1+, Chrome, IE10 */
filter: progid:DXImageTransform.Microsoft.Glow(Color=#ffffff,Strength=1); /* IE<10 */
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.