1.盒子模型
-
在页面布局中,为了将页面元素合理有效地组织在一起,形成一套完整的、行之有效的原则和规范,称为盒子模型
-
页面中的所有元素都可以看成一个盒子,并占据一定的页面空间,通过盒子之间的嵌套、叠加或并列,最终形成了页面。
-
盒子模型是由内容(content)、边框(border)、内边距(padding) 和外边距(margin) 四部分组成
2.内容区content
- 内容区(content)是盒子模型的中心,包含了盒子的主要信息内容,例如文本、图片等。
- 内容区拥有width、height和overflow三个属性
- overflow属性用于当content中的信息太多,并超出内容区所占的范围时,通过该属性来指定溢出内容的处理方式,具体如下表所示
<style type="text/css">
div{
width:400px;
height:200px;
//当overflow属性为scroll,浏览器会添加一个滚动条
overflow:scroll;
}
</style>
3.边框border
边框(border)是指围绕元素的内容和内边距的一条或多条线,通过border-top-style、border-right-style、border-bottom-style和border-left-style四个属性对“上右下左”
四个方向的边框样式分别进行设置,每条边框又有宽度、颜色、样式和圆角等特征:
- 元素的边框的样式包括宽度、样式和颜色等
- 可以通过border-width、border-style和border-color属性对边框进行统一设置
- 可以通过border-top-width、border-top-style和border-top-color等属性对某一条边进行设置
边框border属性列表
3.1 边框宽度
边框宽度border-width属性的取值范围为指定的关键字或数值,其中关键字包括thin(细边框)、medium(默认值,中等边框)、thick(粗边框)
边框的参数可以是1~4个
- 当边框宽度有4个参数时,将按“上->右->下->左”的顺序作用到边框上,即遵循TRBL原则(按照Top、Right、Bottom、Left 顺时针方向依次赋值)
div { border-width:10px 20px 30px 40px; }
- 当边框宽度有3个参数时,将按“上->左+右->下”的顺序作用到边框上
div { border-width:10px 20px 30px; }
- 当边框宽度有2个参数时,将按“上+下->左+右”的顺序作用到边框上
div { border-width:10px 20px; }
- 当边框宽度有1个参数时,四个方向的边框宽度取值相同
div { border-width:10px; }
- 边框宽度的取值也可以使用关键字进行设置
div { border-width: thick/medium/thin; }
3.2 边框样式取值
3.3 圆角边框
-
通过border-top-left-radius、border-top-right-radius、border-bottom-right-radius和border-bottom-left-radius属性分别对左上角、右上角、右下角、左下角的样式进行设置
-
也可以使用border-radius属性对四个角的样式统一进行设置
-
圆角边框的圆角是椭圆的一条弧线,如下图所示,HR代表椭圆的水平半径,VR代表椭圆的垂直半径;HR与VR相同时,圆角就会变成四分之一圆弧
-
当border-top-left-radius具有一个参数时,水平半径与垂直半径相同
例如:border-top-left-radius:8px HR和VR均为8像素; -
当border-top-left-radius属性有两个参数时,第一个参数是水平半径,第二个参数是垂直半径
例如:border-top-left-radius:8px 20px HR为8像素,VR为20像素。 -
元素的圆角不仅可以单独设置,还可以统一设置;
-
根据border-radius的取值情况可分以下几种情况:
- 水平半径与垂直半径相等
- 水平半径与垂直半径不相等
3.3.1 圆角边框–水平半径与垂直半径相等
-
水平半径与垂直半径相等
(1)当border-radius属性只有一个参数时
样式属性名:属性值; 元素的top-left、top-right、bottom-right和bottom-left取值均相同
(2)当border-radius属性有两个参数时
样式属性名: 属性值1 属性值2; top-left和bottom-right相同,取值均为属性值1; top-right和bottom-left相同,取值均为属性值2。
(3)当border-radius属性有三个参数时
样式属性名: 属性值1 属性值2 属性值3; top-left取值为属性值1 top-right和bottom-left相同,取值均为属性值2 bottom-right取值为属性值3
(4)当border-radius属性有四个参数时
样式属性名: 属性值1 属性值2 属性值3 属性值4; top-left、top-right、bottom-right和bottom-left分别对应4个不同的属性值 即从左上角开始按照顺时针方向依次赋值
-
水平半径与垂直半径不相等
- 当水平半径与垂直半径不同时,需要用 斜线(/) 隔开
- 水平半径(或垂直半径)的参数都也可以是1~4个
(1)当border-radius属性有一个水平半径和一个垂直半径时
样式属性名: 水平值 / 垂直值
-
斜线(/)的前后参数分别表示水平半径和垂直半径
-
水平值用于指定元素的四个角的水平半径
-
垂直值用于指定元素的四个角的垂直半径
border-radius: 10px/20px; /* 水平/垂直 */
border-radius:10px 20px;
border-radius:10px 20px 30px;
border-radius:10px 20px / 30px 40px;
border-radius:10px 20px 30px / 50px 60px;
3.4 边框阴影
- 边框阴影(box-shadow)可以为元素的边框添加一个或多个阴影
- box-shadow的属性可以由2~6个参数构成
box-shadow: h-shadow(水平阴影的位置)
v-shadow(垂直阴影的位置)
[blur](模糊距离)
[spread](阴影的尺寸)
[color](阴影的颜色)
[inset];(将外部阴影 (outset) 改为内部阴影)
/* 带h-shadow和 v-shadow两个参数*/
box-shadow: 50px 50px;
/* 带h-shadow、v-shadow、blur和color四个参数*/
box-shadow: 50px 50px 5px black;
/* 带h-shadow、v-shadow、blur、spread和color五个参数*/
box-shadow: 10px 6px 10px 5px #AAAAAA;
/* 带h-shadow、v-shadow、blur、spread、color和inset六个参数*/
box-shadow: 10px 10px 50px 20px pink inset;
.imageDiv{
width:294px;
/* 设置内边距,具体后面进行讲解 */
padding:10px 10px 20px 10px;
border:1px solid #BFBFBF;
background-color:white;
/* 添加边框阴影box-shadow */
box-shadow: 10px 6px 10px 5px #AAAAAA;
}
3.5 图像边框相关属性
- 在CSS 3之前设计图像边框时,需要为元素的每条边提供一幅图像,每个角提供一幅图像,边框和角使用相应的图像作为背景;当元素变宽(或变长)时,边框使用对应的图片进行平铺或拉伸,而角不需要变化,这种设计方式相对比较复杂。
- 针对这种情况,在CSS 3中新增了border-image属性,当元素的长度或宽度改变时,同样可以使用一个图像对边框进行绘制。
3.5.1 边框背景的分割
border-image-slice属性在逻辑上对背景图像进行分割
border-image-slice: [ <number> | <percentage> ] {1,4} && fill?
其中:
- 参数可以有1~4个,允许是数值或百分比
- 参数遵循TRBL原则,按照顺时针方向使用指定宽度对图像进行分割,将图像分割成9部分
- 默认情况下,元素中心区域不填充边框的图像;当提供参数fill时,元素的中心区域将被填充
border-image-slice: 10 20 30 40;
border-image-slice: 10 20 30 40 fill;
3.5.2 边框背景的使用
border-image属性用于对元素的边框进行统一设置,取值情况相对较复杂
border-image : url(图像的路径)
图像分割方式/图像边框宽度
图像平铺方式
其中:
- 图像分割方式(slice)参数个数可以是1~4个,遵循TRBL规则
- 边框宽度(width)参数个数可以是1~4个,遵循TRBL规则
- 图像平铺方式有平铺覆盖(repeat)、取整平铺(round)或拉伸覆盖(stretch)三种方式
//图像边框的使用
border-image:url("images/borderImage2.jpg") 40;
border-image:url("images/borderImage2.jpg") 40/40px 35px 30px 25px;
border-image:url("images/borderImage2.jpg") 40 35 30 25/40px 35px 30px 25px;
border-image:url("images/borderImage2.jpg") 40/40px repeat;
border-image:url("images/borderImage2.jpg") 40/40px round;
border-image:url("images/borderImage2.jpg") 40/40px stretch;
对border-image属性添加fill参数时,该div的中心区域将会被边框图像填充
border-image:url("images/borderImage2.jpg") 40 fill/40px stretch;
4.内边距padding
- 内边距(padding)是指内容区与边框之间的距离
- 通过padding-top、padding-right、padding-bottom和padding-left属性对元素的“上右下左”四个方向的内边距进行设置
- 通过padding属性可以在一个样式声明中设置该元素的所有内边距
padding:10px;
padding:10px 20px;
padding:10px 20px 30px;
padding:10px 20px 30px 40px;
/*第5个元素使用分写形式*/
padding-top:10px;
padding-right:20px;
padding-bottom:30px;
padding-left:40px;
5.外边距padding
外边距(margin)是指元素与元素之间的距离,即围绕在元素边框之外的空白区域,通过外边距可以为元素创建额外的“空间”。
外边距与内边距相似,可以对“上下左右”四个外边距分别进行设定,也可以统一进行设定。
5.1 外边距的基本用法
/*第一幅图像*/
margin:10px 20px 30px 40px;
/*第二幅图像*/
margin-left:10px;
/*第三幅图像*/
margin-left:15px;
margin-bottom:20px;
5.2 外边距合并
外边距合并(叠加)是指当两个页面流中的块级元素的垂直外边距相遇时,将形成一个外边距。
合并后的外边距的高度,等于合并前的两个外边距中的较大者。
- 上下元素间的外边距合并
当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距将发生合并
由于外边框合并,此处代码删掉,不影响显示效果
.topDiv{
margin-bottom:20px;
}
.bottomDiv{
margin-top:10px;
}
-
包含元素间的外边距合并
当一个元素包含在另一个元素中,父元素没有内边距和边框,且子元素没有外边距时,父元素与子元素的上边距(或下外边距)也会发生合并。
-
空元素的外边距合并
空元素只包含外边距而无边框和填充时,上外边距与下外边距就会碰到了一起,元素的上下外边距也会产生合并。
当合并后的外边距再次遇到其他元素的外边距时,还会发生合并操作
外边距合并时,只有普通的页面流中块级元素的垂直外边距会发生外边距的合并。
行内元素、浮动元素和绝对定位元素之间的外边距不会进行合并。
6.DIV+CSS页面布局
- 页面布局的核心目标是实现页面的结构与外观相分离,常见的布局方式有三种:表格布局、框架布局和DIV+CSS布局。
- 表格布局不足:当页面布局需要调整时,往往需要重新制作表格。而多重表格的嵌套时,由于标签的层次过深,页面不利于搜索引擎的抓取。
- 框架布局不足:
- 但一个页面会依赖多个页面,不方便进行管理;
- 搜索引擎对框架中的内容检索时存在困难,有些搜索引擎只会检索框架集页面,导致页面检索不完整;
- 框架对打印支持效果不够好,只能实现分框架页面的打印;
- 在HTML 5中不再支持
<frameset>
标签。
- DIV+CSS布局优点:可以简化页面的代码量,提高页面的浏览速度;其结构清晰,代码嵌套层次少,容易被搜索引擎检索到;页面结构与表现相分离,便于维护与扩展。
- DIV+CSS页面布局,以下图为例,页面被分为五部分:
- 横幅(banner)
- 导航(navigator)
- 焦点内容(focus)
- 主体内容(content)
- 版权(footer)
总结
- 盒子模型是由border(边框)、margin(外边距)、padding(内边距)、content(内容)
- 内容区(content)是盒子模型的中心,也是盒子模型必不可缺少的部分
- 元素的边框(border)就是围绕元素内容和内边距的一条或多条线
- 边框圆角由两个圆弧共同构成,HR代表圆角的水平半径,VR代表圆角的垂直半径
- 内边距(padding)是指内容区与边框之间的距离,可以对“上右下左”四个方向的进行设置
- 外边距(margin)是指元素与元素之间的距离
- 外边距合并(叠加)是指当两个垂直外边距(块级元素)相遇时,将形成一个外边距
- DIV+CSS布局