overflow:hidden不会隐藏所有子元素
overflow:hidden不会被隐藏的情况
拥有overflow:hidden样式的块元素内部的元素溢出有时候不会被隐藏。当同时满足以下条件:
拥有overflow:hidden样式的块元素不具有position:relative和position:absolute样式;
内部溢出的元素是通过position:absolute绝对定位,并且该定位元素的包含块是设置overflow:hidden元素的父级元素。
CSS2.1对overflow的描述
可以参考CSS2.1规范对overflow的描述:
This property specifies whether content of a block container element is clipped when it overflows the element’s box. It affects the clipping of all of the element’s content except any descendant elements (and their respective content and descendants) whose containing block is the viewport or an ancestor of the element。
大概意思是:overflow属性用于规定,当一个块元素容器的内容溢出元素的盒模型边界时是否对其进行剪裁。overflow属性影响被应用元素的所有内容的剪裁。但如果后代元素的包含块是整个视区(通常指浏览器内容可视区域,可以理解为body元素)或者是该容器(定义了overflow的元素)的父级元素时,则不受影响。
也就是说会被overflow:hidden隐藏的情况是:后代元素是绝对定位,但包含块是该容器(定义了overflow的元素);或者后代元素是非绝对定位元素。
overflow:hidden不会被隐藏的案例
如下代码所示,第一个盒子和第二个盒子都是绝对定位。但是第一个盒子的包含块是设置overflow:hidden元素的子元素,第二个盒子的包含块是视口。因此第一个盒子溢出隐藏,第二个盒子溢出可见。
<style>
.over-hidden{overflow:hidden; height:30px; font-size:14px; width:100px; border:2px dotted #ddd;}
.outer{position:relative}
.inner1{position:absolute; top:0; background:yellow;}
.inner2{position:absolute; top:70px; background:pink;}
</style>
<div class='over-hidden'>
<div class='outer'>
<div class='inner1'>这是第一个盒子。这是第一个盒子</div>
</div>
<div class='inner2'>这是第二个盒子。这是第二个盒子</div>
</div>
效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2020-07-03 JS判断时间几天前,几小时,几分,几秒前