Free Web Building Tutorials
At W3School.com.cn you will find all the Web-building tutorials you need,
from basic HTML and XHTML to advanced XML, XSL, Multimedia and WAP.
W3School.com.cn - The Largest Web Developers Site On The Net!
这是段落
这个段落设置了内边距。
我是一个有花纹背景的段落。我是一个有放射性背景的链接。
注释:为了清晰地显示出段落和链接的背景图像,我们为它们设置了少许内边距。
This is a paragraph. The spaces between words will be increased.
This is a paragraph. The spaces between words will be decreased.
This paragraph has many
spaces in it.
This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph.
This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph. This is a paragraph.
...
来标记段落。
font-size 值可以是绝对或相对值。
绝对值:
将文本设置为指定的大小
不允许用户在所有浏览器中改变文本大小(不利于可用性)
绝对大小在确定了输出的物理尺寸时很有用
相对大小:
相对于周围的元素来设置大小
允许用户在浏览器改变文本大小
注意:如果您没有规定字体大小,普通文本(比如段落)的默认大小是 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;}
亲自试一试
我们的代码非常有效。在所有浏览器中,可以显示相同的文本大小,并允许所有浏览器缩放文本的大小。
CSS 字体实例:
设置文本的字体
本例演示如何设置文本字体。
设置字体尺寸
本例演示如何设置字体尺寸。
设置字体风格
本例演示如何设置字体风格。
设置字体的异体
本例演示如何设置字体的异体。
设置字体的粗细
本例演示如何设置字体的粗细。
所有字体属性在一个声明之内
本例演示如何使用简写属性将字体属性设置在一个声明之内。
CSS 字体属性
属性 描述
font 简写属性。作用是把所有针对字体的属性设置在一个声明中。
font-family 设置字体系列。
font-size 设置字体的尺寸。
font-size-adjust 当首选字体不可用时,对替换字体进行智能缩放。(CSS2.1 已删除该属性。)
font-stretch 对字体进行水平拉伸。(CSS2.1 已删除该属性。)
font-style 设置字体风格。
font-variant 以小型大写字体或者正常字体显示文本。
font-weight 设置字体的粗细。
CSS 链接
我们能够以不同的方法为链接设置样式。
设置链接的样式
能够设置链接样式的 CSS 属性有很多种(例如 color, font-family, background 等等)。
链接的特殊性在于能够根据它们所处的状态来设置它们的样式。
链接的四种状态:
a:link - 普通的、未被访问的链接
a:visited - 用户已访问的链接
a:hover - 鼠标指针位于链接的上方
a:active - 链接被点击的时刻
实例
a:link {color:#FF0000;} /* 未被访问的链接 */
a:visited {color:#00FF00;} /* 已被访问的链接 */
a:hover {color:#FF00FF;} /* 鼠标指针移动到链接上 */
a:active {color:#0000FF;} /* 正在被点击的链接 */
亲自试一试
当为链接的不同状态设置样式时,请按照以下次序规则:
a:hover 必须位于 a:link 和 a:visited 之后
a:active 必须位于 a:hover 之后
常见的链接样式
在上面的例子中,链接根据其状态改变颜色。
让我们看看其他几种常见的设置链接样式的方法:
文本修饰
text-decoration 属性大多用于去掉链接中的下划线:
实例
a:link {text-decoration:none;}
a:visited {text-decoration:none;}
a:hover {text-decoration:underline;}
a:active {text-decoration:underline;}
亲自试一试
背景色
background-color 属性规定链接的背景色:
实例
a:link {background-color:#B2FF99;}
a:visited {background-color:#FFFF85;}
a:hover {background-color:#FF704D;}
a:active {background-color:#FF704D;}
高级 - 创建链接框
Adams | John |
Bush | George |
Carter | Thomas |
Gates | Bill |
注释:如果已规定 !DOCTYPE,那么 Internet Explorer 8 (以及更高版本)支持 border-spacing 属性。
Company | Contact | Country |
---|---|---|
Apple | Steven Jobs | USA |
Baidu | Li YanHong | China |
Larry Page | USA | |
Lenovo | Liu Chuanzhi | China |
Microsoft | Bill Gates | USA |
Nokia | Stephen Elop | Finland |
Adams | John |
Bush |
注释:如果已规定 !DOCTYPE,那么 Internet Explorer 8 (以及更高版本)支持 empty-cells 属性。
Some more text.
和 | )
table-caption 此元素会作为一个表格标题显示(类似 inherit 规定应该从父元素继承 display 属性的值。 CSS 定位机制 CSS 有三种基本的定位机制:普通流、浮动和绝对定位。 除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。 块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。 行内框在一行中水平布置。可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为行框(Line Box),行框的高度总是足以容纳它包含的所有行内框。不过,设置行高可以增加这个框的高度。 在下面的章节,我们会为您详细讲解相对定位、绝对定位和浮动。 CSS position 属性 通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式。 position 属性值的含义: static 元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。 relative 元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。 absolute 元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。 fixed 元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。 提示:相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。 CSS 定位属性 CSS 定位属性允许你对元素进行定位。 属性 描述 position 把元素放置到一个静态的、相对的、绝对的、或固定的位置中。 top 定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移。 right 定义了定位元素右外边距边界与其包含块右边界之间的偏移。 bottom 定义了定位元素下外边距边界与其包含块下边界之间的偏移。 left 定义了定位元素左外边距边界与其包含块左边界之间的偏移。 overflow 设置当元素的内容溢出其区域时发生的事情。 clip 设置元素的形状。元素被剪入这个形状之中,然后显示出来。 vertical-align 设置元素的垂直对齐方式。 z-index 设置元素的堆叠顺序。 CSS overflow 属性 实例 设置 overflow 属性: div { width:150px; height:150px; overflow:scroll; } 值 描述 visible 默认值。内容不会被修剪,会呈现在元素框之外。 hidden 内容会被修剪,并且其余内容是不可见的。 scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 inherit 规定应该从父元素继承 overflow 属性的值。 CSS clip 属性 实例 剪裁图像: img { position:absolute; clip:rect(0px,60px,200px,0px); } 定义和用法 clip 属性剪裁绝对定位元素。 当一幅图像的尺寸大于包含它的元素时会发生什么呢?"clip" 属性允许您规定一个元素的可见尺寸,这样此元素就会被修剪并显示为这个形状。 说明 这个属性用于定义一个剪裁矩形。对于一个绝对定义元素,在这个矩形内的内容才可见。出了这个剪裁区域的内容会根据 overflow 的值来处理。剪裁区域可能比元素的内容区大,也可能比内容区小。 值 描述 shape 设置元素的形状。唯一合法的形状值是:rect (top, right, bottom, left) auto 默认值。不应用任何剪裁。 inherit 规定应该从父元素继承 clip 属性的值。 CSS vertical-align 属性 实例 垂直对齐一幅图像: img { vertical-align:text-top; } 定义和用法 vertical-align 属性设置元素的垂直对齐方式。 说明 该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值。这会使元素降低而不是升高。在表单元格中,这个属性会设置单元格框中的单元格内容的对齐方式。 值 描述 baseline 默认。元素放置在父元素的基线上。 sub 垂直对齐文本的下标。 super 垂直对齐文本的上标 top 把元素的顶端与行中最高元素的顶端对齐 text-top 把元素的顶端与父元素字体的顶端对齐 middle 把此元素放置在父元素的中部。 bottom 把元素的顶端与行中最低的元素的顶端对齐。 text-bottom 把元素的底端与父元素字体的底端对齐。 length % 使用 "line-height" 属性的百分比值来排列此元素。允许使用负值。 inherit 规定应该从父元素继承 vertical-align 属性的值。 CSS position 属性 实例 定位 h2 元素: h2 { position:absolute; left:100px; top:150px; } 值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 relative 生成相对定位的元素,相对于其正常位置进行定位。 因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。 static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 inherit 规定应该从父元素继承 position 属性的值。 CSS 相对定位 设置为相对定位的元素框会偏移某个距离。元素仍然保持其未定位前的形状,它原本所占的空间仍保留。 CSS 相对定位 相对定位是一个非常容易掌握的概念。如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。 如果将 top 设置为 20px,那么框将在原位置顶部下面 20 像素的地方。如果 left 设置为 30 像素,那么会在元素左边创建 30 像素的空间,也就是将元素向右移动。 #box_relative { position: relative; left: 30px; top: 20px; } 如下图所示: CSS 相对定位实例 注意,在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。 设置为绝对定位的元素框从文档流完全删除,并相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。 CSS 绝对定位 绝对定位使元素的位置与文档流无关,因此不占据空间。这一点与相对定位不同,相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。 普通流中其它元素的布局就像绝对定位的元素不存在一样: #box_relative { position: absolute; left: 30px; top: 20px; } 如下图所示: CSS 绝对定位实例 绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块。 对于定位的主要问题是要记住每种定位的意义。所以,现在让我们复习一下学过的知识吧:相对定位是“相对于”元素在文档中的初始位置,而绝对定位是“相对于”最近的已定位祖先元素,如果不存在已定位的祖先元素,那么“相对于”最初的包含块。 注释:根据用户代理的不同,最初的包含块可能是画布或 HTML 元素。 提示:因为绝对定位的框与文档流无关,所以它们可以覆盖页面上的其它元素。可以通过设置 z-index 属性来控制这些框的堆放次序。 CSS 浮动 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。 CSS 浮动 请看下图,当把框 1 向右浮动时,它脱离文档流并且向右移动,直到它的右边缘碰到包含框的右边缘: CSS 浮动实例 - 向右浮动的元素 再请看下图,当框 1 向左浮动时,它脱离文档流并且向左移动,直到它的左边缘碰到包含框的左边缘。因为它不再处于文档流中,所以它不占据空间,实际上覆盖住了框 2,使框 2 从视图中消失。 如果把所有三个框都向左移动,那么框 1 向左浮动直到碰到包含框,另外两个框向左浮动直到碰到前一个浮动框。 CSS 浮动实例 - 向左浮动的元素 如下图所示,如果包含框太窄,无法容纳水平排列的三个浮动元素,那么其它浮动块向下移动,直到有足够的空间。如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”: CSS 浮动实例 2 - 向左浮动的元素 CSS float 属性 在 CSS 中,我们通过 float 属性实现元素的浮动。 如需更多有关 float 属性的知识,请访问参考手册:CSS float 属性。 行框和清理 浮动框旁边的行框被缩短,从而给浮动框留出空间,行框围绕浮动框。 因此,创建浮动框可以使文本围绕图像: 行框围绕浮动框 要想阻止行框围绕浮动框,需要对该框应用 clear 属性。clear 属性的值可以是 left、right、both 或 none,它表示框的哪些边不应该挨着浮动框。 为了实现这种效果,在被清理的元素的上外边距上添加足够的空间,使元素的顶边缘垂直下降到浮动框下面: clear 属性实例 - 对行框应用 clear 这是一个有用的工具,它让周围的元素为浮动元素留出空间。 让我们更详细地看看浮动和清理。假设希望让一个图片浮动到文本块的左边,并且希望这幅图片和文本包含在另一个具有背景颜色和边框的元素中。您可能编写下面的代码: .news { background-color: gray; border: solid 1px black; } .news img { float: left; } .news p { float: right; } some text 这种情况下,出现了一个问题。因为浮动元素脱离了文档流,所以包围图片和文本的 div 不占据空间。 如何让包围元素在视觉上包围浮动元素呢?需要在这个元素中的某个地方应用 clear: clear 属性实例 - 对空元素应用清理 不幸的是出现了一个新的问题,由于没有现有的元素可以应用清理,所以我们只能添加一个空元素并且清理它。 .news { background-color: gray; border: solid 1px black; } .news img { float: left; } .news p { float: right; } .clear { clear: both; } some text 这样可以实现我们希望的效果,但是需要添加多余的代码。常常有元素可以应用 clear,但是有时候不得不为了进行布局而添加无意义的标记。 不过我们还有另一种办法,那就是对容器 div 进行浮动: .news { background-color: gray; border: solid 1px black; float: left; } .news img { float: left; } .news p { float: right; } some text 这样会得到我们希望的效果。不幸的是,下一个元素会受到这个浮动元素的影响。为了解决这个问题,有些人选择对布局中的所有东西进行浮动,然后使用适当的有意义的元素(常常是站点的页脚)对这些浮动进行清理。这有助于减少或消除不必要的标记。 事实上,W3School 站点上的所有页面都采用了这种技术,如果您打开我们使用 CSS 文件,您会看到我们对页脚的 div 进行了清理,而页脚上面的三个 div 都向左浮动。 CSS clear 属性 我们刚才详细讨论了 CSS 清理的工作原理和 clear 属性应用方法。如果您希望学习更多有关 clear 属性的知识,请访问参考手册:CSS clear 属性。 CSS float 属性 实例 把图像向右浮动: img { float:right; } 定义和用法 float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。 如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。 注释:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。 值 描述 left 元素向左浮动。 right 元素向右浮动。 none 默认值。元素不浮动,并会显示在其在文本中出现的位置。 inherit 规定应该从父元素继承 float 属性的值。 W3School.com.cn"Never increase, beyond what is necessary, the number of entities required to explain anything." William of Ockham (1285-1349) Free Web Building TutorialsAt W3School.com.cn you will find all the Web-building tutorials you need,
W3School.com.cn - The Largest Web Developers Site On The Net! CSS clear 属性 实例 图像的左侧和右侧均不允许出现浮动元素: img { float:left; clear:both; } 定义和用法 clear 属性规定元素的哪一侧不允许其他浮动元素。 说明 clear 属性定义了元素的哪边上不允许出现浮动元素。在 CSS1 和 CSS2 中,这是通过自动为清除元素(即设置了 clear 属性的元素)增加上外边距实现的。在 CSS2.1 中,会在元素上外边距之上增加清除空间,而外边距本身并不改变。不论哪一种改变,最终结果都一样,如果声明为左边或右边清除,会使元素的上外边框边界刚好在该边上浮动元素的下外边距边界之下。 值 描述 left 在左侧不允许浮动元素。 right 在右侧不允许浮动元素。 both 在左右两侧均不允许浮动元素。 none 默认值。允许浮动元素出现在两侧。 inherit 规定应该从父元素继承 clear 属性的值 CSS 元素选择器 类型选择器 在 W3C 标准中,元素选择器又称为类型选择器(type selector)。 “类型选择器匹配文档语言元素类型的名称。类型选择器匹配文档树中该元素类型的每一个实例。” 下面的规则匹配文档树中所有 h1 元素: h1 {font-family: sans-serif;} 因此,我们也可以为 XML 文档中的元素设置样式: CSS 分组 选择器分组 假设希望 h2 元素和段落都有灰色。为达到这个目的,最容易的做法是使用以下声明: h2, p {color:gray;} 将 h2 和 p 选择器放在规则左边,然后用逗号分隔,就定义了一个规则。其右边的样式(color:gray;)将应用到这两个选择器所引用的元素。逗号告诉浏览器,规则中包含两个不同的选择器。如果没有这个逗号,那么规则的含义将完全不同。参见后代选择器。 可以将任意多个选择器分组在一起,对此没有任何限制。 例如,如果您想把很多元素显示为灰色,可以使用类似如下的规则: body, h2, p, table, th, td, pre, strong, em {color:gray;} 提示:通过分组,创作者可以将某些类型的样式“压缩”在一起,这样就可以得到更简洁的样式表。 以下的两组规则能得到同样的结果,不过可以很清楚地看出哪一个写起来更容易: 通配符选择器 CSS2 引入了一种新的简单选择器 - 通配选择器(universal selector),显示为一个星号(*)。该选择器可以与任何元素匹配,就像是一个通配符。 例如,下面的规则可以使文档中的每个元素都为红色: * {color:red;} 亲自试一试 这个声明等价于列出了文档中所有元素的一个分组选择器。利用通配选择器,只需敲一次键(仅一个星号)就能使文档中所有元素的 color 属性值指定为 red。 声明分组 我们既可以对选择器进行分组,也可以对声明分组。 假设您希望所有 h1 元素都有红色背景,并使用 28 像素高的 Verdana 字体显示为蓝色文本,可以写以下样式: h1 {font: 28px Verdana;} h1 {color: blue;} h1 {background: red;} 但是上面这种做法的效率并不高。尤其是当我们为一个有多个样式的元素创建这样一个列表时会很麻烦。相反,我们可以将声明分组在一起: h1 {font: 28px Verdana; color: white; background: black;} 这与前面的 3 行样式表的效果完全相同。 注意,对声明分组,一定要在各个声明的最后使用分号,这很重要。浏览器会忽略样式表中的空白符。只要加了分号,就可以毫无顾忌地采用以下格式建立样式: h1 { font: 28px Verdana; color: blue; background: red; } 亲自试一试 怎么样,上面这种写法的可读性是不是更强。 不过,如果忽略了第二个分号,用户代理就会把这个样式表解释如下: h1 { font: 28px Verdana; color: blue background: red; } 亲自试一试 因为 background 对 color 来说不是一个合法值,而且由于只能为 color 指定一个关键字,所以用户代理会完全忽略这个 color 声明(包括 background: black 部分)。这样 h1 标题只会显示为蓝色,而没有红色背景,不过更有可能根本得不到蓝色的 h1。相反,这些标题只会显示为默认颜色(通常是黑色),而且根本没有背景色。font: 28px Verdana 声明仍能正常发挥作用,因为它确实正确地以一个分号结尾。 与选择器分组一样,声明分组也是一种便利的方法,可以缩短样式表,使之更清晰,也更易维护。 提示:在规则的最后一个声明后也加上分号是一个好习惯。在向规则增加另一个声明时,就不必担心忘记再插入一个分号。 结合选择器和声明的分组 我们可以在一个规则中结合选择器分组和声明分组,就可以使用很少的语句定义相对复杂的样式。 下面的规则为所有标题指定了一种复杂的样式: h1, h2, h3, h4, h5, h6 { color:gray; background: white; padding: 10px; border: 1px solid black; font-family: Verdana; } 亲自试一试 上面这条规则将所有标题的样式定义为带有白色背景的灰色文本,其内边距是 10 像素,并带有 1 像素的实心边框,文本字体是 Verdana。 CSS 类选择器详解 CSS ID 选择器详解 CSS 属性选择器详解 CSS 2 引入了属性选择器。 属性选择器可以根据元素的属性及属性值来选择元素。 简单属性选择 如果希望选择有某个属性的元素,而不论属性值是什么,可以使用简单属性选择器。 例子 1 如果您希望把包含标题(title)的所有元素变为红色,可以写作: *[title] {color:red;} 亲自试一试 例子 2 与上面类似,可以只对有 href 属性的锚(a 元素)应用样式: a[href] {color:red;} 亲自试一试 例子 3 还可以根据多个属性进行选择,只需将属性选择器链接在一起即可。 例如,为了将同时有 href 和 title 属性的 HTML 超链接的文本设置为红色,可以这样写: a[href][title] {color:red;} 亲自试一试 例子 4 可以采用一些创造性的方法使用这个特性。 例如,可以对所有带有 alt 属性的图像应用样式,从而突出显示这些有效的图像: img[alt] {border: 5px solid red;} 亲自试一试 提示:上面这个特例更适合用来诊断而不是设计,即用来确定图像是否确实有效。 例子 5:为 XML 文档使用属性选择器 属性选择器在 XML 文档中相当有用,因为 XML 语言主张要针对元素和属性的用途指定元素名和属性名。 假设我们为描述太阳系行星设计了一个 XML 文档。如果我们想选择有 moons 属性的所有 planet 元素,使之显示为红色,以便能更关注有 moons 的行星,就可以这样写: planet[moons] {color:red;} 这会让以下标记片段中的第二个和第三个元素的文本显示为红色,但第一个元素的文本不是红色: 查看效果 根据具体属性值选择 除了选择拥有某些属性的元素,还可以进一步缩小选择范围,只选择有特定属性值的元素。 例子 1 例如,假设希望将指向 Web 服务器上某个指定文档的超链接变成红色,可以这样写: a[href="http://www.w3school.com.cn/about_us.asp"] {color: red;} 亲自试一试 例子 2 与简单属性选择器类似,可以把多个属性-值选择器链接在一起来选择一个文档。 a[href="http://www.w3school.com.cn/"][title="W3School"] {color: red;} 这会把以下标记中的第一个超链接的文本变为红色,但是第二个或第三个链接不受影响: W3School CSS HTML 亲自试一试 例子 3 同样地,XML 语言也可以利用这种方法来设置样式。 下面我们再回到行星那个例子中。假设只希望选择 moons 属性值为 1 的那些 planet 元素: planet[moons="1"] {color: red;} 上面的代码会把以下标记中的第二个元素变成红色,但第一个和第三个元素不受影响: 查看效果 属性与属性值必须完全匹配 请注意,这种格式要求必须与属性值完全匹配。 如果属性值包含用空格分隔的值列表,匹配就可能出问题。 请考虑一下的标记片段: This paragraph is a very important warning. 如果写成 p[class="important"],那么这个规则不能匹配示例标记。 要根据具体属性值来选择该元素,必须这样写: p[class="important warning"] {color: red;} 亲自试一试 根据部分属性值选择 如果需要根据属性值中的词列表的某个词进行选择,则需要使用波浪号(~)。 假设您想选择 class 属性中包含 important 的元素,可以用下面这个选择器做到这一点: p[class~="important"] {color: red;} 亲自试一试 如果忽略了波浪号,则说明需要完成完全值匹配。 部分值属性选择器与点号类名记法的区别 该选择器等价于我们在类选择器中讨论过的点号类名记法。 也就是说,p.important 和 p[class="important"] 应用到 HTML 文档时是等价的。 那么,为什么还要有 "~=" 属性选择器呢?因为它能用于任何属性,而不只是 class。 例如,可以有一个包含大量图像的文档,其中只有一部分是图片。对此,可以使用一个基于 title 文档的部分属性选择器,只选择这些图片: img[title~="Figure"] {border: 1px solid gray;} 这个规则会选择 title 文本包含 "Figure" 的所有图像。没有 title 属性或者 title 属性中不包含 "Figure" 的图像都不会匹配。 亲自试一试 子串匹配属性选择器 下面为您介绍一个更高级的选择器模块,它是 CSS2 完成之后发布的,其中包含了更多的部分值属性选择器。按照规范的说法,应该称之为“子串匹配属性选择器”。 很多现代浏览器都支持这些选择器,包括 IE7。 下表是对这些选择器的简单总结: 类型 描述 [abc^="def"] 选择 abc 属性值以 "def" 开头的所有元素 [abc$="def"] 选择 abc 属性值以 "def" 结尾的所有元素 [abc*="def"] 选择 abc 属性值中包含子串 "def" 的所有元素 可以想到,这些选择有很多用途。 举例来说,如果希望对指向 W3School 的所有链接应用样式,不必为所有这些链接指定 class,再根据这个类编写样式,而只需编写以下规则: a[href*="w3school.com.cn"] {color: red;} 亲自试一试 提示:任何属性都可以使用这些选择器。 特定属性选择类型 最后为您介绍特定属性选择器。请看下面的例子: *[lang|="en"] {color: red;} 上面这个规则会选择 lang 属性等于 en 或以 en- 开头的所有元素。因此,以下示例标记中的前三个元素将被选中,而不会选择后两个元素: Hello! Greetings! G'day! Bonjour! Jrooana! 亲自试一试 一般来说,[att|="val"] 可以用于任何属性及其值。 假设一个 HTML 文档中有一系列图片,其中每个图片的文件名都形如 figure-1.jpg 和 figure-2.jpg。就可以使用以下选择器匹配所有这些图像: img[src|="figure"] {border: 1px solid gray;} 亲自试一试 当然,这种属性选择器最常见的用途还是匹配语言值。 CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。 [attribute|=value] 用于选取带有以指定值开头的属性值的元素,该值必须是整个单词。 [attribute^=value] 匹配属性值以指定值开头的每个元素。 [attribute$=value] 匹配属性值以指定值结尾的每个元素。 [attribute*=value] 匹配属性值中包含指定值的每个元素。 CSS 后代选择器 后代选择器(descendant selector)又称为包含选择器。 后代选择器可以选择作为某元素后代的元素。 根据上下文选择元素 我们可以定义后代选择器来创建一些规则,使这些规则在某些文档结构中起作用,而在另外一些结构中不起作用。 举例来说,如果您希望只对 h1 元素中的 em 元素应用样式,可以这样写: h1 em {color:red;} 上面这个规则会把作为 h1 元素后代的 em 元素的文本变为 红色。其他 em 文本(如段落或块引用中的 em)则不会被这个规则选中: This is a important headingThis is a important paragraph. 亲自试一试 当然,您也可以在 h1 中找到的每个 em 元素上放一个 class 属性,但是显然,后代选择器的效率更高。 语法解释 在后代选择器中,规则左边的选择器一端包括两个或多个用空格分隔的选择器。选择器之间的空格是一种结合符(combinator)。每个空格结合符可以解释为“... 在 ... 找到”、“... 作为 ... 的一部分”、“... 作为 ... 的后代”,但是要求必须从右向左读选择器。 因此,h1 em 选择器可以解释为 “作为 h1 元素后代的任何 em 元素”。如果要从左向右读选择器,可以换成以下说法:“包含 em 的所有 h1 会把以下样式应用到该 em”。 具体应用 后代选择器的功能极其强大。有了它,可以使 HTML 中不可能实现的任务成为可能。 假设有一个文档,其中有一个边栏,还有一个主区。边栏的背景为蓝色,主区的背景为白色,这两个区都包含链接列表。不能把所有链接都设置为蓝色,因为这样一来边栏中的蓝色链接都无法看到。 解决方法是使用后代选择器。在这种情况下,可以为包含边栏的 div 指定值为 sidebar 的 class 属性,并把主区的 class 属性值设置为 maincontent。然后编写以下样式: div.sidebar {background:blue;} div.maincontent {background:white;} div.sidebar a:link {color:white;} div.maincontent a:link {color:blue;} 有关后代选择器有一个易被忽视的方面,即两个元素之间的层次间隔可以是无限的。 例如,如果写作 ul em,这个语法就会选择从 ul 元素继承的所有 em 元素,而不论 em 的嵌套层次多深。 因此,ul em 将会选择以下标记中的所有 em 元素:
CSS 子元素选择器 与后代选择器相比,子元素选择器(Child selectors)只能选择作为某元素子元素的元素。 选择子元素 如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用子元素选择器(Child selector)。 例如,如果您希望选择只作为 h1 元素子元素的 strong 元素,可以这样写: h1 > strong {color:red;} 这个规则会把第一个 h1 下面的两个 strong 元素变为红色,但是第二个 h1 中的 strong 不受影响: This is very very important.This is really very important.语法解释 您应该已经注意到了,子选择器使用了大于号(子结合符)。 子结合符两边可以有空白符,这是可选的。因此,以下写法都没有问题: h1 > strong h1> strong h1 >strong h1>strong 如果从右向左读,选择器 h1 > strong 可以解释为“选择作为 h1 元素子元素的所有 strong 元素”。 结合后代选择器和子选择器 请看下面这个选择器: table.company td > p 上面的选择器会选择作为 td 元素子元素的所有 p 元素,这个 td 元素本身从 table 元素继承,该 table 元素有一个包含 company 的 class 属性。 CSS 相邻兄弟选择器 相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素。 选择相邻兄弟 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器(Adjacent sibling selector)。 例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写: h1 + p {margin-top:50px;} 这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。 亲自试一试 语法解释 相邻兄弟选择器使用了加号(+),即相邻兄弟结合符(Adjacent sibling combinator)。 注释:与子结合符一样,相邻兄弟结合符旁边可以有空白符。 请看下面这个文档树片段:
在上面的片段中,div 元素中包含两个列表:一个无序列表,一个有序列表,每个列表都包含三个列表项。这两个列表是相邻兄弟,列表项本身也是相邻兄弟。不过,第一个列表中的列表项与第二个列表中的列表项不是相邻兄弟,因为这两组列表项不属于同一父元素(最多只能算堂兄弟)。 请记住,用一个结合符只能选择两个相邻兄弟中的第二个元素。请看下面的选择器: li + li {font-weight:bold;} 上面这个选择器只会把列表中的第二个和第三个列表项变为粗体。第一个列表项不受影响。 亲自试一试 结合其他选择器 相邻兄弟结合符还可以结合其他结合符: html > body table + ul {margin-top:20px;} 这个选择器解释为:选择紧接在 table 元素后出现的所有兄弟 ul 元素,该 table 元素包含在一个 body 元素中,body 元素本身是 html 元素的子元素。 CSS 伪类 (Pseudo-classes) CSS 伪类用于向某些选择器添加特殊的效果 超链接 注释:在 CSS 定义中,a:hover 必须位于 a:link 和 a:visited 之后,这样才能生效! 注释:在 CSS 定义中,a:active 必须位于 a:hover 之后,这样才能生效! 请把鼠标移动到这些链接上,以查看效果: 注释:如果已规定 !DOCTYPE,那么 Internet Explorer 8 (以及更高版本)支持 :focus 伪类。 These are the necessary steps:
Do not push the brake at the same time as the accelerator. 注释:必须声明 DOCTYPE,这样 :first-child 才能在 IE 中生效。 :lang 伪类允许您为不同的语言定义特殊的规则。在下面的例子中,在下面的例子中,:lang 类为带有值为 "no" 的 lang 属性的 q 元素定义引号的类型: 一些文本 CSS 伪类用于向某些选择器添加特殊的效果。 CSS 伪类 (Pseudo-classes)实例: 超链接 本例演示如何向文档中的超链接添加不同的颜色。 超链接 2 本例演示如何向超链接添加其他样式。 超链接 - :focus 的使用 本例演示如何对超链接应用 :focus 伪类(无法在 IE 中工作)。 :first-child(首个子对象) 本例演示 :first-child 伪类的用法。 :lang(语言) 本例演示 :lang 伪类的用法。 语法 伪类的语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用。 selector.class : pseudo-class {property: value} 锚伪类 在支持 CSS 的浏览器中,链接的不同状态都可以不同的方式显示,这些状态包括:活动状态,已被访问状态,未被访问状态,和鼠标悬停状态。 a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问的链接 */ a:hover {color: #FF00FF} /* 鼠标移动到链接上 */ a:active {color: #0000FF} /* 选定的链接 */ 亲自试一试 提示:在 CSS 定义中,a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。 提示:在 CSS 定义中,a:active 必须被置于 a:hover 之后,才是有效的。 提示:伪类名称对大小写不敏感。 伪类与 CSS 类 伪类可以与 CSS 类配合使用: a.red : visited {color: #FF0000} CSS Syntax 假如上面的例子中的链接被访问过,那么它将显示为红色。 CSS2 - :first-child 伪类 您可以使用 :first-child 伪类来选择元素的第一个子元素。这个特定伪类很容易遭到误解,所以有必要举例来说明。考虑以下标记: These are the necessary steps:
Do not push the brake at the same time as the accelerator. 在上面的例子中,作为第一个元素的元素包括第一个 p、第一个 li 和 strong 和 em 元素。 给定以下规则: p:first-child {font-weight: bold;} li:first-child {text-transform:uppercase;} 第一个规则将作为某元素第一个子元素的所有 p 元素设置为粗体。第二个规则将作为某个元素(在 HTML 中,这肯定是 ol 或 ul 元素)第一个子元素的所有 li 元素变成大写。 请访问该链接,来查看这个 :first-child 实例的效果。 提示:最常见的错误是认为 p:first-child 之类的选择器会选择 p 元素的第一个子元素。 注释:必须声明 ,这样 :first-child 才能在 IE 中生效。 为了使您更透彻地理解 :first-child 伪类,我们另外提供了 3 个例子: 例子 1 - 匹配第一个 元素
some text some text TIY 例子 2 - 匹配所有 元素中的第一个 元素
元素中的第一个 元素:
some text. some text. some text. some text. TIY 例子 3 - 匹配所有作为第一个子元素的 元素中的所有 元素
元素中的所有 元素:
some text. some text. some text. some text. TIY CSS2 - :lang 伪类 :lang 伪类使你有能力为不同的语言定义特殊的规则。在下面的例子中,:lang 类为属性值为 no 的 q 元素定义引号的类型: 文字 伪类 W3C:"W3C" 列指示出该属性在哪个 CSS 版本中定义(CSS1 还是 CSS2)。 属性 描述 CSS :active 向被激活的元素添加样式。 1 :focus 向拥有键盘输入焦点的元素添加样式。 2 :hover 当鼠标悬浮在元素上方时,向元素添加样式。 1 :link 向未被访问的链接添加样式。 1 :visited 向已被访问的链接添加样式。 1 :first-child 向元素的第一个子元素添加样式。 2 :lang 向带有指定 lang 属性的元素添加样式。 2 :active a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问的链接 */ a:hover {color: #FF00FF} /* 当有鼠标悬停在链接上 */ a:active {color: #0000FF} /* 被选择的链接 */ input:focus { color:yellow; } CSS 伪元素 (Pseudo-elements) CSS 伪元素用于向某些选择器设置特殊效果。 语法 伪元素的语法: selector:pseudo-element {property:value;} CSS 类也可以与伪元素配合使用: selector.class:pseudo-element {property:value;} :first-line 伪元素 "first-line" 伪元素用于向文本的首行设置特殊样式。 在下面的例子中,浏览器会根据 "first-line" 伪元素中的样式对 p 元素的第一行文本进行格式化: 实例 p:first-line { color:#ff0000; font-variant:small-caps; } 亲自试一试 注释:"first-line" 伪元素只能用于块级元素。 注释:下面的属性可应用于 "first-line" 伪元素: font color background word-spacing letter-spacing text-decoration vertical-align text-transform line-height clear :first-letter 伪元素 "first-letter" 伪元素用于向文本的首字母设置特殊样式: p:first-letter { color:#ff0000; font-size:xx-large; } 亲自试一试 注释:"first-letter" 伪元素只能用于块级元素。 注释:下面的属性可应用于 "first-letter" 伪元素: font color background margin padding border text-decoration vertical-align (仅当 float 为 none 时) text-transform line-height float clear 伪元素和 CSS 类 伪元素可以与 CSS 类配合使用: p.article:first-letter { color: #FF0000; } This is a paragraph in an article。 上面的例子会使所有 class 为 article 的段落的首字母变为红色。 多重伪元素 可以结合多个伪元素来使用。 在下面的例子中,段落的第一个字母将显示为红色,其字体大小为 xx-large。第一行中的其余文本将为蓝色,并以小型大写字母显示。段落中的其余文本将以默认字体大小和颜色来显示: p:first-letter { color:#ff0000; font-size:xx-large; } p:first-line { color:#0000ff; font-variant:small-caps; } 亲自试一试 CSS2 - :before 伪元素 ":before" 伪元素可以在元素的内容前面插入新内容。 下面的例子在每个 元素前面插入一幅图片:
h1:after { content:url(logo.gif); } 亲自试一试 伪元素 W3C:"W3C" 列指示出该属性在哪个 CSS 版本中定义(CSS1 还是 CSS2)。 属性 描述 CSS :first-letter 向文本的第一个字母添加特殊样式。 1 :first-line 向文本的首行添加特殊样式。 1 :before 在元素之前添加内容。 2 :after 在元素之后添加内容。 2 CSS 水平对齐 在 CSS 中,可以使用多种属性来水平对齐元素。 对齐块元素 块元素指的是占据全部可用宽度的元素,并且在其前后都会换行。 块元素的例子: |
---|
Adams | John |
Bush | George |
请把鼠标移动到单词上,可以看到鼠标指针发生变化: