H2 の後に UL が続くたびに、これら 2 つのプロパティを配置する必要があるため、h2 と ul を使用してセレクターを実行したいと考えました。
@Spudley と @Coop で述べられているように、別の要素が後に続く要素を選択することはできません (li、td、または th の一連のまれなケースを除きます:nth-last-child()
が、それはよりトリックです)。
純粋な CSS でできる最も近いことは、h2 の後に (別の) 要素が続くかどうか、つまり、pseudoだけではないかどうかをテストすることです。:only-child
MDNから:
:only-child
CSS 疑似クラスは、親の唯一の子である要素を表します。:first-child:last-child
これはまたはと同じですが、:nth-child(1):nth-last-child(1)
特異性は低くなります。
サポートは IE9+ であるため、IE7 および IE8 でもこの要素のスタイルを設定する場合 (または、p や h3 ではなく ul が続く正確なケースでは...)、JavaScript が必要になるか、サーバー側のクラスを追加する必要があります。このクラスのスタイルを設定します。
.ui-content > h2:not(:only-child) {
margin-top: 30px;
margin-bottom: -30px;
}
編集:
H2 が:first-child
その親の最後から 2 番目の子であるかどうかをテストすることもできます。そのため、その後に何らかの要素が続く場合はスタイルが設定されますが、この 2 番目の要素に他の兄弟 (3 番目、4 番目など) がある場合はスタイルが設定されません。 )
.ui-content > h2:first-child:nth-last-of-type(2) {
margin-top: 30px;
margin-bottom: -30px;
}
最も単純なコードは ;)
<div class="ui-content">
<h2 class="followed-by-list">Text</h2>
<ul class="ui-listview">
List Items
</ul>
</div>
.followed-by-list {
margin-top: 30px;
margin-bottom: -30px;
}
プロジェクトの完全なオーバーホールを意味するその他のトリック (たとえば、次のプロジェクト;)): 単一のmargin-bottom
要素をコンテンツ要素に設定しないでください (h2、ul、p などを意味します。div および以下の「ブロック」では問題ありません)。常に margin-top を次のように設定します。
- 要素 (一般的な場合) 例: p
- 必要に応じて、次のような要素が
elt1 + p
特定のマージントップ、elt2 + p
別のマージンなどを持ちます