浅析CSS中的overflow属性

article/2025/8/22 12:57:16

随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

overflow属性的作用是规定当内容溢出元素框时发生的事情,定义溢出元素内容区的内容会如何处理。

overflow有下面几种属性值,分别如下:

1.visible:默认值。内容不会被修剪,会呈现在元素框之外。

2.hidden:与visible相反,内容会被修剪,并且其余内容是不可见的。

这对应付使用动态的内容,而且可能会由于内容溢出而引起一些布局上的问题的确很有用。尽管如此,请记住用此方法隐藏的内容将彻底的看不到(除非去查看源代码)。 比如有的用户设置他们的浏览器的默认字体比你预期的要大些,你会将一些文字推到盒子的外面然后完全的隐藏之……

3.scroll:内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。

不论是否需要,用户代理都会提供一种滚动机制。因此即使元素框中可以放下所有内容也会出现滚动条,而且使用scroll将会同时产生水平和垂直两个滚动条,就算内容只需要其中一个。

4.auto:如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。解决了scroll在不需要滚动条也会产生滚动条的问题。

5.inherit:规定应该从父元素继承 overflow 属性的值。

其中,overflow属性值中visible和hidden是对立的,scroll和auto是对立的。inherent是继承父级元素的overflow属性值,默认是scroll。

示例:

div{width:150px;height:150px;overflow:scroll;}

overflow还有个作用是清除浮动的影响,具体说就是清除包含块内子元素的浮动,我们先来看一个实例:

//html
<body><div class="parent"><div class="child1"></div><div class="child2"></div></div>
</body>
// css
.parent{width:300px; background:#ddd; border:1px solid;
} 
.child1{ width:100px; height:100px; background:pink;float:left;
}
.child2{ width:200px; height:50px; background:red;
}

结果:

上面的例子中,我们没有设置.parent的高度,所以.parent的高度默认为auto。由于.child1设置了浮动,脱离了文档流,所以.parent中只有.child2这一个文档流元素。现在我们给.parent添加"overflow:hidden"

.parent{overflow: hidden; 
}

结果:

我们看到,给父元素添加一句"overflow:hidden",就能让父元素包住这个脱离了文档流的浮动元素,换句话说,"overflow:hidden"可以清除包含块内子元素的浮动的影响。

现在我们看到了现象,可是原因是什么呢?

在解释这个问题之前,我们先了解一下BFC的概念。

BFC

BFC(Block Formatting Context),块级格式化上下文,它规定了内部的块级元素的布局方式,默认情况下只有根元素(即body)一个块级上下文。

1、BFC布局规则

  • 内部的块级元素会在垂直方向,一个接一个地放置;
  • 块级元素垂直方向的距离由margin决定。属于同一个BFC的两个相邻的块级元素会发生margin合并,不属于同一个BFC的两个相邻的块级元素不会发生margin合并
  • 每个元素的margin box的左边,与包含border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此;
  • BFC的区域不会与float box重叠;
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素;外面的元素也不会影响到容器里面的子元素
  • 计算BFC的高度时,浮动元素也参与计算

2、创建一个BFC

首先我们要知道怎样创建BFC。一个BFC可以被显式触发,只需满足以下条件之一:

  • float的值不为none;
  • overflow的值不为visible;
  • position的值为fixed / absolute;
  • display的值为table-cell / table-caption / inline-block / flex / inline-flex。

3、BFC的应用

1)、消除margin合并

在margin合并这篇博客中,我描述了相邻兄弟元素、父元素与第一个和最后一个子元素、空块元素的margin合并情况。那么对于发生margin合并的元素,我们怎样消除margin合并?

对于父子元素,我们可以通过设置padding、border、inline content、height、min-height、max-height等属性来消除;但是相邻的兄弟元素之间必出现margin合并,这时如果想要消除margin合并,又该怎么办?

我们首先要搞清楚为什么会发生margin合并。这些元素(包括兄弟、父子元素等)之间之所以会发生margin合并,是因为它们属于同一个BFC。所以,我们就知道怎么办了,只要让它们不属于同一个BFC不就可以了?

我们来看在margin合并这篇博客中举过的一个例子:

// html
<body><div class='bro1'></div><div class='bro2'> </div>
</body>
// css
body{margin:0;padding:0;
}
.bro1{width:300px;height:200px;background:#ddd;margin-bottom:30px;
}
.bro2{width:200px;height:100px;background:pink;margin-top:20px;
}

结果:

现在我们给.bro1新建一个BFC,并添加 overflow:hidden;,修改代码如下:

// html
<body><div class='special'><div class='bro1'></div></div><div class='bro2'> </div>
</body>
// css
.special{overflow:hidden; 
}

结果:

你看!margin合并消除了!

2)、包含浮动子元素

这也是我们今天的主要议题——为什么"overflow:hidden"能清除浮动的影响。
我们经常会在父元素里设置某个子元素浮动。浮动后,子元素脱离了文档流,使得父元素无法包住这个浮动的子元素。我们通常在父元素上设置一个clearfix的伪元素来清除浮动;同样,我们可以利用BFC可以包含浮动这一特性来清除浮动,例子已经在本文开头讲过。

我们对本文开头的例子作一个分析:当给.parent设置"overflow:hidden"时,实际上创建了一个超级属性BFC,此超级属性反过来决定了"height:auto"是如何计算的。在“BFC布局规则”中提到:计算BFC的高度时,浮动元素也参与计算。因此,父元素在计算其高度时,加入了浮动元素的高度,“顺便”达成了清除浮动的目标,所以父元素就包裹住了子元素。

除了给.parent设置"overflow:hidden",我们还可以设置"display:inline-block"、"position:absolute"、"float:left"等方式来创建一个BFC,从而达到包裹浮动子元素的效果(具体使用哪种方法要看项目需求):

// css
.parent{/* 具体使用哪个要看界面设计的情况 *//* overflow: hidden; *//* display:inline-block; *//* position:absolute; */float:left;
} 

结果:

好了,关于这个问题就总结到这里。CSS的很多属性看似简单,深究起来才发现自己了解的仅仅只是冰山一角,前端之路,道阻且长啊!

参考资料:

为什么"overflow:hidden"能清除浮动的影响

CSS中的overflow属性

关于CSS中的overflow属性


http://chatgpt.dhexx.cn/article/4DJfPG2H.shtml

相关文章

overflow属性(溢出)详解

目录 一&#xff1a;什么是overflow 1.1 overflow的属性 二&#xff1a;实例分析 一&#xff1a;什么是overflow 在CSS中&#xff0c;overflow是“溢出”的意思&#xff0c;该属性规定当内容溢出元素框时发生的事情&#xff0c;设置内容是否会被修剪&#xff0c;溢出部分是否…

overflow属性详解

overflow属性详解_桃花扇J的博客-CSDN博客_overflow属性 原链接 overflow是对溢出内容的处理&#xff0c;有四个属性值visible&#xff0c;hidden&#xff0c;scroll&#xff0c;auto&#xff0c;且可以分别设置overflow-x&#xff0c;overflow-y&#xff0c;需要注意的是&am…

CSS3:overflow属性详解

1.Overflow overflow为溢出&#xff08;容器&#xff09;&#xff0c;当内容超出容器时只需添加overflow属性值为hidden&#xff0c; 就可以把超出容器的部分隐藏起来&#xff1b; 如果内容超出容器却又不想其隐藏时可以将其属性值设置为auto&#xff1b; overflow&#xff…

组播基础(一)

一.为什么需要组播 IPV4包含三种数据传送方式:单播,广播和组播。其中单播在传送数据时,主机和客户端之间进行一对一的通信,如果有多台客户端请求相同的数据,主机需要逐一发送多次。在客户端数量较少时,这种重复是可以接受的,当客户端数量过多时,网络带宽将无法支撑。…

组播详解

组播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机&#xff0c;是一种一对多的通讯方式。 IP组播的好处、优势 组播协议与现在广泛使用的单播协议的不同之处在于&#xff0c;一个主机用单播协议向 n 个主机发送相同的数据时&#xff0c;发送主…

组播原理

组播原理 &#xff11;.概述 想对于单播&#xff0c;广播方式减少了发送源的处理&#xff0c;降低发送源的负荷&#xff0e;但是采用广播方式&#xff0c;网络中所有主机都会收到广播数据&#xff0c;而不管是否需要接收&#xff0e;这样不仅数据的安全性得不到保证&#xff…

华为 组播之IGMPv1

我是艺博东 &#xff0c;一个正在努力学IT的码农&#xff1b;好了&#xff0c;话不多说&#xff0c;我们直接进入正文。 文章目录 一、拓扑二、基本配置与分析三、小结四、通用组查询报文 一、拓扑 二、基本配置与分析 AR-1 [Huawei]sysname AR-1 [AR-1] [AR-1]int g0/0/0 […

组播是什么

组播是什么 IPV4&#xff1a;单播 组播 广播 IPV6&#xff1a;单播 组播 任播 单播&#xff1a;一对一&#xff0c;随着接收用户的增多&#xff0c;增加服务器和链路带宽的压力。 单播的优点&#xff1a;保证流量只发送给有需要的接收者 广播&#xff1a;一对ALL&#xff…

IP组播的基本概念

IP组播的基本概念 原理概述&#xff1a; IANA(Internet Assigned Numbers Authority)将IP地址分成了A、B、C、D、E5类&#xff0c;其中的D类为组播IP地址&#xff0c;范围是224.0.0.0-239.255.255.255。 一个IP报文&#xff0c;其目的地址如果是单播IP地址&#xff0c;则被称为…

组播技术

1 概述 1.1 产生背景 传统的IP通信有两种方式&#xff1a;一种是在源主机与目的主机之间点对点的通信&#xff0c;即单播&#xff1b;另一种是在源主机与同一网段中所有其它主机之间点对多点的通信&#xff0c;即广播。如果要将信息发送给多个主机而非所有主机&#xff0c;…

组播协议详解

组播详解 1.组播基础&#xff08;1&#xff09;组播简介&#xff08;2&#xff09;组播的地址&#xff08;3&#xff09;组播的MAC地址&#xff08;4&#xff09;组播的MAC地址&#xff08;5&#xff09;反向转发路径—RPF 2.IGMP&#xff08;1&#xff09;简介&#xff08;2&a…

组播基本概念讲解

目录 单播、广播、组播的区别 组播网络 组播网络设备 组播网络架构 组播IP地址 组播模型——2种模型 组播IP报文 组播IP与MAC映射规则 组播MAC与单播MAC区分 单播、广播、组播的区别 单播&#xff1a;一对一。 源发送一份单播报文&#xff0c;只能被单个主机接收 广…

交换机组播协议-二层组播/三层组播总结

一、组播介绍&#xff1a; 组播技术解决的是以最小的网络开销实现单点发送&#xff0c;多点接收的问题。就实现点对多点数据传输问题&#xff0c;比广播/单播传输更高效&#xff0c;更能节省网络带宽&#xff0c;降低网络负载。 当ip网络中某Rx主机需要接收信息时&#xff0c;若…

广播、组播、点播的区别

今天学习的时候发现了广播、组播、点播这三个用来描述网络节点之间通讯方式的术语&#xff0c;那么这几种“播”到底有什么区别&#xff1f;于是乎百度总结了一下。 ----------------------------------点播 ---------------------------------- “点播”是一种形式的单播&…

IP组播介绍

IP组播通信指的是IP报文从一个源发出&#xff0c;被转发到一组特定的接收者。相对于单播和广播&#xff0c;IP组播可以有效地节约网络带宽、降低网络负载&#xff0c;避免广播堵塞带来的诸如摄像头花屏&#xff0c;视频马赛克等问题&#xff0c;所以被广泛应用于IPTV、实时数据…

广播和组播

概述 网络信息传输主要有4种方式&#xff1a;单播&#xff08;unicast&#xff09;、任播&#xff08;anycast&#xff09;、组播&#xff08;multicast&#xff09;和广播&#xff08;broadcast&#xff09;。广播和组播为应用程序提供了两种服务&#xff1a;数据分组交付至多…

华为 组播理论知识

如果一个人走在正确的道路上&#xff0c;有目标并努力着&#xff0c;且思想没有问题、态度端正&#xff0c;相信总有一天能达到成功的彼岸&#xff1b;因为人生就像一场马拉松长跑,&#xff0c;它并不在乎你比别人先跑一步&#xff0c;或者晚跑一步。 我是艺博东 &#xff0c;一…

浅议组播(一文看懂组播)

今天简单的写一下组播的实现过程&#xff0c;主要是给0基础同学阅读。本文力图用最简单的语言描绘组播的大致实现过程。 一、背景 计算机网络中存在三种形式的报文——单播、广播和组播。顾名思义&#xff0c;单播就是发往指定的目的地址&#xff0c;广播就是发放广播域内所有…

什么是组播地址

组播地址 前言 “组播并不像单播&#xff0c;有一个明确的目的主机和IP地址&#xff0c;也不像广播&#xff0c;局域网内的所有主机都是目的主机&#xff0c;广播IP地址也明确&#xff08;主机标识全部置为1&#xff09;。组播不同&#xff0c;它并不知道要把信息发给谁&…

一文了解什么是组播

组播简介 前言 “数据源向特定的多个接收端发送相同的数据时&#xff0c;如果采用单播&#xff0c;数据源需要分多次发送。如果采用广播&#xff0c;广播域内所有主机都能收到。而如果采用组播&#xff0c;只需要发送一份数据给组播路由器&#xff0c;由组播路由器根据组播组…