0

0

什么是外边距折叠?什么情况下出现?怎么解决?

青灯夜游

青灯夜游

发布时间:2021-08-19 10:37:43

|

3091人浏览过

|

来源于掘金--荷包蛋卷

转载

本篇文章带大家了解一下css 盒模型,介绍一下什么是外边距折叠?什么情况下会出现外边距折叠?并谈谈解决方法。

什么是外边距折叠?什么情况下出现?怎么解决?

在 CSS 中,所有的元素都被一个个的 “盒子(box)” 包围着,我们广泛地使用两种“盒子” —— 块级盒子 (block box) 和 内联盒子 (inline box)。

什么是 CSS 盒模型?

在 CSS 中,盒模型(box model)是在设计和布局时使用。

盒模型的定义可以分成这几部分:

  • Content box: 这个区域是用来显示内容,大小可以通过设置 widthheight.
  • Padding box: 包围在内容区域外部的空白区域; 大小通过 padding 相关属性设置。
  • Border box: 包裹内容和内边距。大小通过 border 相关属性设置。
  • Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过 margin 相关属性设置。

1.png

块级盒子完整地应用了 CSS 盒模型,内联盒子只使用盒模型中定义的部分内容。

box-sizing

box-sizing 属性定义了浏览器应该如何计算一个元素的总宽度和总高度。

  • content-box(默认值),即标准盒模型,width: 100px 指的是内容区会有 100px 宽。
    • 盒子的大小 = content(100px) + padding + border
  • border-box,即替代(IE)盒模型,width: 100px 指的是 内容区 + 边框 + 内边距 的总和是 100px 宽。
    • 盒子的大小 = content + padding + border = 100px
不论那种模型,margin 都是不计入实际大小 —— 当然,它会影响盒子在页面所占空间,但是影响的是盒子外部空间。

display

这里可以补充一个概念 -- 内部和外部显示类型。

  • 外部显示类型,我们通过对盒子 display 属性的设置,比如 inline 或者 block ,来控制盒子的是内联还是块级。
  • 内部显示类型,它决定了盒子内部元素是如何布局的。

如果设置 display: flex,在一个元素上,外部显示类型是 block,但是内部显示类型修改为 flex。 该盒子的所有直接子元素都会成为 flex 元素,会根据 弹性盒子(Flexbox )规则进行布局。

还有一个特殊的值 -- display: inline-block,它在内联和块之间提供了一个中间状态。这对于以下情况非常有用:不发生换行,但可以设定宽度和高度,也就是说实现了块级的部分效果:

  • 设置 widthheight 属性会生效。
  • padding, margin, 以及 border 会推开其他元素。

行内元素 / 块级元素

HTML4 中,元素被分成两大类: inline (内联元素) 与 block (块级元素)。

1. 什么是行内元素?

一个行内元素只占据它对应标签的边框所包含的空间。

常见的行内元素有 abspanimgstrongsub supbuttoninputlabelselecttextarea

2. 什么是块级元素?

块级元素占据其父元素(容器)的整个空间,因此创建了一个“块”。通常浏览器会在块级元素前后另起一个新行。

常见的块级元素有 divulollidldtddh1h2 h3h4 h5h6 p

3. 区别?

  • 格式上(默认情况),行内元素不会换行,而块级元素都会换行。

    Draft&Goal-Detector
    Draft&Goal-Detector

    检测文本是由 AI 还是人类编写的

    下载
  • 内容上(默认情况),行内元素只能包含数据和其他行内元素。而块级元素可以包含行内元素和其他块级元素。

  • 在属性上

    • 行内元素
      • widthheight 设置无效(可以设置 line-height),
      • 内边距(padding)、外边距(margin) 和 边框(border) 在 上下方向 不会对其他元素产生影响。
    • 块级元素
      • widthheight 属性可以发挥作用,
      • 内边距(padding)、外边距(margin) 和 边框(border) 会将其他元素从当前元素周围“推开”

2.png

外边距(margin)折叠

块的上外边距(margin-top)和下外边距(margin-bottom)有时合并(折叠)为单个边距,其大小为单个边距的最大值(或如果它们相等,则仅为其中一个),这种行为称为 边距折叠

什么情况才会出现

2 个或多个毗邻的的普通流中的块元素垂直方向上的 margin 会折叠

  • 毗邻: 是指没有被非空内容、padding、border 或 clear 分隔开
  • 垂直方向: 是指只有垂直方向的 margin 才会

如何解决?

  • 创建了 BFC 的元素 和它的子元素/兄弟元素不会发生折叠

  • 设置 padding / border ,一些具体的场景:

    • 父元素的 margin-top 和子元素的 margin-top 发生重叠。

      发生重叠是因为它们是相邻的,所以我们可以通过这一点来解决这个问题。我们可以为父元素设 border-toppadding-top 值来分隔它们。

    • 高度为 auto 的父元素的 margin-bottom 和子元素的 margin-bottom 发生重叠。

      发生重叠一个是因为它们相 邻,一个是因为父元素的高度不固定。因此我们可以为父元素设置 border-bottompadding-bottom 来分隔它们,也可以为父元素设置一个高度,max-heightmin-height 也能解决这个问题。

    • 是没有内容的元素,自身的 margin-topmargin-bottom 发生的重叠。

      我们可以通过为其设置 borderpadding 或者高度来解决这个问题。

触发 BFC 的因素

  • float(除了 none)
  • overflow(除了 visible)
  • display(table-cell / table-caption / inline-block)
  • position(除了 static / relative)

更多编程相关知识,请访问:编程视频!!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

579

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

102

2025.10.23

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

81

2023.11.23

overflow什么意思
overflow什么意思

overflow是一个用于控制元素溢出内容的属性,当元素的内容超出其指定的尺寸时,overflow属性可以决定如何处理这些溢出的内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1756

2024.08.15

margin在css中是啥意思
margin在css中是啥意思

在CSS中,margin是一个用于设置元素外边距的属性。想了解更多margin的相关内容,可以阅读本专题下面的文章。

434

2023.12.18

css中的padding属性作用
css中的padding属性作用

在CSS中,padding属性用于设置元素的内边距。想了解更多padding的相关内容,可以阅读本专题下面的文章。

133

2023.12.07

html边框设置教程
html边框设置教程

本教程将带你全面掌握HTML/CSS边框设置,从基础的border属性讲起,涵盖所有边框样式、圆角设置及高级技巧,帮助你快速上手实现各种边框效果。

36

2025.09.02

flex教程
flex教程

php中文网为大家带来了flex教程合集,Flex是采用Flex布局的元素,称为Flex容器(flex container),简称"容器",它的所有子元素自动成为容器成员,有三个核心概念: flex项,需要布局的元素;flex容器,其包含flex项;排列方向,这决定了flex项的布局方向。php中文网还为大家带来flex的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

359

2023.06.14

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

2

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号