Am Ende jedes Beitragstyps in meinem Tumblr-Thema habe ich folgenden Code:
<p class="permalink">
<a href="{Permalink}">{NoteCountWithLabel}</a>
{block:HasTags} # filed under:
{block:Tags}
<a href="{TagURL}">{Tag}</a>
{/block:Tags}
{/block:HasTags}
</p>
(Ich weiß, dass das
Bit nicht gerade eine Klassenhandlung ist. Es war meine vier Sekunden lange Problemumgehung, und es ist nicht der Zweck dieser Frage, also nimm es mit!)
Bei einem Beitrag mit mehreren Tags ergibt sich Folgendes:
Wenn ich nur hinzufügen , ein Komma nach {Tag}
, so dass es <a href="{TagURL}">{Tag},</a>
, erhalte ich:
Das letzte Tag hat ein Fremdkomma, und bei Posts mit nur einem Tag wird auch bei dieser Methode das zusätzliche Komma angezeigt.
Wie füge ich genau die richtige Anzahl von Kommas hinzu?
Update :
Jeremys Antwort tat, was ich wollte. Um jedoch zu versuchen, "standardkonform" zu werden (obwohl ich nicht weiß, warum jemand, der IE8 verwendet, meinen Tumblr lesen würde), habe ich versucht, den Vorschlag von w3d umzusetzen. So sieht das CSS jetzt aus:
a.tag:before {
content:", ";
}
a.tag:first-child:before {
content:"";
}
Das Ergebnis ist jetzt:
( nb: Der Zeilenumbruch hat nichts damit zu tun - das habe ich absichtlich hinzugefügt. )
So. Was schief gelaufen ist?
quelle
,
ist wahrscheinlich der Leerraum, der nach dem</a>
in Ihrem Markup / Thema auftritt . Sie könnten versuchen, dies zu entfernen. Das erste Komma ist noch vorhanden? Versuchen Sie, zu wechselncontent:"";
,content:"%";
um zu sehen, ob%
Shows? (Obwohl ich aus Ihrem Kommentar zu meiner Antwort sehe, dass dies möglicherweise keine Auswirkungen hatAntworten:
Ich habe eine andere Idee.
Dadurch wird nach jedem Tag eine Spanne mit der Klasse "Tagtail" hinzugefügt.
Fügen Sie dann dieses CSS hinzu:
Dadurch wird jeder Tag- Anker ausgewählt, der nach einer Tagtail- Spanne kommt (also jeder außer dem ersten). Auf diese Weise vermeiden wir die Verwendung der Selektoren für das erste oder das letzte Kind .
AKTUALISIEREN:
Wenn Sie sicherstellen möchten, dass die Kommas getrennt vom Anker stehen, können Sie wahrscheinlich auch Folgendes tun:
und dann stylen Sie es wie:
Dies muss jedoch möglicherweise angepasst werden, da sich die Browser hinsichtlich der überschreibenden Regeln unterscheiden.
quelle
{block:Tags}<span class="taghead">, </span><a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}
und dann wie folgt gestalten :span.taghead { display:none; } a.tag + span.taghead { display:inline; }
. Dies muss jedoch möglicherweise angepasst werden, da sich die Browser hinsichtlich der überschreibenden Regeln unterscheiden.tagtail
Methode hat ein Leerzeichen vor dem Komma gerendert, aber dieses kleinetaghead
bisschen macht mich jetzt sehr glücklich. Erwägen Sie, Ihren Kommentar wieder in die Antwort aufzunehmen?Probieren Sie einige CSS-Tricks aus (damit es in IE 8 funktioniert, müssen Sie oben im Dokument ein <! DOCTYPE> angeben).
Fügen Sie dann das folgende CSS hinzu:
Es verwendet den Pseudo-Selektor : after und die wenig genutzte Content- Eigenschaft, um das Komma nachträglich hinzuzufügen. Die zweite Regel überschreibt die Inhaltseigenschaft für das letzte Tag in der Sequenz.
quelle
last-child
auch im standardkonformen Modus (dh mit einem DOCTYPE) nicht. Sie müssen verwendenfirst-child:before
, um IE8 (und IE7) zu unterstützen.Nach der Antwort von @ Jeremy ... Um IE8 (und IE7) zu unterstützen, müssen Sie die Pseudoklasse
first-child
anstelle von verwendenlast-child
. IE8 wirdlast-child
auch im standardkonformen Modus (dh mit einem DOCTYPE) nicht unterstützt.BEARBEITEN: Eine kleine Einschränkung bei diesem Ansatz ist jedoch, dass Sie wahrscheinlich alle zusätzlichen Leerzeichen entfernen müssen, die nach dem Schließen
</a>
in Ihrem Markup / Thema erscheinen.BEARBEITEN: Screenshot der Ausgabe von fiddle in Safari 5.0 unter OS X:
quelle
a.tag:before { content:", ";}
unda.tag:first-child:before { content:"# tagged: ";}
, aber es führt zu einer Reihe von Tags, die nur sagen, Mareen Fischinger , New York City , Times Square
. Hm. Dieser Kommentar ist verwirrend. Ich werde die Frage aktualisieren.Aufbauend auf dem
:before
Vorschlag in früheren Antworten. Wenn Sie mit einer Liste von Tags arbeiten, ist es durchaus möglich, dass Sie sie in eine Liste aufnehmen. Wenn Sie jedesli
Tag mit:before
einem Tag innerhalb desli
Tags anstelle eines Tags verwenden, ist jedes Tag das erste Kind desli
Tags, jedoch ist nur einli
Tag das erste Kind des Tagsul
oderol
! Ich verwende eine Beschreibungsliste, da ich "Tags" in dasd
t-Tag einfügen wollte, damit dies auch für dasd
d-Tag gilt.Die Verwendung einer Beschreibungsliste hat jedoch eine zusätzliche Komplexität. Das erste
dd
Tag ist niemals das erste untergeordnete Element desdl
Tags, sondern dasdt
Tag. Sie müssen es also verwendennth-child(2)
, um es als Ziel festzulegen. Der Nachteil der Verwendungnth-child(2)
ist, dass es wiederum nicht IE 8-kompatibel ist, sodass das Problem erneut auftritt.Hier ist meine Lösung.
Aus früheren Antworten geht auch hervor, dass die Verwendung eines Leerzeichens in content (
content: ", ";
) funktioniert. Funktioniert es? Ich kann es nicht zum Laufen bringen, aber "\ 00a0" wird es tun.quelle