有没有办法为"除第一个/最后一个之外的所有元素"指定CSS简写?

jul*_*n_c 47 css css-selectors css3

通常,除了第一个(或最后一个)之外,需要为所有元素指定CSS样式是很自然的.例如,在设置段落样式时,您希望为除最后一个元素之外的每个元素添加底部边距(或者类似地,除了第一个元素之外的每个元素的顶部边距).

有没有办法做到这一点:

  • 比定义更简洁p {...}然后p:first-child {...}呢?
  • 比直觉和直观更直接p:nth-child(-n+1)

如果没有,你知道有任何添加它的尝试吗?

Bol*_*ock 91

对于p除第一个孩子之外的所有元素,请使用其中一个(第二个更好地支持):

p:not(:first-child)
p:first-child ~ p
Run Code Online (Sandbox Code Playgroud)

p除了最后一个孩子之外的所有元素:

p:not(:last-child)
Run Code Online (Sandbox Code Playgroud)

对于p除第一个和最后一个孩子之外的所有元素:

p:not(:first-child):not(:last-child)
Run Code Online (Sandbox Code Playgroud)

像往常一样,CSS3的:not():last-child不支持IE9之前+和其他浏览器比较新的版本.除非您使用JavaScript或其他方式向第一个和最后一个孩子添加课程,否则您不会在浏览器支持(IE8及更早版本)方面达到很远.

请记住,垂直边距在流入段落和它们的祖先之间会崩溃,因此除非您想要将这些段落的容器元素的边距归零,否则您不需要将第一个和第一个边距的边距清零.最后的p要素.这是一个小提琴来说明.