Es ist ziemlich erstaunlich, was man mit den Pseudo-Elementen ::before und ::after machen kann. Für jedes Element auf der Seite erhältst du zwei weitere kostenlose, mit denen du fast alles machen kannst, was ein anderes HTML-Element tun könnte. Sie eröffnen eine ganze Reihe interessanter Gestaltungsmöglichkeiten, ohne die Semantik deines Markups negativ zu beeinflussen. Hier sind eine ganze Reihe dieser erstaunlichen Dinge. Eine Zusammenfassung, wenn man so will.
Mehrere Hintergrund-Leinwände zur Verfügung stellen

Da du Pseudo-Elemente absolut relativ zu ihrem Elternelement positionieren kannst, kannst du sie als zwei zusätzliche Ebenen betrachten, mit denen du für jedes Element spielen kannst. Nicolas Gallagher zeigt uns viele Anwendungen davon, einschließlich mehrerer Ränder, Simulation von CSS3-Mehrfachhintergründen und Spalten gleicher Höhe.
Erweitere die Anzahl der Formen, die du mit einem einzigen Element erstellen kannst

Alle oben gezeigten Formen und viele mehr können mit einem einzigen Element erstellt werden, was sie tatsächlich praktisch macht. Im Gegensatz zu diesen "Kaffeebecher mit reinem CSS machen!"-Dingen, die 1.700 divs verwenden, die nett sind, aber nicht praktisch.
Hier ist ein Beispiel für einen sechs-zackigen Stern
#star-six {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
position: relative;
}
#star-six:after {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 100px solid red;
position: absolute;
content: "";
top: 30px;
left: -50px;
}
URLs von Links in gedruckten Webseiten anzeigen

@media print {
a[href]:after {
content: " (" attr(href) ") ";
}
}
Floats löschen

Anstatt zusätzliches nicht-semantisches Markup einzufügen, um den Float auf Container-Elementen zu löschen, können wir ein Pseudo-Element verwenden, um dies für uns zu tun. Bekannt als "Clearfix", und semantisch mit dem Klassennamen "group" bezeichnet.
.group:before,
.group:after {
content: "";
display: table;
}
.group:after {
clear: both;
}
.group {
zoom: 1; /* For IE 6/7 (trigger hasLayout) */
}
Float: center simulieren;

Die Eigenschaft float hat keinen Wert von center, obwohl wir uns das sehr wünschen würden. Float hat jedoch links und rechts, und durch die Verwendung von Platzhalter-Pseudo-Elementen können wir einen Bereich zwischen zwei Spalten ausschneiden und dort ein Bild platzieren. Wir können den Effekt simulieren.
Codeblöcke mit der jeweiligen Sprache kennzeichnen

Im aktuellen Design dieser Website werden die Codeblöcke mit der jeweiligen Programmiersprache durch ein Pseudo-Element gekennzeichnet.
pre::after {
content: attr(rel);
position: absolute;
top: 22px;
right: 12px;
}
Ein komplettes Icon-Set erstellen

Nicolas Gallagher treibt die Idee der Formen auf eine weitere Ebene, indem er eine riesige Sammlung von Icons erstellt, die ohne Bilder auskommen, nur mit Pseudo-Elementen auf (maximal) zwei Elementen pro Icon.
Verfügbaren Platz effizienter nutzen

Was CSS gibt, kann CSS auch wegnehmen. Was ich damit meine ist, dass Pseudo-Element-Inhalte bedingt über Medienabfragen angewendet oder entfernt werden können angewendet oder entfernt werden können. Vielleicht wendet man ein Icon an, wenn der Platz begrenzt ist, und ersetzt es durch ein beschreibenderes Wort, wenn mehr Platz vorhanden ist.
Typografische Verzierungen anwenden

Wenn deine Pseudo-Elemente Text sind, erben sie die gleichen typografischen Stile wie ihr Elternelement. Aber während du ihren Inhalt festlegst, kannst du sie auch stylen. Zum Beispiel, eine andere Schriftart und eine andere Farbe verwenden, um deine Überschriften mit einer Verzierung hervorzuheben.
h2 {
text-align: center;
}
h2:before, h2:after {
font-family: "Some cool font with glyphs", serif;
content: "\00d7"; /* Some fancy character */
color: #c83f3f;
}
h2:before {
margin-right: 10px;
}
h2:after {
margin-left: 10px;
}
Balken voller Browserbreite erstellen

Wenn du Elemente benötigst, deren Hintergrund sich über die volle Breite erstreckt, deren Inhalt jedoch nicht, bist du oft auf nicht-semantische interne Wrapperelemente oder repetitive und unübersichtliche Abstandsdeklarationen angewiesen. Oder du kannst den Effekt simulieren, indem du die Inhaltsbreite mit einem Element begrenzen und die Kopfzeile bis zu den Rändern mit Pseudo-Elementen reichen lassen.
Einen Körperrahmen erstellen

Mit einem normalen Rahmen links und rechts und fest positionierten Pseudo-Element-Balken oben und unten können wir einen "Body Border"-Effekt erzielen, ohne jegliches dediziertes Markup.
body::before, body::after {
content: "";
position: fixed;
background: #900;
left: 0;
right: 0;
height: 10px;
}
body::before {
top: 0;
}
body::after {
bottom: 0;
}
body {
border-left: 10px solid #900;
border-right: 10px solid #900;
}
Einen glänzenden Button erstellen

Wenn du ein Pseudo-Element-Block erstellst, das einen transparenten bis weißen bis transparenten Farbverlauf hat, es außerhalb des Buttons positionierst (was es durch versteckte Überläufe verbirgt) und es beim Überfahren mit der Maus über den Button bewegst, kannst du einen Button erstellen, der beim Überfahren mit der Maus etwas Licht zu reflektieren scheint. Nur unterstützt für Firefox, Chrome 26+ und IE10+.
Original von Anton Trollbäck; Pseudo-elementisiert von Nicolas Gallagher; Eine weitere Version von mir.
Eine Seite ausblenden, wenn über einen bestimmten Link gefahren wird

Wenn du die relative Positionierung auf einem Element nicht einstellst, werden absolut positionierte Pseudo-Elemente relativ zum nächsten Elternteil positioniert, der dies tut. Wenn nichts anderes dies tut, wird es relativ zum Wurzelelement sein. Du kannst das nutzen, um ein Element in voller Browserbreite zu erstellen, es unter das Hauptelement zu stapeln und es beim Überfahren mit der Maus aufdecken zu lassen, was einen "Page Fade Out"-Effekt auf einem Link erzeugt.
Einen Header wie ein dreidimensionales Band gestalten

Jeder liebt Bänder! Schau dir diesen Snippet an für das HTML und CSS dafür. Er nutzt einen negativen z-index, was in einigen Fällen ein zusätzliches umschließendes Element erfordert, um zu verhindern, dass das Element unter einem überfüllten Hintergrund verloren geht.
Nummern in geordneten Listen stylen

Hast du jemals versucht, die Nummern in einer geordneten Liste zu stylen? Am Ende macht man dumme Sachen wie die inneren Teile in Spans zu wickeln, die Listenelemente zu stylen, dann dieses Styling mit dem Span zu entfernen. Oder Hintergrundbilder auf verrückte Weise zu verwenden. Oder die Listenformatierung zu entfernen und eigene Nummern einzufügen. All diese Wege sind scheiße. Viel besser ist es, Pseudo-Elemente als Zähler zu verwenden.
Datentabellen responsiv machen

Große Datentabellen sind auf kleinen Bildschirmen furchtbar zu durchsuchen. Entweder sind sie vergrößert und erfordern sowohl vertikales als auch horizontales Scrollen, oder sie sind verkleinert und zu klein zum Lesen. Wir können CSS-Medienabfragen mit Pseudo-Elementen kombinieren, um die Datentabelle responsiv zu machen und sie für eine besser lesbare Ansicht auf kleinen Bildschirmen neu zu formatieren.
Formatierte Tooltips erstellen

Mithilfe eines HTML5-Datenattributs, das dann als Pseudo-Element abgerufen und formatiert wird, können wir vollständig benutzerdefinierte Tooltips durch CSS erstellen.
Trennzeichen zwischen Navigationspunkten hinzufügen

Wenn du ein Navigations-Element vom nächsten unterscheiden möchtest, sind deine Optionen begrenzt: Du kannst einen Rahmen hinzufügen (langweilig) oder zusätzlichen Markup zwischen jedem Element (igitt). Pseudo-Elemente ermöglichen es dir, *beliebigen* Inhalt als Abstandshalter zwischen deinen Elementen zu verwenden.
.menu li:before {
content: "// ";
position: relative;
left: -1px;
}
Eine komplette Website ohne HTML erstellen

Unter Ausnutzung der automatischen Einfügung von <html>, <head> und <body> Tags durch Browser zeigt Mathias Bynens wie man eine Website nur mit CSS und Pseudo-Element-Inhalten erstellt.
Eine reine CSS-Schriftart erstellen

Mit jeweils einem HTML-Element (plus Pseudos) für jeden Buchstaben hat Yusuke Sugomori eine komplette Schriftart über CSS namens CSS Sans erstellt. Die interaktive Demo ermöglicht es dir, all die cleveren Techniken (z. B. Rotation, border-radius und schräg stellen) zu durchsuchen, die Yusuke zur Erstellung jedes Buchstabens verwendet hat.
Die Schriftart ist auf das große lateinische Alphabet beschränkt und sehr schön. Das CSS Sans-Projekt ist eine großartige Demonstration von Kreativität, die auf Einschränkungen aufbaut.
Viele gute Sachen hier, ich freue mich darauf, mehr mit Pseudo-Elementen zu spielen.
Großartige Tutorials. Danke!!
Ausgezeichneter Beitrag! Ich lerne gerade CSS, und obwohl der Inhalt dieses Artikels etwas über meinem Kopf liegt, weiß ich genug, um den Nutzen dessen, was du tust, zu erkennen. Danke für die Tipps!
WOW! Atemberaubender Beitrag. Danke.
Chrome 12 (Stable Channel), die Titel überdecken die darunterliegenden Bilder. Abgesehen davon ist es aber eine großartige Informationsquelle :)
.one-thing h3 {
margin: 0 0 -38px 0;
}
Das scheint der Übeltäter zu sein. Ich bin auf Chrome 12 und sehe dasselbe.
beabsichtigt. Anscheinend ist es nicht so cool geworden, wie ich dachte.
Ich muss zugeben, ich habe das auch bemerkt und es in Chrome überprüft, bevor ich entschied, dass es beabsichtigt war. :)
Nur um meinen Senf dazuzugeben, ich fand es eine ziemlich clevere Idee. Mir ist nicht eingefallen, dass es unbeabsichtigt sein könnte.
Absolut brillant. Die Verwendung von nicht-semantischem Markup für Clearfloats hat mich schon immer gestört, und der simulierte Float: center ist genial.
wow, großartige Sachen hier
Schön – wenn auch einschüchternd – die Liste. Meine begrenzten Fähigkeiten sind eingerostet. Seufz.
Nebenbemerkung
Who’s ist eine Kontraktion von Who is.
Das Wort, das du hier brauchst, ist whose ("elements who’s background stretches full width but who’s content does not").
Prost!
Großartige Sachen! Wie ist die Browserunterstützung? Abgesehen von den speziell erwähnten wie dem glänzenden Button und Firefox-Unterstützung, können diese in einer Produktionsumgebung verwendet werden?
Dieser Artikel ist sehr aufregend, ich werde alles ausprobieren, wenn ich nach Hause komme!
Die ursprüngliche Demo des glänzenden Buttons sieht in Chrome 12 okay aus, aber nicht die späteren (was nicht überraschend ist, angesichts der Erwähnung von nur FF4+ im Moment).
Das ist ein ziemlich raffinierter Effekt. :D
Deine Mutter.. ist heiß. haha
Toller Beitrag!
Ich habe beschlossen, mit den reinen CSS-Tooltips zu experimentieren, auf die du verwiesen hast, aber ein paar Probleme in älteren Browsern (d. h. IE) bemerkt.
Ich habe beschlossen, das Problem zu beheben und bin zu diesem gekommen.
Was denkst du? Erste Mal, dass ich mich wirklich mit der Lösung von CSS-Browser-Kompatibilitätsproblemen beschäftige, daher würde es mich nicht überraschen, wenn ich einige offensichtliche Fehler gemacht habe!
toller Beitrag :)
Schade, dass Firebug keine Unterstützung für die Bearbeitung solcher Dinge hat.
Und einige von ihnen funktionieren nicht in IE.
Ah, kein Wunder, dass ich meine Änderungen in Firebug nicht sehen konnte, verdammt.
Diese Sachen sind köstlich!
F*** IE!
Ich liebe die Idee der typografischen Verzierungen, ich hätte nie gedacht, dass man diesen Ansatz verfolgen könnte.
Tolle Liste mit einigen nützlichen Tricks, die ich noch nie gehört habe. Danke!
Wirklich, das ist ein heißer Beitrag. Ich liebe es. Mach weiter so!!
Chrish Rechtschreibfehler,
Alle Formen oben und viele mehr können
im Link (und viele mehr) benutzt für und.
Jedenfalls schöne Sammlung.
Opera 11 unterstützt auch Übergänge bei Pseudo-Elementen (schöner Effekt übrigens), nicht nur FF4-5.
Nein, tut es nicht?
Beweis: http://jsfiddle.net/chriscoyier/cxSQR/
Hallo Chris,
Ich habe deinen Vortrag bei MinneBar dieses Jahr zum Thema Pseudo-Elemente besucht. Großartige Sachen, mach weiter so.
Kleine Anmerkung zu
rel="CSS":CSSist keine gültige Link-Relation. Es wäre wahrscheinlich besser, ein benutzerdefiniertesdata-*-Attribut zu verwenden.Ja... ich habe irgendwie gedacht "dieser Code ist RELativ zur Sprache von ____". Vielleicht wird sich die ganze Welt mir beugen und es zulassen.
Du kannst auch Selektoren ansprechen, um mit dem "Shadow DOM" von Elementen zu spielen (die jetzt in Chrome inspizierbar sind). Zum Beispiel kannst du den Schieberegler auf input type="range" mit ::-webkit-slider-thumb ansprechen. Ich habe es ein wenig übertrieben und den iPhone-Unlock-Schieberegler durch Missbrauch implementiert :) – siehe meinen Beitrag (Entschuldigung, Eigenwerbung, aber es ist relevant!) http://davidbcalhoun.com/2011/implementing-iphone-slider-unlock-with-input-type-range
Wann, oh wann werden wir unbegrenzte Pseudo-Elemente bekommen? Es macht so perfekten Sinn in der Doktrin der Trennung von Inhalt und Markup. Vielleicht eines Tages~
Alles, was ich sagen kann, ist wow Chris, einfach wow. Ich hatte keine Ahnung, dass CSS so mächtig ist, ich bin beeindruckt. Ich liebe auch die Art und Weise, wie du Informationen so präsentierst, es macht es viel einfacher zu folgen und zu ertragen, und es ist schön, auch etwas guten alten Humor zu haben.
Einfach großartige Sachen, wirklich kreative Idee, sie zu benutzen..
Pseudo-Tooltip benötigt zusätzliche Abdeckung; visibility: visible/hidden.
http://peteryee.my/playground/tooltip/
Inspiriert von deinen Ideen hier, habe ich eine Proof-of-Concept-Flipbook-Animation in Pseudo-Elementen erstellt.
http://ontouchstart.wordpress.com/2011/06/14/sallie-gardner-at-a-gallop/
Toller Beitrag. Mir gefällt die Funktion, URLs in gedruckten Seiten anzeigen zu können.
Welche Browser unterstützen diese Funktionen?
Ich habe eine kleine Website für dich erstellt, um einfache, reine CSS (mit ::before und ::after) 3D-Bänder zu erstellen, soiheardyouliekribbon.
Hey, erstaunlich!
Das falsch geschriebene "liek" ist absichtlich, richtig?
Schade, dass du meine Fortschrittsbalken (http://lab.galengidman.com/progress-bars) nicht in deinen Beitrag aufgenommen hast... aber trotzdem ein toller Beitrag, Chris.
Wirklich großartiger Beitrag, so nützlich. Danke Chris
Viele schöne Ideen, aber auch Beispiele, die nicht auf echten Websites verwendet werden sollten. Inhalt MUSS im HTML-Dokument stehen. CSS ist NUR für das Styling. Alles andere ist nur... Spielzeug.
Wie auch immer: schöne Sammlung!
Kannst du mir ein Beispiel von oben zeigen, das diese Regel bricht?
Nein, mein Fehler!
Nein, Entschuldigung. – Ich bin noch halb wach... :-}
Nein – mein Fehler. Ich habe schon nach dem Löschbutton gesucht.
Es gibt einige Beispiele, bei denen es die Grenze überschreitet, wie bei den responsiven Datentabellen. Aber es gibt Wege, es besser zu machen... ich sollte diesen Artikel aktualisieren. Echtes Hinzufügen von Inhalten mit CSS ist definitiv ein Problem, da es schlecht für Barrierefreiheit, Semantik und SEO ist, daher ist alles, was es vermeiden kann, gut.
Vielen Dank, dass Sie diese gesammelt und auf einer einzigen Seite zusammengefasst haben!
@Chris: Irgendwas funktioniert hier nicht?!? Ich versuche Ihnen zu antworten – natürlich haben Sie Recht. Alles in Ordnung (wenn man nicht zählt, dass ich – als Benutzer, nicht als Entwickler – responsives Design NICHT mag).
Sehr guter Artikel eigentlich
Ich denke, das Hinzufügen eines Pseudo-Spriting-Abschnitts zu diesem Artikel könnte eine gute Idee sein :)
https://css-tricks.de/13224-pseudo-spriting/
Die Zählung mit dem :after-Zeug ist erstaunlich. Habe diese Abhandlung geliebt, danke!
Erstaunliche Liste. Ich denke darüber nach, :after zu verwenden, um eine Linie unter dem Header-Text zu erstellen, die eine geringere Breite als der Text hat.
Hätte nie gedacht, solche Tricks zu machen, ziemlich cool!
Erstaunliche Abhandlung! Sie hat mir sehr geholfen. Danke!!!
Chris, gibt es einen Unterschied zwischen :after & ::after