第 3 章 CSS 基 础 使用HTML可完成网页内容的定义,并通过HTML标签的嵌套表达出页面 元素的层次结构。但正如第2章示例中所看到的那样,只使用HTML完成的网 页外观实在过于简陋,缺乏对元素大小、位置、间距、配色等外观特征的定义能力。 虽然在早期的HTML版本中存在一些表达外观的元素或属性,但功能有限,更重 要的是违背了内容与表现分离的设计理念,CSS(CascadingStyleSheets,层叠样 式表,简称“样式表”)正为解决这一问题而生。 1996年12月,CSS1面市并成为W3C推荐标准,1998年,W3C 发布CSS2。 自1999年起,W3C便着手制定CSS3标准,直至2011年6月CSS3正式成为W3C 推荐标准。虽然W3C于2011年9月开始着手设计CSS4,但目前只有极少数特性 被部分浏览器支持,因此CSS3是目前事实上的行业标准,本章内容将基于CSS3 展开。 .. 3.1 CSS基本语法 下述代码中
This is blue text.
code-3.3.css h1 { color: red; } /*h1 标签内文字为红色*/ p { color: blue; } /*p 标签内文字为蓝色*/ 在浏览器中打开code-3.3.html应可看到一个红色的标题和一段蓝色的文字。 CSS文件{…}中的内容为样式规则,语法如3.1节所述。置于{…}前的h1、p即为CSS 选择器,它们分别选中页面中所有的元素。/*…*/为注释。 简单地说,在内嵌/外部样式表中,首先通过CSS选择器选中要修饰的元素,然后将 {…}内的样式规则应用到选中的元素上。 3.3.1 CSS基本选择器 CSS3中基本选择器共6类,表3.1中简要举例说明,读者可快速浏览,建立感性认识后 再详细介绍每个选择器的具体用法。 表3.1 基本选择器举例 名 称举 例说 明 通用选择器* 选择页面内所有元素 类型选择器p 选择页面内所有
元素
id选择器#avatar 选择id值为avater的元素,例如, 元素上方时该元素的样式,伪类选择器不可单独使用
属性选择器[alt] 选择所有含alt属性的元素,例如, 这段文字呈现为红色 这段文字呈现为红色 这段文字呈现为红色 这段文字呈现为默认的黑色 这段文字呈现为红色 这段文字呈现为红色, 斜体 这段文字呈现为默认的黑色 paragraph 1 paragraph 2 paragraph 3 Paragraph 元素
逗号连接和h1,p 选择 元素
空格连接后代divspan 选择 元素后且与 元素是兄弟关系的(紧邻)
~ 连接一般兄弟p~span 选择在 元素后且与 元素是兄弟关系的(无须紧邻)
直接连接和逗号连接较容易理解,不做举例,以下对其余4种组合方式举例说明。
code-3.10.html代码中在不同位置放置了元素,若表3.4中选择器对相应位置的
元素有效则标注“..”,请结合代码,仔细对比。
表3.4 选择器组合方式举例
divspan div>span p + span p ~ span
AB
.. ..
C ..
D .. .. .. ..
E .. .. ..
code-3.10.html
C 段落A 、 Block1 Block2 Block3 Block4 的边框,虚线框为容器 为块级元素(参见3.5.5节)。从图3.7中可观察到如下现象。
(1)对于行内元素,其内容区始终处于“行内”,而其padding-top和padding-bottom 将
以元素内容区边界为起点向上下延伸,垂直方向上其他元素的布局以“行”的垂直边界为参
考。因此,可能出现元素上下边框被其他元素遮挡或叠到其他元素之上的情况(请为任意
元素添加样式line-height:5em,再次观察运行效果)。
(2)对于块级元素,周围元素的布局将以元素盒模型(box)的边界为参考。
(3)块级元素内容区与右边框的间距并非完全是元素的padding,图中4个块中的文字
34 Web应用开发技术(微课版)
图3.7 code-3.15.html运行效果
右侧有大量留白,这是由于块级元素宽度自动延展引起的,而非padding。
(4)实践中若文字元素有视觉上的边界效果(如有边框或不同的背景色等),则常令水
平方向的padding稍大于垂直方向padding,这样会更美观。请对比Inline1和Inline2的
padding值和显示效果。
4.外边距
外边距(margin)即元素边框之外的留白(间隙),它将影响到元素与相邻元素之间的间
距,也间接地影响了元素的位置。
与内边距类似,可以分别指定上、下、左、右4个方向的外边距宽度,例如,margin-top:
10px设置上外边距为10px,方位的表达请参见3.5.1节;也可使用缩写形式,指定1~4个
值,例如,margin:10px20px分别设置元素上下外边距为10px,左右外边距为20px,请参见
表3.7。
code-3.16.html是外边距效果的演示代码,运行效果如图3.8所示。
code-3.16.html
Block1 Block2 的边框,虚线框为容器 为块级元素。从图3.8中可观察到如下现象。
(1)行内元素的margin-top与margin-bottom 设置无效。
(2)在一些特殊的情况下,外边距会折叠,也称外边距融合。例如,当元素垂直放置时
(如图中Block1和Block2),上下两个元素边框的垂直间距并非上面元素的margin-bottom
第3章 CSS基础 35
和下面元素的margin-top之和,而是取较大值。图中Block1与Block2的边框垂直间距为
20px,而非30px。
margin属性一个较特别的用法是当块级元素的宽度确定时,设置该元素左右两边的
margin值为auto,可令该元素在父容器内水平居中,例如, 、
Lorem, ipsum dolor sit amet consectetur adipisicing elit...
标题呈现为默认的黑色
元素和
16px
① 浏览器视窗即呈现网页内容的区域。
第3章 CSS基础 31
1rem
1em
16px
1rem
1em
从图3.3中可以观察到:
(1)黑色方框的宽、高分别为50vw、50vh,它的大小刚好是视窗的一半,灰色方块的宽、
高分别为父容器的60%和40%。
(2)无论在什么元素内,16px的字都一样大,而1rem 的字与16px的字一样大(浏览器
设置的基准字号为16px)。
(3)在不同元素内(、
),1em 的文字大小并不相同,它们都是父元素字号
的1倍大小,但
元素的默认字号更大。
3.5.2 盒模型
盒模型(boxmodel)是CSS中最重要的概念之一,浏览器渲染引擎在进行元素布局时
会将元素理解为一个矩形盒子,如图3.4所示。
图3.3 code-3.12.html运行效果
图3.4 盒模型
从内至外由4个区域组成:内容区(content)、内边距(padding)、边框(border)、外边距
(margin),它们共同决定了元素的大小和相对位置。
以如图3.4所示盒模型为例,元素内容区的尺寸为100×100px,内边距是内容区与元
素边框之间的留白(空隙),图中四个方向的内边距均为10px;内边距之外即为元素的边框,
图中四个方向的边框宽度均为2px;边框之外的留白(空隙)即为外边距,它表达了当前元素
和相邻元素之间的间距,图中四个方向的外边距均为15px。
1.元素宽度与高度
对于块级元素,如
元素,用背景图可能会更方便。
3.5.4 文字样式
与文字相关的样式属性可粗略地分为字体修饰和文本修饰。通俗地说,字体修饰
(font-*)与文字本身相关,而文本修饰(text-*)与文字周边相关,参见图3.9。以下分别详
述每个文字样式属性的用途。
图3.9 文字样式
1.font-size
设置元素内文字的大小,如font-size:14px;font-size:.8em;,可参见3.5.1节关于长度
的表达方式。
多数浏览器的默认标准字号为16px,对于中文网页而言,16px的字稍显大,不太美观,
对于一般段落内的文字可适当设置小些,如12~14px或0.8~0.9rem。
当然,文字的大小最好使用em/rem 作为单位,这样在不同设备上或针对不同用户的系
统配置,文字大小会更合适,用户体验更好。其他元素的大小/位置若要相对于邻近文字调
整,也建议使用em/rem 作为单位。
2.font-weight
设置元素内文字的粗细,可使用100~900的整百数值描述,数值越小则越细,默认值
为400(normal)。也可指定为bold(粗体,等价于700),若取值bolder或lighter则可做相对
调整。例
如:
font-weight: bold;(粗体)
font-weight: 200;(细体)
3.font-family
可通过font-family为元素中的文字指定一个或一组字体,例如:
font-family: Arial;
font-family: "Times new Roman", monospace, serif;
若指定多个字体,浏览器将按顺序尝试使用指定的字体显示文字,如果用户设备上未安
第3章 CSS基础 37
装指定的某种字体,则尝试使用后一种字体。
遗憾的是,多数用户设备上安装的中文字体较少,一般仅有系统预装的几种字体,并且
不同操作系统预装的字体可能不一样。因此,如果设计中文网页,一般很少设置字体,因为
用户可能看不到预想的效果。
当然,也可以通过样式表配置从服务器端下载指定字体,此内容将在第4章讨论。
4.font-style
字体风格,常用取值包括normal(正体)和italic(斜体)。
5.color
定义元素中文字的颜色,如color:red,请参见3.5.1节关于颜色的表示方法。
6.text-align
用于指定文本在元素内的水平对齐方式。
常用取值包括left/right/start/end/center/justify,请参见3.5.1节关于方位的说明。
其中,justify为两端对齐(分散对齐),对最后一行文字无效。
7.text-decoration
若要使用线条装饰文本,可用如下样式属性。
(1)text-decoration-line:线条类型,如下画线underline、上画线overline、删除线linethrough
、无任何装饰none。
(2)text-decoration-style:线条样式,如实线solid、虚线dashed、波浪线wavy等,默认
为solid。
(3)text-decoration-color:线条颜色,默认与文字同色。
一般使用缩写形式text-decoration,例如:
text-decoration: underline; /*实线下画线*/
text-decoration: underline wavy red; /*红色波浪下画线*/
text-decoration: none; /*常用于取消超链接默认的下画线*/
若为中文添加下画线,很少使用text-decoration:underline(不美观),常使用下边框
border-bottom 替代。
8.text-indent
用于指定首行文字的缩进量,例如,text-indent:2em 指定首行缩进两个字符。
9.line-height
line-height为文本的行高,可以直观地认为行高即是选中文字后,文本背景色块的高
度,如图3.10所示。
图3.10 行高示意
值得注意的是,一行文字所占据的实际高度并非由font-size或height属性决定,而是
由line-height决定。因此,当line-height值小于font-size值,两行文字将叠在一起。图3.10
中的4行文字实际占据的高度为line-height×4。
38 Web应用开发技术(微课版)
line-height属性在实践中常用于完成如下两项任务。
. 多行文字:调整行间距。例如,line-height:2em(2倍行距)。
. 单行文字:设置文字垂直居中。将元素line-height值设置为与元素高度一致,单行
文字将在元素内垂直居中。如下代码的显示效果如图3.11所示。
Title 1
Title 2
图3.11 单行文字的垂直居中效果
视频讲解
3.5.5 元素的显示模式
在CSS中可通过设置样式属性display来改变元素的外部和内部显示模式,外部显示
模式决定该元素在HTML文档流中的表现(如block/inline/inline-block),内部显示模式则
可控制其子元素的布局(如grid/flex)。
本节将讨论display属性的常用取值:block/inline/inline-block/none。
关于grid/flex,因其内容相对复杂,将在3.5.6节和3.5.7节分列主题介绍,其他针对特
定元素的取值,如table/table-row/table-cell/list-item 等不做讨论。
1.block
当元素的默认样式中display属性值为block时元素即表现出块级元素的特征,如
等,常称此类元素为块级元素(块元素)。直观地看,元素的外部显示
模式为block时有如下特征:
. 若不指定width和max-width样式,元素会在水平方向上延展其宽度,以占满横向
可用空间。
. 不与其他兄弟元素同处一行(总是独占一行),因此常表现出元素前后的换行效果。
2.inline
当元素的默认样式中display属性值为inline时,元素即表现出行内元素的特征,如
、
、等,常称此类元素为行内元素(内联元素)。直观地讲,元素的外
部显示模式为inline时有如下特征。
. 元素的宽度由内容撑开,并不会延展。
. 允许与其他兄弟“行内元素”同处一行。
需要注意的是,声明行内元素的宽、高相关样式(width/min-width/max-width/height/
min-height/max-height)并无效果,margin-top,margin-bottom 也无效。通俗地说,行内元
素的大小及实际占据的空间受所在的行限制。
3.inline-block
若声明display:inline-block,元素将具备块级元素的特征,但布局仍处于行内。请参
见下面的例子,运行效果如图3.12所示。
第3章 CSS基础 39
code-3.17.html
Title