关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)

起因:在进行bootstrap的.navbar-brand内文字设置垂直居中时采用line-height=高度,无法居中,发现源码.navbar-brand 设置了 padding: 15px 15px;(默认导航高度为50),于是居中应该是等于高度-30,解决过程中写了几个div用于检测问题,结果遇到了以下问题,经过数小时的研究(时间大多花费在百度与谷歌上,以及研究原因上),于是写下这篇文章做个总结,加深个人记忆。
 
我写了两个div,从上往下分别标记为div1和div2,设置了相同的margin与高宽,然后给div1设置左浮动。那么根据我薄弱的基础判断,这时候刷新页面应该出现的是两个div重叠在一起,只显示一个div,但是结果出现了偏差,两个div并没有叠加显示,并且div1出现在了div2下方。
(F5后的显示)
预期的结果并没有出现,然后开始排查写的代码,发现问题出现在margin上,清除div的maring后元素显示正常,不会出现错位。
(清除了margin之后的正常状态)
由于margin-left是正常的,所以显然是margin-top的设置出现了些问题,于是推理查找问题,n分钟后得出如下结论
正常文档流状态下,div1浮动,脱离了文档流,然后div2这时候依旧处在文档流状态,于是向上移动至div1浮动前的位置,这时候body的位置发生改变,向下移动了div2设置的margin-top的距离,(又一个问题出现了,为什么div2设置的margin能够改变body的位置,或者说是父元素的位置!好吧,这个问题经过百度与测试后发现是个固有问题,在文章末尾做详细说明)。
(蓝色部分是body)
而div1这时候处于浮动状态,由于同样设置了margin,所以浮动后同样会改变位置,div1浮动后根据body的位置重新进行定位,所以div1浮动后,两个div的位置不会重合。(解决方法-给body添加padding-top,或者border——详情见结尾。)
(可以很明显看出div2根据body进行了margin定位)
 
 
两个div的css如下:
 div:nth-child(1){
float: left;
margin: 50px;
width: 200px;
height: 200px;
border: 10px solid #000;
}
div:nth-child(2){
margin:50px;
width: 200px;
height: 200px;
border: 10px solid #000;
}
 
 
关于子元素的margin-top会改变父级元素的位置,(也就是div2的margin-top改变了body位置),以下。
 
这个问题发生的原因是根据规范,一个盒子如果没有上补白(padding-top)和上边框(border-top),那么这个盒子的上边距会和其内部文档流中的第一个子元素的上边距重叠。
 
再说了白点就是:父元素的第一个子元素的上边距margin-top如果碰不到有效的border或者padding.就会不断一层一层的找自己 “领导”(父元素,祖先元素)的麻烦。只要给领导设置个有效的 border或者padding就可以有效的管制这个目无领导的margin防止它越级,假传圣旨,把自己的margin当领导的margin执行。 对于垂直外边距合并的解决方案上面已经解释了,为父元素例子中的middle元素增加一个border-top或者padding-top即可解决这个问题。
 

关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)的更多相关文章

  1. 高级设置电脑系统windows7防火墙出错代码0×6D9原因与解决技巧

    高级设置windows防火墙能够更好的保护电脑系统安全,在电脑系统windows7设置过程中难免会遇到某些问题,有用户在安装MRGT后想要打开SNMP的161端口,但在打开高级安全windows防火墙 ...

  2. css设置时父元素随子元素margin值移动

    父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. HTML,CSS: <div ...

  3. 子元素设置margin-top后,父元素跟随下移的问题

    子元素设置margin-top后,父元素跟随下移的问题 <!DOCTYPE html> <html lang="en"> <head> < ...

  4. position:fix相对父元素定位

    大家都知道,当position的值为fix时,生成绝对定位的元素,相对于浏览器窗口进行定位. 它常常应用的场合是,当下拉滚动条时固定导航栏到顶部,将广告固定在页面两侧或浏览器中间. 如果需要将导航栏d ...

  5. CSS子元素在父元素中水平垂直居中的几种方法

    1. 水平居中(margin: auto;)子父元素宽度固定,子元素上设置 margin: auto; 子元素不能设置浮动,否则居中失效. #div1{ width: 300px; height: 3 ...

  6. 子DIV设置margin-top影响父DIV位置的解决办法

    父div如果没有任何东西,子div设置margin-top,父div会下落 <!DOCTYPE html> <html lang="en"> <hea ...

  7. 父元素与子元素之间的margin-top问题

    父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. html代码: <div c ...

  8. 子div设置margin-top使得父div也跟着向下移动

    之前在写网页的时候,发现一个小问题,就是子div设置margin-top的时候,父的div也会跟着向下移动.我用代码和图描述一下问题: <span style="font-size:1 ...

  9. Echarts图标宽度变成100px,让图表宽度随着父元素自动适应,Vue实时监听宽度的变化,这可能是史上最好的解决方案!

    最近工作中element后台管理使用Echarts图表,本后台项目分图表模式和列表模式,使用display控制显示隐藏,这样就引出了本文的问题. 问题1:Echarts图标宽度变成100px? 问题2 ...

随机推荐

  1. 关于MSCOMM.OCX无法正常注册的问题解决

    [问题] 关于“Component'MSCOMM32.OCX'or one of its dependencies not correctly registered: afole is missing ...

  2. Cisco DHCP 配置方法

    首先假设两台思科路由器,R1(服务端)连接R2(客户端),组成一个简单的链式局域网,下面就来实现DHCP,配置的命令及其解释如下: 1.R1 dhcp服务的配置 dhcp#configure term ...

  3. sha256sum和 md5sum 命令之间的区别

    Short answer: For verifying ISOs, there is no practical difference, use whichever you want, as long ...

  4. orcl创建数据库

    1.首先先创建一个文件夹存放数据库目录:d:cs        用户及密码为cs 2.创建表空间: create tablespace csdatafile 'O:\cs\cs.dbf' size 5 ...

  5. English Phonetic Spelling Alphabet

    https://www.englishclub.com/vocabulary/english-phonetic-spelling.htm When speaking on the telephone ...

  6. java使用elasticsearch进行模糊查询之must使用-项目中实际使用

    java使用elasticsearch进行多个条件模糊查询 文章说明: 1.本篇文章,本人会从java连接elasticsearch到查询结果生成并映射到具体实体类(涵盖分页功能) 2.代码背景:el ...

  7. C#中单问号(?)和双问号(??)的用法整理

    1.单问号(?) 1.1 表示Nullable类型 C#2.0里面实现了Nullable数据类型 //A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者 ...

  8. 【Alpha 冲刺】 5/12

    今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 建立数据库 未完成 设计表结构的时候,有些逻辑没有设计好,重新review一番设想的功能才初步确定表结构 孙浩楷 根据UI设计, ...

  9. python 爬取全量百度POI

    在网上找了很多关于爬取百度POI的文章,但是对“全量”的做法并没有得到最终的解决方案,自己写了一个,但还是不能实现全量POI抓取,能够达到至少50%的信息抓取.注意:这里所指“全量”是能够达到100% ...

  10. MyBatis实战之解析与运行

    本次所谈的原理仅仅只涉及基本的框架和核心代码,并不会全部都说到,比如关于MyBatis是如何解析XML文件和其他配置文件从而的到内容,还有就是JDBC如何使用,关于JDBC如何使用,可以参考我的这篇博 ...