::before vs :before

Avatar of Chris Coyier
Chris Coyier on

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Beachten Sie den Doppelpunkt ::before im Vergleich zum Doppelpunkt :before. Welcher ist korrekt?

Technisch gesehen ist die richtige Antwort ::before. Das bedeutet aber nicht, dass Sie es automatisch verwenden sollten.

Die Situation ist die:

  • Doppelpunkt-Selektoren sind Pseudoelemente.
  • Einpunkt-Selektoren sind Pseudoselektoren.

::before ist definitiv ein Pseudoelement, daher sollte es den Doppelpunkt verwenden.

Die Unterscheidung zwischen einem Pseudoelement und einem Pseudoselektor ist bereits verwirrend. Glücklicherweise sind ::after und ::before ziemlich unkompliziert. Sie fügen buchstäblich etwas Neues zur Seite hinzu, ein Element.

Aber etwas wie ::first-letter ist ebenfalls ein Pseudoelement. So argumentiere ich das in meinem Kopf: Es wählt einen Teil von etwas aus, für den es kein bestehendes HTML-Element gibt. Es gibt kein <span> um den ersten Buchstaben, den Sie ansprechen, also ist dieser erste Buchstabe fast wie ein neues Element, das Sie auf der Seite hinzufügen. Das unterscheidet sich von Pseudoselektoren, die Dinge auswählen, die bereits existieren, wie z. B. :nth-child(2) oder was auch immer.

Auch wenn ::before ein Pseudoelement ist und der Doppelpunkt die korrekte Art ist, Pseudoelemente zu verwenden, sollten Sie es tun?

Es gibt ein Argument, dass Sie vielleicht :before verwenden sollten, das wie folgt lautet:

  1. Internet Explorer 8 und darunter unterstützte nur :before, nicht ::before
  2. Alle modernen Browser unterstützen es auf beide Arten, da unzählige Websites :before verwenden und Browser Rückwärtskompatibilität sehr schätzen.
  3. Als Bonus ist es ein Zeichen weniger.

Ich habe gehört, dass Leute sagen, sie hätten einen CSS-Linter, der sie zur Verwendung von Einzelpunkten zwingt (oder dies automatisiert). Persönlich bin ich damit einverstanden, wenn Leute das tun. Scheint in Ordnung. Ich würde Konsistenz über die von Ihnen gewählte Methode stellen.

Auf der anderen Seite gibt es ein Argument für die Verwendung von ::before, das wie folgt lautet:

  1. Einzelpunkt-Pseudoelemente waren ein Fehler. Es wird nie mehr Pseudoelemente mit Einzelpunkt geben.
  2. Wenn Sie die Unterscheidung klar im Kopf haben, trainieren Sie Ihre Finger ruhig, es richtig zu machen.
  3. Das ist ohnehin schon verwirrend genug, also folgen wir einfach dem korrekt spezifizierten Weg.

Ich habe meinen Linter so eingestellt, dass er mich zwingt, Doppelpunkte zu verwenden. Ich unterstütze Internet Explorer 8 sowieso nicht und es fühlt sich gut an, die Dinge auf die "richtige" Art und Weise zu tun.