我正在寻找一种方法来使用CSS来设置div
中前两个标题之间的所有内容。 E.g:
<div id="content">
<h1>First</h1>
<p>Big.</p>
<p>Big.</p>
<ul>
<li>Big.</li>
<li>Big.</li>
</ul>
<h2>Second</h2>
<p>Normal.</p>
<p>Normal.</p>
<p>...</p>
<h2>Third</h2>
<p>Normal.</p>
<p>Normal.</p>
<p>...</p>
</div>
我无法更改HTML,因此无法更改将更大的东西包裹在另一个<div>
或类似的东西中。到目前为止,我能想出的最好的方法是列举第一个<h1>
之后元素的可能性(对于一些元素)并使其更大,例如:
#content h1:first-child + p,
#content h1:first-child + p + p,
#content h1:first-child + p + ul,
#content h1:first-child + p + p + ul,
...
{ font-size: larger; }
但这似乎比它可能需要的更乏味和脆弱。什么是更好的方式?
答案 0 :(得分:2)
On Chromium(Ubuntu 11.04),一般的兄弟选择器似乎达到了你的目标:
h1 ~ * {
font-size: 2em;
}
h2,
h2 ~ * {
font-size: 1em;
}
当然,这确实仍然需要了解底层结构,但至少不如你在问题中展示的相邻兄弟选择器那么多。
正如@BoltClock所述,在评论中,避免*
选择器(出于性能原因)并使用:not()
选择器来识别兄弟姐妹可能更明智:
h1 ~ :not(h2) {
font-size: 2em;
}
h2 ~ :not(h2) {
font-size: 1em;
}
参考文献:
答案 1 :(得分:0)
在没有看到其余部分的情况下,我的假设是你需要超级具体(正如你在问题中写的那样)。否则,你冒着这些规则出现在其他地方的风险,这是不需要的。