Das Anpassen der Farbe, Größe oder Art der Zahl oder des Aufzählungszeichens ist jetzt einfach, wenn <ul>
oder <ol>
verwendet wird.
Dank Igalia, die von Bloomberg gesponsert wird, können wir endlich unsere Tricks für Stillisten weglegen. Sieh!
Dank CSS ::marker
können wir den Inhalt und einige Stile für Aufzählungszeichen und Zahlen ändern.
Browserkompatibilität
::marker
wird in Firefox für Desktop- und Android-Geräte, in Safari auf Computern und in iOS in Safari (aber nur in den Eigenschaften color
und font-*
, siehe Fehler 204163) sowie in Chromium-basierten Desktop- und Android-Browsern unterstützt.
Pseudoelemente
Sehen Sie sich die folgende ungeordnete HTML-Liste an:
<ul>
<li>Lorem ipsum dolor sit amet consectetur adipisicing elit</li>
<li>Dolores quaerat illo totam porro</li>
<li>Quidem aliquid perferendis voluptates</li>
<li>Ipsa adipisci fugit assumenda dicta voluptates nihil reprehenderit consequatur alias facilis rem</li>
<li>Fuga</li>
</ul>
Dies führt zu folgendem nicht überraschenden Rendering:
Der Punkt am Anfang jedes <li>
-Artikels ist kostenlos. Der Browser zeichnet und erstellt ein generiertes Markierungsfeld für Sie.
Heute möchten wir über das Pseudoelement ::marker
sprechen, mit dem Sie das Aufzählungselement gestalten können, das Browser für Sie erstellen.
Markierung erstellen
Das Pseudoelement-Markierungsfeld ::marker
wird automatisch in jedem Listenelementelement generiert, das dem eigentlichen Inhalt und dem Pseudoelement ::before
vorangestellt ist.
li::before {
content: "::before";
background: lightgray;
border-radius: 1ch;
padding-inline: 1ch;
margin-inline-end: 1ch;
}
In der Regel sind Listenelemente <li>
-HTML-Elemente, aber andere Elemente können auch zu Listenelementen mit display: list-item
werden.
<dl>
<dt>Lorem</dt>
<dd>Lorem ipsum dolor sit amet consectetur adipisicing elit</dd>
<dd>Dolores quaerat illo totam porro</dd>
<dt>Ipsum</dt>
<dd>Quidem aliquid perferendis voluptates</dd>
</dl>
dd {
display: list-item;
list-style-type: "🤯";
padding-inline-start: 1ch;
}
Stil für Markierung festlegen
Bis zum ::marker
konnten Listen mithilfe von list-style-type
und list-style-image
gestaltet werden, um das Symbol für Listeneinträge mit einer einzigen CSS-Zeile zu ändern:
li {
list-style-image: url(/right-arrow.svg);
/* OR */
list-style-type: '👉';
padding-inline-start: 1ch;
}
Das ist praktisch, aber wir brauchen mehr. Wie sieht es mit dem Ändern der Farbe, Größe, Abstände usw. aus? Hier kommt ::marker
zur Hilfe. Es ermöglicht das individuelle und globale Targeting dieser Pseudoelemente über CSS:
li::marker {
color: hotpink;
}
li:first-child::marker {
font-size: 5rem;
}
Die Eigenschaft list-style-type
bietet sehr begrenzte Gestaltungsmöglichkeiten. Mit dem Pseudoelement ::marker
können Sie ein Targeting auf die Markierung selbst vornehmen und Stile direkt darauf anwenden. So haben Sie viel mehr Kontrolle.
Allerdings können Sie nicht jede CSS-Eigenschaft in einer ::marker
verwenden. Die Liste der zulässigen und nicht zulässigen Eigenschaften ist in der Spezifikation klar angegeben. Wenn Sie mit diesem Pseudoelement etwas Interessantes ausprobieren und es nicht funktioniert, finden Sie in der folgenden Liste eine Anleitung dazu, was mit CSS möglich ist und was nicht:
Zulässige ::marker
-Properties für Preisvergleichsportale
animation-*
transition-*
color
direction
font-*
content
unicode-bidi
white-space
Der Inhalt einer ::marker
wird mit content
geändert, nicht mit list-style-type
. Im nächsten Beispiel wird das erste Element mit list-style-type
und das zweite mit ::marker
formatiert. Die Eigenschaften im ersten Fall gelten für das gesamte Listenelement, nicht nur für die Markierung. Das bedeutet, dass sowohl der Text als auch die Markierung animiert werden. Bei Verwendung von ::marker
können wir nur das Markierungsfeld und nicht den Text für das Targeting verwenden.
Beachten Sie auch, dass die unzulässige background
-Property keine Auswirkungen hat.
li:nth-child(1) { list-style-type: '?'; font-size: 2rem; background: hsl(200 20% 88%); animation: color-change 3s ease-in-out infinite; }
li:nth-child(2)::marker { content: '!'; font-size: 2rem; background: hsl(200 20% 88%); animation: color-change 3s ease-in-out infinite; }
Inhalt einer Markierung ändern
Im Folgenden finden Sie einige Möglichkeiten, wie Sie Markierungen gestalten können.
Alle Listeneinträge ändern
li {
list-style-type: "😍";
}
/* OR */
li::marker {
content: "😍";
}
Nur einen Listeneintrag ändern
li:last-child::marker {
content: "😍";
}
Listeneintrag in SVG ändern
li::marker {
content: url(/heart.svg);
content: url(#heart);
content: url("data:image/svg+xml;charset=UTF-8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='24' width='24'><path d='M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z' fill='none' stroke='hotpink' stroke-width='3'/></svg>");
}
Nummerierte Listen ändern
Wie sieht es mit einer <ol>
aus? Die Markierung für einen sortierten Listeneintrag ist standardmäßig eine Zahl und kein Aufzählungszeichen. In CSS werden diese als Zähler bezeichnet und sind sehr leistungsstark. Sie können sogar Eigenschaften festlegen und zurücksetzen, wo die Nummer beginnt und endet, oder sie in römische Ziffern umwandeln. Können wir das gestalten? Ja. Wir können sogar den Wert für den Inhalt der Markierung verwenden, um unsere eigene Nummerierungspräsentation zu erstellen.
li::marker {
content: counter(list-item) "› ";
color: hotpink;
}
Debugging
Mit den Chrome-Entwicklertools kannst du die auf ::marker
-Pseudoelemente angewendeten Stile prüfen, debuggen und ändern.
Zukünftiger Pseudoelementstil
Weitere Informationen zu ::marker
finden Sie hier:
- CSS-Listen, Markierungen und Zähler aus dem Smashing Magazine
- Counting With CSS Counters and CSS Grid von CSS-Tricks
- CSS-Zähler von MDN verwenden
Es ist toll, wenn man Zugang zu etwas bekommt, das sich nur schwer gestalten lässt. Sie können andere automatisch generierte Elemente gestalten. Vielleicht frustriert Sie das Problem mit <details>
oder der Anzeige für die automatische Vervollständigung von Sucheingaben, da diese Elemente in Browsern nicht auf die gleiche Weise implementiert sind. Du kannst beispielsweise auf https://webwewant.fyi einen Wunsch erstellen, um anderen über Neuigkeiten zu informieren.