前端嵌套div的margin不起作用怎么解决

今天分享下”前端嵌套div的margin不起作用怎么解决“这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一起学习一下吧。

顺便科普下margin的定义和用法。

div嵌套的HTML代码:

​​​​

​​<​​​​html​​ ​​lang​​​​=​​​​"en"​​​​>​​

​​<​​​​head​​​​>​​

​​<​​​​meta​​ ​​charset​​​​=​​​​"UTF-8"​​​​>​​

​​<​​​​meta​​ ​​name​​​​=​​​​"viewport"​​ ​​content​​​​=​​​​"width=device-width, initial-scale=1.0"​​​​>​​

​​<​​​​title​​​​>Document</​​​​title​​​​>​​

​​<​​​​style​​ ​​type​​​​=​​​​"text/css"​​​​>​​

​​*{​​

​​margin: 0;​​

​​padding: 0;​​

​​}​​

​​body{​​

​​width: 100%;​​

​​height: 100%;​​

​​background-color: dodgerblue;​​

​​}​​

​​.box{​​

​​width: 300px;​​

​​height: 300px;​​

​​margin: 30px;​​

​​background-color: gray;​​

​​}​​

​​.box< http://www.qlyl1688.com/ >.child{​​

​​width: 200px;​​

​​height: 200px;​​

​​margin: 50px;​​

​​background-color:darkturquoise;​​

​​}​​

​​</​​​​style​​​​>​​

​​</​​​​head​​​​>​​

​​<​​​​body​​​​>​​

​​<​​​​div​​ ​​class​​​​=​​​​"box"​​​​>​​

​​<​​​​div​​ ​​class​​​​=​​​​"child"​​​​>​​

​​</​​​​div​​​​>​​

​​</​​​​div​​​​>​​

​​</​​​​body​​​​>​​

​​</​​​​html​​​​>​​

实际效果:

这其实不是我们想要的效果,先来说下为什么会出现这个问题:

有两个嵌套关系的div,如果外层div的父元素padding值为0,那么内层div的margin-top或者margin-bottom的值会“转移”给外层div。

解决该问题我们需要先了解ie特有的一个属性haslayout。

我们要实现的效果是这样的:

最后我们来说一下解决方法:

1、让父元素生成一个block formating context(块级格式化上下文,可自行百度了解),以下属性可以实现

float: left/right

position: absolute

display: inline-block

overflow: hidden/auto

2、给父元素添加border或者padding

以方法一的overflow:hidden为例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

​​​​

​​<​​​​html​​ ​​lang​​​​=​​​​"en"​​​​>​​

​​<​​​​head​​​​>​​

​​<​​​​meta​​ ​​charset​​​​=​​​​"UTF-8"​​​​>​​

​​<​​​​meta​​ ​​name​​​​=​​​​"viewport"​​ ​​content​​​​=​​​​"width=device-width, initial-scale=1.0"​​​​>​​

​​<​​​​title​​​​>Document</​​​​title​​​​>​​

​​<​​​​style​​ ​​type​​​​=​​​​"text/css"​​​​>​​

​​*{​​

​​margin: 0;​​

​​padding: 0;​​

​​}​​

​​body{​​

​​width: 100%;​​

​​height: 100%;​​

​​background-color: dodgerblue;​​

​​}​​

​​.box{​​

​​width: 300px;​​

​​height: 300px;​​

​​margin: 30px;​​

​​background-color: gray;​​

​​overflow: hidden;​​

​​}​​

​​.box .child{​​

​​width: 200px;​​

​​height: 200px;​​

​​margin: 50px;​​

​​background-color:darkturquoise;​​

​​}​​

​​</​​​​style​​​​>​​

​​</​​​​head​​​​>​​

​​<​​​​body​​​​>​​

​​<​​​​div​​ ​​class​​​​=​​​​"box"​​​​>​​

​​<​​​​div​​ ​​class​​​​=​​​​"child"​​​​>​​

​​</​​​​div​​​​>​​

​​</​​​​div​​​​>​​

​​</​​​​body​​​​>​​

​​</​​​​html​​​​>​​

最终效果:

今天的文章就分享到这啦,内容转自脚本之家,下篇文章再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值