盒子模型04459.docx

上传人:b****7 文档编号:10479634 上传时间:2023-02-13 格式:DOCX 页数:9 大小:71.95KB
下载 相关 举报
盒子模型04459.docx_第1页
第1页 / 共9页
盒子模型04459.docx_第2页
第2页 / 共9页
盒子模型04459.docx_第3页
第3页 / 共9页
盒子模型04459.docx_第4页
第4页 / 共9页
盒子模型04459.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

盒子模型04459.docx

《盒子模型04459.docx》由会员分享,可在线阅读,更多相关《盒子模型04459.docx(9页珍藏版)》请在冰豆网上搜索。

盒子模型04459.docx

盒子模型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

2

3

容器的排列

在通常的情况下,页面上所有容器的顺序都按照载入的顺序排列。

而使用CSS3提供的功能后,我们可以在不改变HTML结构的前提下随意改变容器显示的位置,这样不但给排版带来极大的方便,我们也可以利用这些功能进行流量整形。

在需用使用灵活盒子模型(FlexibleBoxModule)的时候,我们需要先把其父容器的Display属性设置为box或者inline-box。

水平分布和垂直分布

我们可以通过box-orient属性指定容器的分布轴,当这个属性的值为vertical时其子容器将垂直分布(也可以为block-axis),当值为horizontal时其子容器讲水平分布(也可以为inline-axis)。

在本文的第一个例子里我使用了以下的CSS:

以下为引用的内容:

#exemple1.content{

-moz-box-orient:

horizontal;

-webkit-box-orient:

horizontal;

box-orient:

horizontal;

}

#exemple1.boite{

-moz-box-flex:

1;

-webkit-box-flex:

1;

box-flex:

1;

}

具体的效果可以看这个DEMO,三个子Div容器都横向并列了。

注:

这个效果在CSS2里理论上也可以通过Display:

inline;实现,但由于某些浏览器的BUG,没人会这样做。

反序排列

box-direction属性可以让我们随意改变容器的显示顺序。

我们知道,在默认的情况下,block级元素是按照加载顺序从上到下排列,inline级元素是从左到右排列的,但现在通过box-direction属性我们可以让最后加载的block级元素显示在最顶部,最后加载的inline级元素显示在左边。

但在使用这个属性的时候要注意它可能会改变元素的某些属性,产生一些不能控制的效果。

在第二个例子里,我使用了以下的CSS:

以下为引用的内容:

#exemple2.content{

-moz-box-orient:

vertical;

-moz-box-direction:

reverse;

-webkit-box-orient:

vertical;

-webkit-box-direction:

reverse;

box-orient:

vertical;

box-direction:

reverse;

}

#exemple2.boite{

-moz-box-flex:

1;

-webkit-box-flex:

1;

box-flex:

1;

}

效果大家可以看这个DEMO。

可以发现,在不改变HTML结构的情况下,容器的排列顺序改变了。

按指定顺序排列

我们不但可以让一组同级容器反序排列,而且还可以让它们按自己喜欢的顺序排列,box-ordinal-group属性可以帮我们做到这一点。

通过box-ordinal-group为各个容器指定一个序号,默认情况下他们将会按照序号递增的顺序排列。

要注意的是:

没有指定序号的容器默认都为1,并且序号相同的元素将按照加载顺序排列。

大家可以看一下下面的CSS:

以下为引用的内容:

#exemple3.content{

-moz-box-orient:

vertical;

-moz-box-direction:

reverse;

-webkit-box-orient:

vertical;

-webkit-box-direction:

reverse;

box-orient:

vertical;

box-direction:

reverse;

}

#exemple3.boite{

-moz-box-flex:

1;

-webkit-box-flex:

1;

box-flex:

1;

}

#exemple3.v1{

-moz-box-ordinal-group:

2;

-webkit-box-ordinal-group:

2;

box-ordinal-group:

2;

}

#exemple3.v2{

-moz-box-ordinal-group:

2;

-webkit-box-ordinal-group:

2;

box-ordinal-group:

2;

}

#exemple3.v3{

-moz-box-ordinal-group:

1;

-webkit-box-ordinal-group:

1;

box-ordinal-group:

1;

}

在上面的CSS里,我把第一和第二个容器的序号都定为2,第三个容器序号为1,因此最终效果应该是v3排在第一,v1和v2则根据加载顺序,v1排在v2前面。

效果可以看这个DEMO。

后记

CSS3真的非常强大,我相信在它普及以后,我们做网页的时候将可以减少大量的JavaScript。

关于CSS3盒子模型的介绍还没完,这篇文章只介绍了一下容器的排序,下一次将说说容器的尺寸。

欢迎订阅本博客,以即时获知最新的更新。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1