CSSを使用してリストの最後のli
のCSS属性を変更する方法があるかどうか疑問に思っています。 :last-child
を使用することを検討しましたが、これは本当にバグが多いようであり、私のために機能させることはできません。必要に応じてJavaScriptを使用してこれを行いますが、CSSで解決策を考えられる人がいるかどうかを知りたいです。
:last-child
は実際にHTMLを変更せずにそれを行う唯一の方法です-しかし、それができると仮定すると、主なオプションはclass="last-item"
を与え、それから:
li.last-item { /* ... */ }
明らかに、選択した動的ページ生成言語でこれを自動化できます。また、W3C DOMには lastChild
JavaScriptプロパティがあります。
Prototype で必要なことを行う例を次に示します。
$$("ul").each(function(x) { $(x.lastChild).addClassName("last-item"); });
またはさらに簡単に:
$$("ul li:last-child").each(function(x) { x.addClassName("last-item"); });
jQuery では、さらにコンパクトに記述できます。
$("ul li:last-child").addClass("last-item");
また、このshouldは実際のlast-child
CSSセレクターを使用しなくても動作することに注意してください-むしろ、JavaScript実装が使用されるため、バグが少なく信頼性が高いはずですブラウザ。
私は純粋なCSSでこれを行いました(おそらく私が未来から来たためです-他の誰よりも3年遅れです:P)
リストがあるとします:
<ul id="nav">
<li><span>Category 1</span></li>
<li><span>Category 2</span></li>
<li><span>Category 3</span></li>
</ul>
次に、最後のアイテムのテキストを簡単に赤にすることができます:
ul#nav li:last-child span {
color: Red;
}
jQuery を使用して、そのような方法で実行できます
$("li:last-child").addClass("someClass");
IE7 +およびその他のブラウザーの代替手段の1つは、代わりに:first-child
を使用し、スタイルを反転することです。
たとえば、各li
にマージンを設定している場合:
ul li {
margin-bottom: 1em;
}
ul li:last-child {
margin-bottom: 0;
}
これでこれを置き換えることができます:
ul li {
margin-top: 1em;
}
ul li:first-child {
margin-top: 0;
}
これは、ボーダーのような他のいくつかのケースでうまく機能します。
sitepoint 、:first-child
buggyによると、一部のルート要素(doctypeまたはhtml)を選択する範囲のみであり、他の要素が挿入されてもスタイルは変更されません。
2015 Answer: CSS last-of-type では、最後のアイテムのスタイルを設定できます。
ul li:last-of-type { color: red; }
私は通常、htcファイル(例:last-child.htc)を作成してこれを行います。
<attach event="ondocumentready" handler="initializeBehaviours" />
<script type="text/javascript">
function initializeBehaviours() {
this.lastChild.className += ' last-child';
}
</script>
そして、それを私のIE条件付きCSSファイルから呼び出します:
ul { behavior: url("/javascripts/htc/last-child.htc"); }
私のメインのcssファイルでは次のようになりました:
ul li:last-child,
ul li.last-child {
/* some code */
}
.last-childクラスを定義せずに既存のcssマークアップを使用する別のソリューション(ただし低速)は、Dean Edwards ie7.js libraryです。
$( 'li')。last()。addClass( 'someClass');
複数ある場合
:last-childはCSS3でIEのサポートはありませんが、:first-childはCSS2です。jqueryを使用して以下を実装するのが安全な方法だと思います
$('li').last().addClass('someClass');
探しているリストに3つのliがあることがわかっている場合、たとえば、これを行うことができます。
li + li + li { /* Selects third to last li */
}
IE6では、式を使用できます。
li {
color: expression(this.previousSibling ? 'red' : 'green'); /* 'green' if last child */
}
ただし、:last-child
セレクターのサポートが改善されるまで、特殊なクラスまたはJavascript(IE6式ではない)を使用することをお勧めします。