1.样式定义如何显示 HTML 元素
2.样式通常存储在样式表中
3.把样式添加到 HTML 4.0 中,是为了解决内容与表现分离的问题
4.外部样式表可以极大提高工作效率
5.外部样式表通常存储在 CSS 文件中
6.多个样式定义可层叠为一
CSS 指层叠样式表 (Cascading Style Sheets),或者叫级联样式表,是一组格式设置规则,用于控制 web 页面的外观。
- | css 特点 |
---|---|
1 | 页面内容与表相分离 |
2 | 可以将 CSS 单独放在一个文件夹中 |
3 | 布局非常灵活 |
4 | 提高网页的加载速度 |
5 | 降低服务器的维护成本 |
6 | 通过 css 的hank 等技术手段实现浏览器的全兼容 |
HTML 标签原本被设计为用于定义文档内容。通过使用 <h1>、<p>、<table>
这样的标签,HTML 的初衷是表达“这是标题”、“这是段落”、“这是表格”之类的信息。同时文档布局由浏览器来完成,而不使用任何的格式化标签。
由于两种主要的浏览器(Netscape 和 Internet Explorer)不断地将新的 HTML 标签和属性(比如字体标签和颜色属性)添加到 HTML 规范中,创建文档内容清晰地独立于文档表现层的站点变得越来越困难。
为了解决这个问题,万维网联盟(W3C),这个非营利的标准化联盟,肩负起了 HTML 标准化的使命,并在 HTML 4.0 之外创造出样式(Style)。
所有的主流浏览器均支持层叠样式表。
样式表定义如何显示 HTML 元素,就像 HTML 3.2 的字体标签和颜色属性所起的作用那样。样式通常保存在外部的 .css 文件中。通过仅仅编辑一个简单的 CSS 文档,外部样式表使你有能力同时改变站点中所有页面的布局和外观。
由于允许同时控制多重页面的样式和布局,CSS 可以称得上 WEB 设计领域的一个突破。作为网站开发者,你能够为每个 HTML 元素定义样式,并将之应用于你希望的任意多的页面中。如需进行全局的更新,只需简单地改变样式,然后网站中的所有元素均会自动地更新。
样式表允许以多种方式规定样式信息。样式可以规定在单个的 HTML 元素中,在 HTML 页的头元素中,或在一个外部的 CSS 文件中。甚至可以在同一个 HTML 文档内部引用多个外部样式表。
一般来说,我们的引入方式一般分为三种。
内联样式表:直接在 HTML 元素内部进行样式的设置。
内部样式表:在 <head>
标签内部设置 <style>
标签,设置样式。
外部样式表:在 <head>
标签内部设置 <link>
标签,进入外部 CSS 文件。
内联样式表 | 优缺点 |
---|---|
1 | 优先级最高 |
2 | 多余代码多 |
3 | 不利于维护 |
4 | 配合 JS 使用 |
内部样式表 | 优缺点 |
---|---|
1 | 速度快,没有请求压力 |
2 | 相对外部引用代码较少 |
3 | 不宜改版和维护 |
4 | 代码较乱,不方便前后台沟通 |
5 | 主要使用在主页和活动页 |
外部样式表 | 优缺点 |
---|---|
1 | 一个 CSS 样式可以控制多个页面 |
2 | 方便改版和维护 |
3 | 减少代码量,代码简洁,便于分工协作 |
4 | 有效利用缓存机制 |
5 | 相对单页来说,会有垃圾代码,外部引入也会给服务器造成压力 |
6 | 主要使用在内容页和复杂度较高的页面 |
我们控制样式的精确度越高,它相对于其他控制的优先级也就更高。(范围越小,精确度越高)
也就是 内联样式表 > 内部样式表 = 外部样式表.
需要注意,内部样式表和外部样式表其实优先级是相同的,判断他们谁生效,主要是看谁是最后引入的。
一般 CSS 规则 由两个主要的部分构成:选择器,以及一条或多条声明。
selector {declaration1; declaration2; ... declarationN }
选择器通常是您需要改变样式的 HTML 元素。
每条声明由一个属性和一个值组成。
属性(property)是您希望设置的样式属性(style attribute)。
每个属性有一个值。属性和值被冒号分开。
selector {property: value}
除了英文单词 red,我们还可以使用十六进制的颜色值 #ff0000:
p { color: #ff0000; }
为了节约字节,我们可以使用 CSS 的缩写形式:
p { color: #f00; }
我们还可以通过两种方法使用 RGB 值:
p { color: rgb(255,0,0); }
p { color: rgb(100%,0%,0%); }
请注意,当使用 RGB 百分比时,即使当值为 0 时也要写百分比符号。
但是在其他的情况下就不需要这么做了。
比如说,当尺寸为 0 像素时,0 之后不需要使用 px 单位,因为 0 就是 0,无论单位是什么。
提示:如果值为若干单词,则要给值加引号:
p {font-family: "sans serif";}
提示:如果要定义不止一个声明,则需要用分号将每个声明分开。
下面的例子展示出如何定义一个红色文字的居中段落。
最后一条规则是不需要加分号的,因为分号在英语中是一个分隔符号,不是结束符号。
然而,大多数有经验的设计师会在每条声明的末尾都加上分号,这么做的好处是,
当你从现有的规则中增减声明时,会尽可能地减少出错的可能性。就像这样:
p {text-align:center; color:red;}
你应该在每行只描述一个属性,这样可以增强样式定义的可读性,就像这样:
p { text-align: center; color: black; font-family: arial; }
大多数样式表包含不止一条规则,而大多数规则包含不止一个声明。
多重声明和空格的使用使得样式表更容易被编辑:
body { color: #000; background: #fff; margin: 0; padding: 0; font-family: Georgia, Palatino, serif; }
是否包含空格不会影响 CSS 在浏览器的工作效果,
同样,与 XHTML 不同,CSS 对大小写不敏感。
不过存在一个例外:如果涉及到与 HTML 文档一起工作的话,class 和 id 名称对大小写是敏感的。
- | 字体的设置 |
---|---|
1 | font-family |
2 | font-size |
3 | font-weight |
4 | font-style |
font-family规定元素的字体系列。
font-family 可以把多个字体名称作为一个“回退”系统来保存。
如果浏览器不支持第一个字体,则会尝试下一个。
也就是说,font-family 属性的值是用于某个元素的字体族名称或/及类族名称的一个优先表。
浏览器会使用它可识别的第一个值。
有两种类型的字体系列名称:
指定的系列名称:具体字体的名称,比如:”times”、”courier”、”arial”。
通常字体系列名称:比如:”serif”、”sans-serif”、”cursive”、”fantasy”、”monospace”
提示:使用逗号分割每个值,并始终提供一个类族名称作为最后的选择。
注意:使用某种特定的字体系列(Geneva)完全取决于用户机器上该字体系列是否可用;
这个属性没有指示任何字体下载。因此,强烈推荐使用一个通用字体系列名作为后路。
p
{
font-family:"Times New Roman",Georgia,Serif;
}
值 | 描述 |
---|---|
family-name,generic-family | 用于某个元素的字体族名称或/及类族名称的一个优先表。默认值:取决于浏览器。 |
inherit | 规定应该从父元素继承字体系列。 |
使用通用字体系列
如果你希望文档使用一种 sans-serif 字体,但是你并不关心是哪一种字体,以下就是一个合适的声明:
body {font-family: sans-serif;}
这样用户代理就会从 sans-serif 字体系列中选择一个字体(如 Helvetica),并将其应用到 body 元素。
因为有继承,这种字体选择还将应用到 body 元素中包含的所有元素,除非有一种更特定的选择器将其覆盖。
指定字体系列
除了使用通用的字体系列,您还可以通过 font-family 属性设置更具体的字体。
下面的例子为所有 h1 元素设置了 Georgia 字体:
h1 {font-family: Georgia;}
这样的规则同时会产生另外一个问题,如果用户代理上没有安装 Georgia 字体,就只能使用用户代理的默认字体来显示 h1 元素。
我们可以通过结合特定字体名和通用字体系列来解决这个问题:
h1 {font-family: Georgia, serif;}
如果读者没有安装 Georgia,但安装了 Times 字体(serif 字体系列中的一种字体),
用户代理就可能对 h1 元素使用 Times。
尽管 Times 与 Georgia 并不完全匹配,但至少足够接近。
因此,我们建议在所有 font-family 规则中都提供一个通用字体系列。
这样就提供了一条后路,在用户代理无法提供与规则匹配的特定字体时,就可以选择一个候选字体。
如果您对字体非常熟悉,也可以为给定的元素指定一系列类似的字体。
要做到这一点,需要把这些字体按照优先顺序排列,然后用逗号进行连接:
p {font-family: Times, TimesNR, 'New Century Schoolbook',
Georgia, 'New York', serif;}
根据这个列表,用户代理会按所列的顺序查找这些字体。如果列出的所有字体都不可用,就会简单地选择一种可用的 serif 字体。
使用引号
您也许已经注意到了,上面的例子中使用了单引号。
只有当字体名中有一个或多个空格(比如 New York),
或者如果字体名包括 # 或 $ 之类的符号,才需要在 font-family 声明中加引号。
单引号或双引号都可以接受。
但是,如果把一个 font-family 属性放在 HTML 的 style 属性中,
则需要使用该属性本身未使用的那种引号:
<p style="font-family: Times, TimesNR, 'New Century Schoolbook', Georgia,
'New York', serif;">...</p>
font-size 属性可设置字体的尺寸。
说明
该属性设置元素的字体大小。
注意,实际上它设置的是字体中字符框的高度;
实际的字符字形可能比这些框高或矮(通常会矮)。
各关键字对应的字体必须比一个最小关键字相应字体要高,并且要小于下一个最大关键字对应的字体。
h1 {font-size:250%;}
h2 {font-size:200%;}
p {font-size:100%}
值 | 描述 |
---|---|
xx-small,x-small,small,medium,large,x-large,xx-large | 把字体的尺寸设置为不同的尺寸,从 xx-small 到 xx-large。默认值:medium。 |
smaller | 把 font-size 设置为比父元素更小的尺寸。 |
larger | 把 font-size 设置为比父元素更大的尺寸。 |
length | 把 font-size 设置为一个固定的值。 |
% | 把 font-size 设置为基于父元素的一个百分比值。 |
inherit | 规定应该从父元素继承字体尺寸。 |
font-size 值可以是绝对或相对值。
绝对值:
1.将文本设置为指定的大小
2.不允许用户在所有浏览器中改变文本大小(不利于可用性)
3.绝对大小在确定了输出的物理尺寸时很有用
相对大小:
1.相对于周围的元素来设置大小
2.允许用户在浏览器改变文本大小
注意:如果您没有规定字体大小,普通文本(比如段落)的默认大小是 16 像素 (16px=1em)。
使用像素来设置字体大小
通过像素设置文本大小,可以对文本大小进行完全控制:
实例
h1 {font-size:60px;}
h2 {font-size:40px;}
p {font-size:14px;}
在 Firefox, Chrome, and Safari 中,可以重新调整以上例子的文本大小,但是在 Internet Explorer 中不行。
虽然可以通过浏览器的缩放工具调整文本大小,但是这实际上是对整个页面的调整,而不仅限于文本。
使用 em 来设置字体大小
如果要避免在 Internet Explorer 中无法调整文本的问题,许多开发者使用 em 单位代替 pixels。
W3C 推荐使用 em 尺寸单位。
1em 等于当前的字体尺寸。如果一个元素的 font-size 为 16 像素,那么对于该元素,1em 就等于 16 像素。
在设置字体大小时,em 的值会相对于父元素的字体大小改变。
浏览器中默认的文本大小是 16 像素。因此 1em 的默认尺寸是 16 像素。
可以使用下面这个公式将像素转换为 em:pixels/16=em
(注:16 等于父元素的默认字体大小,假设父元素的 font-size 为 20px,那么公式需改为:pixels/20=em)
实例
h1 {font-size:3.75em;} /* 60px/16=3.75em */
h2 {font-size:2.5em;} /* 40px/16=2.5em */
p {font-size:0.875em;} /* 14px/16=0.875em */
在上面的例子中,以 em 为单位的文本大小与前一个例子中以像素计的文本是相同的。
不过,如果使用 em 单位,则可以在所有浏览器中调整文本大小。
不幸的是,在 IE 中仍存在问题。在重设文本大小时,会比正常的尺寸更大或更小。
结合使用百分比和 EM
在所有浏览器中均有效的方案是为 body 元素(父元素)以百分比设置默认的 font-size 值:
实例
body {font-size:100%;}
h1 {font-size:3.75em;}
h2 {font-size:2.5em;}
p {font-size:0.875em;}
我们的代码非常有效。在所有浏览器中,可以显示相同的文本大小,并允许所有浏览器缩放文本的大小。
font-weight 属性设置文本的粗细。
说明
该属性用于设置显示元素的文本中所用的字体加粗。
数字值 400 相当于 关键字 normal,700 等价于 bold。
每个数字值对应的字体加粗必须至少与下一个最小数字一样细,而且至少与下一个最大数字一样粗。
值 | 描述 |
---|---|
normal | 默认值。定义标准的字符。 |
bold | 定义粗体字符。 |
bolder | 定义更粗的字符。 |
lighter | 定义更细的字符。 |
100-900 | 定义由粗到细的字符。400 等同于 normal,而 700 等同于 bold。 |
inherit | 规定应该从父元素继承字体的粗细。 |
使用 bold 关键字可以将文本设置为粗体。
关键字 100 ~ 900 为字体指定了 9 级加粗度。
如果一个字体内置了这些加粗级别,那么这些数字就直接映射到预定义的级别,
100 对应最细的字体变形,900 对应最粗的字体变形。
数字 400 等价于 normal,而 700 等价于 bold。
如果将元素的加粗设置为 bolder,浏览器会设置比所继承值更粗的一个字体加粗。
与此相反,关键词 lighter 会导致浏览器将加粗度下移而不是上移。
实例
p.normal {font-weight:normal;}
p.thick {font-weight:bold;}
p.thicker {font-weight:900;}
font-style属性最常用于规定斜体文本。
该属性有三个值:
normal - 文本正常显示
italic - 文本斜体显示
oblique - 文本倾斜显示
实例
p.normal {font-style:normal;}
p.italic {font-style:italic;}
p.oblique {font-style:oblique;}
该属性设置使用斜体、倾斜或正常字体。
斜体字体通常定义为字体系列中的一个单独的字体。
理论上讲,用户代理可以根据正常字体计算一个斜体字体。
值 | 描述 |
---|---|
normal | 默认值。浏览器显示一个标准的字体样式。 |
italic | 浏览器会显示一个斜体的字体样式。 |
oblique | 浏览器会显示一个倾斜的字体样式。 |
inherit | 规定应该从父元素继承字体样式。 |
- | 文本的设置 |
---|---|
1 | color |
2 | text-align |
3 | line-height |
4 | text-decoration |
5 | text-indent |
color 属性规定文本的颜色。
这个属性设置了一个元素的前景色(在 HTML 表现中,就是元素文本的颜色);
光栅图像不受 color 影响。
这个颜色还会应用到元素的所有边框,除非被 border-color 或另外某个边框颜色属性覆盖。
body
{
color:red;
}
h1
{
color:#00ff00;
}
p
{
color:rgb(0,0,255);
}
text-align 属性规定元素中的文本的水平对齐方式。
该属性通过指定行框与哪个点对齐,从而设置块级元素内文本的水平对齐方式。
通过允许用户代理调整行内容中字母和字之间的间隔,可以支持值 justify;
不同用户代理可能会得到不同的结果。
h1 {text-align:center}
h2 {text-align:left}
h3 {text-align:right}
line-height 属性设置行间的距离(行高)。
注释:不允许使用负值。
说明
该属性会影响行框的布局。
在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最大距离。
line-height 与 font-size 的计算值之差(在 CSS 中成为“行间距”)分为两半,
分别加到一个文本行内容的顶部和底部。可以包含这些内容的最小框就是行框。
原始数字值指定了一个缩放因子,后代元素会继承这个缩放因子而不是计算值。
p.small {line-height:90%}
p.big {line-height:200%}
text-decoration属性规定添加到文本的修饰。
注释:修饰的颜色由 “color” 属性设置。
说明
这个属性允许对文本设置某种效果,如加下划线。
如果后代元素没有自己的装饰,祖先元素上设置的装饰会“延伸”到后代元素中。
不要求用户代理支持 blink。
h1 {text-decoration:overline}
h2 {text-decoration:line-through}
h3 {text-decoration:underline}
h4 {text-decoration:blink}
text-indent属性规定文本块中首行文本的缩进。
注释:允许使用负值。如果使用负值,那么首行会被缩进到左边。
注意:在 CSS 2.1 之前,text-indent 总是继承计算值,而不是声明值。
p
{
text-indent:50px;
}
- | 背景的设置 |
---|---|
1 | background-color |
2 | background-image |
3 | background-repeat |
4 | background-position |
5 | background-attachment |
属性为元素设置背景色。
这个属性接受任何合法的颜色值。
这条规则把元素的背景设置为灰色:
p {background-color: gray;}
如果您希望背景色从元素中的文本向外少有延伸,只需增加一些内边距:
p {background-color: gray; padding: 20px;}
要把图像放入背景,需要使用 background-image 属性。
background-image 属性的默认值是 none,表示背景上没有放置任何图像。
如果需要设置一个背景图像,必须为这个属性设置一个 URL 值:
body {background-image: url(/i/eg_bg_04.gif);}
大多数背景都应用到 body 元素,不过并不仅限于此。
下面例子为一个段落应用了一个背景,而不会对文档的其他部分应用背景:
p.flower {background-image: url(/i/eg_bg_03.gif);}
您甚至可以为行内元素设置背景图像,下面的例子为一个链接设置了背景图像:
a.radio {background-image: url(/i/eg_bg_07.gif);}
如果需要在页面上对背景图像进行平铺,可以使用 background-repeat 属性。
属性值 repeat 导致图像在水平垂直方向上都平铺,就像以往背景图像的通常做法一样。
repeat-x 和 repeat-y 分别导致图像只在水平或垂直方向上重复,
no-repeat 则不允许图像在任何方向上平铺。
默认地,背景图像将从一个元素的左上角开始。请看下面的例子:
body
{ background-image: url(/i/eg_bg_03.gif); background-repeat: repeat-y; }
可以利用 background-position 属性改变图像在背景中的位置。
下面的例子在 body 元素中将一个背景图像居中放置:
body
{ background-image:url('/i/eg_bg_03.gif'); background-repeat:no-repeat; background-position:center; }
为 background-position 属性提供值有很多方法。
首先,可以使用一些关键字:top、bottom、left、right 和 center。
通常,这些关键字会成对出现,不过也不总是这样。还可以使用长度值,
如 100px 或 5cm,最后也可以使用百分数值。不同类型的值对于背景图像的放置稍有差异。
关键字
图像放置关键字最容易理解,其作用如其名称所表明的。
例如,top right 使图像放置在元素内边距区的右上角。
根据规范,位置关键字可以按任何顺序出现,只要保证不超过两个关键字.
一个对应水平方向,另一个对应垂直方向。
如果只出现一个关键字,则认为另一个关键字是 center。
所以,如果希望每个段落的中部上方出现一个图像,只需声明如下:
p
{ background-image:url('bgimg.gif'); background-repeat:no-repeat; background-position:top; }
下面是等价的位置关键字:
单一关键字 | 等价的关键字 |
---|---|
center | center center |
top | top center 或 center top |
bottom | bottom center 或 center bottom |
right | right center 或 center right |
left | left center 或 center left |
百分数值
百分数值的表现方式更为复杂。假设你希望用百分数值将图像在其元素中居中,这很容易:
body
{ background-image:url('/i/eg_bg_03.gif'); background-repeat:no-repeat; background-position:50% 50%; }
这会导致图像适当放置,其中心与其元素的中心对齐。
换句话说,百分数值同时应用于元素和图像。
也就是说,图像中描述为 50% 50% 的点(中心点)与元素中描述为 50% 50% 的点(中心点)对齐。
如果图像位于 0% 0%,其左上角将放在元素内边距区的左上角。
如果图像位置是 100% 100%,会使图像的右下角放在右边距的右下角。
因此,如果你想把一个图像放在水平方向 2/3、垂直方向 1/3 处,可以这样声明:
body
{ background-image:url('/i/eg_bg_03.gif'); background-repeat:no-repeat; background-position:66% 33%; }
如果只提供一个百分数值,所提供的这个值将用作水平值,垂直值将假设为 50%。
这一点与关键字类似。
background-position 的默认值是 0% 0%,在功能上相当于 top left。
这就解释了背景图像为什么总是从元素内边距区的左上角开始平铺,除非您设置了不同的位置值。
长度值
长度值解释的是元素内边距区左上角的偏移。偏移点是图像的左上角。
比如,如果设置值为 50px 100px,图像的左上角将在元素内边距区左上角向右 50 像素、向下 100 像素的位置上:
body
{ background-image:url('/i/eg_bg_03.gif'); background-repeat:no-repeat; background-position:50px 100px; }
```
注意,这一点与百分数值不同,因为偏移只是从一个左上角到另一个左上角。
也就是说,图像的左上角与 background-position 声明中的指定的点对齐。
######4.3.5 background-attachment背景关联
如果文档比较长,那么当文档向下滚动时,背景图像也会随之滚动。
当文档滚动到超过图像的位置时,图像就会消失。
您可以通过 background-attachment 属性防止这种滚动。
通过这个属性,可以声明图像相对于可视区是固定的(fixed),因此不会受到滚动的影响:
body
{
background-image:url(/i/eg_bg_02.gif);
background-repeat:no-repeat;
background-attachment:fixed
}
“`