盒模型,也有你没注意到的细节!

771 阅读2分钟

简介

盒模型分为以下两种:W3C标准盒模型IE盒模型,但无论是哪种盒模型,其都是由四个部分组成的:分别是contentpaddingbordermargin

IE盒模型和W3C标准盒模型的区别

标准盒模型和IE盒模型的区别在于设置widthheight时,所对应的范围不同

W3C标准盒模型

widthheight属性的范围只包含了content,不包含paddingborder。也就是说我们设置的width属性值为多少,盒模型的content部分就是多宽的;height属性值为多少,盒模型的content部分就是多高的

IE盒模型

IE盒模型设置的widthheight属性的范围包含了borderpaddingcontent,也就是说width值对应的是content + padding + border

box-sizing属性

在当前W3C标准中盒模型是可以通过box-sizing属性自由切换的,其默认值是content-box即标准盒模型;该属性还有一个值为border-box,设置该值则代表该元素将要使用IE盒模型来进行布局

content-box(默认值,标准盒模型)

border-box(IE盒模型)

盒子的大小

很多时候,我们在谈论盒子的大小时总是会把margin算进去,但是这样真的对吗?

比如我先在问你下面代码中element元素对应盒子的大小是多少?

<style>
  .element {
    width: 100px;
    height: 100px;
    padding: 10px;
    margin: 10px;
    border: 10px solid #ccc;
    background-color: orange;
  }
</style>

<body>
  <div class="element"></div>
</body>

肯定会有很多同学说是160 x 160 px,因为是盒模型嘛,当然是要算上整个盒子的所有部分啦,于是盒子的长度就是10 + 10 + 10 + 100 + 10 + 10 + 10 = 160 px,盒子的宽也同理,但这个答案是错误的!

CSS盒模型由content(内容)、padding(内边距)、border(边框)、margin(外边距组成)。但盒子的大小却只由content + padding + border这几部分决定,而不包括margin。特别注意:把margin算进去的那是盒子占据的位置,而不是盒子的大小,所以上面盒子的大小应该是140 x 140 px才对

标准盒

看了前面的介绍,我们现在应该能够快速的说出标准盒模型的大小——长度为width+ padding + border,宽度为height+ padding + border,盒子占据的位置还需要算上margin

IE盒

由于IE盒的widthheight属性是包括了contentpaddingborder部分的,所以IE盒子的大小就为width x height,同理,其占据的位置也要算上margin

参考文章

juejin.cn/post/684490…

juejin.cn/post/690553…