我们来看一个例子:
浏览器效果图:
这时会发现父元素会自动调整自身的大小来包含子元素。
如果包含元素定义了高度和宽度则他不会随子元素的大小而自动调整自身显示区域来适应子元素的显示。注意,在IE6及更低版本浏览器中包含框仍然能够自动调整自身大小来适应子元素的显示大小,不过在IE7版本中微软纠正了这个不符合标准的显示方法。如下
示例:
浏览器效果图:
默认状态下溢出不隐藏,我们可以添加 样式 overflow:hidden隐藏多余的部分或overflow: scroll多余部分显示滚动条。
如果把浮动元素嵌入到流动元素之内,则父元素不能够自适应子元素的高度,
如下示例:
浏览器效果图:
在上图中可以看到包含元素div并,没用显示。原因就是包含元素没有适应子元素的高度,而是根据自身定义的属性以独立的形式显示(父元素没有被撑开,仅收缩成一条直线显示)。所以,在应用混合嵌套式,要预测到浮动与流动混合布局时会出现的各种怪现象,并积极做好兼容处理。
解决方法:可以在包含元素内的最后一行添加一个清除元素,强制撑开包含元素,使其包含浮动元素。
示例如下:
浏览器效果图:
本文章参考书籍:HTML5+CSS3+JavaScript从入门到精通(标准版)未来科技 编著
嵌套块元素外边距合并导致的塌陷(3种处理方法)
一、现象解释
指对于嵌套关系的块元素,若父子双方均有外边距则父元素会塌陷较大的外边距(通俗解释:就是父子均按照最大的外边距进行移动)
tips:谁大塌陷多少
eg:
<style>
.father{
width:500px
height:500px
background-color:rgb(15,213,240)
margin-top:100px
}
.son{
width:300px
height:300px
background-color:rgb(14,71,226)
margin-top:50px
}
</style>
<body>
<divclass="father">
<divclass="son">
</div>
</div>
</body>
二、解决方案
1.加一个透明的边框
即:加一个border: 1px solid transparent
<style>
.father{
width:500px
height:500px
background-color:rgb(15,213,240)
margin-top:100px
border:1pxsolidtransparent
}
.son{
width:300px
height:300px
background-color:rgb(14,71,226)
margin-top:50px
}
</style>
<body>
<divclass="father">
<divclass="son">
</div>
</div>
</body>
2.给父元素加一个内边距
即:padding:1px
<style>
.father{
width:500px
height:500px
background-color:rgb(15,213,240)
margin-top:100px
padding:1px
}
.son{
width:300px
height:300px
background-color:rgb(14,71,226)
margin-top:50px
}
</style>
<body>
<divclass="father">
<divclass="son">
</div>
</div>
</body>
3.给父元素加一个overflow:hidden
4.其他
之前遇到过 fixed 布局嵌套的一些场景, fixed 布局是针对 body 定位的,但是在某些特殊情况下,子级的 fixed 会受到父级 fixed 的影响,除了需要 z-index 来区分层级,还要注意 transform 的使用(貌似好多地方 transform 都会引发问题)
一般的场景是一个遮罩加一个弹框
效果是这样的
这个时候在内部的 children 再使用 fixed 布局时,就会被父级的 fixed 元素限制住
1、父级不使用 tansform
2、不进行嵌套