项目十六 盒子模型
项目展示
盒模型综合案例如图16.1、16.2所示。
图16.1 盒模型综合案例1
图16.2 盒模型综合案例2
教学内容
1. 认识盒模型
行内元素类似牛奶,需要用一个盒子装起来,前面学过的双标签就是一个盒子,有了盒子。我们就可以装载内容并随意运送摆放位置了,如图16.3所示。
盒模型的组成
图16.3 牛奶的摆放
网页布局的本质: 把网页元素(文字图片等等),放入盒子里面,然后利用CSS摆放盒子的过程。
盒子模型就是把HTML页面中的元素看作是一个矩形的盒子,也就是一个盛装内容的容器。
每个矩形都由元素的内容、内边距(padding)、边框(border)和外边距(margin)组成,如图16.4所示。
图16.4 网页中盒子的摆放
2. 盒子模型的组成
盒子模型由边框、外边距、内边距和实际内容组成,如图16.5所示。
图16.5 盒模型的组成
3. 盒子边框(border)
边框由边框粗细、边框线样式、边框颜色三部分构成。
(1)语法:border:border-width || border-style || border-color,如图16.6所示。
(2)边框线样式。
边框线样式如图16.6所示。
盒子边框
图16.6 边框线样式
(3)边框样式连写。案例如下:
① 上下左右边线为1像素红色实线:
border:1px solid red;
② 上边线为1像素红色实线:
border-top:1px solid red;/*上边框*/
③ 下边线为2像素绿色虚线:
border-bottom:2px dashed green;/*下边框*/
④ 左边线为1像素蓝色实线:
border-left:1px solid blue;
⑤ 右边线为5像素粉红色实线:
border-right:5px solid pink;
(4)三角形的制作。案例如图16.7所示。
图16.7 三角形的制作案例
(5)边框合并。
以前学过的html表格相邻边框变得很粗,运用
表示相邻边框合并在一起。
(6)边框会影响盒子的实际大小,如图16.8所示。
图16.8 盒子模型
解决方法:
① 测量盒子大小时不去量边框。
② 如果测量时已经包含边框,则需要width/height减去边框的宽度。
4. 内边距(padding)
(1)内边距的属性用法。padding属性(见表16.1)用于设置内边距,内边距是边框与内容之间的距离。
内边距语法
表16.1 内边距属性
padding后面跟不同数值表示的意思是不一样的。其说明如图16.9所示。
图16.9 内边距不同数值值说明
(2)内边距会影响盒子的实际大小。
给盒子指定内边距后:
① 内容和边框有了距离。
② padding撑大了盒子。
解决方法:
为保证盒子和效果图大小一致,则需要width/height减去多出来的内边距即可。
小技巧:padding不会撑开没有指定width/height的盒子。
(3)导航案例中内边距的运用,如图16.10所示,对应代码如下:
内边距应用
图16.10 导航案例
外边距
5. 外边距(margin)
(1)外边距的属性用法。
margin属性(见表16.2)用于设置外边距。设置外边距会在元素之间创建“空白区域”,这段空白区域通常不能放置其他内容。其语法同内边距padding。
表16.2 外边距属性
让一个盒子实现水平居中,需要满足一下两个条件:
① 盒子必须是块级元素(行内/行内块元素水平居中,只需给父元素添加text-align:
center)。
② 盒子必须指定宽度(width)。
给左右的外边距都设置为auto,可使块级元素水平居中。实际工作中常用这种方式进行网页布局,示例代码如下:
(2)外边距合并问题。
① 相邻块元素垂直外边距的合并,如图16.11所示。
图16.11 相邻块元素垂直外边距合并
当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则它们之间的垂直间距不是margin-bottom与margin-top之和,而是两者中的较大者。这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。
解决方案:尽量避免。
② 嵌套块元素垂直外边距的合并(即外边距塌陷),如图16.12所示。
图16.12 嵌套块元素垂直外边距合并
对于两个嵌套关系的块元素,如果父元素没有上内边距及边框,则父元素的上外边距会与子元素的上外边距发生合并,合并后的外边距为两者中的较大者,即使父元素的上外边距为0,也会发生合并。
解决方案:
·可以为父元素定义1像素的上边框或上内边距。
·可以给父元素定义一个上内边距。
·可以为父元素添加overflow:hidden。
6. box-sizing属性
box-sizing:content-box/border-box;
content-box:定义宽度和高度时不包括border和padding值(默认)。
border-box:定义宽度和高度时,border和padding包含在width和height之内。
以上代码效果如图16.13所示。
图16.13 案例效果
7. 重置样式之清除内外边距
网页元素很多都带有默认内外边距,不同浏览器默认值不同。因此在布局之前,首先要清除网页元素自带内外边距,并设置盒模型从边框开始计算。
注意:行内元素为了照顾兼容性,只设置左右边距,尽量不要设置上下内外边距(避免没有效果),但是转换为块级元素或行内块后就可以了。
8. 圆角边框(border-radius)
圆角边框和盒子阴影
语法:border-radius:1-4 length | %;(参数1参数2空格隔开时)
一个参数,表示四个角的圆角一样。
两个参数,第一个表示左上角和右下角,第二个表示右上角和左下角。
三个参数,第一个左上角,第二个表示右上角和左下角,第三个表示右下角。
四个参数,四个值的顺序是:左上角,右上角,右下角,左下角。
也可以分开写成:border-top-left-radius、border-top-right-radius、border-bottom-left-radius、border-bottom-right-radius。
圆角原理如图16.14所示。
图16.14 圆角原理
如果是正方形盒子,把数字修改为宽高的一半,或者写50%,就可以得到一个圆形盒子,如:border-radius:50%;
如果是矩形设置高度一半,可得如图16.15所示效果。
图16.15 圆角设置
9. 盒子阴影(box-shadow)
语法:box-shadow:像素值1 像素值2 像素值3 像素值4 颜色值 阴影类
其属性说明如表16.3所示。
表16.3 盒子阴影属性说明
10. 文字阴影(text-shadow)
语法:text-shadow:h-shadow v-shadow blur color;
其属性说明如表16.4所示。
表16.4 文字阴影属性说明
项目训练