网站首页 > 技术文章 正文
margin是一个设置元素外边距的属性
- 块级元素垂直方向的外边距会合并,也就是margin-top和上面元素的margin-bottom会合并
- 行内元素实际上是不占有外边距的,所以行内元素外边距不会合并
- 浮动元素的外边距也不会合并
根据w3c规范,两个margin产生折叠的必备条件:
- 必须处于常规文档流(不能是浮动和定位)的块级盒子,并且处于同一个BFC当中
- 没有线盒,没有空隙,没有padding和border将他们分割
- 都处于垂直方向相邻的外边距
js复制代码 // 如下代码,AAA和BBB之间的距离是多少
<style>
p {
font-size: 16px;
line-height: 1;
margin-top: 10px;
margin-bottom: 15px;
}
.aa {
border-bottom: 1px solid red;
}
.bb {
border-top: 1px solid red;
}
</style>
<p class="aa">AAA</p>
<p></p>
<p></p>
<p></p>
<p class="bb">BBB</p>
经过验证,两者的距离为15px,原因如下:
- 空的p标签会重叠
- margin-top和margin-bottom会重叠,所以距离为15px margin为负值时的注意事项:
- margin-left为负值时,自身元素会向左移动
- margin-top为负值时,自身元素会向上移动
- margin-right为负值时,自身元素不受影响,但是相邻元素会向左移动
- margin-bottom为负值时,自身元素不受影响,但是相邻元素会向上移动
- position:absolute时,margin-right和margin-bottom为负值时,自身元素会受影响
那么遇到这样的面试题我们可以做如下回答:
margin重叠是指在垂直方向上,相邻的两个元素的margin会发生重叠的情况。一般来说分为以下4种情况:
- 相邻兄弟元素的margin-bottom和margin-top发生重叠,这时候我们可以设置其中一个元素为BFC即可解决
- 父元素的margin-top和子元素的margin-top发生重叠,他们发生重叠是因为这两个元素是相邻的,所以可以通过以下几种方法来解决: css复制代码 为父元素设置padding-top或border-top来分割他们 复制代码 设置父元素为BFC 复制代码 父元素和第一个子元素之间添加一个内联元素来进行分割
- 高度为auto的父元素的margin-bottom和最后一个子元素的margin-bottom发生重叠,他们发生重叠一个原因是他们是相邻的,另一个原因是父元素的高度是不固定的,那么可以通过以下几种方法来解决: css复制代码 为父元素设置padding-bottom或border-bottom将他们分开 arduino复制代码 为父元素设置一个高度,height、max-height或者min-height都可以解决 复制代码 把父元素设置为BFC 复制代码 父元素和最后一个子元素之间添加一个内联元素进行分割
- 没有内容的元素,自身的margin-top和margin-bottom发生重叠,可以通过以下几种方法解决: css复制代码 为元素设置padding或border 复制代码 为元素添加一个高度
作者:xiaomomo
链接:https://juejin.cn/post/7033349421731741727
猜你喜欢
- 2024-09-21 从案例中学习JavaScript,超简单函数封装技巧
- 2024-09-21 如何使用 JavaScript 快速构建一个二维码生成器-web前端技术
- 2024-09-21 js动态—方块匀速运动(js物体移动)
- 2024-09-21 登顶GitHub趋势榜,标星1.8k:200行JS代码让画面人物瞬间消失
- 2024-09-21 JS,WebGL第三方库Three.js,三大基本对象:场景、相机和渲染器
- 2024-09-21 解读 CSS 布局之水平垂直居中(css设置水平垂直居中)
- 2024-09-21 手撕代码--JavaScript实现年历(手撕代码什么意思)
- 2024-09-21 Three.JS教程1环境搭建、场景与相机
- 2024-09-21 在网页开发中,我们需要掌握的常用HTML标签有哪些?
- 2024-09-21 探秘 flex 上下文中神奇的自动 margin,干货!网友都感动哭了
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 569℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 510℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 467℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 446℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 444℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)