很多时候,是很自然的需要指定一个CSS样式,除了第一(或最后)的所有元素。 例如,造型段落时,你想一个底边距添加到每个元素除了最后一个(或者类似地,上边距的每个元素除了第一个)。
有没有办法做到这一点这就是:
- 不是定义更简洁
p {...}
然后p:first-child {...}
? - 更直接和直观的比
p:nth-child(-n+1)
如果没有,你知道在加入任何企图?
很多时候,是很自然的需要指定一个CSS样式,除了第一(或最后)的所有元素。 例如,造型段落时,你想一个底边距添加到每个元素除了最后一个(或者类似地,上边距的每个元素除了第一个)。
有没有办法做到这一点这就是:
p {...}
然后p:first-child {...}
? p:nth-child(-n+1)
如果没有,你知道在加入任何企图?
对于所有p
除第一子元素,使用其中的任一个(第二个是较好的支持):
p:not(:first-child)
p:first-child ~ p
对于所有p
除了最后一个子元素:
p:not(:last-child)
对于所有p
除了第一个和最后一个子元素:
p:not(:first-child):not(:last-child)
像往常一样,CSS3的:not()
和:last-child
,不支持IE9之前+和其他浏览器比较新的版本。 你不会在(IE8及以上)的浏览器支持条款,除非你添加类到您的第一个和最后的孩子,使用JavaScript或以其他方式很远的到达。
请记住, 在流段和他们的祖先(S)之间的垂直边距崩溃 ,所以除非你想零出了这些段落中的容器元素的边缘,以及,你应该不需要零出第一的边缘,最后p
元件具体。 这里有一个小提琴来说明。
嗯,你可以这样做:
p:not(:first-child) {...}
但只有最近的浏览器支持:not
伪类。
除此之外,没有。 你最好的选择是为所有的样式,然后覆盖其第一/最后。
如果不需要IE7-8支持,你可以使用:not()
CSS选择器 。
但是,如果你需要支持IE7 +,但仍可能在情况下,有一个小窍门,你可以使用,通常让你很远。 一个鲜为人知的事实是:first-child
的伪选择实际工作中的IE7 +(不是:last-child
虽然)作为是一些其他的CSS选择器 ,这使得这样的东西在一个水平浮动布局可能增加垂直空间。
想象一下这个网站:
<ul>
<li>Item #1</li>
<li>Item #2</li>
<li>Item #3</li>
<li>Item #4</li>
</ul>
这为一些CSS:
/* General reset */
ul, li { list-type: none; margin: 0; padding: 0; }
/* Make horizontal */
ul > li { float: left; }
所以,现在所有列表项是横向彼此相邻,现在我们希望两者之间的所有项目,但不能在左侧或右侧添加边距,我们可以在CSS中做到这一点:
/* General reset */
ul, li { list-type: none; margin: 0; padding: 0; }
/* Make horizontal */
ul > li { float: left; margin-left: 10px; }
ul > li:first-child { margin-left: 0; }
这通常涵盖的,我想唯一的,那么剩余的部分案件95%的“被遗忘的”选择覆盖另一个几个百分点 ,在那之后,你需要添加反正在后端的一些类通常是没有太大的瓶颈这页纸。
我会建议使用first-of-type
:
p:not(:first-of-type) { ... }
浏览器支持(caniuse)