空块元素
2023年02月27日
空的块级元素: 当一个块元素上边界margin-top
直接贴到元素下边界margin-bottom
时也会发生边界折叠。这种情况会发生在一个块元素完全没有设定边框border
、内边距padding
、高度height
、最小高度min-height
、最大高度max-height
、内容设定为 inline
或是加上clear-fix
的时候。
一、形成
实时编辑器
function Test(props) { const sibling1 = { width: "200px", height: "200px", marginBottom: "60px", backgroundColor: "red", } const sibling2 = { marginTop: "20px", marginBottom: "20px" } const sibling3 = { width: "200px", height: "200px", marginTop: "60px", backgroundColor: "blue", } return ( <div> <div style={ sibling1 }></div> <div style={ sibling2 }></div> <div style={ sibling3 }></div> </div> ); }
结果
Loading...
如上所示: sibling2
为空元素, 那么导致sibling1
与sibling3
发生了边距重叠
二、解决
3.1 空元素添加border
解决思路: 为空元素添加border
只是解决了sibling1
与sibling3
的边距重叠, sibling1
与sibling2
、sibling2
与sibling3
还是会发生边距重叠的。
实时编辑器
function Test(props) { const sibling1 = { width: "200px", height: "200px", marginBottom: "60px", backgroundColor: "red", } const sibling2 = { marginTop: "20px", marginBottom: "20px", border: "1px solid transparent" } const sibling3 = { width: "200px", height: "200px", marginTop: "60px", backgroundColor: "blue", } return ( <div> <div style={ sibling1 }></div> <div style={ sibling2 }></div> <div style={ sibling3 }></div> </div> ); }
结果
Loading...
3.2 空元素添加height
解决思路: 为空元素添加height
只是解决了sibling1
与sibling3
的边距重叠, sibling1
与sibling2
、sibling2
与sibling3
还是会发生边距重叠的。
实时编辑器
function Test(props) { const sibling1 = { width: "200px", height: "200px", marginBottom: "60px", backgroundColor: "red", } const sibling2 = { marginTop: "20px", height: "1px", marginBottom: "20px" } const sibling3 = { width: "200px", height: "200px", marginTop: "60px", backgroundColor: "blue", } return ( <div> <div style={ sibling1 }></div> <div style={ sibling2 }></div> <div style={ sibling3 }></div> </div> ); }
结果
Loading...
3.3 空元素添加padding
解决思路: 为空元素添加padding
只是解决了sibling1
与sibling3
的边距重叠, sibling1
与sibling2
、sibling2
与sibling3
还是会发生边距重叠的。
实时编辑器
function Test(props) { const sibling1 = { width: "200px", height: "200px", marginBottom: "60px", backgroundColor: "red", } const sibling2 = { marginTop: "20px", marginBottom: "20px", padding: "1px" } const sibling3 = { width: "200px", height: "200px", marginTop: "60px", backgroundColor: "blue", } return ( <div> <div style={ sibling1 }></div> <div style={ sibling2 }></div> <div style={ sibling3 }></div> </div> ); }
结果
Loading...
3.4 空元素添加overflow: hidden
实时编辑器
function Test(props) { const sibling1 = { width: "200px", height: "200px", marginBottom: "60px", backgroundColor: "red", } const sibling2 = { marginTop: "20px", marginBottom: "20px", overflow: "hidden" } const sibling3 = { width: "200px", height: "200px", marginTop: "60px", backgroundColor: "blue", } return ( <div> <div style={ sibling1 }></div> <div style={ sibling2 }></div> <div style={ sibling3 }></div> </div> ); }
结果
Loading...
3.5 空元素添加display:inline-block
解决思路: 为空元素添加inline-block
完全解决了sibling1
、sibling2
、sibling3
之间的边距重叠问题。
实时编辑器
function Test(props) { const sibling1 = { width: "200px", height: "200px", marginBottom: "60px", backgroundColor: "red", } const sibling2 = { display: "inline-block", marginTop: "20px", marginBottom: "20px" } const sibling3 = { width: "200px", height: "200px", marginTop: "60px", backgroundColor: "blue", } return ( <div> <div style={ sibling1 }></div> <div style={ sibling2 }></div> <div style={ sibling3 }></div> </div> ); }
结果
Loading...