margin:子元素添加margin-top影响父元素;上下盒子添加外边距重叠问题

10 篇文章 0 订阅
订阅专栏

这几天看margin看的有点晕,写篇博客细细梳理一下 margin 的一些问题。主要是两个方面的,1. 子元素添加 margin-top 父元素也会下移;2.当兄弟关系的两个盒子同时添加外边距时,相邻的外边距会重叠。

参考W3school:CSS外边距合并问题

一 、子元素添加 margin-top ,父元素也会受影响,也像添加了 margin-top一样下移。

原因分析:
这个“问题”……它是CSS2.1的盒模型中规定的内容——Collapsing margins:

In this specification, the expression collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin.

所有毗邻的两个或更多盒元素的 margin 将会合并为一个margin共享之。毗邻的定义为:同级或者嵌套的盒元素,并且它们之间没有非空内容、Padding或Border分隔。

当直接给大盒子中添加小盒子时,就会产生 margin 合并,如下:
代码1:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			* {
				margin: 0;
				padding: 0;
			}
			.father{
				width: 500px;
				height: 500px;
				background-color: red;
			}
			.son{
				width: 300px;
				height: 300px;
				background-color: green;
				margin-top: 100px;
			}
		</style>
	</head>
	<body>
		<div class="father">
			<div class="son">
			</div>
		</div>
	</body>

</html>

结果1:
在这里插入图片描述
解决办法: 破坏出现的条件即可

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			* {
				margin: 0;
				padding: 0;
			}
			.father{
				width: 500px;
				height: 500px;
				background-color: red;
				/* border: #000000 3px solid;	1. 给父元素添加边框 */
				/* padding-top: 100px;			2.给父元素添加内填充,用 padding 
													替换margin-top */
				/* overflow: hidden;			3.设置 overflow:hidden; */
				/* position: absolute;			4.父元素设置绝对定位 */
				/* float: left;					5.父元素设置浮动 */
				/* display: inline-block;		6.父元素修改元素类型 */
			}
			.son{
				width: 300px;
				height: 300px;
				background-color: green;
				margin-top: 100px;
				/* position: absolute;			7.子元素设置绝对定位 */
				/* float: left;					8.子元素设置浮动 */
				/* border: #000000 3px solid;	给子元素添加边框无效 */
			}
			/* .father::before{
				content: "a";
				display: block; */
				/* overflow: hidden; 			9.使用伪对象选择器,给父元素前添加
					内容,虽然为空,但是添加属性 overflow:hidden; 可以消除影响  */
			}
		</style>
	</head>
	<body>
		<div class="father">
			<div class="son">
			</div>
		</div>
	</body>

</html>

注:上述9种解决办法,比较好理解的:给父元素添加 border 和 padding 可以消除,是从 css 触发规范上解决问题,不过我疑惑的是为什么给子元素添加边框无法消除问题?给父元素和子元素添加 绝对定位 position:absolute /fixed、 float:left / right 属性,也可以消除问题,因为浮动元素和绝对定位元素不参与边距合并。

父元素添加 overflow:hidden/auto , display: inline-block;这两种方法是将父元素转化为BFC(页面布局中一块独立区域,其边距等属性不受其他元素影响。)

至于第9种方法,在父元素所有内容前用伪对象加一个块元素,尝试了一下,这个块元素中的 content:"" 中有内容时(中英文,空格不行),或者给这个块元素添加属性 overflow: hidden; 这两种情况下也可以解决这个问题,不过好像复杂了一些…

二、上下盒子添加外边距重叠问题

原因分析:
写在一个博客中的原因就是俺觉得这俩问题产生的原因是一样的,源自上面css 2.1中的规范。

代码2:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}

			.father {
				width: 300px;
				height: 500px;
				margin: 0 auto;
				background-color: skyblue;
				overflow: hidden;
			}

			.son1 {
				width: 100px;
				height: 100px;
				margin: 100px;
				background: green;
			}

			.son2 {
				width: 100px;
				height: 100px;
				margin: 100px;
				background: green;
			}
		</style>
	</head>
	<body>
		<div class="father">
			<div class="son1"></div>
			<div class="son2"></div>
		</div>
	</body>
</html>

结果2:
在这里插入图片描述
明显看出 son1 的下边距 和 son2 的上边距重合

解决办法:

  1. son2 添加浮动属性
  2. son2 添加绝对定位
  3. son2 添加固定定位
  4. son2 添加 display : inline-block

最后,关于margin重叠的问题,还可以继续深入一下哈哈,不过俺就先到这里,其他博客我看写的也很不错,
前端ing,钦此~

CSS - 你遇到过子元素设置margin-top,影响元素的情况吗
xingyu_qie的专栏
04-07 593
例如在一个div盒子元素内,需要设置一个标题,我们用一个p标签做为这个标题元素。根据UI设计要求,标题元素需要距离div元素20px,理所当然想到的就是为标题元素设置margin-top为20px,希望可以撑开距离顶部的距离。但根据经验可知,这样做是存在问题的,div元素会紧跟着p元素向下20px,并没有达到撑开20px的效果。先来看一下最初的代码和下图的效果。
html盒子距离上边距50px,Margin的垂直外边问题
weixin_33148993的博客
06-18 1595
做练习的时候遇到一个margin问题,代码结构如下,给元素body中的子元素div设置了margin:50px auto;本来我是想让子元素div距离元素上边拉开50个像素,结果却是子元素div和元素body一样高,并且距离上边距50px,如下图(a):html{width: 100%;height: 100%;background: red;}body{margin: 0;padding...
如何理解margin重叠问题
weixin_47450807的博客
04-08 3440
一、写在前面 根据w3c规范,两个margin产生折叠的必备条件: 1、必须处于常规文档流(不能是浮动和定位)的块级盒子,并且处于同一个BFC当中。 2、没有线盒,没有空隙,没有padding和border将他们分割。 3、都处于垂直方向相邻的外边距。 二、例子 <!DOCTYPE html> <html lang="cn"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compa
css子元素设置margin-top为什么影响元素
12-11
本文介绍了css子元素设置margin-top为什么影响元素,分享给大家,具体如下: <style type="text/css"> *{ margin: 0px; padding: 0px; } .show{ margin: 0px auto; width: 200px; height: 100px; background-color: #999999; } .show h2{ margin-top: 50px; cursor:
子元素设置margin-top,元素也受影响
沫沫酱
12-09 2万+
外边距合并问题常见于第一个子元素margin-top会顶开元素元素相邻元素的间距,而且只在标准浏览器下 (FirfFox、Chrome、Opera、Sarfi)产生问题,IE下反而表现良好。例子可以查看下面代码(IE下表现“正常”,标准浏览器下查看出现“bug”):     子元素设置margin-top,元素也受影响     * {         m
子元素margin-top为何会影响元素
热门推荐
Hey firefly
10-28 2万+
问题如下 一段很简单的代码:css如下:<style type="text/css"> *{ margin: 0px; padding: 0px; } .show{ margin: 0px auto; width: 200px; height: 100p
子DIV块中设置margin-top时影响DIV块位置问题
hahhahahaa的博客
06-13 1万+
相信很多前端同学在做页面开发的时候都遇到过这样的问题。给一个div内部的div设置一个margin-top,结果它的级跟着它一起下移了。如下面的代码.a { width:100px; height:100px; } .b { width:50px; height:50px; margin-top:10px; } &lt;div class="a"&gt;...
CSS 外边距(margin)重叠及防止方法
12-13
7. 当元素外边距与其元素外边距相邻时,可能会发生“重叠覆盖”现象,这会影响元素的位置。例如,元素的`margin-top`与元素的`margin-bottom`重叠时,元素的`border-top`边界将与元素相同。同时,元素的`...
前端必修技能:高手进阶核心知识分享 - css盒的before、after和子元素的层叠关系解析及应用
最新发布
uu0216的博客
07-29 1350
一个盒子 它的 ::before伪类在最底层, ::after 伪元素在最上层, 其所有子元素在中间叠放。 盒子子元素堆叠关系,按照书写顺序自下而上排序:先写的叠放在下面,后写的在上面。 元素在最下面。
盒子模型之外边距合并问题
mandarin_blog的博客
07-31 297
外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
子元素margin-top为什么会影响元素
apeiziwei的博客
06-08 1527
子元素margin-top影响元素的原因及解决方案
子元素设置margin影响元素问题
ice-bear
01-21 2141
原因及解决
关于子元素margin-top影响元素问题
SOALIN的博客
11-17 283
css子元素设置margin-top会影响元素
weixin_40763897的博客
11-12 4052
demo代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> <style> .content_top{ width: 500p...
子元素margin-top为什么会影响元素
苏苏就是小苏苏的博客
02-18 3139
1.两个元素,当你为子元素设置margin-top的时候,你会发现什么呢? 2.解决方法 元素设置 1- overflow: hidden 2- display: inline-block;或者float布局 3- border: 1px solid transparent; 4- position: absolute
子元素margin-top会影响元素
weixin_39037804的博客
09-02 197
---恢复内容开始--- 之前在写项目的时候,发现原本想让子元素之间加点边距,却让元素产生了margin-top,于是百度之后发现了原因。 在css2.1盒模型中 In this specific...
关于子元素margin-top影响元素位置问题
qq_39755601的博客
01-16 713
之前写项目的时候喜欢用border,所以一直都没有遇到过这个问题,如果元素没有float属性没有,也没有border属性的时候,子元素margin-top会影响元素,在css2.1中有规定所有毗邻的两个或多个盒元素margin-top会共享使用,因为嵌套也属于毗邻,所以才会有子元素margin-top影响元素的现象 解决这个问题我知道的有如下方法: 1.给元素添加一个bord
CSSmargin-top对元素产生作用的问题
谢家老树
10-14 8464
CSSmargin-top对元素产生作用的问题在页面重构中,利用margin进行定位非常常见,然而margin-top这个属性经常会给我们带来一定的困扰,有时候不起作用,还把层“拉”了下来,如图所示: 代码如下:<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test2</title
css中给子元素添加margin-top影响元素
09-01
CSS中,给子元素添加margin-top会直接影响元素。 当给子元素添加margin-top时,子元素会相对于它的元素进行定位。如果子元素margin-top值为正数,那么子元素就会向上移动,同时元素的高度也会增加,以便为子元素腾出空间。这种情况下,元素的高度等于子元素的高度加上子元素margin-top值。 然而,当给子元素添加margin-top时,子元素margin-top值为负数时,就会导致元素相对应上移。子元素会向上移动,但是元素的高度不会相应增加以适应子元素的移动。这种情况下,元素的内容会被覆盖,可能会导致布局出现问题。如果没有合适的处理方式,可能需要考虑调整CSS布局或使用其他技术手段来解决问题。 因此,给子元素添加margin-top会直接影响元素的位置和高度。我们在设计和布局网页时,需要注意这一点,并确保正确处理子元素margin-top值,以避免出现布局问题
写文章

热门文章

  • Python使用tensorflow实现图像识别(猫狗大战)-01 10865
  • 一个盒子在另一个盒子中垂直居中的七种实现方法 8001
  • margin:子元素添加margin-top影响父元素;上下盒子添加外边距重叠问题 6894
  • Python使用tensorflow实现图像识别(猫狗大战)-02 3346
  • Anaconda环境下将netCDF文件转换为TIFF格式 2776

分类专栏

  • 前端 10篇
  • IDE 1篇
  • Python 12篇

最新评论

  • margin:子元素添加margin-top影响父元素;上下盒子添加外边距重叠问题

    北葵向暖1: 好文章,推荐这样:.parent { border: 1px solid transparent; outline: none; box-sizing: border-box; },这样既不影响页面设计,又可以抵消这个问题

  • margin:子元素添加margin-top影响父元素;上下盒子添加外边距重叠问题

    Angeryyds: 浮动脱标啊,会有副作用。 本质上都是触发BFC来解决,目前css3标准提供了display:flow-root;创建一个BFC容器,且没有任何副作用。

  • margin:子元素添加margin-top影响父元素;上下盒子添加外边距重叠问题

    Tsz Foon: 直接浮动感觉比较方便

  • margin:子元素添加margin-top影响父元素;上下盒子添加外边距重叠问题

    想要ac但是很难ac的ac佬: 噢噢好的,谢谢了

  • margin:子元素添加margin-top影响父元素;上下盒子添加外边距重叠问题

    雪…: son1 本身设有下边距,son2 设有上边距,正常情况下,两个边距应该都显示,但异常情况时,显式的边距是这两个边距中较大的一个

大家在看

  • 第六章——求二维数组周边元素的累加和
  • C语言深入理解指针(四) 971
  • C语言:输入正整数n,计算s = 1/1! + 1/2! + 1/3! + ……+ 1/n!的值。 190
  • 基于mimo系统的信道估计算法matlab仿真,对比LS,MMSE以及OMP压缩感知三种算法
  • 帝国cms系统限制的登录次数不得超过5次,请等60分钟过后,方可重新登录

最新文章

  • js中的继承
  • webpack小计
  • javascript 实现计算器效果(输入中缀表达式字符串=>转为后缀表达式数组=>后缀表达式计算)
2021年1篇
2020年20篇
2019年2篇
2018年2篇

目录

目录

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家心形美陈 商场美陈人物玻璃钢雕塑销售厂家美陈玻璃钢动物雕塑报价表宜春玻璃钢卡通雕塑圣诞玻璃钢雕塑供应厂家陕西玻璃钢雕塑施工商场户外美陈拱门昆明户内玻璃钢雕塑优势河南步行街玻璃钢雕塑2019元旦商场美陈玻璃钢佛像雕塑图片杭州玻璃钢金属雕塑哪家好广西方形玻璃钢花盆宣城城市玻璃钢雕塑公司深圳户外商场美陈研发辽宁玻璃钢熊猫雕塑山西玻璃钢卡通雕塑杭州玻璃钢雕塑哪里好池州玻璃钢雕塑批发园林景观玻璃钢雕塑定做南通酒店玻璃钢雕塑设计伊春玻璃钢雕塑定制价格成都定做玻璃钢雕塑节日商场美陈策划宝坻区商场美陈北京通道商场美陈供应泉州玻璃钢人物雕塑河源树脂玻璃钢雕塑供应商伊春雕塑玻璃钢卡通玻璃钢花盆厚度香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化