DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Das Pseudoelement ::first-line dient dazu, Stile auf die erste Zeile eines Elements anzuwenden. Stellen Sie sich einen Absatz vor, der mehrere Zeilen lang ist (wie dieser!). ::first-line ermöglicht es Ihnen, diese erste Textzeile zu gestalten. Sie könnten sie größer machen oder sie als stilistische Wahl in Kapitälchen setzen. Die Menge des Textes, auf den dieses Pseudoelement abzielt, hängt von mehreren Faktoren ab, wie z. B. Zeilenlänge, Viewport-Breite, Schriftgröße, Buchstabenabstand, Wortabstand. Sobald die Zeile umbricht, wird der Text danach nicht mehr ausgewählt. Beachten Sie, dass hier kein tatsächliches DOM-Element ausgewählt wird (daher „Pseudo“-Element).
Dieses Pseudoelement funktioniert nur bei Block-Level-Elementen (wenn display entweder auf block, inline-block, table-caption, table-cell gesetzt ist). Wenn es auf ein Inline-Element gesetzt wird, passiert nichts, auch wenn dieses Inline-Element einen Zeilenumbruch innerhalb hat.
Beachten Sie auch, dass nicht alle Eigenschaften in einem Regelwerk, das ::first-line enthält, verwendet werden können. Meistens
.element::first-line {
font-style: ...
font-variant: ...
font-weight: ...
font-size: ...
font-family: ...
line-height: ...
color: ...
word-spacing: ...
letter-spacing: ...
text-decoration: ...
text-transform: ...
background-color: ...
background-image: ...
background-position: ...
background-repeat: ...
background-size: ...
background-attachment: ...
}
Die offizielle CSS-Spezifikation besagt, dass Benutzeragenten andere Eigenschaften zulassen können, wenn sie möchten
UA dürfen auch andere Eigenschaften anwenden.
Ein Wort zur Spezifität
Die folgende Demo zeigt, wie ::first-line jede Art von Spezifität überschreiben kann, sogar !important.
- Der 1. Absatz wird durch einen Tag-Selektor grau gefärbt
- Der 2. Absatz wird durch einen Klassen-Selektor grau gefärbt
- Der 3. Absatz wird durch einen ID-Selektor grau gefärbt
- Der 4. Absatz wird durch einen !important Bash gefärbt
Das liegt daran, dass das Pseudoelement wie ein Kindelement behandelt wird und nicht nur als Teil des Elternelements. Die Regeln, die Sie darauf anwenden, gelten nur für dieses, und die Elternregeln können nur darauf kaskadieren.
Versuchen Sie auch, Ihr Browserfenster zu vergrößern und zu verkleinern, um zu sehen, wie sich das Pseudoelement verhält, wenn sich die Viewport-Breite ändert.
Es gibt kein :last-line oder :nth-line, obwohl das cool wäre.
Browser-Unterstützung
Diese Browser-Support-Daten stammen von Caniuse, wo es mehr Details gibt. Eine Zahl gibt an, dass der Browser das Feature ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 9 | 3.5 | 9 | 12 | 5.1 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 3 | 5.0-5.1 |
Es gibt einen wirklich ärgerlichen Bug in Chrome, der verhindert, dass text-transform: uppercase auf ::first-line funktioniert
https://code.google.com/p/chromium/issues/detail?id=129669
https://code.google.com/p/chromium/issues/detail?id=142827
Vielleicht möchten Sie das dem Artikel hinzufügen, da es ein sehr alter Bug ist (bekannt seit Chrome 3 oder früher) und niemand im Chrome-Team scheint ihn zu verfolgen.
Das ist unglaublich. Wie lange ist dieser Bug schon bekannt, und es gibt absolut keinen Versuch, ihn zu beheben?
Nun, ich weiß, dass es nicht ideal ist, aber bis sie diesen Bug beheben, habe ich festgestellt, dass dies eine hilfreiche Umgehung ist
font-variant: small-caps;
Wie gesagt, nicht ideal, aber es hat für einige Projekte, an denen ich gearbeitet habe, ausgereicht.
Diese Bibliothek hat mir geholfen http://zencode.in/lining.js/ .. scheint übertrieben, aber es funktioniert.
Niemand @GoogleChrome scheint sich darum zu kümmern. :-) Sie können immer noch einen Span oder etwas Ähnliches verwenden, um den gewünschten Effekt zu erzielen.
nicht wirklich. denn ::first-line ist unabhängig von der HTML-Markup und passt daher viel besser zu einem flüssigen Layout als Spans, die davon ausgehen, dass dieses Wort genau das letzte Wort in dieser Textzeile ist.
Ja, dieser Bug in Chrome / WebKit ist schrecklich, hartnäckig und unerklärlich. Ich hätte nie gedacht, dass ich das sagen würde, aber Chrome muss hier wirklich mit IE mithalten.
2016 ist fast vorbei und dieser Chrome-Bug existiert immer noch. Chromium ist das neue IE.
Es ist erwähnenswert, dass ich gerade gelernt habe, dass Firefox (damals Version 41.0.1) :first-line nicht erlaubt, line-height niedriger als die aktuelle Einstellung des Elements festzulegen.
Das ist anscheinend nicht unbedingt ein Bug, da die Spezifikation dies der Interpretation des Browsers überlässt, aber alle anderen (Chrome, Safari, IE) verhalten sich wie erwartet.
Hier ist ein weiterer
::first-lineBug, auf den ich gestoßen bin (mit Korrektur)