无论内容如何,我都想创建一个四边间距一致的盒子。
不幸的是,元素有边距,当给盒子填充时会导致问题。这是意料之中的,因为元素的边距不会在填充上“流出”到盒子外面。演示位于http://jsfiddle.net/cZf7E/1/
到目前为止,我对盒子里的任何东西都有特殊的样式规则,它位于顶部(with margin-top: 0
)和底部(with margin-bottom: 0
)。对于顶部来说还不错,但在底部有很多潜在的风格标签。
有没有办法做到这一点,这不是那么 hacky?
无论内容如何,我都想创建一个四边间距一致的盒子。
不幸的是,元素有边距,当给盒子填充时会导致问题。这是意料之中的,因为元素的边距不会在填充上“流出”到盒子外面。演示位于http://jsfiddle.net/cZf7E/1/
到目前为止,我对盒子里的任何东西都有特殊的样式规则,它位于顶部(with margin-top: 0
)和底部(with margin-bottom: 0
)。对于顶部来说还不错,但在底部有很多潜在的风格标签。
有没有办法做到这一点,这不是那么 hacky?
怎么样
aside :first-child {
margin-top: 0;
}
aside :last-child {
margin-bottom: 0;
}
第一个/最后一个元素可以是任何类型的元素(h1
, h2
, ..., p
, div
, span
)
aside
请注意,和first-child
/之间有一个空格last-child
。没有它,样式将适用于 first/last aside
。
如果将有更多级别aside
并且不希望进一步向下传播,则最好使用
aside > :first-child {
margin-top: 0;
}
aside > :last-child {
margin-bottom: 0;
}
为了只选择aside
.
传播与无传播演示(当然,margin
不适用于内联元素,例如span
,em
或strong
- 它只是为了展示传播的工作原理。)
支持:正如 Ben Dyer 所指出的,last-child
它是一个CSS3 伪类。IE8 或更早版本不支持它。此外,first-child
在 IE8 和 7 中存在问题。