Tumblrテーマでタグをカンマで区切るにはどうすればよいですか?


11

Tumblrテーマのすべての投稿タイプの最後に、次のコードがあります。

<p class="permalink">
   <a href="{Permalink}">{NoteCountWithLabel}</a>
   {block:HasTags} &nbsp;&nbsp; # filed under:
      {block:Tags}  
         <a href="{TagURL}">{Tag}</a>
      {/block:Tags}
   {/block:HasTags}
</p>

&nbsp;ビットがクラス行為ではないことはわかっています。これは私の4秒の回避策であり、この質問の目的ではないので、我慢してください!)

複数のタグがある投稿では、次の結果になります。

これはそれがどのように見えるかです

の後{Tag}にカンマを追加するだけで<a href="{TagURL}">{Tag},</a>、それを作成すると、次のようになります。

カンマが多すぎます

最後のタグには余分なカンマがあり、タグが1つだけの投稿でも、この方法では余分なカンマが表示されます。

適切な数のカンマを追加するにはどうすればよいですか?


更新

以下のジェレミーの答えは私が望んだことをしました。しかし、しようとする試みで空想が得る「標準準拠」(IE8を使用して、誰もが私のtumblrのを読んでいました、なぜ私にはわからないが)ことが、私はW3Dの提案を実装しようとしました。したがって、CSSは次のようになります。

a.tag:before {
  content:", ";
}
a.tag:first-child:before {
  content:"";
}

結果は次のとおりです。

更新されたスクリーンショット

nb:改行は無関係です-意図的に追加しました

そう。何が悪かったのか?


これは、実際に「標準準拠」の場合ではなく、IE8が標準準拠モードの場合にのみこのCSSをサポートするということです。残念ながら、Windows XPのすべてのユーザーはIE8に制限されます。IE9にアップグレードするにはVista +が必要だからです。
MrWhite、2011

@ w3d Hm。了解しました。ショルダはそれを「ファンシーを得る」に保った!:)
ヘアボート

申し訳ありませんが、ブラウザで問題なく動作しているため、ごちゃごちゃしているように感じます。タグの後およびの前の追加の空白,は、おそらく</a>マークアップ/テーマの後に発生する空白です。これを削除してみてください。最初のカンマはまだ残っていますか?に表示されるかどうかを確認content:"";するcontent:"%";だけに変更してみ%ますか?(私の回答に対するあなたのコメントから、これは効果がないかもしれませんが?!)
MrWhite

どのブラウザーでこれを試していますか?
MrWhite、2011

@ w3d、%は表示されません。OS X LionでChrome 13.0.782.220を実行しています。ここではジェレミーのソリューションに戻りますが、調整は続けます。それを台無しにする心配はありません-噛むのは楽しい問題です!
ヘアボート

回答:


4

別のアイデアがあります。

{block:Tags}<a class="tag" href="{TagURL}">{Tag}</a><span class="tagtail"></span>{/block:Tags}

これにより、すべてのタグの後に「tagtail」クラスのスパンが追加されます。

次に、このcssを追加します。

span.tagtail + a.tag:before {
   content:", ";
}

これにより、タグテールスパンの後に来るすべてのタグアンカーが選択されます(最初のものを除くすべてのアンカー)。これにより、first -childセレクターまたはlast-childセレクターを使用する必要がなくなります。


更新:

コンマがアンカーとは別にスタイル設定されていることを確認したい場合は、次のようにすることもできます。

{block:Tags}<span class="taghead">, </span><a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}

そしてそれを次のようにスタイルします:

span.taghead { display:none; }
a.tag + span.taghead { display:inline; }

ただし、ブラウザーによってルールのオーバーライドが異なるため、これを調整する必要がある場合があります。


+1 ...追加のマークアップについては残念ですが、私はそれが好きです!:)
MrWhite

IEがレイアウトをサポートしていないCSSと一致させるために、多くのデザインで余分な不要なマークアップを投げていることに気づきました。
ジェレミー

コンマがアンカーとは別にスタイル設定されていることを確認したい場合は、次のようにすることもできます:{block:Tags}<span class="taghead">, </span><a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}そして、次のようにスタイル設定しますspan.taghead { display:none; } a.tag + span.taghead { display:inline; }。ただし、ブラウザーによってルールのオーバーライドが異なるため、これを調整する必要がある場合があります。
ジェレミー

@ジェレミー、この最後のビットは完全に機能しています。このtagtail方法では、コンマの前にスペースをレンダリングしていましたが、このtagheadことで今はとても満足しています。回答にコメントを追加することを検討してください。
ヘアボート

完了しました。それはあなたのために働くうれしいです。
ジェレミー

4

いくつかのCSSトリックを試してください(IE 8で動作させるには、ドキュメントの上部に<!DOCTYPE>を指定する必要があります)。

<p class="permalink">
       <a href="{Permalink}">{NoteCountWithLabel}</a>
       {block:HasTags} &nbsp;&nbsp; # filed under:
          {block:Tags}  
             <a class="tag" href="{TagURL}">{Tag}</a>
          {/block:Tags}
       {/block:HasTags}
</p>

次に、次のCSSを追加します。

a.tag:after {
   content:",";
}

a.tag:last-child:after {
   content:"";
}

これは、疑似セレクター:afterおよびほとんど使用されないcontentプロパティを使用して、事実の後にコンマを追加します。2番目のルールは、シーケンスの最後のタグのコンテンツプロパティをオーバーライドします。


優秀な。大成功。ありがとう、ジェレミー!
ヘアボート

1
@Jeremy:IE8はlast-child、標準準拠モード(DOCTYPEを使用)でも、疑似クラスをサポートしません。first-child:beforeIE8(およびIE7)をサポートするには、を使用する必要があります。
MrWhite、2011

@ w3d:残念だ。愚かなIE。first-child:beforeセレクターがAbbyで適切に機能しない理由はわかりませんが、スパンを追加して+セレクターを使用する別のアイデアで別の回答を追加しました。
ジェレミー

3

@Jeremyの回答に続いて... IE8(およびIE7)をサポートするにはfirst-child、ではなく疑似クラスを使用する必要がありますlast-child。IE8はlast-child、標準準拠モード(つまり、DOCTYPEを使用)でもサポートしません。

a.tag:before {
   content:", ";    /* comma + space */
}

a.tag:first-child:before {
   content:"";
}

編集:ただし、このアプローチのわずかな注意点</a>は、マークアップ/テーマの終了後に表示される余分な空白をすべて削除する必要があることです。

      {block:Tags}<a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}

編集: OS X上のSafari 5.0 でのフィドルの出力のスクリーンショット:

OS X上のSafari 5.0でのフィドルの出力のスクリーンショット


私はa.tag:before { content:", ";}and を使用しa.tag:first-child:before { content:"# tagged: ";}ていますが、と言うだけのタグの行ができます, Mareen Fischinger , New York City , Times Square。うん このコメントは紛らわしいです。質問を更新します。
ヘアボート

0

:before以前の回答の提案に基づいて構築します。タグのリストを使用している場合は、タグをリストに配置する可能性があります。タグ内のa liタグで:beforeはなく、で各タグを使用する場合、li各タグはタグの最初の子になりますが、or タグの最初の子になるのは1 liつのliタグだけです!「タグ」をtタグに配置するため、説明リストを使用しています。これは、dタグにも同じことが当てはまります。uloldd

ただし、説明リストを使用すると複雑さが増します。最初のddタグがタグの最初の子になることはありませんdl。それはdtタグであるため、を使用nth-child(2)してターゲティングする必要があります。使用の欠点nth-child(2)は、やはりIE 8に準拠していないため、問題が再び発生することです。

これが私の解決策です。

{block:HasTags}
<div class="t">
<dl>
<dt>Tags</dt>
{block:Tags}
<dd><a href="{TagURL}" class="tag">{Tag}</a></dd>
{/block:Tags}
</dl>
</div>
{/block:HasTags}

また、以前の回答から、コンテンツ(content: ", ";)でスペースを使用しても機能することを示唆しています。動作しますか?動作しませんが、「\ 00a0」で動作します。

.t dl {
    margin: 0px;
    list-style-type: none;
}
.t dt {
    margin: 0px 5px 0px 0px;
    float: left;
}
.t dd {
    margin: 0px;
    float: left;
}

.t dd:before {
    padding: 0px 5px 0px 0px;
    content: ",\00a0";
    float: left;
}

.t dd:nth-child(2):before {
    padding: 0px 0px 0px 0px;
    content: "";
    float: left;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.