Ich möchte mit CSS "grammatikalisch korrekte" Listen erstellen. Das habe ich bisher:
Die <li>
Tags werden horizontal mit Kommas angezeigt.
li { display: inline; list-style-type: none; }
li:after { content: ", "; }
Das funktioniert, aber ich möchte, dass das "letzte Kind" einen Punkt anstelle eines Kommas hat. Und wenn möglich, möchte ich "und" auch vor das "letzte Kind" setzen. Die Listen, die ich gestalte, werden dynamisch generiert, sodass ich den "letzten Kindern" nicht einfach eine Klasse geben kann. Sie können keine Pseudoelemente kombinieren, aber das ist im Grunde der Effekt, den ich erzielen möchte.
li:last-child li:before { content: "and "; }
li:last-child li:after { content: "."; }
Wie mache ich das?
Antworten:
Das funktioniert :) (Ich hoffe Multi-Browser, Firefox mag es)
quelle
li:last-child:after
funktioniert aberli:after:last-child
nicht.:last-child
dies nicht zur CSS3-Spezifikation gehört und daher von IE8 und früheren Versionen nicht unterstützt wird.Ich mag dies für Listenelemente in <menu> -Elementen. Betrachten Sie das folgende Markup:
Ich gestalte es mit folgendem CSS:
Dies zeigt an:
Und dies ist möglich aufgrund dessen, was Martin Atkins in seinem Kommentar erklärt hat
Beachten Sie, dass Sie in CSS 2
:after
nicht verwenden würden::after
. Wenn Sie CSS 3 verwenden, verwenden Sie::after
(zwei Halbspalten), da::after
es sich um ein Pseudoelement handelt (eine einzelne Halbspalte steht für Pseudoklassen).quelle
Ein alter Thread, dennoch kann jemand davon profitieren:
Dies sollte in CSS3 und [ungetestetem] CSS2 funktionieren.
quelle
Sie können Pseudoelemente kombinieren! Sorry Leute, ich habe das kurz nach dem Posten der Frage selbst herausgefunden. Möglicherweise wird es aufgrund von Kompatibilitätsproblemen weniger häufig verwendet.
li:last-child:before { content: "and "; }
li:last-child:after { content: "."; }
Das funktioniert schwimmend. CSS ist irgendwie erstaunlich.
quelle
last-child
ist ein Modifikator fürli
, und nachdem Sie alleli
Elemente ausgewählt haben , die die letzten untergeordneten Elemente sind, wählen Sie vor und nach jedem Element ein neues Element aus (und erstellen es implizit).Nur um zu erwähnen, in CSS 3
sollte so verwendet werden
Von https://developer.mozilla.org/de/docs/Web/CSS/::after :
So sollte es sein:
quelle
::
CSS3-Syntax unterstützt , unterstützt auch nur die:
Syntax, aber IE 8 unterstützt nur den Einzelpunkt. Daher wird empfohlen, für die beste Browserunterstützung nur den Einzelpunkt zu verwenden.::
ist das neuere Format, das eingerückt wird, um Pseudoinhalte von Pseudoselektoren zu unterscheiden. Wenn Sie keine IE 8-Unterstützung benötigen, können Sie den Doppelpunkt verwenden. Aus diesem ArtikelHinzufügen einer weiteren Antwort auf diese Frage, da ich genau das brauchte, wonach @derek gefragt hatte, und bereits ein Stück weiter gekommen war, bevor ich die Antworten hier sah. Insbesondere brauchte ich CSS, das auch den Fall mit genau zwei Listenelementen berücksichtigen konnte , bei denen das Komma NICHT erwünscht ist. Als Beispiel würden einige Autoren-Bylines, die ich produzieren wollte, wie folgt aussehen:
Ein Autor:
By Adam Smith.
Zwei Autoren:
By Adam Smith and Jane Doe.
Drei Autoren:
By Adam Smith, Jane Doe, and Frank Underwood.
Die hier bereits angegebenen Lösungen funktionieren für einen Autor und für drei oder mehr Autoren, berücksichtigen jedoch nicht den Fall mit zwei Autoren, bei dem der "Oxford Comma" -Stil (in einigen Teilen auch als "Harvard Comma" -Stil bekannt) nicht gilt - dh vor der Konjunktion sollte kein Komma stehen.
Nach einem Bastelnachmittag hatte ich mir Folgendes ausgedacht:
Es zeigt die Bylines an, wie ich sie oben habe.
Am Ende musste ich auch Leerzeichen zwischen
li
Elementen entfernen , um einen Ärger zu umgehen: Die Inline-Block-Eigenschaft würde sonst vor jedem Komma ein Leerzeichen lassen. Es gibt wahrscheinlich einen alternativen anständigen Hack dafür, aber das ist nicht das Thema dieser Frage, also überlasse ich das jemand anderem, um es zu beantworten.Geige hier: http://jsfiddle.net/5REP2/
quelle
Um so etwas wie Eins, Zwei und Drei zu haben , sollten Sie einen weiteren CSS-Stil hinzufügen
Dies würde das Komma aus dem vorletzten Element entfernen.
Vollständiger Code
quelle
Ich verwende dieselbe Technik in einer Medienabfrage, die eine Aufzählungsliste auf kleineren Geräten effektiv in eine Inline-Liste umwandelt, da sie Platz sparen.
Also der Wechsel von:
zu:
Listenpunkt 1; Listenpunkt 2; Listenpunkt 3.
quelle