Es gibt eine nicht standardisierte Methode, um HTML-Text zu stilisieren (SVG hat eine standardisierte Methode). Sie ist nicht besonders neu. Es gibt -webkit- und -moz- Präfixe dafür. Jen Simmons hat kürzlich darüber gepostet, mit einem Beispiel
span {
-moz-text-fill-color: #fde;
-webkit-text-fill-color: #fde;
-moz-text-stroke-color: #666;
-webkit-text-stroke-color: #666;
-moz-text-stroke-width: 2px;
-webkit-text-stroke-width: 2px;
}
Und sie hat Recht.
Dieses CSS ist weder vollständig ausgereift noch vollständig unterstützt. Aber es ist gut genug, um es heute zu verwenden, insbesondere da es nur eine visuelle Verbesserung bietet. Es ist nicht entscheidend für die Nutzbarkeit einer Website.
Ich würde vielleicht noch hinzufügen, dass man, wenn man beispielsweise einen Rand um weißen Text legen möchte, diesen in @supports einpacken könnte, um ganz sicher zu sein, dass es funktioniert (nur für den Fall, dass ein Browser existiert, der text-fill-color unterstützt, aber nicht text-stroke-color).
@supports
((-webkit-text-stroke-color: #666)
and
(-webkit-text-fill-color: white))
or
((-moz-text-stroke-color: #666)
and
(-moz-text-fill-color: white)) {
span {
-moz-text-fill-color: white;
-webkit-text-fill-color: white;
-moz-text-stroke-color: #666;
-webkit-text-stroke-color: #666;
-moz-text-stroke-width: 2px;
-webkit-text-stroke-width: 2px;
}
}
Siehe den Pen Text-Rand in Aktion von Chris Coyier (@chriscoyier) auf CodePen.
Es ruiniert die meisten Schriftarten
Das ist es, was mich daran stört. Wenn Sie einen Rand über die gestaltete Kante eines Zeichens legen, verlieren Sie die Integrität der Form.

Und das ist das Problem mit text-stroke in CSS: Sie haben keine Wahl. Es ist nur zentriert ausgerichteter Rand. Jede der anderen Optionen wäre wohl nützlicher gewesen. Es ist nicht das größte Problem der Welt. Je größer der Text und je kräftiger die Zeichen, desto einfacher ist es, damit durchzukommen.
Trick "Nach hinten setzen"
Wenn Sie einen nach außen ausgerichteten Rand simulieren möchten, zeigt James Nowland, wie Sie Pseudo-Element-Text hinter den Originaltext setzen und dennoch text-stroke verwenden können.
Siehe den Pen CSS3 Stroke und Gradient Text von James Nowland (@jnowland) auf CodePen.
Update! `paint-order` hilft
Als ich dieses Update schreibe (Februar 2018), sagt mir Tobi Reif, dass Firefox Nightly nun eine CSS-Eigenschaft namens paint-order hat, die die Reihenfolge steuern kann, in der etwas über etwas anderes gemalt wird, Rand oder Füllung (oder "marker", was ich zugegebenermaßen nicht weiß, was es ist).
.stroke-behind {
-webkit-text-stroke: 5px red;
paint-order: stroke fill;
}

Dies hilft uns zwar nicht, tatsächlich äußere Ränder zu setzen, aber es täuscht es ziemlich gut vor. Keine Neuigkeiten über innere Ränder.
Vielleicht ist es ein wenig naiv, aber warum
text-fill-colorverwenden, wenn mancolorhat?Wäre es nicht praktischer,
colorundtext-stroke-colorkombiniert zu verwenden?Ich denke, der Punkt von
text-fill-colorist, dass es eine Überschreibung voncolorfür die Verwendung in Verbindung mit anderen Eigenschaften ist. Zum Beispiel könnten Sie es so verwenden:Ich halte es jedoch für ein Relikt. Da es jetzt
@supportsgibt, kann ich mir nicht vorstellen, dass Browser solche Überschreibungseigenschaften wieder erstellen.Danke Chris Coyer für das Feedback.
Das ist super toll, aber ich glaube, ich hätte Schwierigkeiten, einen Kunden dazu zu bringen, dies in einem Projekt zu unterstützen. Haben Sie Gedanken dazu, wie ich einen Kunden auf dieses Niveau der Browserunterstützung ansprechen und warum er es ausprobieren sollte?
Gut zu wissen, dass sie nach
text-strokesuchen.Derzeit verwende ich mehrere
text-shadow(viele), um in einigen Fällen einen ähnlichen Effekt zu erzielen (und es ist offensichtlich nicht so gut).Ich werde
@supportsverwenden, umtext-shadowfalsche Ränder zu entfernen und sie durch vorangestelltetext-stroke-Eigenschaften zu ersetzen.Ich würde mir auch wünschen, dass
text-shadowden spread-radius-Wert hätte, wiebox-shadow.Das ist so cool. Ich habe in den letzten Tagen darüber nachgedacht: "Warum haben sie keine 'text-outline'-Funktion oder so etwas?" Aber jetzt haben sie anscheinend eine! Das ist großartig.
Darauf habe ich gewartet!
Ich hasse redundante hart kodierte Daten. Und ich weiß, dass viele von uns bereits wissen, was ich jetzt sagen werde, aber es wurde nicht erwähnt, also dachte ich, ich sage etwas für diejenigen, die nicht daran gedacht hätten. Wenn man das andere Pseudo-Element für nichts braucht, könnte man "100" aus dem Textknoten innerhalb ".Winning-text" entfernen und die
attr()-Funktion verwenden, um "100" in das ::before-Pseudo-Element einzufügen. Einige Umorganisation von Stilen wird erforderlich sein, aber ich würde argumentieren, dass dies etwas besser ist. Biegen Sie rechts ab an der Gabelung: http://codepen.io/trenda/pen/jBMwrL?editors=1100Das ist ein sehr valider Punkt, aber es hängt davon ab, ob die Daten, die Sie anzeigen möchten, semantisch wichtig sind.
Warum nicht einfach einen nicht-verwaschenen
box-shadowauf Text setzen?text-shadowhat nicht diesen vierten spread-Parameter, denbox-shadowhat, um ihn nicht zu verwischen. Sie könnentext-shadowmit dem dritten Parameter nicht verwischen, aber dann können Sie ihn nicht sehen, weil er perfekt hinter dem Text liegt. Um ihn sehen zu können, müssen Sie ihn verschieben, aber dann ist es kein Rand, sondern er hängt auf einer Seite (wie ein Schatten).Mein Wunsch an die CSS Working Group
https://github.com/w3c/fxtf-drafts/issues/117