`

CSS的核心选择器

阅读更多

 

 我们能真切地感觉到,选择器是CSS的核心部分。如果没有它们的话,我们除了把属性嵌入到每个元素里,就没有其他办法能把样式应用在元素上了,那真是太糟糕了。通过选择器赋予的选择任何形式任何种类元素的能力,我们可以只用很少的几行CSS完成很大一部分样式设置工作。

本章我们将深入探讨如何巧妙地使用选择器,并且概述一下哪些类型的选择器被普遍支持且应用最为广泛。 

伪类与伪元素

CSS中有两种“伪”字头的选择器:伪类(pseudo-class)和伪元素(pseudo-element)。CSS2.1中的伪类有:

 :link——未访问过的链接;

 :visited——访问过的链接;

 :hover——鼠标悬停的元素;

 :focus——获取焦点的元素;

 :active——激活的元素(例如一个被单击的链接元素);

 :first-child——作为其他元素第一个子元素的元素;

 :lang()——根据元素的lang属性确定的元素。

CSS2.1中的伪元素有:

 ::first-line

 ::first-letter

 ::before

 ::after

那么区别在哪儿呢?区别就在于这些伪选择器影响文档的方式不同。伪类的表现有点儿像给文档添加类,而伪元素的效果就好像有元素被插入到了文档中。

::first-letter为例,假设你要把每个h1的第一个字母增大到其他字母的两倍半(如图

2-1所示),很简单:

 

h1::first-letter {font-size: 250%;}

这就仿佛CSS和标记被修改成了这样:

h1 first-letter {font-size: 250%;}

<h1><first-letter>H</first-letter>owdy, y’all!</h1>


2-1 放大h1的第一个字母

 

这真的是浏览器内部真实发生的情况吗?谁知道呢,反正结果确实像是发生了这种情况,因此才有了“伪元素”这个名字。

类似地,伪类的表现就像是它们使文档中的元素被添加了新的类。例如,想象一下若对于每一个作为其他元素第一个子元素的元素,浏览器给它们都附加了一个名为first-child的类,然后就可以像下面这样为它们应用样式了:

 

li.first-child {border-left: none;}

只需要简单地把点改成冒号就变成了li:first-child,就可以得到同样的最终效果,而不用费力把类添加到所有标记上。

有时还会看到伪元素使用双冒号的语法,这是在CSS2.1之后引入的。截至撰写本书之时,还没有哪个浏览器要求你必须在伪元素前面使用双冒号的,一个冒号就可以了。

另外提醒读者,CSS3增加了如下一些伪类,截至撰写本书之时,它们中的大部分还没有被广泛地支持:

 :target

 :root

 :nth-child()

 :nth-of-type()

 :nth-last-of-type()

 :first-of-type

 :last-of-type

 :only-of-type

 :only-child

 :last-child

 :empty

 :not()

 :enabled

 :disabled

 :checked

 

为目标元素添加样式

当希望指向文档中的某个片段时,目标(target)会非常有用。什么,怎么实现?其实非常简单:

<a href="http://example.com/law.html#sec2-7">Section 2.7</a>

任何人单击这个链接(如果浏览器处理正确的话)将不止跳转到目标页,而且还会跳到页面中文档片段标识符(地址中的#sec2-7部分)出现的地方。这有时是通过锚点(anchor)实现的,但是只用ID来实现会更好一些。例如有如下两种场景:

<h3><a name="sec2-7">Exceptions</a></h3>

<h3 id="sec2-7">Exceptions</h3>

这两种情况下,当浏览器跳到了文档中的目标位置时,都不会有任何视觉提示告知你已经到达了目标位置,而使用:target伪类就可以给出视觉提示。例如,若想让作为某个文档片段标识符目标的h3拥有特定的提示效果(如图2-2所示),可以这样写:

h3:target {color: maroon;

background: #FFA;}


2-2 突出显示目标元素(另见彩插图2-2

 

当然,你或许想把这个样式应用到任何目标元素上,而不管它是什么元素,那么只需要把h3换成一个通用选择器即可,就像这样:

*:target {color: maroon;

background: #FFA;}

 

从技术上讲,这种情况下通用选择器也是可选的,可以把这个选择器简单地写成:target

如果想让目标样式多一点Web 2.0的感觉,还可以设置一个渐隐背景的效果。你懂的,就是那种“你已经完成了某项操作,所以页面上的一块背景会从黄色变到白色,让你知道已经完成了该项操作”的效果。通过:target和一个动画GIF可以很容易地实现这种效果,只需要创建一个从黄色渐变到白色(如果白色是你网站的背景色的话)的动画并且把它当做背景图像。

*:target {background: url(/pix/yellow-fade.gif);}

 

特殊性 

你很难快速地把特殊性(specificity)这个词读3遍,而若想彻底地掌握它甚至更难。但是,它却是理解CSS规则之间相互作用的关键。

特殊性是一个选择器“特殊程度”的数字表示,有3样东西经常被用来确定选择器的特殊性:

 每个元素描述符贡献0,0,0,1

 每个类、伪类或者属性描述符贡献0,0,1,0

 每个ID描述符贡献0,1,0,0

先不要抓狂,来看几个小例子。

div ul ul li 0,0,0,4 4个元素描述符

div.aside ul li 0,0,1,3 1个类描述符,3个元素描述符

a:hover 0,0,1,1 1个伪类描述符,1个元素描述符

div.navlinks a:hover 0,0,2,2 1个伪类描述符,1个类描述符,2个元素描述符

#title em 0,1,0,1 1ID描述符,1个元素描述符

h1#title em 0,1,0,2 1ID描述符,2个元素描述符

希望这些能够帮助你理解特殊性是如何计算的。那么,为什么是逗号呢?因为可以这么说,每个“级别”的特殊性的值都是相互独立的。因此,具有一个单独的类描述符的选择器会比由13个元素描述符组成的选择器拥有更高的特殊性。

.aside /* 0,0,1,0 */

div table tbody tr td div ul li ol li ul li pre /* 0,0,0,13 */

第一个选择器左数第三位的“1”胜过了第二个选择器同样位置的“0”,基于这样的事实,第二个选择器第四位的“13”(在这个非常有限的例子中)就毫无意义了。逗号可以使我们看得更清楚,否则选择器的特殊性可能被写成“10”和“13”,从而造成后者特殊性更高的假象(在CSS的早期还没有引入逗号分隔符时,这是经常出现的误解)。

还有另外一种常见的误解,就是特殊性的结构相近问题。例如,假设有如下两个选择器:

ul li {font-style: normal;}

html li {font-style: italic;}

它们当中哪个会赢呢?它们都有两个元素描述符,这意味着它们的特殊性都是0,0,0,2。其实,后写的会赢,与html元素相比ul元素在文档中的位置离li元素更近也不管用。特殊性只是单纯的数值,它不会以任何方式评估页面的结构。结果,列表元素将全部变成斜体,因为当特殊性相等时后声明的规则会胜出。

因为我说过有3样东西影响特殊性,所以你或许想知道特殊性标识符第一位的0是干嘛用的。其实,第一个0是用于行内样式(inline style)的,且仅用于行内样式。因此,如果有下面这样的样式和标记,则div的背景将会是蓝色。

div#header {background: purple;} /* 0,1,0,0 */

<div id="header" style="background: blue;"> <!-- 1,0,0,0 -->

 

——摘自《精彩绝伦的CSS》

分享到:
评论

相关推荐

    利用css+javascript实现的一个日期选择器代码

    【标题】:“利用css+javascript实现的一个日期选择器代码”涉及的核心知识点主要集中在CSS样式设计和JavaScript编程上,用于创建一个交互式的日期选择组件。日期选择器是网页表单中常见的一种元素,允许用户方便地...

    HTML5+CSS3 城市选择器

    另外,CSS3的Flexbox或Grid布局可以方便地实现选择器的响应式设计,使其在不同屏幕尺寸上都能正常显示。 JQuery库在这当中起到了辅助作用,它简化了JavaScript的DOM操作,使得事件处理、元素操作和动画效果的实现...

    个人开发的一个css城市选择器!

    总结来说,这个城市选择器项目展示了前端开发中的核心技能,包括HTML布局、CSS样式设计和JavaScript交互实现。通过合理组织代码和资源,开发者创造了一个既实用又美观的用户界面,这在现代Web应用中是非常重要的。...

    CSS选择器和jQuery选择器

    CSS选择器是CSS的核心功能之一,用于定义哪些HTML元素应该应用特定的样式。通过合理使用CSS选择器,可以高效且精确地控制页面布局和外观。 ##### 2.1 基本选择器 基本选择器包括元素选择器、类选择器、ID选择器和...

    CSS的选择器内容文档

    CSS选择器是CSS中最基本也是最核心的部分之一,掌握各种类型的选择器对于高效地使用CSS至关重要。通过灵活运用不同的选择器,可以实现对页面元素的精确控制,从而创建出更加美观且功能丰富的网页。

    HTML5+CSS3实现的华丽的日期选择器源码

    在这个日期选择器中,可能运用了伪类(如`:hover`)来实现鼠标悬停时的背景变化,这种立体效果可能通过CSS3的阴影(box-shadow)和渐变(linear-gradient)属性来实现。此外,CSS3的Flexbox或Grid布局也可能用于创建...

    scrapy爬虫下的CSS选择器使用

    总结来说,CSS选择器在Scrapy中扮演着核心角色,帮助开发者高效地从网页中抽取结构化数据。通过熟悉各种选择器语法和方法,你可以更有效地构建Scrapy爬虫项目,实现对网络数据的自动化抓取和处理。在实践中,结合...

    Css选择器_案例】仿当当网首页

    选择器是CSS中最核心的概念,它决定了哪些元素会受到规则集的影响。选择器可以基于元素的id、类、属性、关系以及状态等多种条件来定位页面上的元素。常见的CSS选择器包括: 1. 标记选择器(也称为元素或类型选择器...

    CSS的基本选择器.pdf

    在 CSS 中,选择器是核心概念之一,通过选择器,我们可以选择一个或多个 HTML 标签,然后使用 CSS 样式的规则为这些标签定义样式,实现各种效果。 一、标签选择器 标签选择器,又称为元素选择器或类型选择器,其...

    css样式生成+颜色选择器

    总结而言,这个主题涵盖了网页设计中的核心元素——CSS样式表的运用,特别是滚动条样式的自定义和颜色选择器的使用。通过这些技术,开发者可以创建出美观、易用且符合品牌风格的网页。同时,了解与CSS相配合的编程...

    第九课 css选择器-011

    在前端开发中,CSS(Cascading Style ...总之,CSS选择器是CSS的核心,熟练掌握它们能帮助开发者更高效、更精准地控制页面样式。通过合理使用不同选择器的组合和理解优先级规则,可以创建出更优雅、更灵活的CSS代码。

    CSS 核心第2版(CHM)

    常见的选择器有元素选择器(如`p`)、类选择器(`.class`)、ID选择器(`#id`)和属性选择器等。组合选择器可以选取多个元素,例如后代选择器(`div p`)和相邻兄弟选择器(`div + p`)。 3. **样式规则**:样式...

    CSS选择器分类汇总图片和文档

    CSS选择器是CSS中的核心部分,它们允许我们精准地选取要应用样式的HTML或XML元素。下面是对“CSS选择器分类汇总”相关知识点的详细说明。 1. 基本选择器: - **类型选择器**:例如`h1`,`p`,通过元素名称来选择...

    CSS基础2-选择器进阶+背景属性+元素显示模式+三大特性

    在CSS中,选择器是用于选择HTML元素并应用样式的核心机制。选择器进阶是指在基础选择器的基础上,进一步学习和应用选择器的高级规则和语法。 1. 复合选择器: 复合选择器是指使用空格将多个选择器连接起来,从而...

    图解CSS3核心技术与案例实战pdf

    CSS3是 Cascading Style Sheets(层叠样式表)的第三版,是网页样式设计的重要工具,它极大地扩展了样式表语言的功能,提供了丰富的选择器、动画效果、布局模式以及多背景、边框和文本渲染等新特性。CSS3的出现让...

    第四章 CSS选择器.pdf

    【CSS选择器】是CSS(层叠样式表)的核心组成部分,用于精确地定位和控制HTML或XML文档中的各个元素的样式。CSS之所以被称为“层叠”样式表,是因为它可以嵌套定义样式,其中内层样式可以继承外层的属性,同时内层...

    CSS教程之css选择器 、属性、值

    选择器是CSS的核心组成部分,它的主要作用是定位HTML文档中的特定元素,以便对这些元素应用样式。选择器可以基于元素名、类、ID,甚至属性来定位。例如,“body”是一个元素选择器,用来选中HTML文档的主体部分;“....

    网页编辑 css代码生成器

    掌握盒模型、层叠规则、选择器优先级、布局技术(如Flexbox和Grid)等核心概念,将有助于你更好地利用生成器,同时也能独立编写更复杂和定制化的CSS代码。 总之,"网页编辑CSS代码生成器"是提高网页设计效率的利器...

    第13章 CSS选择器[上]

    在IT领域,CSS(Cascading Style Sheets)是用于描述HTML或...总之,CSS选择器是构建网页样式的核心,理解并熟练运用它们是每个前端开发者的必备技能。通过不断实践和探索,我们可以创建出更加精美、响应式的网页界面。

    图解Css3核心技术和案例源代码

    CSS3扩展了原有的选择器系统,例如类选择器、ID选择器、元素选择器基础上,引入了伪类选择器(如`:hover`、`:active`、`:focus`)、伪元素选择器(如`::before`、`::after`)以及更复杂的组合选择器。此外,还有基于...

Global site tag (gtag.js) - Google Analytics