Was ist der Unterschied zwischen einer pseudo-Klassen und pseudo-Elemente in CSS?
Dinge wie a:link
oder div::after
...
Informationen über die Unterschied scheint knapp.
InformationsquelleAutor der Frage tybro0103 | 2011-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den CSS 3-Selektor Empfehlung ist ziemlich klar, über die beiden, aber ich werde versuchen zu zeigen, der Unterschiede sowieso.
Pseudo-Klassen
Offizielle Beschreibung
Quelle
Was bedeutet das?
Wichtige Art von pseudo-Klassen wird bereits im ersten Satz: "die pseudo-Klasse-Konzept [...] erlauben die Auswahl". Es ermöglicht dem Autor eines Stylesheets zu unterscheiden zwischen den Elementen, die basierend auf Informationen, die "liegt außerhalb des document-tree"zum Beispiel den aktuellen status eines Links (
:active
,:visited
). Diese werden nicht gespeichert, die überall im DOM, und es besteht kein DOM-Schnittstelle für den Zugriff auf diese Optionen.Auf der anderen Seite
:target
zugegriffen werden konnte über DOM-manipulation (Sie könnte verwendenwindow.location.hash
um das zu finden, das Objekt mit JavaScript), aber diese "nicht ausgedrückt werden kann mit den andere einfache Selektoren".Also im Grunde eine pseudo-Klasse verfeinern Sie die Menge der ausgewählten Elemente als jeder andere einfache Selektor in einem Abfolge von einfachen Selektoren. Beachten Sie, dass alle einfachen Selektoren, die in einer Abfolge von einfachen Selektoren, ausgewertet werden, in der gleichen Zeit. Für eine vollständige Liste der pseudo-Klasse überprüfen Sie die CSS3-Selektor Empfehlung.
Beispiel
Folgenden Beispiel wird die Farbe auch Zeilen Grau (
#ccc
), alle ungleichen Zeilen, die nicht teilbar durch 5 weiße und jeder anderen Zeile magenta.Pseudo-Elemente
Offizielle Beschreibung
Quelle
Was bedeutet das?
Der wichtigste Teil hierbei ist, dass "pseudo-Elemente erlauben dem Autor finden Sie unter [..] ansonsten unzugänglichen Informationen" und dass Sie "kann auch liefern die Autoren einen Weg, um auf Inhalte verweisen, die nicht vorhanden ist in das Quelldokument (z.B. die
::before
und::after
pseudo-Elemente geben Ihnen den Zugang zu generated content).". Der größte Unterschied ist, dass Sie tatsächlich erstellen Sie ein neues virtuelles element, auf dem die Regeln und auch pseudo-class-Selektoren angewendet werden kann. Sie nicht filtern, die Elemente, die Sie im Grunde das filtern von Inhalt (::first-line
,::first-letter
) und wickeln Sie es in einem virtuellen container, in denen der Autor kann Stil aber er will (naja, fast).Beispielsweise die
::first-line
pseudo-element kann nicht rekonstruiert werden mit JavaScript, da es stark abhängig von dem aktuell verwendeten schriftart, die Schriftgröße, die Elemente Breite, floating elements (und wahrscheinlich die Zeit des Tages). Naja, das stimmt nicht ganz: könnte man noch ermitteln Sie alle diejenigen Werte, und extrahieren Sie die erste Zeile, aber dies ist eine sehr mühsame Tätigkeit.Ich denke, der größte Unterschied ist, dass "nur ein pseudo-element erscheinen können pro Selektor". Der Hinweis sagt, dass dies könnte sich ändern, aber wie 2012 ich glaube nicht, dass wir sehen alle anderes Verhalten in der Zukunft (es ist immer noch in CSS4).
Beispiel
Folgenden Beispiel wird eine Sprache hinzufügen-tag, um jedes Zitat auf eine bestimmte Seite mit der pseudo-Klasse
:lang
und das pseudo-element::after
:TL;DR
Pseudo-Klassen fungieren als einfache Selektoren in eine Sequenz von Auswahlen und damit klassifizieren Sie die Elemente auf nicht-repräsentativen Eigenschaften, pseudo-Elemente erstellen Sie neue virtuelle Elemente.
Referenzen
W3C
InformationsquelleAutor der Antwort Zeta
Einer pseudo-Klasse Filter vorhandenen Elemente.
a:link
bedeutet, dass alle<a>
s:link
.Einem pseudo-element ist eine neue gefälschte element.
div::after
bedeutet, dass nicht vorhandene Elemente nach<div>
s.::selection
ist ein weiteres Beispiel für ein pseudo-element.Es bedeutet nicht, dass alle Elemente, die ausgewählt sind; es bedeutet, die Auswahl von Inhalten, die ausgewählt ist, die erstrecken kann Teile von mehreren Elementen.
InformationsquelleAutor der Antwort SLaks
Kurze Beschreibung, die mir geholfen haben um den Unterschied zu verstehen:
InformationsquelleAutor der Antwort jerone
Vom Sitepoint-docs:
InformationsquelleAutor der Antwort motoxer4533
Einer konzeptionellen Antwort:
Einem pseudo-element bezieht sich auf Dinge, die Teil des Dokuments, aber Sie nur don ' T wissen es noch nicht. Zum Beispiel den ersten Buchstaben. Bevor Sie hatte nur text. Jetzt haben Sie einen ersten Brief, den Sie ansprechen können. Es ist ein neues Konzept, sondern war immer Bestandteil des Dokuments. Dies beinhaltet auch Dinge wie
::before
; wenn es keinen wirklichen Inhalt gibt es, das Konzept von etwas, das vorher etwas anderes war immer da-jetzt geben Sie es.Einer pseudo-Klasse ist ein Zustand von etwas in der DOM. Genau wie eine Klasse einen tag, die Sie assoziieren mit einem element, einem pseudo-Klasse ist eine Klasse, wird verbunden durch den browser oder DOM oder was auch immer, in der Regel als Reaktion auf eine änderung im Zustand. Besucht ein Nutzer einen link -- link kann auf den Status 'besucht'. Sie können sich vorstellen, die browser-Anwendung der Klasse "besucht", das Anchor-element.
:visited
würde dann sein, wie Sie für die pseudo-Klasse.InformationsquelleAutor der Antwort Gerard ONeill
Pseudo-Klasse
Einer pseudo-Klasse wählen, bestimmte Teile eines HTML-Dokuments basiert im Prinzip nicht auf das HTML-Dokument-Struktur selbst und seine Elemente oder auf Merkmale wie name, Attribute oder Inhalt, sondern auf andere phantom-Bedingungen, wie die Sprache Codierung oder den dynamischen Zustand eines Elements.
Dem ursprünglichen pseudo-Klasse definiert dynamischen Zustände eines Elementes, sind betreten und verlassen über die Zeit oder durch eingreifen des Benutzers. CSS2 erweitert dieses Konzept, um virtuelle konzeptionellen Komponenten des Dokuments oder abgeleitete Teile der Dokument-Baum z.B. erste Kind. Pseudo-Klassen handeln, als ob ein phantom-Klassen wurden Hinzugefügt, um die verschiedenen Elemente.
EINSCHRÄNKUNGEN: im Gegensatz zu pseudo-Elemente pseudo-Klassen können an beliebiger Stelle im Selektor-Kette.
Beispiel pseudo-Klasse-code:
Dass eine Seite zeigt ein rendering des obigen pseudo-Klasse code
Pseudo-Elemente
PSEUDO-ELEMENTE werden verwendet, um sub-Adresse-Teile der Elemente. Sie ermöglichen das festlegen von Stil-auf einem Teil einer element-Inhalt über das hinaus, was von den Angaben in den Unterlagen. In anderen Worten, Sie erlauben, logische Elemente definiert werden, die nicht tatsächlich im Dokument-element-Baum. Logische Elemente erlauben implizite semantische Struktur angesprochen werden, in CSS-Selektoren.
EINSCHRÄNKUNGEN: Pseudo-Elemente dürfen nur angewendet werden, um externe und Dokument-level-Kontexte - nicht-in-line styles. Pseudo-Elemente beschränkt sind, in denen Sie erscheinen in der Regel. Sie können nur am Ende eines Selektor-Kette (nach dem Subjekt des Selektors). Sie sollten nach jedem Klassen-oder ID-Namen in der Auswahl. Nur ein pseudo-element kann angegeben werden, pro Selektor. Adresse mehrere pseudo-Elemente auf einem einzelnen element-Struktur, mehrere style selector/Erklärung Aussagen, die gemacht werden müssen.
Pseudo-Elemente können verwendet werden für die gemeinsame typografische Effekte wie die erste caps-and-drop caps. Sie können auch die Adresse, generiert Inhalte, die nicht in das Quelldokument (mit den "vor" und "nach") Ein Beispiel-Stylesheet für einige pseudo-Elemente mit Eigenschaften und Werten folgt.
/* Die folgende Regel selektiert den ersten Buchstaben von "überschrift 1" und setzt die schriftart auf 2em, kursive, mit einem grünen hintergrund. First-letter selektiert das erste gerenderte Buchstaben/Zeichen für ein block-level element. */
Quellen:Link
InformationsquelleAutor der Antwort Sumant
Unten ist die einfache Antwort:
Verwenden wir Pseudoklassewenn wir brauchen, um css anzuwenden, basierend auf der Zustand eines Elements. Wie:
:hover
):focus
). etc.Verwenden wir pseudo-elementwenn wir brauchen, um css anzuwenden, um die bestimmte Teile eines elements oder einer neu eingefügt Inhalt. Wie:
::first-letter
)::before
::after
)Unten ist das Beispiel für beide:
InformationsquelleAutor der Antwort Sheo Dayal Singh
In kurzen, von Pseudo-Klassen auf MDN:
Ist und von Pseudo-Elemente auf MDN:
InformationsquelleAutor der Antwort DavidRR