盒子模型
认识盒子模型
网页就是多个盒子嵌套排列的结果。
内边距出现在内容区域的周围,当给元素添加背景色或背景图像时,该元素的背景色或背景图像也将出现在内边距中。
外边距是该元素与相邻元素之间的距离。
如果给元素定义边框属性,边框将出现在内边距和外边距之间。
规定可元素框处理元素内容、内边框、边框和外边距的方式
盒子模型相关属性
上边框
border-top-style:样式;
border-top-width:宽度;
border-top-color:颜色;
border-top:宽度 样式 颜色;
下边框
border-bottom-style:样式;
border- bottom-width:宽度;
border- bottom-color:颜色;
border-bottom:宽度 样式 颜色;
左边框
border-left-style:样式;
border-left-width:宽度;
border-left-color:颜色;
border-left:宽度 样式 颜色;
border-right-style:样式;
border-right-width:宽度;
border-right-color:颜色;
border-right:宽度 样式 颜色;
宽度综合设置border-width:上边 [右边 下边 左边];像素值
颜色综合设置border-color:上边 [右边 下边 左边];颜色值、#十六进制、rgb(r,g,b)、rgb(r%,g%,b%)
边框综合设置border:四边宽度 四边样式 四边颜色;
边框属性
none:没有边框即忽略所有边框的宽度(默认值)
solid:边框为单实线
dashed:边框为虚线
dotted:边框为点线
double:边框为双实线
既可以对盒子的单边进行设置,也可以综合设置四条边的样式
border-top-style:上边框样式
border-right-style:右边框样式
border-bottom-style:下边框样式
border-left-style:左边框样式
border-style:上边框样式 右边框样式 下边框样式 左边框样式
border-style:上边框样式 左右边框样式 下边框样式
border-style:上下边框样式 左右边框样式
border-style:上下左右边框样式
例如<p>只有上边为虚线dashed,其他三边为单实线solid
p{ borer-style:dashed solid solid solid;}
p{ border-style:solid;} /*综合设置四边样式*/
p{ border-top-style:dashed;} /*上边样式覆盖*/
设置边框宽度(border-width)
border-top-width:上边框宽度
border-right-width:右边框宽度
border-bottom-width:下边框宽度
border-left-width:左边框宽度
border- width:上边框宽度 [右边框宽度 下边框宽度 左边框宽度]
设置边框颜色(border-color)
border-top-color:上边框颜色
border-right-color:右边框颜色
border-bottom-color:下边框颜色
border-left-color:左边框颜色
border-color:上边框颜色 [右边框颜色 下边框颜色 左边框颜色]
设置段落的边框样式为实线,上下边灰色,左右边红色
p{
border-style:solid; /*综合设置边框样式*/
border-color:#CCC #FF0000; /*设置边框颜色:两个值为上下、左右*/
}
设置二级标题的边框样式为实线,且下边框为红色,其余边框采用默认文本的颜色
h2{
border-style:solid; /*综合设置边框样式*/
border-bottom-color:red; /*单独设置下边框颜色*/
}
注意:设置边框颜色时同样必须设置边框样式,如果未设置样式或设置为none,则其他的边框属性无效。
综合设置边框
border-top:上边框宽度 样式 颜色
border-right:右边框宽度 样式 颜色
border-bottom:下边框宽度 样式 颜色
border-left:左边框宽度 样式 颜色
border:四边宽度 样式 颜色
像border、border-top等这样,能够一个属性定义元素的多种样式,在CSS中称之为复合属性。
常用的复合属性有font、border、margin、padding和background等。
复合属性可以简化代码,提高页面的运行速度,但是如果只有一项值,最好不要应用复合属性,以免样式不被兼容。
内边距属性
在CSS中padding属性用于设置内边距,同边框属性border一样,padding也是复合属性
padding-top:上内边距
padding-right:右内边距
padding-bottom:下内边距
padding-left:左内边距
padding:上内边距[右内边距 下内边距 左内边距]
外边距属性
在CSS中margin属性用于设置外边距,它是一个复合属性,与内边距padding的用法类似
margin-top:上外边距
margin-right:右外边距
margin-bottom:下外边距
margin-left:上外边距
margin:上外边距 [右外边距 下外边距 左外边距]
对块元素应用宽度属性width,并将左右的外边距都设置为auto,可使块级元素水平居中,实际工作中常用这种方式进行网页布局,示例代码如下:
.header{ width:960px; margin:0 auto;}
为了更方便地控制网页中的元素,制作网页时,可使用如下代码清除元素的默认内外边距:
*{
padding:0; /*清除内边距*/
margin:0; /*清除外边距*/
}
注意:使用margin定义块元素的垂直外边距时,可能会出现外边距的合并。
背景属性
background-color属性值可使用预定义的颜色值、十六进制#RRGGBB或RGB代码rgb(r,g,b)设置。background-color的默认值为transparent,这时子元素会显示其父元素的背景。
2、设置背景图像
通过background-image属性实现背景图像的设置
3、设置背景图像平铺
默认情况下,背景图像会自动向水平和竖直两个方向平铺。如果不希望图像平铺或只沿着一个方向平铺,可以通过background-repeat属性来控制,该属性的取值如下:
repeat:沿水平和竖直两个方向平铺(默认值)
no-repeat:不平铺(图像位于元素的左上角,只显示一次)
repeat-x:只沿水平方向平铺
repeat-y:只沿竖直方向平铺
4、设置背景图像的位置
background-position属性的值通常有两个,中间用空格隔开,水平和垂直方向的坐标。
background-position属性的取值有多种,具体如下:
使用不同单位的数值:直接设置图像左上角在元素中的坐标,例如“background-position:20px 20px;”
使用预定义的关键字:指定背景图像在元素中的对齐方式。
水平方向值:left、center、right。
垂直方向值:top、center、bottom。
使用百分比:按背景图像和元素的指定点对齐
0% 0% 表示图像左上角与元素的左上角对齐。
50% 50% 表示图像50% 50%中心点与元素50% 50%的中心点对齐。
20% 30% 表示图像20% 30%的点与元素20% 30%的点对齐。
100% 100% 表示图像右下角与元素的右下角对齐,而不是图像充满元素。
如果只有一个百分数,将作为水平值,垂直值则默认为50%。
5、设置背景图像固定
用background-attachment属性来设置背景图像固定,其属性值如下:
scroll:图像随页面元素一起滚动(默认值)
fixed:图像固定在屏幕上,不随页面元素滚动
6、综合设置元素的背景
背景属性是一个复合属性,可以将背景相关的样式都综合定义在一个复合属性background中
background:背景色 url("图像") 平铺 定位 固定;
各个样式顺序任意,中间用空格隔开,不需要的样式可以省略。但实际工作中通常按照背景色、url("图像")、平铺、定位、固定的顺序来书写。
盒子的宽与高
width和height的属性值可以为不同单位的数值或相对于父元素的百分比%,实际工作中最常用的是像素值。
W3C规范,符合CSS规范的盒子模型的总宽度和总高度的计算原则是:
盒子的总宽度= width+左右内边距之和+左右边框宽度之和+左右外边距之和
盒子的总高度= height+上下内边距之和+上下边框宽度之和+上下外边距之和
注意:1、宽度属性width和高度属性height仅适用于块级元素,对行内元素无效(<img />标记和<input />除外)。
2、计算盒子模型的总高度时,还应考虑上下两个盒子垂直外边距合并的情况。
元素的类型与转换
元素的类型
块元素
每个块元素通常都会独自占据一整行或多整行,可以对其设置宽度、高度、对齐等属性,常用于网页布局和网页结构的搭建。
常见的块元素有<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等,其中<div>标记是最典型的块元素。
行内元素
行内元素不占有独立的区域,仅仅靠自身的字体大小和图像尺寸来支撑结构,一般不可以设置宽度、高度、对齐等属性,常用于控制页面中文本的样式。
常见的行内元素有<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<a>、<span>等,其中<span>标记最典型的行内元素。
注意:在行内元素中有几个特殊的标记——<img />、<input />、<td>,可以对它们设置宽高和对齐属性,有些资料可能会称它们为行内块元素。
1、<div>标记
div:块级元素,单独占一行
span:行内元素,默认在一行上显示
div是英文division的缩写,意为“分割、区域”
<div>标记将网页分割为独立的、不同的部分,以实现网页的规划和布局。<div>与</div>之间相当于一个容器,可以容纳段落、标题、表格、图像等各种网页元素。也就是说大多数HTML标记都可以嵌套在<div>标记中,<div>中还可以嵌套多层<div>
<div>标记通过与id、class等属性配合,然后使用CSS设置样式,可以替代大多数的块级文本标记。
注意:1、<div>标记最大的意义在于和浮动属性float配合,实现网页的布局,这就是常说的DIV+CSS网页布局。
2、<div>可以替代块级元素如<h>、<p>等,但是他们在语义上有一定的区别。例如<div>和<h2>的不同在于,<h2>具有特殊的含义,语义较重,代表着标题,而<div>是一个通用的块级元素,主要用于布局。
特征
div通常是块及元素
独自占一行
独自不能实现复杂效果,必须结合CSS样式进行渲染
<div>可定义文档中的分区或节
<div>标签可以把文档分割为独立的,不同的部分
如果使用id或class来标记<div>,那么该标签的作用会变得更加有效
2、<span>标记
<span>标记是行内元素,<span>与</span>之间只能包含文本和各种行内标记,如加粗标记<strong>、倾斜标记<em>等,<span>中还可以嵌套多层<span>。
<span>标记常用于定义网页中某些特殊显示的文本,配合class属性使用。
元素的转换
如果希望行内元素具有块元素的某些特性,例如可以设置宽高,或者需要块元素具有行内元素的某些特性,例如不独占一行排列,可以使用display属性对元素的类型进行转换。
使用display属性对块元素和行内元素进行转换。其属性值及含义如下:
inline:此元素显示为行内元素(行内元素默认display属性值)
block:此元素显示为块元素(块元素默认display属性值)
inline-block:此元素将显示为行内块元素,可以对其设置宽高和对齐等属性,但是该元素不会独占一行
none:此元素将被隐藏,不显示,也不占用页面空间,相当于该元素不存在
注意:<div>被转换成了行内元素,而行内元素只可以定义左右外边距,定义上下外边距时无效。
块元素垂直外边距的合并
相邻块元素垂直外边距的合并
当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和,而是两者中的较大者。这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。
嵌套块元素垂直外边距的合并
对于两个嵌套关系的块元素,如果父元素没有上内边距及边框,则父元素的上外边距会与子元素的上外边距发生合并,合并后的外边距为两者中的较大者,即使父元素的上外边距为0,也会发生合并。
如果希望外边距不合并,可以为父元素定义1像素的上边框或上内边距。这里以定义父元素的上边框为例,在父<div>的CSS样式中增加如下代码:
border-top:1px solid #FCC; /*定义父div的上边框*/