CSSを使用してXHTMLの順序付けられていないリストのスタイルを設定し、インラインで表示され、リストアイテムがコンマで区切られるようにする方法を探しています。
たとえば、次のリストはApple, orange, banana
としてレンダリングする必要があります(リストの最後にコンマがないことに注意してください)。
<ul id="taglist">
<li>Apple</li>
<li>orange</li>
<li>banana</li>
</ul>
現在、このリストをスタイル設定するために次のCSSを使用しています。これはほぼ希望どおりですが、リストをApple, orange, banana,
としてレンダリングします(バナナの後のコンマに注意してください)。
#taglist {
display: inline;
list-style: none;
}
#taglist li {
display: inline;
}
#taglist li:after {
content: ", ";
}
純粋なCSSでこの問題を解決する方法はありますか?
末尾のコンマを削除するには、 :last-child
擬似クラス、次のように:
#taglist li:last-child:after {
content: "";
}
置換oneルール
#taglist li:after {
content: ", ";
}
just別のもの
#taglist li + li:before {
content: ", ";
}
長所:
疑似セレクターlast-child
とnot
を一度に使用できるCSS3では簡単です。
ul#taglist li:not(:last-child):after {
content: ", ";
}
ここで結果を確認してください https://jsfiddle.net/vpd4bnq1/
ブラウザの実装に依存しますが、これは機能するはずです。 first-child
に依存していますが、これは使用を制限する可能性がありますが、本質的にはコンマスペース", "
を後ではなくリスト項目の前に置きます。 padding
/margin
sがこれにどのように影響するかはわかりませんが、 `display:inline;を使用するとマージンとパディングがゼロに設定されていれば、大丈夫です。
#taglist li:before {content: ", ";}
#taglist first-child {content: ""; } /* empty string */
編集済み:Jakobのコメントで提供された修正に対応するため。
次の作品(デモページはこちら: http://davidrhysthomas.co.uk/so/liststyles.html :
#taglist {width: 50%;
margin: 1em auto;
padding: 0;
}
li {display: inline;
margin: 0;
padding: 0;
}
li:before {content: ", ";
}
#taglist li:first-child:before
{content: "";
}
コンマは奇妙なことに中間のどこかに浮かんでいるが、正直なところ、私はとにかく受け入れられた答えを好む。しかし、ちょうどそうです、私は恐ろしく壊れた答えを横に置いていませんでした、私はそれを修正するべきだと思いました。
ありがとう、ヤコブ。
これは、 A List Apart の人が記事「 Taming Lists 」で推奨する方法です。
#taglist ul li:after {
content: ",";
}
#taglist ul li.last:after {
content: "";
}
これには、リストの最後の項目に「last」のclass
属性値のタグを付ける必要があります。
<ul id="taglist">
<li>Apple</li>
<li>orange</li>
<li class="last">banana</li>
</ul>
クロスブラウザ互換性のある純粋なCSS方法はありません(Microsoftのおかげです)。サーバー側のロジックでそれを行うことをお勧めします。
おそらく、最後のliでlast
クラスを使用し、最後のliを除くすべてのlisで背景画像を使用することで親しくなりますが、IEで:last-childおよびcontent:を実行することはできません。