什么是CSS盒模型 ?IE盒模型和W3C盒模型是什么?

1.CSS盒模型

盒模型,顾名思义就是一个盒子。生活中的盒子,有长宽高,盒子本身也有厚度,可以用来装东西。页面上的盒模型我们可以理解为,从盒子顶部俯视所得的一个平面图,盒子里装的东西,相当于盒模型的内容(content);东西与盒子之间的空隙,理解为盒模型的内边距(padding);盒子本身的厚度,就是盒模型的边框(border);盒子外与其他盒子之间的间隔,就是盒子的外边距(margin)。其中CSS盒模型(图1)分为IE盒模型(图2)和W3C盒模型(图3)。

盒模型一共有两种模式,一种是标准模式(W3C盒模型),另一种就是怪异模式(IE盒模型)

  当你用编辑器新建一个html页面的时候你一定会发现最顶上都会有一个DOCTYPE标签,例如:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

  <!DOCTYPE HTML>  以上几种DOCTYPE都是标准的文档类型,无论使用哪种模式完整定义DOCTYPE,都会触发标准模式执行W3C盒模型总宽计算方式,而如果DOCTYPE缺失W3C,则浏览器将按照自己的方式解析代码。(详见3.CSS属性box-sizing和4.关于盒模型的使用)

元素的外边距(margin)、边框(border)、内边距(padding)、内容(content)就构成了CSS盒模型。

图1.css盒模型

2.IE盒模型和W3C盒模型

IE盒模型是怪异模式(Quirks Mode)下的盒模型,而W3C盒模型是标准模式(Standards Mode)下的盒模型。IE6及其更高的版本,还有现在所有标准的浏览器都遵循的是W3C盒模型,IE6以下版本的浏览器遵循的是IE盒模型

元素的x轴方向的外边距(margin)、width  就构成了CSS盒模型的宽。

图2.IE盒模型

元素的x轴方向的外边距(margin)、边框(border)、内边距(padding)、width(content)就构成了CSS盒模型宽。

图3.W3C盒模型

从上图直观的可以看出,IE盒模型的设计的宽度或者高度为:width/height = content + padding + border,W3C盒模型设计的宽度或者高度为:width/height = content。

举个橘子儿:

代码如下:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>Document</title>  <style>
.content {
     background: #eee;
     height: auto;
     border: 1px solid blue;
}
.div {
    width: 100px;
    height: 100px;
    margin: 30px;
    padding: 10px;
    border: 5px solid blue;
}
.div-01 {
    background: orange;
}
.div-02 {
    background: yellow;
    box-sizing: border-box;/*设置box-sizing:border-box浏览器以IE盒模型方式计算盒模型总宽,不设置则默认为box-sizing:content-box*/
}
</style>
</head><body>

<div class="content"> <div class="div div-01">div01</div> <div class="div div-02">div02</div> </div>

</body></html>

W3C盒模型下显示的div所占的总宽度(外边距(margin)、边框(border)、内边距(padding)、内容(content))为100 + 10 +10+5+ 5 + 30+30 = 190px(见图4.以W3C盒模型计算时),IE盒模型下显示的div所占的总宽度(外边距(margin)、width  )为100 + 30+30 = 160px(见图5.IE盒模型计算时)。很明显的区别,如果元素的宽度(width)一定的情况下,W3C盒模型的宽度(width)不包括内边距和边框,IE盒模包括。

图4.以W3C盒模型计算时                                     图5.以IE盒模型计算时

图6.代码执行效果

3.CSS3属性box-sizing

如果计算一个盒子的长宽高,我们一般都是盒子本身的厚度加上盒子里的空间大小,所在在IE盒模型和W3C盒模型,我们会觉得IE盒模型更符合逻辑。
       不同的人有不同的习惯,所以CSS3新增了一个属性box-sizing: content-box | border-box | inherit,默认值为content-box。如果值为content-box,那元素遵循的是W3C盒模型;如果值为border-box,那元素遵循的是IE盒模型;如果值为inherit,该属性的值应该从父元素

4.关于盒模型的使用

图7.各式浏览器

虽说现在的浏览器都兼容该属性(如上图),还是得以防万一,在属性前最好暂时加-webkit-和-moz-前缀。

* {
  -webkit-box-sizing: content-box;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
}

在上图,我们看到IE兼容属性box-sizing必须是8或者更高的版本,其他浏览器都可以自动升级,兼容性不担心,那如果是IE7、IE6或者更低的版本,怎么办?还有,如果我们不用该属性,那浏览器该选择哪种盒模型呢?

其实,浏览器选择哪个盒模型,主要看浏览器处于标准模式(Standards Mode)还是怪异模式(Quirks Mode)。我们都记得<!DOCTYPE>声明吧,这是告诉浏览器选择哪个版本的HTML,<!DOCTYPE>后面一般有DTD的声明,如果有DTD的声明,浏览器就是处于标准模式;如果没有DTD声明或者HTML4一下的DTD声明,那浏览器按照自己的方式解析代码,处于怪异模式。

处于标准模式的浏览器(IE浏览器版本必须是6或者6以上),会选择W3C盒模型解析代码;处于怪异模式的浏览器,则会按照自己的方式去解析代码,IE6以下则会是选择IE盒模型,其他现代的浏览器都是采用W3C盒模型。

因为IE6以下版本的浏览器没有遵循Web标准,不论页面开头有没有DTD声明,它都是按照IE盒模型解析代码的

参考资料:https://www.cnblogs.com/ylliap/p/6119740.html     (JollyLee 博客资料)

https://www.cnblogs.com/Kyaya/p/6003879.html   (lilyliu329 博客资料)

Time:2020-02-22

原文地址:https://www.cnblogs.com/Sedfabt-xiaofeng/p/12343900.html

时间: 2024-08-10 22:43:38

什么是CSS盒模型 ?IE盒模型和W3C盒模型是什么?的相关文章

基于JVM原理JMM模型和CPU缓存模型深入理解Java并发编程

许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的Java开发工作中,仅仅了解并发编程的创建.启动.管理和通信等基本知识还是不够的.一方面,如果要开发出高效.安全的并发程序,就必须深入Java内存模型和Java虚拟机的工作原理,从底层了解并发编程的实质:更进一步地,在现今大数据的时代,要开发出高并发.高可用.考可靠的分布式应用及各种中间件,更需要深

第二章 OSI参考模型和TCP/IP模型(续)

3.TCP/IP模型 3.1 TCP/IP的层次结构 网络层

OSI模型和TCP/IP模型

OSI七层模型记忆: all people seem to need data processing. Application(应用层) -- all Presentation(表示层) --- people Session(会话层) -- seem Transport(传输层) -- to Network(网络层) -- need Data(数据链路层) -- data Physical(物理层) --- processing 1. 物理层: 主要定义物理设备标准,如网线的接口类型.光纤的接口

Java网络编程:OSI七层模型和TCP/IP模型介绍

OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路由器是三层交换设备,常规的交换机是二层交换设备.OSI七层模型是一种框架性的设计方法,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能就是帮助不同类型的主机实现数据传输.它的最大优点是将服务.接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的

Linux网络知识学习1---(基础知识:ISO/OSI七层模型和TCP/IP四层模型)

以下的内容和之后的几篇博客只是比较初级的介绍,想要深入学习的话建议看书<TCP/IP详解 卷1:协议> 1.ISO/OSI七层模型    下四层是为数据传输服务的,物理层是真正的传输数据的,数据链路层.网络层.传输层主要是写入对应数据的传输信息的        物理层:比特            设备之间的比特流的传输.物理接口.电气特性        数据链路层:帧            保存的最主要的信息是网卡的 mac 地址,mac 地址负责局域网通信的,发件人和收件人的mac 地址  

W3c盒子模型+IE盒子模型+box-sizing属性

1.盒子模型有两种,标准盒模型和IE盒模型,其中W3C标准的盒模型就是在网页的顶部加上 DOCTYPE 声明. (1)W3C标准的盒模型 W3C盒子模型包括4部分:margin,border,padding,content,其中,content不包括其他部分,下面内容(content)部分为蓝色的部分,不包含其他. w3c中的盒子模型的宽:包括margin+border+padding+width;(width为content的宽度) width:margin*2+border*2+paddin

OSI七层参考模型和TCP/IP四层参考模型

OSI七层参考模型和TCP/IP模型 一:OSI七层参考模型 1:物理层(比特):进行比特流的传输(比特流也是数据流,在不同的介质下表现的形式也不一样,在光纤中是光信号传递,这个比特流也就是光信号,如果是wifi,传递用的是光信号,那么比特流也就是光信号) 2:数据链路层(帧):建立和维护数据链路,提供物理地址(MAC地址) 3:网络层(报文):负责寻址(IP地址)和转发数据 4:传输层(TPDU):主要负责传输数据,建立端主机端(应用)到端的连接 5:会话层(SPDU):负责建立,管理,维护和

星型模型和雪花型模型比较

一.概述 在多维分析的商业智能解决方案中,根据事实表和维度表的关系,又可将常见的模型分为星型模型和雪花型模型.在设计逻辑型数据的模型的时候,就应考虑数据是按照星型模型还是雪花型模型进行组织. 当所有维表都直接连接到“ 事实表”上时,整个图解就像星星一样,故将该模型称为星型模型,如图 1 . 星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,如在地域维度表中,存在国家 A 省 B 的城市 C 以及国家 A 省 B 的城市 D 两条记录,

CSS盒模型和margin重叠

在 CSS 中,width 和 height 指的是内容区域的宽度和高度.增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸.(div的实际占用尺寸变打了) 但: 一旦为页面设置了恰当的 DTD,大多数浏览器都会按照上面的图示来呈现内容.然而 IE 5 和 6 的呈现却是不正确的.根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 padding 和 border 值是另外计算的.不幸的是,IE5.X 和 6 在怪异模式中使用自己的非标准模型