::before
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
In CSS erzeugt ::before
ein Pseudoelement, das das erste Kind des ausgewählten Elements ist. Es wird häufig verwendet, um ein Element mit der content
-Eigenschaft kosmetisch zu ergänzen. Standardmäßig ist es ein Inline-Element.
Probieren Sie es aus
Hinweis: Die durch ::before
und ::after
erzeugten Pseudoelemente sind Boxen, die so generiert werden, als wären sie unmittelbare Kinder des Elements, auf das sie angewendet werden, oder des "ursprünglichen Elements". Daher können sie nicht auf ersetzte Elemente angewendet werden, wie z.B. <img>
, deren Inhalt außerhalb des CSS-Formatierungsmodells liegt.
Syntax
::before {
content: /* value */;
/* properties */
}
Wenn die content
-Eigenschaft nicht spezifiziert ist, einen ungültigen Wert hat oder normal
oder none
als Wert hat, wird das ::before
-Pseudoelement nicht gerendert. Es verhält sich so, als ob display: none
gesetzt ist.
Hinweis: Selectors Level 3 führte die Doppelpunkt-Notation ::before
ein, um Pseudoklassen von Pseudoelementen zu unterscheiden. Browser akzeptieren auch die Einfach-Doppelpunkt-Notation :before
, die in CSS2 eingeführt wurde.
Barrierefreiheit
Die Verwendung eines ::before
-Pseudoelements zum Hinzufügen von Inhalten wird nicht empfohlen, da es nicht zuverlässig für Screenreader zugänglich ist.
Beispiele
Hinzufügen von Anführungszeichen
Ein Beispiel für die Verwendung von ::before
-Pseudoelementen ist das Bereitstellen von Anführungszeichen. Hier verwenden wir sowohl ::before
als auch ::after
, um Anführungszeichen einzufügen.
HTML
<q>Some quotes</q>, he said, <q>are better than none.</q>
CSS
q::before {
content: "«";
color: blue;
}
q::after {
content: "»";
color: red;
}
Ergebnis
Dekoratives Beispiel
Wir können Text oder Bilder innerhalb der content
-Eigenschaft fast beliebig gestalten.
HTML
<span class="ribbon">Notice where the orange box is.</span>
CSS
.ribbon {
background-color: #5bc8f7;
}
.ribbon::before {
content: "Look at this orange box.";
background-color: #ffba10;
border-color: black;
border-style: dotted;
}
Ergebnis
To-do-Liste
In diesem Beispiel erstellen wir eine To-do-Liste mit Pseudoelementen. Diese Methode kann oft verwendet werden, um kleine Akzente in der Benutzeroberfläche zu setzen und die Benutzererfahrung zu verbessern.
HTML
<ul>
<li>Buy milk</li>
<li>Take the dog for a walk</li>
<li>Exercise</li>
<li>Write code</li>
<li>Play music</li>
<li>Relax</li>
</ul>
CSS
li {
list-style-type: none;
position: relative;
margin: 2px;
padding: 0.5em 0.5em 0.5em 2em;
background: lightgrey;
font-family: sans-serif;
}
li.done {
background: #ccff99;
}
li.done::before {
content: "";
position: absolute;
border-color: #009933;
border-style: solid;
border-width: 0 0.3em 0.25em 0;
height: 1em;
top: 1.3em;
left: 0.6em;
margin-top: -1em;
transform: rotate(45deg);
width: 0.5em;
}
JavaScript
const list = document.querySelector("ul");
list.addEventListener(
"click",
(ev) => {
if (ev.target.tagName === "LI") {
ev.target.classList.toggle("done");
}
},
false,
);
Hier wird das obige Codebeispiel live ausgeführt. Beachten Sie, dass keine Symbole verwendet werden und das Häkchen tatsächlich das ::before
-Element ist, das in CSS gestaltet wurde. Legen Sie los und erledigen Sie einige Aufgaben.
Ergebnis
Sonderzeichen
Da es sich um CSS und nicht um HTML handelt, können Sie keine Markup-Entities in Inhaltswerten verwenden. Wenn Sie ein Sonderzeichen verwenden müssen und es nicht direkt in Ihre CSS-Inhaltszeichenfolge eingeben können, verwenden Sie eine Unicode-Escape-Sequenz, die aus einem Backslash gefolgt vom hexadezimalen Unicode-Wert besteht.
HTML
<ol>
<li>Crack Eggs into bowl</li>
<li>Add Milk</li>
<li>Add Flour</li>
<li aria-current="step">Mix thoroughly into a smooth batter</li>
<li>Pour a ladleful of batter onto a hot, greased, flat frying pan</li>
<li>Fry until the top of the pancake loses its gloss</li>
<li>Flip it over and fry for a couple more minutes</li>
<li>serve with your favorite topping</li>
</ol>
CSS
li {
padding: 0.5em;
}
li[aria-current="step"] {
font-weight: bold;
}
li[aria-current="step"]::after {
content: " \21E6"; /* Hexadecimal for Unicode Leftwards white arrow*/
display: inline;
}
Ergebnis
Spezifikationen
Specification |
---|
CSS Pseudo-Elements Module Level 4 # generated-content |
Browser-Kompatibilität
BCD tables only load in the browser