框模型 Box Model

1.框模型由外向内:

margin,border,padding,content四层。

过度约束:指框模型的宽度或高度属性都指定了非auto的值时,其中之一的计算值将和它的指定值不同。

2.包含块ContainingBlock

绝对定位的块级元素的包含块是由最近的position值不是static的祖先块级元素生成,或者元素的包含块是初始包含块。通常是body

常规流向的元素的包含块的宽度,就是元素的父元素的内容框的宽度。

3.width:块级元素和可替换元素的内容框的宽度

非替换行内元素的宽度是其内容经过浏览器解释后实际的宽度,而不能设置其width值。

替换元素具有内在尺寸,它们的width属性是有效的。如img,根据层叠原理,css的width属性优先于html元素的width属性。

width是百分比时,在css2中,百分比的基数是元素的包含块的宽度值。

定义图片的高度时,如果未定义宽度,图片会等比例缩放。

可以把非替换行内元素设置为display:block,它会自动充满父块元素的内容宽度。

width的默认值是auto,非浮动的块级元素表现为,它的框宽度总是会填充满父元素的内容框,此时其它尺寸属性的值为0。即self.width=父.width-self.marginLeft-self.marginRight;width为auto时,会尽量占据最大的宽度。

块级元素才具有上下边距及width属性。

4.border

边框颜色:{border-color:redredredred;},以及border-top-color,相应地right,bottom,left。

边框宽度:{border-width:1em1em1em1em;},以及border-top-width,相应地right,bottom,left。取值为:thin,medium,thick或数值,inherit。

边框样式:boder-style:soliddotteddashedoutset;以及border-top-style,相应地right,bottom,left。取值:none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset,

详见http://zh.html.net/tutorials/css/lesson11.php

不同方向的边框缩写形式:

{border-top:3pxsolid#E10001;}//顺序不做要求,并且可省略其中的值。

{border:3pxsolid#E10001;}//border定义同时对4个边框起作用。

{border:0;}{border:none;}取消边框的定义

border:0和border:none区别:

border:0把border设为0px,虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已经占用了内存值;

border:none把border设为"none"即没有,浏览器解析"none"时将不作出渲染动作,不会消耗内存值。建议使用border:none;

同样的,display:none隐藏对象浏览器不作渲染,不占用内存,而visibility:hidden则会。

边框圆角的渲染:

border-radius:30px;可以为每个角设定不同的值.请注意Firfox和webkit对圆角属性的不同命名方式.

便于浏览器渲染圆角,为webkit添加"-webkit-",为Firefox添加"-moz-".注意Firfox和webkit对圆角属性的不同命名方式.

构成Box阴影的参数序列与text-shadow属性相同:x-offset,y-offset,blur,andcolor.

-moz-box-shadow:

-2px-2px0#fff,

2px2px0#bb9595,

2px4px15pxrgba(0,0,0,.3);

5.padding补白,填充,内边距,内补丁。

padding不包含在width,height之内,

padding区域会透出背景颜色

padding的百分比值基数是包含块的宽度,padding的四个值都是,与包含块的高度无关。

对于行内元素,padding不会影响到行高,行高不是元素的height值,设置了padding的span元素的垂直方向的背景色会在行框外显示。

对于行内元素,边框到内容之间的距离不受行高line-height影响,要设置padding才行。

6.margin边白,外边距,外补丁

边框外的透明区域,显示出父元素的背景。

垂直方向margin对非替换的行内元素无效。

边距的百分比值的基数也是基于包含块的宽度。

边距允许负值,补白不允许负值。

横向的7个属性中,with,margin-left,margin-right值可以为auto,其余默认为0。

当margin-left:auto,width,margin-right都不是auto时,self.marginLeft=父.width-self.width-self.marginRight;

当margin-left,margin-right都为auto,width不是auto时,self.marginLeft=self.marginRight=(父.width-self.width)/2,这实现了水平居中。

当margin-left:auto;width:auto;margin-right:10px;时,self.width=parent.width-10px,margin-left结果为0。

7.边距重叠:指边距合并,只发生在垂直方向。在常规流向中,相邻的块框垂直边距会发生重叠,结果是边距较大的那个值。

边距重叠在元素与其后代元素间的出现,只限于元素本身没有文字内容、边框,及补白时。

浮动元素、绝对定位元素、及行内元素(display:inline-block)与其它元素框的垂直边距不重叠。inline-block元素具有块级元素特性,同时可在一行内显示。

元素的overflow属性值不为visible时,也不会重叠。overflow:auto会产生滚动条;

根元素与其后代元素的边距不重叠。

8.页面水平居中

bodypadding-left:50%,元素Amargin-left:负值宽度的一半,实现A在页面中水平居中。

因为padding的百分比是基于包含块的宽度,所以这个方法实现不了垂直居中。

页面水平,垂直居中

这里我们使用百分比绝对定位,与外补丁负值的方法,负值的大小为其自身宽度高度除以二

<divstyle="margin:auto;width:250px;height:250px;position:absolute;top:50%;left:50%;margin:-125px00-125px;">

9.height

百分比值的高度,以包含块的高度为基数计算。

10.块级元素生成一个主块框,blockbox,主块框或者只包含多个块框,或者只包含多个行内框inlinebox。不会两者同时包含。当被包含元素有块框时,同级的被包含的行内框会被包含在一个匿名的块框或者插入框之内。

11.行内框inlinebox

display:inline,display:inline-table,display:run-in。

块级元素生成块框,行内元素生成行内框。

同匿名块框类似,当被包含元素有只有行内框时,同级的被包含的文字会被包含在一个匿名行内框中。

12.插入框run-inbox

如果插入框包含块框,或者它后面是一个原始标准块框,它就是一个块框了;

如果插入框不包含块框,且它之后是一个标准块框,则插入框变成后面的块框的第一个行内框。这种变化在相邻的插入框和块框间只能有一次。

这里说的原始标准块框是指,它不是插入框,也不是和插入框融合过的块框。

插入框的属性继承文档树中它的父元素,不是融合后的父元素。

相关推荐