css盒子模型及盒子模型的类型

html-css06

css盒子模型及盒子模型的类型,第1张

转自 菜鸟教程

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括: 边距(外边距) 边框 填充(内边距) ,和 实际内容

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model):

转自 链接

盒子模型有两种,分别是W3C盒子模型(标准盒模型)和IE盒子模型(怪异盒模型)

1.标准盒模型中width指的是内容区域content的宽度;height指的是内容区域content的高度。

2.标准盒模型下盒子的大小 = content + border + padding + margin

1.怪异盒模型中的width指的是内容、边框、内边距总的宽度(content + border + padding);height指的是内容、边框、内边距总的高度

2.怪异盒模型下盒子的大小=width(content + border + padding) + margin

建议不要给元素添加具有指定宽度的内边距,而是尝试将内边距或外边距添加到元素的父元素和子元素。

即box-sizing属性可以指定盒子模型种类,content-box指定盒子模型为W3C(标准盒模型),border-box为IE盒子模型(怪异盒模型)。

盒子模型用于处理元素的内容、内边距、边框和外边距的方式简称。元素框的最内部分是实际的内容,直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素。

内边距、边框和外边距都是可选的,默认值是零。但是,许多元素将由用户代理样式表设置外边距和内边距。可以通过将元素的 margin 和 padding 设置为零来覆盖这些浏览器样式。

CSS实现页面布局的一种思想:把页面的所有元素都看成一个类似于礼品盒的盒子,礼品盒可能会有好多层包装组成,那么页面元素也对应的有内容、边框、内外边距等组成。这里特别提醒一下,盒模型是要把元素看成立体的,它确实有空间的3D属性,css盒子3D模型从上到下分为5层:1、border;2、content+padding;3、background-image;4、background-color;5、margin。

目前有: 标准盒子模型和IE盒子模型 2种盒模型 ,区别在于:

为了满足跨浏览器的差异,我们比较肯定的方式是使用标准盒模型,这里通过在网页顶部增加DOCTYPE的声明,来解决跨浏览器兼容方案(或者使用css3的声明方式):

块级元素会独占一行,默认情况下,其宽度自动填满其父元素宽度。

行内元素不会独占一行,相邻的行内元素会排列在同一行里,直到一行排不下,才会换行,其宽度随元素的内容而变化,另外

块级元素:div , p , form, ul, li , ol, dl,form, address, fieldset, hr, menu, table...

行内元素(内联元素):a , span, strong, em, br , img , input, label, select, textarea, cite....

如果想让一个元素可以设置宽度高度,又让它以行内形式显示,我们可以设置display的值为inline-block。

CSS3增加的box-sizing属性,允许我们规定元素使用哪种盒模型。IE8及以上版本支持该属性,Firefox 需要加上浏览器厂商前缀-moz-,对于低版本的IOS和Android浏览器也需要加上-webkit-。它具有有3个属性值:

box-sizing:content-box: W3C标准盒模型,默认属性。padding和border不被包含在定义的width和height之内。

box-sizing:border-box: IE6混杂模式盒模型, padding和border被包含在定义的width和height之内。此属性表现为怪异模式下的盒模型。

box-sizing:inherit : 从父级元素中继承该属性。

如果设置box-sizing:border-box来使用IE6混杂盒模型 ,那么

设置padding与border后,内容区的宽度和高度被压缩为70px 70px,盒子的原尺寸仍然是100px 100px

当一个容器宽度定义为 width:100%之后,如果再增加 padding 或者 border 则会溢出父容器,是向外扩张的。如果使用该样式,指定为 box-sizing: border-box则 padding 和 border 就不会再溢出,而是向内收缩的,这个效果是非常实用的。

备注 :我们需要在不同设备的不同尺寸屏幕下去浏览网页,传统的网页布局方式很难满足响应式布局的需要。因此css3提出了一些全新的布局属性,包括: 弹性盒子模型 , 多列属性 , 响应式布局 等等。弹性盒子模型的最大特征在于动态修改子元素的宽度和高度,以满足在不同尺寸屏幕下的恰当布局。

说明 :盒子模型的内容范围包括内容(content)、内边距(padding)、边框(border)和外边距(margin)。盒子模型就是通过div和css样式来设计一个可以添加逻辑的效果。

备注 :内边距(padding)在 content 外,边框内。内边距有1个参数时,上下左右外边距都为该参数值;2个参数时,第一个参数为 上下 外边距值,第二个参数为 左右 外边距值;4个参数分别代表 上右下左 外边距值。

边框可以创造出效果出色的边框,并可以应用于任何元素。 基本的边框属性

简化写法

备注: border: 1px solid red三个参数分别为边框的宽度、样式和颜色属性。

css3提供的边框属性

eg1 :圆角边框的绘制

阴影属性(box-shadow)的4个参数分别代表:背景阴影 向右 移动10个像素,再 向下 移动20个像素;阴影 透明度 ;阴影 颜色 。

备注:围绕在内容边框的区域就是外边距(margin),外边距默认是透明区域,外边距接受任何长度单位和百分数值。外边距和内边距的属性比较相似。margin的参数个数和对应代表大含义和padding一致。

盒子模型示例

说明:最外层的div为容器层,之后为边框、内边距和内容区域。

说明:外边距合并就是一个叠加的概念。外边距合并遵循边距大的一方,即元素1的外边距为10px,元素2的外边距为20px,则元素1和元素2间的距离为20px;元素1的外边距为10px,元素2的外边距为10px,则元素1和元素2间的距离为10px。

(1) 弹性容器属性

(2) 弹性子元素属性

eg1