たとえば、一連の要素の4つおきに要素を選択することは可能ですか。
例:16個の<div>
要素があります。
div:nth-child(4),
div:nth-child(8),
div:nth-child(12),
div:nth-child(16)
これを行うより良い方法はありますか?
名前が示すとおり、:nth-child()
を使用すると、定数に加えてn
変数を使用して算術式を構築できます。加算(+
)、減算(-
)、および 係数乗算 (an
ここで、a
は、正数、負数、およびゼロを含む整数)を実行できます。
上記のセレクターリストを書き換える方法は次のとおりです。
div:nth-child(4n)
これらの算術式がどのように機能するかについての説明は、 この質問 、および spec に対する私の答えを参照してください。
この答えは、同じ親要素内のすべての子要素が同じ要素型div
であることを前提としていることに注意してください。 h1
やp
のような異なるタイプの他の要素がある場合は、div
要素だけを数えるために:nth-of-type()
の代わりに:nth-child()
を使う必要があります。
<body>
<h1></h1>
<div>1</div> <div>2</div>
<div>3</div> <div>4</div>
<h2></h2>
<div>5</div> <div>6</div>
<div>7</div> <div>8</div>
<h2></h2>
<div>9</div> <div>10</div>
<div>11</div> <div>12</div>
<h2></h2>
<div>13</div> <div>14</div>
<div>15</div> <div>16</div>
</body>
あなたが任意のセレクタにマッチするn番目の子を探している他のすべて(クラス、属性、またはこれらの任意の組み合わせ)のために、あなたは純粋なCSSセレクタでこれをすることができないでしょう。私の答えを参照してください この質問 。
ちなみに:nth-child()
に関しては4nと4n + 4の間に大きな違いはありません。 n
変数を使用すると、0から数え始めます。これは、各セレクタが一致するものです。
:nth-child(4n)
4(0) = 0
4(1) = 4
4(2) = 8
4(3) = 12
4(4) = 16
...
:nth-child(4n+4)
4(0) + 4 = 0 + 4 = 4
4(1) + 4 = 4 + 4 = 8
4(2) + 4 = 8 + 4 = 12
4(3) + 4 = 12 + 4 = 16
4(4) + 4 = 16 + 4 = 20
...
ご覧のとおり、両方のセレクターは上記と同じ要素に一致します。この場合、違いはありません。
div:nth-child(4n+4)
これを試してください
div:nth-child(4n+4)
nth-child
疑似クラスには正しい引数が必要です。
すべての引数に一致するように、引数はan + b
の形式にする必要があります。番目 bから始まる子.
a
とb
はどちらもオプションの整数で、どちらもゼロまたは負の値にすることができます。
a
がゼロの場合、すべてのaは存在しません "番目 child "句.a
が負の場合、マッチングはb
から逆方向に行われます。b
がゼロまたは負の場合、正のb
を使用して同等の式を書くことができます。 4n+0
は4n+4
と同じです。同様に4n-1
は4n+3
と同じです。例:
li:nth-child(4n) {
background: yellow;
}
<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>
li:nth-child(4n+1) {
background: yellow;
}
<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>
/* two selectors are required */
li:nth-child(4n+3),
li:nth-child(4n+4) {
background: yellow;
}
<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>
/* when a is negative then matching is done backwards */
li:nth-child(-n+4) {
background: yellow;
}
<ol>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ol>