【华为云全栈成长计划】CSS盒模型 — 标准盒模型和怪异盒模型

举报
Winter_Z 发表于 2020/06/26 22:52:26 2020/06/26
【摘要】 在CSS盒模型的课程中,张宇老师提到了元素实际大小宽度的计算方法,但是我在demo中计算的结果与实际不符合。因此我在交流群向一些前辈大神讨教,才得知CSS盒模型还分为了W3C标准盒模型和IE(怪异)盒模型。这篇文章我想向初学CSS盒模型的大家进行一个拓展(弄明白这俩盒模型我竟然用了一个上午),也非常希望有大佬看到这篇文章后能给出一些建议!老小白了,第一次写文章不足之处望大家指出,谢谢!

一、CSS盒模型(Box Model)

你可以将每个 HTML 元素/标签 都当作是一个盒子。然后大盒子里面包裹小盒子,就跟俄罗斯套娃一样一层包裹一层,这就是所谓的盒模型。

而这个盒子模型,一共是由四个部分组成:

   属性

   内容含义

   margin    外边距,即每个盒子之间的距离。
   border    边框,即每个盒子的界线或者厚度。
   padding    内边距,即盒子中的内容与盒子边框的距离。
   content    内容,即盒子中的内容区域。

下面这张图个人觉得很好的说明了盒子模型(Box Model)的构成:

(图源来自:菜鸟教程)


二、标准盒模型和IE盒模型

盒模型还分为:W3C标准盒模型IE盒模型(也叫怪异盒模型)

1、W3C标准盒模型:

W3C标准盒模型的范围(组成)包括了marginborderpaddingcontent;但是,content部分并不包括其他组成部分。如下demo:

.box{
    width: 300px;
    height: 300px;
    margin: 20px;
    border: 20px solid red;
    padding: 20px
}
按照 W3C标准盒模型 来解析,那么:
这个盒子(box元素)需要占据的位置为:
width = margin*2 + border*2 + padding*2 + content.width = 20*2 + 20*2 + 20*2 + 300 = 420px
height = margin*2 + border*2 + padding*2 + content.height = 20*2 +20*2 + 20*2 + 300 = 420px

这个盒子(box元素)的实际大小为:
width = border*2 + padding*2 + content.width = 20*2 + 20*2 + 300 = 380px
height = border*2 + padding*2 + content.height = 20*2 + 20*2 + 300 = 380px

注意:之所以计算出来不同的结果,是因为一个是盒子占据页面位置大小,一个是盒子的实际大小。区别在于实际大小不包含margin。初学者去查阅网络文档的时候作者没有说清楚很容易造成混淆。

2.IE盒模型(怪异盒模型):

IE盒模型(怪异盒模型)的范围(组成)包括了marginborderpaddingcontent; 但是,content部分包括了border、contentpadding部分。如下demo:

.box{
    width: 300px;
    height: 300px;
    margin: 20px;
    border: 20px solid red;
    padding: 20px
}
按照 IE盒模型 来解析,那么:
这个盒子(box元素)需要占据的位置为:
width = margin*2 + content.width = 20*2 + 300 = 380px
height = margin*2 + content.height = 20*2 + 300 = 380px

这个盒子(box元素)的实际大小为:
width = content.width = 300px
height = content.height = 300px

注意:之所以计算出来不同的结果,是因为一个是盒子占据页面位置大小,一个是盒子的实际大小。区别在于实际大小不包含margin。初学者去查阅网络文档的时候作者没有说清楚很容易造成混淆。

三、关于box-sizing属性

W3C给出定义:box-sizing 属性允许你以某种方式定义某些元素,以适应指定区域。不配合demo的话可能会有点难理解这个定义,简单来理解它就是转换标准盒和IE盒的开关

box-sizing: content-box | border-box | inherit;

属性值 效果
content-box 默认值;width和height分别作用到元素的内容框(content),在内容框之外绘制元素的margin、border、padding。W3C标准盒模型
border-box 为元素设置的height和width决定了元素的边框盒(边界线),在边框盒内绘制元素的borderpadding,也就是content包含了border、padding。即IE(怪异)盒模型
inherit 继承父元素box-sizing的属性值;

注意border-box不包含margin。

四、总结

CSS盒模型主要是用来网页设计和布局时使用的。它是CSS的基础,同时也是个难点,在进行布局的时候离不开盒模型的使用。

  1. CSS盒模型分为W3C盒模型和IE(怪异)盒模型;

  2. CSS盒模型由四部分构成:margin、border、padding、content;

  3. 计算盒子实际大小的时候不包含margin;计算盒子占据位置大小时需要包含margin;

  4. 标准盒模型的content部分不包含其他部分;IE盒模型的content部分包含了border、padding、content;

  5.  box-sizing: conent-box;将盒子设置为标准模型(盒子默认为标准模型);

  6.  box-sizing: border-box;将盒子设置为 IE 模型(也叫做怪异盒子);


最后呢补充一点:浏览器的兼容性问题

就是我们在编写代码的时候尽量使用W3C的标准,也就是在页面头部声明DOCTYPE类型。这样可以避免不同浏览器对同一页面的兼容性问题。

在使用CSS盒模型的情况下,如果不声明DOCTYPE类型,那么在IE浏览器下盒模型将会按照IE(怪异)盒模型解析,在其他浏览器下回按照W3C标准盒模型进行解析声明了DOCTYPE类型,那么所有浏览器都会按照W3C标准盒模型进行解析

五、个人感悟

这是我第一次写文章,到后面已经是一种自嗨状态了(我妈说我疯了)哈哈哈哈哈~~~因为一想到我发布了这个文章会帮助到一些和我同为初学者的小伙伴就很兴奋。

写文章真的蛮辛苦的,不过对自己的所学所见能有一个整理记录的作用,还能帮助到其他人也是蛮有成就感的一件事~~

还有就是对初学者嘚一个建议,遇到了问题一定要多查多问多记录!!遇到了问题一定要多查多问多记录!!遇到了问题一定要多查多问多记录!!

能加到高质量嘚交流群最好了!!因为真的问大佬要比百度谷歌啥的要有效率的多还能拓展很多知识点,然后多跟他们交流也是能学到一些专业知识或者生活职业相关的常识,对我们初学者真的很有帮助。

诶呀好像有点啰嗦啦第一次写文章想啥都记录下来哈哈哈~~那希望这篇文章能对大家有所帮助啦



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。