html盒子模型代码_图解两种标准的盒模型

a92473642a6b50f306da3e6a378f68e0.gif
来源:https://juejin.cn/post/6844903505983963143
作者:哆来咪er
CSS的盒模型是CSS的基础,同时也是难点,这个问题经常在面试中会被问到,属于经典问题了。很多博客里讲得也很模糊不清,于是,我在这里重新整理一下。
可以认为每个html标签都是一个方块,然后这个方块又包着几个小方块,如同盒子一层层的包裹着,这就是所谓的盒模型。
盒模型分为IE盒模型和W3C标准盒模型。二者的区别是什么呢?
1. W3C 标准盒模型:

属性width,height只包含内容content,不包含border和padding。

2. IE 盒模型:
属性width,height包含border和padding,指的是content+padding+border。
在ie8+浏览器中使用哪个盒模型可以由box-sizing(CSS新增的属性)控制,默认值为content-box,即标准盒模型;如果将box-sizing设为border-box则用的是IE盒模型。如果在ie6,7,8中DOCTYPE缺失会触发IE模式。在当前W3C标准中盒模型是可以通过box-sizing自由的进行切换的。
(1)content-box(标准盒模型)
  • width = 内容的宽度
  • height = 内容的高度
(2)border-box(IE盒模型)
  • width = border + padding + 内容的宽度
  • height = border + padding + 内容的高度
谷歌浏览器,按下F12,然后把右边栏的滚动条拉到最下面你就会看到一个东西:
5171f5834d70e0deb6cba60e95ce4a3a.png
通过代码来对其进行理解,更直观,如下:
.box{    width:200px;    height:200px;    background-color:pink;}
ca33e58b9729e10c63b9623dfd6a2983.png
此时,盒子大小就是content的大小。
.box{    width:200px;    height:200px;    background-color:pink;    padding:20px;}
c271ceca36482214b3f2e4ecb1509f37.png f7d644ddd6a736b5f45e3962ad096985.png
此时,盒子的长宽变成了240x240,显然,padding是能改变盒子的大小的,这时盒子大小就等于content+padding。
.box{    width:200px;    height:200px;    background-color:pink;    padding:20px;    border:10px solid black;}
1f380fd071db354e0bab923e70310b04.png d3395ffdaa16de59f3f8db2afb734596.png
此时,盒子的长宽变成了260x260,所以这时盒子大小就等于content+padding+border。
.box{    width:200px;    height:200px;    background-color:pink;    padding:20px;    border:10px solid black;    margin-bottom:10px;}.box1{    width: 100px;    height: 100px;    background: green;}
效果图如下:
5d6e0ca5d2fe23bfe793ad83d827c2d9.png
此时,盒子的长宽仍为260x260,即盒子的大小并未发生变化。
aa8b8440cac3fd864c67dc1b7aa1fe3b.png cbfcfb718443b31e838d451bca1ee0b3.png
可以看到,盒子的底部产生了10px的空白。
所以说,盒子的大小为content+padding+border即内容的(width)+内边距的再加上边框,而不加上margin。很多时候,我们会错误地把margin算入,若那样的话,上面这种情形盒子的大小应该是260x270,但实际情况并不是这样的。
css的盒模型由content(内容)、padding(内边距)、border(边框)、margin(外边距)组成。但盒子的大小由content+padding+border这几部分决定,把margin算进去的那是盒子占据的位置,而不是盒子的大小!
我们可以试着给上面的粉色方块设置box-sizing属性为border-box发现,会发现:无论我们怎么改border和padding盒子大小始终是定义的width和height。如下:
.box{    width:200px;    height:200px;    background-color:pink;    box-sizing:border-box;    padding:20px;}
8fb057dfd3dce9cc0f8c2cd2356d133f.png
我们在编写页面代码时应尽量使用标准的W3C模型(需在页面中声明DOCTYPE类型),这样可以避免多个浏览器对同一页面的不兼容。
因为若不声明DOCTYPE类型,IE浏览器会将盒子模型解释为IE盒子模型,FireFox等会将其解释为W3C盒子模型;若在页面中声明了DOCTYPE类型,所有的浏览器都会把盒模型解释为W3C盒模型。
CC推荐· 加我微信(codenotes66),进我的技术交流群· 关注我的公众号,做一个有趣的技术人………

668dd31b4b225e4b35d8d39b9d483a55.pngd61cfd293410c789956f39ad43de3ecf.gif

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值