„Warum zum Teufel haben wir kein ::first-column?“
Das habe ich neulich jemanden fragen hören, und es ist eine berechtigte Frage. Ich würde diese Frage sogar noch weiter ausdehnen und nach ::nth-column() oder allem anderen fragen, was mit CSS- Spalten zu tun hat. Wir haben Dinge wie ::first-letter und ::first-line. Warum nicht andere?
Viele bemerkenswerte Dinge fehlen in der "nth"-Gruppe. Vor sieben Jahren schrieb ich „A Call for ::nth-everything“, und es enthielt klare Anwendungsfälle wie zum Beispiel die Auswahl der ersten zwei Zeilen eines Absatzes.
Ich kenne nicht alle technischen Details davon, aber ich weiß, dass es einige ziemlich gute Gründe gibt, warum wir all diese nicht in CSS haben. Ein Teil davon ist die Schwierigkeit, es zu spezifizieren (z. B. Wörter und Zeichen sind in verschiedenen Sprachen schwierig) und ein Teil davon ist die Schwierigkeit, sie zu implementieren. Was ich gerade herausgefunden habe, ist, dass ein FAQ-Dokument existiert, das es erklärt!
Warum haben wir also kein ::first-column? Weil es ein „Selektor ist, der vom Layout abhängt“.
Dies fällt in eine Klasse von Problemen, die in CSS wahrscheinlich nicht lösbar sind: Selektoren im Allgemeinen und Pseudoklassen im Besonderen dürfen nicht vom Layout abhängen, da sie sonst verwendet werden könnten, um das Layout so zu ändern, dass sie nicht mehr übereinstimmen, was das Layout zurück zu dem ändern würde, wo es war, sodass sie wieder übereinstimmen, und wir stecken in einer unendlichen Schleife von Widersprüchen fest.
Als einfaches Beispiel
:stuck { position: static; }Und nun?
Einige der Änderungen, die Webentwickler möglicherweise mit einer :stuck-Pseudoklasse anwenden möchten, sind möglicherweise sicher und lösen keine solchen Schleifen aus, aber Selektoren sind ein generischer Mechanismus und würden diese Art von Widersprüchen ermöglichen.
Selbst wenn viele der Probleme, die Menschen mit solchen Pseudoklassen zu lösen versuchen, legitim sind, sind Selektoren wahrscheinlich nicht die Antwort.
Was wir haben, sind endlose Schleifen, die im Grunde das Problem sind (aber lesen Sie das FAQ – es geht sehr detailliert auf die Nuancen ein). Auf ähnliche Weise, aus dem gleichen Grund, haben wir keine Elementabfragen in CSS.
Es ist ein wenig knifflig, darüber nachzudenken, denn selbst Dinge wie ::first-line sind voller Paradoxien. Sagen wir, Sie verwenden es, um die font-size zu erhöhen. Das bedeutet, dass weniger Zeichen in die Zeile passen, sodass die Zeichen, die ursprünglich übereinstimmten, nun nach unten gedrückt werden und nicht mehr übereinstimmen. Scheint ein bisschen verrückt, aber das wurde sortiert. Außerdem können Klassiker wie :hover potenziell Zittern verursachen. Das Dokument spricht diese Dinge klar an. Es ist nicht alles eindeutig!
Das gesamte FAQ ist eine faszinierende Lektüre und behandelt viel mehr als diese Situation.