子元素margin-top为何会影响父元素?

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一段很简单的代码:

css如下:

<style type="text/css">
        *{
            margin: 0px; padding: 0px; 
        }
        .show{
            margin: 0px auto;
            width: 200px;
            height: 100px;
            background-color: #999999;
        }
        .show h2{
            margin-top: 50px;/*important*/
            cursor: pointer;
        }
    </style>
 

html结构如下

<div class="show">
        <h2>crystal</h2>
    </div>
 

当在<h2>crystal</h2>没有设置margin-top时,浏览器显示如预期
这里写图片描述

设置了margin-top后出现了如下所示的现象:
这里写图片描述

我们并没有给外层的div设置margin-top,但是还是距离浏览器最顶部产生了50px的间距,查看这50px间距属于哪个元素,会发现外层div的margin依然是0 auto; 所以这个margin还是属于h2,为什么会这样?

来看css2.1盒模型中规定的内容:

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分隔。

因为嵌套也属于毗邻,所以在样式表中优先级更高.show h2的margin覆盖了之前外层div定义的margin,导致最终整个div产生10px的间距。
若给h2也添加一个class,并且在.show之前定义,则最终结果如第一个图所示,最终margin显示为0;

解决办法:

1. 父级或子元素使用浮动或者绝对定位absolute

浮动或绝对定位不参与margin的折叠

2. 父级overflow:hidden;

3. 父级设置padding(破坏非空白的折叠条件)

4. 父级设置border

资料多数参考如下文章:http://www.cnblogs.com/hejia/archive/2013/05/26/3099697.html

css中子元素设置margin-top为什么影响父元素 本文介绍了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: 立即下载

相关推荐

EXCEL实现分层自定义比例随机抽样(图+文教程)

EXCEL实现分层自定义比例随机抽样(图+文教程) 单一字段分层自定义比例随机抽样 多字段分层自定义比例随机抽样 单一字段分层自定义比例随机抽样 首先数据源如下,我们想随机抽张三的金额数据10%、李四金额20%、王五5%、哈哈15%、李六10% 首先第一步,添加辅助列,随机数 =RAND() 对数据进行高级排序 升序、降序都可以 添加辅助列...

可乐联盟 2万+

子元素margin-top为什么会影响父元素

子元素margin-top影响父元素的原因及解决方案

apeiziwei的博客 1786

python全栈入门到实战【基础篇 03】入门实操:第一个Python程序 + PyCharm使用 + 输入输出全解析

本文是一篇Python入门教程,主要介绍PyCharm编辑器的安装配置和基础使用,以及Python输入输出语法的实操练习。文章分为四个部分:1)PyCharm的下载安装与基础配置;2)第一个Python程序"Hello World"的编写与运行;3)Python输入输出函数print()和input()的详细讲解;4)个人信息录入系统的实战案例。教程包含大量截图和动图演示,适合Python新手跟随操作,快速掌握编辑器使用和基础语法。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3646

CSS - 你遇到过子元素设置margin-top影响父元素的情况吗

例如在一个div盒子元素内,需要设置一个标题,我们用一个p标签做为这个标题元素。根据UI设计要求,标题元素需要距离父div元素20px,理所当然想到的就是为标题元素设置margin-top为20px,希望可以撑开距离顶部的距离。但根据经验可知,这样做是存在问题的,父div元素会紧跟着p元素向下20px,并没有达到撑开20px的效果。先来看一下最初的代码和下图的效果。

xingyu_qie的专栏 1423

子元素margin影响父元素

bug分析 浏览器内核在渲染margin时会在捕获到子元素并对子元素的模型渲染完毕之后,开始向父级寻找父级的边界 父元素的边界由父元素的边界属性决定,如果父级没有边界,父级就会受到子元素margin影响,导致父级产生同样的margin 什么是边距属性 盒子模型的border padding margin overflow 为盒子模型的边距属性 解决方法一 为父级设置overf...

小柒的博客 1281

子元素margin影响父元素的大小

总体来讲,这个问题是垂直外边距合并问题。 也就是一个div,作为一个元素的第一个子集元素情况下,在设置了外边距之后,会与父级的div元素在某种情况下进行合并,那么在什么情况下呢 第一个元素的上外边距会去查找父级的border或者padding,如果没找到,就会向外找margin,如果找到margin,相邻的两个margin会进行合并,这也就是垂直外边距合并。 也就是说没有找到边界,就...

大连 云鹏 828

子元素margin-top为何会对父元素造成影响?

我们有时候发现,子div设置的margin-top对整个父div的位置造成了影响,对我们的布局造成了很大的困扰。 下面我们做一个测试: css结构如下: .show{ margin: 0px auto; width: 200px; height: 100px; background-color: #999999; } ....

qq_36470686的博客 5486

子元素margin-top为什么会影响父元素

1.两个元素,当你为子元素设置margin-top的时候,你会发现什么呢? 2.解决方法 父元素设置 1- overflow: hidden 2- display: inline-block;或者float布局 3- border: 1px solid transparent; 4- position: absolute

苏苏就是小苏苏的博客 3256

关于子元素margin-top影响父元素

我的第一篇博文,感觉不开个博客不行了,一是记录自己的学习历程,而是可以当做笔记来看,之前让我遇到了一个头疼的问题,现在干脆写出来以免忘了! 接下来看看这个问题“子元素为什么设置margin影响父元素margin” 我加点文字在这里 先把html,body,div的默认margin,padding设为0,。 再给父元素设置宽高,子元素设置宽高。

焕野,唤野 414

关于子元素margin-top影响父元素位置问题

之前写项目的时候喜欢用border,所以一直都没有遇到过这个问题,如果父元素没有float属性没有,也没有border属性的时候,子元素margin-top影响父元素,在css2.1中有规定所有毗邻的两个或多个盒元素的margin-top会共享使用,因为嵌套也属于毗邻,所以才会有子元素margin-top影响父元素的现象 解决这个问题我知道的有如下方法: 1.给父元素添加一个bord

qq_39755601的博客 915

子元素添加margin-top不生效,父元素受到影响的解决办法

今天写css的时候遇到一个问题,当给子元素添加margin-top的时候,父元素也被添加上了,严重影响页面布局。 例子代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=de...

weixin_45393280的博客 919

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

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

美人如玉,剑气如虹 8306

子元素设置margin-top父元素也受影响

外边距合并问题常见于第一个子元素margin-top会顶开父元素父元素相邻元素的间距,而且只在标准浏览器下 (FirfFox、Chrome、Opera、Sarfi)产生问题,IE下反而表现良好。例子可以查看下面代码(IE下表现“正常”,标准浏览器下查看出现“bug”):     子元素设置margin-top父元素也受影响     * {         m

沫沫酱 2万+

CSSmargin击穿问题(子元素margin-top影响父元素

最近写一个H5页面的时候发现了这个被忽视的问题,一时没想到什么原因,搜了半天,记录一下,方便他人踩坑。唉,有些东西不用就忘。 一、问题描述 <div class="container"> <div class="children">子元素</div> </div> .container { background-color: r...

sq-web 700

子元素margin-top影响父元素

---恢复内容开始--- 之前在写项目的时候,发现原本想让父子元素之间加点边距,却让父元素产生了margin-top,于是百度之后发现了原因。 在css2.1盒模型中 In this specific...

weixin_39037804的博客 273

子元素设置margin-top影响父元素

问题描述:当我只给子元素设置了margin-top当时候,父元素却也跟着一起改变了。 代码部分: <style> .outer{ width: 200px; height: 200px; background-color: #eee; } .inner{ width: 50px; height: 50px; background-color: green; margin-top: 20px; } </style> <div class="

Panda0218的博客 352

解决给子元素设置margin-top后,会影响父元素一起向下移动;

子元素设置margin-top后,会影响父元素一起向下移动; 代码片 .parent { height: 400px; width: 400px; background-color: blue; } .child { height: 100px; width: 100px; background-color: brown; /* margin-top:100px;*/

liuwenjie_的博客 1513

css 子元素margin-top影响父元素

源码 <!DOCTYPE HTML> <html manifest=""> <head> <style> .box1 { background-color: deepskyblue; height: 200px; width: 200px; } .box2 { background-color: coral; margin-top: 50px; height:

路过君的博客 578

css中给子元素添加margin-top影响父元素

css给子元素添加margin-top影响父元素

java实现一个简单的计算器的加减乘除功能 2170
上一篇: 使设置了position:fixed的元素不与下面的元素重叠
下一篇: 去除input边框以及点击input出现的边框
Accept_1
博客等级 码龄10年 13粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值