Elternselektoren in CSS

Avatar of Chris Coyier
Chris Coyier am

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

Um es klarzustellen, falls jemand dies über eine Suchmaschine findet: Es gibt keine Elternselektoren in CSS, nicht einmal in CSS3. Es ist jedoch ein interessantes Thema, und einige neue Diskussionen sind aufgetaucht.

Bereits 2008 schlug Shaun Inman die Syntax vor

a < img { border: none; }

[Satz wurde korrigiert]: In diesem Beispiel würden a-Tags ausgewählt, aber nur, wenn sie ein img-Tag enthielten. (Nebenbemerkung: Dies wäre eine seltsame Abweichung von der typischen Syntax, bei der die tatsächlich ausgewählten Elemente auf der rechten Seite stehen; hier stünde es links).

Lesen Sie unbedingt die Kommentare zu diesem Beitrag, es ist ein äußerst interessanter Thread, der einige ziemlich gewichtige Gründe enthält, warum Elternselektoren noch nicht existieren. David Hyatt, ein Entwickler, der an der Frontlinie bei der Implementierung solcher Dinge in WebKit steht, kommentiert:

Mit Elternselektoren wird es extrem einfach, versehentlich eine dokumentweite Durchsuchung zu verursachen. Leute können und werden diesen Selektor missbrauchen. Ihn zu unterstützen bedeutet, Leuten viel Seil zu geben, an dem sie sich aufhängen können.

Jonathan Snook brachte dieses Thema wieder auf und gibt uns viele großartige Hintergrundinformationen darüber, wie CSS-Rendering funktioniert. Wir haben alle schon gehört, dass der universelle Selektor der ineffizienteste CSS-Selektor ist. Jonathan sagt, wenn es einen Elternselektor gäbe, wäre das leicht der neue Spitzenreiter bei den ineffizienten Selektoren. Das Argument ist, dass beim dynamischen Hinzufügen und Entfernen von Elementen von der Seite das gesamte Dokument neu gerendert werden müsste (erhebliche Bedenken hinsichtlich der Speichernutzung). Jonathan ist jedoch immer noch optimistisch

Was ich beschrieben habe, ist technisch nicht unmöglich. Tatsächlich im Gegenteil. Es bedeutet nur, dass wir uns mit den Leistungsimplikationen der Verwendung eines solchen Features auseinandersetzen müssten.

Remy Sharp macht auch mit bei dem Spaß und schlägt diese Syntax vor

a img:parent { background: none; }

Der Hauptunterschied besteht darin, dass die :parent-Syntax nur ein einzelnes Element auswerten würde, das parentNode, das für jedes Element im DOM verfügbar ist. Dies wäre ähnlich wie die Einschränkung des :has-Selectors auf die Auswertung von Kindern anstatt aller Nachfahren.

Bisher sind sich alle einig

  • Es gibt erhebliche Leistungsprobleme
  • Diese Bedenken können als abzuwägende Kompromisse betrachtet werden, nicht als Showstopper.
  • Wünschenswert!