关于溢出隐藏(overflow:hidden)失效的原因

这篇文章主要介绍了关于关于溢出隐藏(overflow:hidden)失效的原因,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

项目中常常有同学遇到这样的问题,现象是给元素设置了overflow:hidden,但超出容器的部分并没有被隐藏,难道是设置的hidden失效了吗?

其实看似不合理的现象背后都会有其合理的解释。

我们知道,overflow属性值有这几种:

visible:声明内容不会被剪裁。比如内容可能被渲染到容器外面。hidden:声明内容将被剪裁,并且也甭想使用滚动条来查看剪裁掉的内容。scroll:声明内容将被剪裁,但有可能出现滚动条来查看被剪裁掉的内容。滚动条出现的位置在inner border adge和outer padding adge之间。auto:声明决策将依赖于客户端,优先使用scroll。

W3C标准中指明:
通常一个盒子的内容是被限制在盒子边界之内的。但有时也会产生溢出,即部分或全部内容跑到盒子边界之外。溢出将在满足下列条件之一时出现:

1. 一个不换行的行元素宽度超出了容器盒子宽度。2. 一个宽度固定的块元素放在了比它窄的容器盒子内。3. 一个元素的高度超出了容器盒子的高度。4. 一个子孙元素,由负边距值引起的部分内容在盒子外部。5. text-indent属性引起的行内元素在盒子的左右边界外。6. 一个绝对定位的子孙元素,部分内容在盒子外。但超出的部分不是总会被剪裁。子孙元素的内容就不会被子孙元素和其包含块之间的祖先元素的overflow的设置所剪裁。

当溢出发生时,overflow属性约定了容器盒子是否剪裁掉超出其内边界的部分,并且决定是否出现滚动条来访问被剪裁掉的内容。它会影响到元素所有内容的剪裁,但有个例外情况,即上面第6条所提到的:元素的子孙元素的包含块(Containing blocks)是整个视窗(viewport)或是该元素的祖先元素,内容将不会被剪裁。包含块是什么呢?简单的说,就是可以决定一个元素位置和大小的块。通常一个元素的包含块由离它最近的块级祖先元素的内容边界决定。但当元素被设置成绝对定位时,包含块由最近的position不是static的祖先元素决定。

看起来有点绕,让我们来听个简单的故事吧。

html片段:

Mrs. Smith couldn’t get her husband to exercise. She asked Mrs. Jones what she should do. Jones replied, “Tape the remote control between his toes.”

style:

p.ocean{    position:relative;    background-color:blue;    width:120px;    height:120px;    }p.land{    width:100px;    height:100px;    background-color:red;    overflow:hidden;    }p.joke{    width:150px;    height:110px;    margin-top:30px;    margin-left:30px;    background-color:yellow;    }

上面的代码讲述的是这样一个故事:蓝色的海洋里有块红色的大地,红色大地内有个黄色的段子。由于段子样式的设置,它的部分内容超出了红色大地。为避免黄色段子污染到蓝色海洋,红色大地警惕的为自己设置了overflow:hidden;这样超出大地的黄色部分就被剪掉了,我们看到的将是这样一派和谐景象,如图1:

图1:和谐的星球

图1:和谐的星球

如果事物都是这样有理有序,天下可不就太平了。没多久,黄色段子觉得凭自己的显赫身份不该受红色大地的控制,于是绞尽脑汁将自己变改成了绝对定位,一下子就摆脱了大地的束缚,如图2:

p.joke{    position:absolute;    width:150px;    height:110px;    top:30px;    left:30px;    background-color:yellow;    }

图2:猖獗的段子

图2:猖獗的段子

为什么会这样呢?这便是创造了上面提到过的第6个条件。当黄色段子变成position:absolute时,它的包含块已由原来的红色大地的内容边界升级到了离它最近的position不是static的蓝色海洋了。而海洋此刻对此还一无所知呢,自身没有设置overflow:hidden属性,导致黄色段子本该被裁剪的部分全部可见,不仅污染到海洋,还影响到整个星球,情况万分火急啊。即使这时海洋设置上overflow:hidden,也只能将超出蓝色海洋的黄色部分剪裁,就像图3,海洋此时是手足无措啊。

图3:无辜的海洋

图3:无辜的海洋

俗语说的好,魔高一尺道高一丈,解铃还须系铃人。红色大地怎就甘心段子跑出去呢。怎么说大地终归是段子的祖先元素,怎么能甘心由着段子胡作非为呢。于是,大地历尽千辛,寻得秘籍,在自己的样式中添加position:relative属性,将段子的包含块又改成了大地来决定。这下段子就乖乖的被关起来了。星球看起来又回到了最初的状态。

p.ocean{    position:relative;    background-color:blue;    width:120px;    height:120px;    }p.land{    position:relative;    width:100px;    height:100px;    background-color:red;    overflow:hidden;    }p.joke{    position:absolute;    width:150px;    height:110px;    top:30px;    left:30px;    background-color:yellow;    }

所以说,hidden并没有失效,而是有可能我们遇到的情况恰好满足了第6个条件,使得元素的包含块发生了变化。上面的故事中,也提到了在遇到‘hidden’失效的情况时,可以根据需要来改变元素的包含块来达到正义的目的。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

如何解决ie7中overflow:auto无效的方法

关于IE中伪类hover的使用及BUG

如何使用css3做0.5px的细线

以上就是关于溢出隐藏(overflow:hidden)失效的原因的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1610659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 01:36:10
下一篇 2025年12月24日 01:36:24

相关推荐

  • css字体溢出怎么隐藏

    css中可以利用overflow属性来实现字体溢出隐藏效果,只需要给包裹字体的标签元素添加“overflow: hiddden;”样式即可。overflow属性用于控制内容溢出元素框时发生的事情,当值设置为“hidden”时溢出部分不可见。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日 好文分享
    000
  • css怎么实现多行文本溢出隐藏

    在css中,可使用overflow属性来实现多行文本溢出隐藏,只需要给文本元素添加“overflow: hidden;”样式即可。overflow属性规定当内容溢出元素框时发生的事情,当值设置为“hidden”时,会设置溢出部分不可见。 本教程操作环境:windows7系统、CSS3&&am…

    2025年12月24日
    000
  • 溢出隐藏:最全的利用css解决内容溢出问题的几种方案

    在p布局中,有的文字内容多了会超过溢出我们限制的高度,有的图片会撑破div,让网页错位变乱。内容溢出了容器,超出了容器所限定的宽度和高度应该怎么办呢?可以将文本溢出部分进行隐藏或者用省略号代替,那具体如何实现呢?本文就告诉你如何使用换行,省略号等方式来解决这些溢出的问题。 一、利用换行来解决溢出问题…

    2025年12月23日
    000
  • html如何设置溢出隐藏

    html设置溢出隐藏的方法:1、单行设置溢出隐藏,代码为【overflow: hidden】;2、多行设置溢出隐藏,代码为【display: -webkit-box】。 本教程操作环境:windows7系统、html5版,DELL G3电脑。 html设置溢出隐藏的方法: 单行: overflow:…

    2025年12月21日
    000
  • 为什么z-index会失效

    我们知道有时候在写代码的过程中会发现我写的z-index失效了,所以这次给大家带来为什么z-index会失效,使用为什么z-index的注意事项有哪些,下面就是实战案例,一起来看一下。 1、父标签 position属性为relative; 2、问题标签无position属性(不包括static); …

    好文分享 2025年12月21日
    000
  • div标签中的元素margin-top失效的解决方法

    这次给大家带来div标签中的元素margin-top失效的解决方法,解决div标签中的元素margin-top失效的方法的注意事项有哪些,下面就是实战案例,一起来看一下。 问题很奇葩。元素上级标签是div,已经设置了width和height等的属性,可是,在对元素使用margin进行调整的时候,无法…

    好文分享 2025年12月21日
    000
  • mysql隐形转换造成索引失效的事故总结

    隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给m    隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varc…

    2025年11月27日
    000
  • SSD 从高效存储走到失效边缘 你需知道的几大警示信号

    追求高效稳定的存储体验,固态硬盘(ssd)无疑是理想之选,其卓越性能能长期为数据存取保驾护航。然而,ssd 的完美并非无缺,其核心部件 nand 闪存存在的写入与擦除周期限制,预示着其性能会随着时间推移而逐渐衰减,直至最终可能面临失效的风险。 如何准确评估 SSD 的寿命? 关键因素有哪些在无形中影…

    2025年11月20日 硬件教程
    000
  • vscode注释快捷键失效

    问题: 使用快捷键出现如下画面 原因: 由于安装了不知名插件,导致快捷键冲突、注释失效。 解决方法: 依次打开【文件】、【首选项】、【键盘快捷键设置】,如图: 找到重复的快捷键,如图: 将其修改为合适的快捷键即可。 相关文章教程推荐:vscode教程 以上就是vscode注释快捷键失效的详细内容,更…

    2025年11月14日 开发工具
    000
  • 如何解决Laravel登录时间失效的常见问题

    如何解决Laravel登录时间失效的常见问题 在使用Laravel开发Web应用程序时,登录认证是一个非常重要的功能。然而,有时候用户登录后长时间不操作,页面可能会自动退出登录或者认证失效。这个问题较为常见,下面将介绍如何通过设置session的时间来解决这个问题,并提供具体的代码示例。 1. 设置…

    2025年11月10日 PHP框架
    000
  • 解决jQuery .val()方法失效的问题

    当我们在使用jQuery的.val()方法获取表单元素的值时,有时会遇到失效的情况。这种情况可能是因为获取的元素不是表单元素,或者因为获取的值不是我们期望的值。下面我将介绍一些常见的情况以及如何应对这些问题。 元素未正确选中有时候我们希望使用.val()获取select下拉框的值,但是一不小心未正确…

    2025年11月8日 web前端
    000

发表回复

登录后才能评论
关注微信