CSS Pseudo-Kommata

Avatar of Geoff Graham
Geoff Graham am

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

Ein echter CSS-Trick, wenn es jemals einen gab! @ShadowShahriar hat eine CodePen-Demo erstellt, die Pseudo-Elemente verwendet, um Kommas zwischen Listenelementen zu setzen, die inline angezeigt werden, und das Ergebnis ist ein natürlich aussehender vollständiger Satz mit richtiger Interpunktion.

Wie es funktioniert

Der Trick? Erstens, es besteht darin, eine ungeordnete Liste zu einem Inline-Element ohne Marker oder Abstand zu machen

ul {
  padding: 0;
  margin: 0;
  display: inline;
  list-style-type: none;
}

Als nächstes zeigen wir Listenelemente inline an, damit sie natürlich als Text in einem Satz fließen

li {
  display: inline;
}

Dann fügen wir Kommas zwischen Listenelementen hinzu, indem wir deren ::after Pseudo-Element auswählen und dessen content Eigenschaft mit einem Komma (,) Wert setzen.

li::after{
  content: var(--separator);
}

Oh, aber warte! Was ist mit dem alten Oxford-Komma? Verwenden Sie :nth-last-of-type(), um das vorletzte Listenelement auszuwählen und dessen ::after Pseudo-Element content Eigenschaft auf ", und" vor dem letzten Listenelement zu setzen.

li:nth-last-of-type(2)::after{
  content: ", and ";
}

Wir sind noch nicht fertig. @ShadowShahriar berücksichtigt einen Ausnahmefall, bei dem es nur zwei Elemente gibt. Alles, was wir brauchen, ist, ein "und" zwischen diesen beiden Elementen anzuzeigen, also

li:first-of-type:nth-last-of-type(2)::after {
  content: " and ";
}

Ich musste das bei Selectors Explained nachschlagen, um sicherzugehen, dass ich es richtig lese. Das besagt

Das after Pseudo-Element

... eines <li> Elements, vorausgesetzt, es ist das erste seiner Art in seinem Elternteil und das n-te seiner Art von hinten (Formel) in seinem Elternteil.

Was für ein Zungenbrecher! Der letzte Schliff ist ein Punkt am Ende der Liste

li:last-of-type::after {
  content: ".";
}

Verwendung von benutzerdefinierten Eigenschaften

Wir haben gerade eine gekürzte Version des tatsächlichen Codes gesehen. @ShadowShahriar macht eine gute Sache, indem er ein Komma und das "und" als benutzerdefinierte Eigenschaften festlegt

ul {
  --separator: ",";
  --connector: "and";

  padding: 0;
  margin: 0;
  display: inline;
  list-style-type: none;
}

Auf diese Weise können wir diese später gegen andere Möglichkeiten zum Trennen von Listenelementen austauschen. Nette Geste.


Das ist mir nicht nur wegen seines cleveren Einsatzes von Pseudo-Element-Tricks aufgefallen, sondern auch wegen seiner Einfachheit. Es verwendet bewährte CSS-Prinzipien auf eine Weise, die semantisches HTML unterstützt – keine zusätzlichen Klassen, Elemente oder sogar JavaScript, um Dinge zu manipulieren. Es lässt mich fast fragen, ob HTML eine Art Inline-Listenelement (<il>, jemand???) gebrauchen könnte, um Sätzen beim Vermitteln von Listenelementen zu helfen, ohne aus einem Absatz auszubrechen.

Direkter Link →