选择器——CSS基础

每一个CSS样式规则都由选择器(selector)声明块(declaration)组成。选择器告诉浏览器在HTML文件中有哪些元素受影响,而声明块则说明元素受怎样的影响。声明块由一条或多条声明组成,期间用“;”分号隔开,外层用“{}”花括号包裹。单条声明由属性(property name)值(property value)组成。

CSS规则

选择器

         从之前的分析,我们不难看出,要学习CSS,选择器是第一道门槛。本书将采用表格与图片示例相结合的方式来讲述这一部分的知识。

常见的选择器

         下面的表格中列出了常见的8种选择器,大多数的CSS选择器都有着和下表中示例类似的“长相”。

选择器

选择对象

示例

通配选择器(Universal selector)

任何类型的元素

* {margin:0;}

类型选择器(Type selectors)

HTML元素,如a、p、div

h2 {color:#36C;}

包含选择器(Descendant selectors)

所有被外层元素包含的内层元素

table td {font-size:14px;}

子选择器(Child selectors)

IE 6及以下版本不支持

父元素的子元素,而不是所有的后代

body>p {background-color:#36C;}

类选择器(Class selectors)

指定的类(Class)

.header {background-color:#36C;}

Id选择器(ID selectors)

指定的Id

#header {background-color:#36C;}

属性选择器(Attribute selectors)

IE 6及以下版本不支持

只论属性,不管值

a[rel]

x的属性值等于y

a[rel="abc"]

x的属性中有y

e[foo~="warning"]

x的属性以y开头,连字符为分割

e[lang|="en"]

伪选择器(Pseudo selectors)

伪类(Pseudo-classes)伪元素(Pseudo-elements)

a:visited {}

选择器释疑

包含选择器和子代选择器有什么不同?

         答:两者的影响能力不同。包含选择器作用于父元素的所有后代(子、孙、曾孙),而子代选择器仅作用于子代。不能理解父、子代关系?以下面的代码为例,可做出如所示的树状图。

DOM tree

上图中第二层的两个p元素和div元素都是body元素的子代,第三层的p元素是第二次div的子代,第二层的pdiv和第三层的p都是body的后代;同理有第三层的p也是第二层div的后代。

<body>
<p>abc</p>
<div class="test">
<p>def</p>
</div>
<p>ghi</p>
</body>

选择器

CSS代码

效果

包含选择器

body p {

    font-weight: bold;

}

abc

def

ghi

子代选择器

body>p {

    font-weight: bold;

}

abc

def

ghi

         在讲解了文档的树状图之后,我们再来接触一个新的概念——继承(inheritance)。继承是指CSS允许样式在应用于某一元素的同时,作用于该元素的后代元素。我们形象的说这些子元素继承了父元素的这些属性。下面我们举一个简单的例子:

HTML代码:<h1>这是一个<em>继承</em>示例</h1>

                   CSS代码:h1 {

                        color:#00F;

}

                   显示效果:

         不难发现,em元素继承了h1元素的蓝色字体这一属性。值得注意的是:并非所有属性都能继承!一般地,边框类属性(边界、补白、边框、背景)都不能被继承。当然,继承还受优先级规则等的约束(下一节会讲述此内容)。

属性选择器的使用示例

         属性选择器是在CSS2.1中出现的,它允许设计者选择带有某些属性的元素,从而更加准确的对页面呈现进行控制。下面的表格中列出了4种类型的属性选择器的使用示例:

类型

代码

选择内容

效果

只论属性,不管值

h1[title] { color: blue; }

带有title属性的h1元素。

x的属性值等于y

h1[title=abc] { color: blue; }

title属性值为abc的h1元素。

x的属性以y开头,连字符为分割

a[rel~="copyright"] { color: red; }

rel值中有copyright,且与其他值用空格隔开的a元素。

x的属性以y开头,连字符为分割

*[lang|="cn"] { color : red }

lang属性的值以cn开头,属性之间以“-”为分割。

所有lang属性为"cn"、 "cn-zh"一类的元素其颜色均变红。

表:属性选择器的使用示例

伪选择器都有哪些?

         伪选择器在一定程度上把人们从一些js脚本中解放了出来,我们可以使用伪选择器来添加一些特殊的效果。正如在前面所说的那样,伪选择器分为了伪类选择器和伪元素选择器两种。下面列出了在CSS 1和CSS 2中定义的一些伪选择器:

选择器

选择对象

特殊

:first-child

父元素的第一个子元素

 

:link

未被访问过的链接

1.        这两个选择器专门用于a元素

2.        有时客户端程序会将访问过的链接按:link呈现

:visited

已被访问过的链接

:hover

用户指向该元素,但为点击

这三个选择器是通用的

用于a元素时,:hover必须置于:link:visited之后;:active必须放在:hover之后

:active

被激活的元素,如用户点击该元素

:focus

拥有键盘输入焦点的元素

:lang

有lang属性的元素

html:lang(fr-ca) { quotes: ‘« ‘ ‘ »’ }

伪类选择器

         使用伪类选择器可以DIY超链接的样式,也可以制作自己的图片按钮。

a:link{color:#FF0000} /* 未访问的链接 */
a:visited{color:#00FF00}  /* 已访问的链接 */
a:hover{color:#FF00FF}    /* 鼠标移动到链接上 */
a:active{color:#0000FF}   /* 选定的链接 */

自定义链接样式

#btn {
        display:block;
        width:82px;
        height:30px;
        background:url(images/submit.png);
}
#btn:hover {background-position:-91px 0;}
#btn:active {background-position:-182px 0;}

DIY图片按钮的CSS代码

在需要图片按钮的地方插入“<span id="btn" onclick=" "></span>”即可。

选择器

选择对象

说明

:first-line

p元素(段落)的第一行

可以使用<P:first-line></P:first-line>来标明希望应用:first-line规则的内容,不添加则会根据字数多少来确定第一行。

通过:first-line:first-letter的组合可实现如下的效果:

:first-letter

块级元素第一行的第一个字

:before

在元素的内容前面插入新内容

:after

在元素的内容之后插入新内容

伪元素选择器

一位卓越的小伙伴——CSS 3中的伪选择器

         在CSS 3中定义了一些新的、方便的伪选择器,让我们能够更加方便的控制页面的性状。这些新的伪选择器包括:target:enabled:disabled:checked:root:nth-child:nth-last-child:nth-of-type:nth-last-of-type:last-child:first-of-type:last-of-type:only-child:only-of-type:empty:not。鉴于当前支持CSS 3的浏览器并不多,本书将不会讲解全部的新伪选择器。

优先级

不同的选择器的优先级是不同的,处于高优先级的选择器相比低优先级的选择器而言,能够产生更大的影响。

优先级计算

在CSS中,优先级由A、B、C、D四个独立因子加权组成。根据A、B、C、D的数量,我们不难计算出选择器的优先级特性。

影响因子名称

计算方法

A

在HTML元素中使用style属性定义样式则记A为1,其余记为0。

B

等于ID属性的个数。例如#main #container{}的B为2。

C

等于类属性伪类属性之和。例如ul ol li.red  {}的C为1。

D

等于元素名称个数与伪元素属性之和。例如p:first-line{}的D为2。

表:优先级的计算方法

优先级法则

1.        选择器都有一个权值,权值越大越优先;

2.        当权值相等时,后出现的样式表设置要优于先出现的样式表设置;

3.        “!important”声明的访客规则>“!important”声明的开发者规则(!important)>普通的开发者规则>普通的访客规则>浏览器预置规则;

4.        继承的CSS 样式不如后来指定的CSS 样式(例如#main {background-color:#CCC;}#main p {background:#00F}最终p元素的背景色为蓝色);

5.        在同一组属性设置中标有“!important”规则的优先级最大(IE6不支持!important声明);

继承法则和优先级法则构成了CSS的层叠(cascading)规则。

简洁之美——分组选择器

         “学术之美在于简洁”,简洁的代码不仅易于维护,也能减少在内容传输过程当中的流量消耗。在CSS中,我们也应该将追求代码的简洁作为一项奋斗的目标。试着构想一个情境:h2元素和p元素都要被设置为灰色的文本,一般情况下,我们可以写如下的代码:

h2 {
            color:#CCC;
}
p {
            color:#CCC;
}

         毫无疑问,这段代码能够实现我们的目标,但是这种含有明显重复片段的代码是不够简洁的。若要在CSS中实现这种简洁之美,分组选择器(grouping)是一个不错的选择。我们可以将多个元素共同享有的属性使用以逗号“,”隔开的分组选择器来定义,我们可以将上面的代码改写为:

h2, p {
            color:#CCC;
}

         两种写法的作用效果完全相同。

重要补充:元素分类

         在开启下一章之前,我们有必要讲述关于元素的一种重要分类方法。这种分类方法,将元素分为了块级元素(block-level elements)内联元素(inline-level elements)两类。

         块级元素大体上包括了段落p、标题h1~h6、列表ol/ul、表格table、层div和body。从显示效果上看,块级元素会从新的一行开始,并且其后的元素也会从新的一行开始。

         内联元素比较典型的是链接a、强调em、span。我们可以将不是块级元素的元素称为内联元素。

练习题

1.计算优先级,填写下面的表格

规则

A

B

C

D

权值

* {}

0

0

0

0

0,0,0,0

li {}

0

0

0

1

0,0,0,1

li:first-line {}

0

0

0

2

0,0,0,2

ulli {}

0

0

0

2

0,0,0,2

ulol+li {}

0

0

0

3

0,0,0,3

h1 + *[rel=up]{}

0

0

1

1

0,0,1,1

ulolli.red {}

0

0

1

3

0,0,1,3

li.red.level {}

0

0

2

1

0,0,2,1

#x34y {}

0

1

0

0

0,1,0,0

<pID=x97zstyle="color:green">

1

0

0

0

1,0,0,0

以选择器为主题的内容就介绍到这,如果您希望了解更多的内容,我建议您访问以下的网页:

W3.org关于选择器部分的定义:http://www.w3.org/TR/CSS21/selector.html

W3.org关于优先级的计算:http://www.w3.org/TR/CSS21/cascade.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值