盒子模型04459.docx
《盒子模型04459.docx》由会员分享,可在线阅读,更多相关《盒子模型04459.docx(9页珍藏版)》请在冰豆网上搜索。
盒子模型04459
盒子模型,是XHTML+CSS布局页面中的核心!
要想学会用CSS布局页面,就首先要理解盒子模型!
什么是盒子模型?
对于初学者来说,很难说出来,但是对于生活中的盒子大家熟悉吧,哈哈,这里提到的盒子模型你就可以理解成现实生活中的盒子就可以了,不然怎么能起个名字叫“盒子模型”呢
好!
既然和现实生活中的盒子一样,那我们想一下,生活中的盒子内部是不是空的好用来存放东西,而里面存放东西的区域我们给他起个名字叫“content(内容)”,而盒子的纸壁给他起个名字叫“border(边框)”,如果盒子内部的东西比如是一块硬盘,但是硬盘怕震动,所以我们需要在硬盘的四周盒子的内部均匀填充一些防震材料,这时硬盘和盒子的边框就有了一定的距离了,我们称这部分距离叫“padding(内边距)”,如果我们需要购买许多块硬盘,还是因为硬盘怕震动所以需要在盒子和盒子之间也需要一些防震材料来填充,那么盒子和盒子之间的距离我们称之为"margin(外边距)"
OK~!
这下盒子模型的四要素就出来了分别是:
content(内容)、border(边框)、padding(内边距)、margin(外边距),如下图
什么是CSS的盒子模式呢?
为什么叫它是盒子?
先说说我们在网页设计中常听的属性名:
内容(content)、填充(padding)、边框(border)、边界(margin),CSS盒子模式都具备这些属性。
这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以叫它盒子模式。
那么内容(CONTENT)就是盒子里装的东西;而填充(PADDING)就是怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其它抗震的辅料;边框(BORDER)就是盒子本身了;至于边界(MARGIN)则说明盒子摆放的时候的不能全部堆在一起,要留一定空隙保持通风,同时也为了方便取出嘛。
在网页设计上,内容常指文字、图片等元素,但是也可以是小盒子(DIV嵌套),与现实生活中盒子不同的是,现实生活中的东西一般不能大于盒子,否则盒子会被撑坏的,而CSS盒子具有弹性,里面的东西大过盒子本身最多把它撑大,但它不会损坏的。
填充只有宽度属性,可以理解为生活中盒子里的抗震辅料厚度,而边框有大小和颜色之分,我们又可以理解为生活中所见盒子的厚度以及这个盒子是用什么颜色材料做成的,边界就是该盒子与其它东西要保留多大距离。
子模型(BoxModel)是从CSS诞生之时便产生的一个概念,对网页中的大部分对象,实际呈现形式就是一个盒子形状对象(即块状对象),对于这个基础又重要的概念,只要掌握盒子模型的尺寸及占位的标准技术方法,那就可以灵活驾驭盒子模型了!
CSS盒子模型
网页设计中的每个元素都是长方形的盒子。
怎样精确的计算盒子的尺寸?
请看下面一幅图:
盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin)。
如果你是一个Firebug的用户,就会很熟悉下面的图表了。
这个图表很好地展示了作用于页面上任意盒子的数值。
注意到上面两个例子中,margin都是白色的,margin比较特别,它不会影响盒子本身的大小,但是它会影响和盒子有关的其他内容,因此margin是盒模型的一个重要的组成部分。
盒子本身的大小是这样计算的:
Width
width+padding-left+padding-right+border-left+border-right
Height
height+padding-top+padding-bottom+border-top+border-bottom
值为声明的情况
如果未声明padding或者border,那他们或者值为零(使用cssreset时),或者为浏览器的默认值(很可能不是零,尤其是那些通常没有重置的表单元素)。
如果未声明盒子的width(而且这个盒子是一个块级元素),那么事情就变得有点怪异,我们先看这点,然后再看一下其他优秀的关于盒子模型的资料。
块级盒的默认宽度
如果没有声明宽度,而且盒子是静态或者相对定位,那么宽度将保持100%且padding和border将向内推动而不是向外扩展。
如果明确的确定宽度为100%,那么padding就会向外扩展。
从这个例子可以看出,盒子的默认宽度并不是100%,也可能是其他值,应该了解这种特别有价值的情况,因为在现存的很多情况下,它对于设置/不设置宽度是很多帮助的。
我遇到的最大的麻烦就是textarea(文本框)元素了,它们需要设为宽度为所需的”cols”属性,并且不能包含子元素。
因此通常需要明确的设置textarea的宽度为100%,但有padding时,就会延展textarea的宽度。
固定宽度环境下,通常可以设置为合适的像素值宽度,但是变宽情况就没那么幸运了。
无宽度的绝对定位盒子
未设定宽度的绝对定位的盒子的表现有点不一样。
它们的宽度只需要适合它们所包含的内容即可。
因此,如果盒中只有一个单词,盒子就会像那个词的表现一样宽。
如果变成两个词,盒子的宽度也会相应增加。
这种情况会持续到盒子的宽度达到父元素宽度的100%(最近的相对定位的父元素或者浏览器窗口),然后就会折行。
对盒子来说,垂直扩展以适应包含的内容是很自然的。
值得奇怪的是,不仅仅是不同平台下的文本表现不同,不同的浏览器处理这个问题时,也有很多怪癖。
无宽度浮动盒子
同无宽度的绝对定位盒子的表现一样。
盒子的宽度只需要扩展到所包含内容的宽度,直到其父元素的宽度(其父元素不必是相对定位的)。
由于这些无宽度盒子的脆弱性,我们要学到的是关键任务模式的时候它们是不能依赖的,像总体页面布局中。
如果浮动一列作为侧边栏使用,并指望那些内部元素(如图片)来负责包含它的宽度,你就是在自找麻烦。
内联元素也是盒子
我们这里一直把重点放在块级元素的盒子上。
很容易就可以把块级元素想象为盒子,但是内联元素也是盒子。
可以把他们想象为非常长而窄的长方形,它们也可以像其它盒子一样有margin,padding 和border。
折行使它看起来有些不好理解。
如上所示的左margin把盒子推向右边,但是只在第一行有效,因为那是盒子的起点。
padding正常的应用在文本的上部或下部,当折行时它会忽略上面行的padding并且以行高(line-height)要求的位置作为起点。
透明背景是为了让效果看起来更清楚。
CSS3标准里引入了一些新的盒子模型参数,在CSS2的基础上,我们将能更灵活地调整页面上各个容器的大小和位置。
详细的说明可以看这个文档。
通过学习和测试,我发现这种新的盒子模型布局对建立自适应布局的页面带来很大的好处。
在这篇文章中,我的所有例子都基于以下HTML代码:
以下为引用的内容:
1