`
0428loveyu
  • 浏览: 30938 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

深入CSS选择器

 
阅读更多

当我们列出一系列样式规则之后,还要告诉浏览器将这些规则运用到哪些元素(document element),这是通过选择器(selector)来实现的。顾名思义,选择器就是用来选择样式规则在哪些元素起作用。举一个最简单的例子:

h1, h2 { font-size:20px ; }

这个例子中的h1 和 h2 就被成为选择器。那么,根据不同的选择基准,我将选择器分为以下4大类:

  • 基于元素(标签)的选择器 (如 p , h2 , ul )
  • 基于元素(标签)属性的选择器 (如 p.className , #id1)
  • 基于文档结构的选择器 (如 body p em , div > p)
  • 伪类、伪元素选择器(如 a: hover , body : after)
下面逐一介绍这四种选择器,并给出相应的例子:


1. 基于元素(标签)的选择器:

在html文档中,有许多不同的元素,有些具有明显的语言(如<p> <h1>),这些元素符合html最初的“结构化(structural)”原则。有些则不是(如<font> <strong>),这些标签是为“表现(presentation)”服务的,从表面上你是看不出标签包含的具体内容(段落还是标题还是表格?)的。在XHTML规范中,已经去掉了非“结构”的标签。对于符合“结构化”的标签,可以直接将它们作为选择器,很容易理解。举个例子:

p , h6 {font-weight: bold; color:red;}

将这天样式规则关联到文档之后,页面中的段落和小标题h6将显示为粗体,红色。可以讲多个选择器组合成一组,并将多个样式规则应用于该组合。有个特殊的选择器“ * ”它表示适用于所有的元素(标签)。例如:

* { font-family:Tahoma, Geneva, sans-serif; }

将整个页面的字体的设置为统一的字体族。


2. 基于标签属性的选择器:

对于每一个html标签,都有一系列属性来控制该标签,那么根据这些属性的有无、属性的值,我们提出第二种选择器:基于标签属性的选择器,这个类型又可以细分为以下几个类型:

2.1 类型选择器(class):

根据标签的class属性来决定样式规则适用于哪些标签。例如,在html文档中有如下代码片段:

<div class="slidebar"> ....</div>

为了设置这个标签的样式属性,可以这么来定义:

div.slidebar { color: blue; background: gray; }

这行代码表示“class属性值为slidebar”的div标签字体为红色,背景为灰色。如果不局限与div标签,可以改成下面这样:

*.slidebar { ..... }

或者更直接一些:

.slidebar { .... }

一样的,可以为多个类型同时设置样式规则,类型之间用逗号隔开:

p.slidebar , h.myclass { ..... }

更复杂一些的情况是当class属性具有多个值得时候,一样可以实现:例如,要将class属性有两个值:class1,class2的段落(具体代码为:<p class="class1 class2",中间用空白符隔开)设置成黄色背景,可以如下定义:

p.class1.class2 {background:yellow;}


2.2 ID选择器:

跟class选择器类似的,根据标签的id属性,也可以设置该标签内容的样式规则,例如:

#myid { border: 1px solid red; }

这行代码将id为myid的标签设置了宽度为1px的实线红色边框。如果只想将这个样式应用于段落标签或者div标签,可以分别作如下修改:

p#myid {.... }

div#myid {...}

需要说明的是,按照规范,同一文档中不能存在相同的id属性值,所以也不能有类似这样的选择器p#id1#id2.


2.3 属性选择器:

除了class和id两个特殊的属性之外,标签还可以有其他许多属性,根据这些属性,引出了一般的属性选择器,结合实际代码,介绍几种比较常用的选择器:

(1)根据属性有无:

h1[class] {color:silver; }

如果h1标签定义了class属性,将其颜色设置为银色。当然,可以同时要求多个属性存在:

h1[class][title] { ...}

也可以不局限于标题标签,如下所示:

* [class][title] {...}

(2)根据属性值来:

h1[class="myclass"] {color:red;}

如果h1定义了class属性,并且值为myclass,将字体设置为红色。

同样可以拓展:

* [class="myclass"][title="mytitle"] {...}

(3)其他:

p[class~="class1"] {....} 如果class属性值中含有class1关键字,应用该规则。

p[class^="beg"] {...} 如果class属性值以”beg“开头,应用该规则。

p[class$="end"] {...} 。。。。。。。。以”end“结尾,应用。

p[src*="figure"] {...} 如果src属性值含有figure字符串,应用该规则,注意和class~="class1"区别。

p[lang|="en"] {color:white;} 如果语言为”en“或者以”en-“开头,应用该样式规则。


3. 基于文档结构的选择器:

文档结构,就是指文档中标签与标签之间的嵌套、并列等其他关系。根据标签之间的关系,来确定样式规则应用于哪些元素。

首先理解两种关系:parent-child 和ancestor-descendant。

前者是指具有直接的”父子“关系的的两个标签,例如:

<div>

<p>....</p>

</div>

我们说<div>和<p>具有parent-child关系。

而后者可以具有直接的”父子“关系,也可以是”爷孙“、”爷爷孙“...关系,例如:

<div>

<p>...<a>www.google.com</a>.</p>

</div>

此时我们说<div>与<p>、<p>与<a>之间具有parent-child关系。而<div>与<a>之间具有ancestor-descendant关系。


Ok,理解这两个概念之后我们来看选择器


3.1 ancestor-descendant关系:

如果标签之间具有ancestor-descendant关系,以上面的代码为例,如果我只想把<div>标签中的段落设置成红色,而不在<div>之内的段落正常显示,那么可以这么来定义:

div p { color:red; }

注意div与p之间是空白符而不是逗号(逗号分隔是并列关系)。同样的,如果我想为class属性值为myclass的标签之内的所有段落设置样式,可以做如下处理:

.myclass p {.....}

id属性也是一样的道理,不再赘述。


3.2 parent-child关系:

先看下面代码:

<div class="out">

<div class="inner">

</div>

<p>...<a class="inner">www.google.com</a>.</p>

</div>

注意到第二个div标签的class值与<a>的属性值都是inner.现在我想把跟class值为out的div标签具有parent-child关系,并且class属性值为inner的标签颜色设置为白色,具体代码如下:

.out > .inner {color:white; }

此时,第二个div字体为白色,而<a>标签的class属性值虽然也是inner,但是其字体颜色不改变,仍为正常颜色。


3.3adjacent(比邻)关系:

如果我们想为紧跟在h1标题之后的段落上方留出更大的空白,CSS代码如下:

h1 + p { margin-top: 20px;}


4. 伪类和伪元素选择符:

之所以说”伪“,是因为我们在CSS中定义这个的选择符之后,浏览器在解析时会自己生成一个”伪“的类型或者元素,但是不再代码中显示。例如,我们定义一个伪类:

p:first-child {color:red;}

在html代码中:<p>...<em>...</em>...</p>.浏览器在解析这段代码的时候,会把它当做如下代码处理:

<p>...<em class="first-child">...</em>...</p>

4.1 伪类:

伪类常用于超链接标签<a>中,当然也可以用于其他标签,例如输入框<input>等。伪类主要有以下几种类型:

:link(正常情况,即未访问时的状态)

:visited (被访问过后的状态)

:active(按下鼠标时的状态)

:hover(鼠标放在其上的状态)

:focus(获得输入焦点时的状态)

:first-child(第一个子元素的样式定义)

:lang () (特定语言环境时的样式)

举个例子,例如在导航栏菜单中,鼠标放在上面时,经常或改变背景颜色,可以这么设置:

a.menu : hover {background: red;}

此时,class属性名为menu的菜单在鼠标放置上方时,背景就会变成红色,提醒访问者。

也可以将不同的伪类结合起来,比如:

a:visited:hover {background:green;}

当把鼠标放在已经访问过的超链接时,背景为绿色。


4.2 伪元素:

跟伪类相类似,常用伪元素有以下几种:

:first-letter (第一个字母、汉字等)

:first-line(第一行)

:before (标签内容之前)

:after(标签内容之后)

例如:

body:after {cotent: end; color:blue;}

在页面结束后,会自动加上红色的end字样。


终于写完了,以上分类标准可能不是很恰当,也许存在不少错误,欢迎各位看官指出。



分享到:
评论

相关推荐

    react-React组件的css选择器

    本篇将深入探讨React组件与CSS选择器的结合使用,以及如何优化组件的样式处理。 1. **CSS Modules** CSS Modules是React中常见的一种模块化CSS解决方案,它允许你创建局部CSS,避免了全局样式冲突。每个CSS文件...

    一种可视化的方式来分析选择器在CSS中的特殊性

    本文将深入探讨CSS选择器特殊性,并介绍一种可视化方法来帮助开发者更有效地理解和管理CSS样式。 首先,我们来看看CSS选择器特殊性的计算规则。特殊性分为四个等级: 1. **ID选择器**(#id):每个ID选择器赋予100...

    前端css选择器练习diner.zip

    在"css-diner"这个练习中,你可以深入理解并掌握各种CSS选择器的用法,从而提升你的前端开发技能。以下是一些关于CSS选择器的重要知识点: 1. **基础选择器**:这些是最简单的选择器,包括标签选择器(如`&lt;p&gt;`)、...

    CSS选择器和jQuery选择器

    本文将深入探讨两种常用的选择器——CSS选择器和jQuery选择器,并通过具体的例子来帮助读者更好地理解和掌握它们。 #### 二、CSS选择器 CSS选择器是CSS的核心功能之一,用于定义哪些HTML元素应该应用特定的样式。...

    CSS选择器教程,CSS(层叠样式表)选择器是用来选择HTML元素并应用样式的工具 在这个教程中,我们将深入探讨各种CSS选择器

    css选择器

    scrapy爬虫下的CSS选择器使用

    在这个主题“Scrapy爬虫下的CSS选择器使用”中,我们将深入探讨如何利用CSS选择器在Scrapy中提取网页数据。 首先,CSS(Cascading Style Sheets)选择器是用于选取HTML或XML文档中元素的工具,其在网页设计中广泛...

    css选择器介绍

    本文将深入探讨CSS选择器的种类、用法及其在实际开发中的应用。** 首先,我们要了解CSS选择器的基本分类: 1. **类型选择器**:基于元素的标签名进行选择,如`h1`,`p`等。 2. **类选择器**:使用`.`前缀,匹配...

    HTML5+CSS3 城市选择器

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

    HTML5&CSS3网页制作:CSS基础选择器.pptx

    在这篇关于"CSS基础选择器"的讲解中,我们将深入理解CSS选择器的概念以及如何使用它们来定位并应用样式到HTML元素。 **CSS选择器**是CSS中的基本概念,它们是用于选取HTML文档中特定元素的工具。选择器使得我们可以...

    Go-Go的CSS选择器

    下面我们将深入探讨Go语言中CSS选择器的相关知识点。 首先,CSS选择器是Web开发中用来匹配HTML或XML文档中元素的标准语法,它们定义了如何查找文档中具有特定属性、类名或ID的元素。例如,“#example”选择器用于...

    深入解析:Python中的XPath与CSS选择器对比及应用场景

    在Web开发和数据抓取领域,定位网页...本文深入探讨了Python中的XPath与CSS选择器,从它们的基本区别到具体的应用场景,再到实际的代码示例,为读者提供了全面的指导和参考。通过本文,读者可以更好地理解这两种选择

    第13章 CSS选择器[上]

    在实际应用中,我们可以通过工具如Firefox的开发者工具、Chrome DevTools等实时查看和调试CSS选择器的效果,这对于学习和调试CSS选择器非常有帮助。此外,学习和参考W3C的官方文档或在线教程,可以进一步加深对CSS...

    CSS选择器:解锁网页样式的强大工具.pdf

    CSS选择器是Web开发中不可或缺的一部分,它们为开发者提供了灵活而强大的方式来定义网页的样式。通过熟练掌握各种选择器的用法和最佳实践,你可以创建出既美观又高效的网页界面。希望本文能帮助你更好地理解CSS选择...

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

    本教程将深入探讨CSS选择器、属性以及值,帮助你更好地理解和应用CSS来美化你的网页。 首先,我们要了解CSS选择器。选择器是CSS的核心组成部分,它的主要作用是定位HTML文档中的特定元素,以便对这些元素应用样式。...

    css选择器

    本篇将深入探讨CSS选择器的相关知识点,结合给定的“grep.js”文件,我们可以推测这是一个与JavaScript有关的工具,可能是用于搜索或筛选元素的。 首先,CSS选择器的基本类型包括标签选择器、类选择器和ID选择器。...

    《JQuery 能干点啥~》第6讲 CSS 选择器

    CSS选择器是CSS语言的核心,它们使得开发者能够有效地选取文档中的特定元素进行样式设置或JavaScript操作。jQuery对CSS选择器的支持,使得在JavaScript中选取DOM元素变得更为简单和高效。 首先,我们来看“类别选择...

    深入理解CSS中选择器的逻辑处理

    CSS选择器是CSS中的核心机制之一,它允许我们以不同的方式选择文档树中的元素。选择器的逻辑处理是CSS的基础,也是前端开发者必须深入理解的领域。选择器的逻辑处理主要涉及选择器的解析方式、组合逻辑、以及如何...

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

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

    CSS彻底深入研究

    二、CSS选择器 1. 类选择器:以点"."开头,如`.myClass`,用于选取具有特定类名的元素。 2. ID选择器:以井号 "#" 开头,如`#myID`,用于选取具有特定ID的唯一元素。 3. 标签选择器:直接使用元素名,如`p`,选取...

Global site tag (gtag.js) - Google Analytics