伪类,伪元素和组合,css各类选择器解析

css选择器可分为几个大类:

  1. 基础选择器
  2. 伪类选择器
  3. 属性选择器
  4. 伪元素选择器
  5. 多元素组合选择器

一、基础选择器

基础选择器包含以下几种:

  • * 通用元素选择器,匹配页面任何元素
  • #id id选择器,匹配指定的id属性的元素
  • .class 类选择器,匹配所有class指定的某一类元素
  • element 标签选择器,匹配指定的标签元素
1. 通用元素选择器

*是一个通配符,所以它能匹配所有页面内的元素,我们一般可以用它来清除浏览器页面自带的css效果,例如:

*{ margin:0;padding:0; }

未清除样式

清除样式后

页面将清除自带的补丁空白。
值得注意的是,如果要清除不同标签各自特有的默认样式,需要分别写出,不能一次性写在通配符选择器中。

2. 类选择器

通过设置元素的 class 属性,可以为元素指定类名。类名由开发者自己指定。 页面文档中的多个元素可以拥有同一个类名。
在写样式表时,类选择器是以英文句号.开头的。

例如,在div标签规定class

<div class="demo" id="nav">demo div1</div>

在css样式表内,规定classdemo的元素字体大小为40px:

.demo{ font-size: 40px; }

更多小细节
一般在页面当中,我们推荐少用id,类名就是专门用来给CSS设置样式的;在HTML中每个标签可以同时绑定多个类名,例如:

<div class="类名1 类名2 ...">
2. id选择器

通过设置元素的id属性为该元素制定id。id名由开发者指定。每个id在文档中必须是唯一的。
而在写样式表时,id选择器是以 # 开头的。
例如,在div标签规定id名和class:

<div class="demo" id="nav">demo div1</div>

在css样式表内,规定id为nav的元素字体加粗:

#nav{ font-weight: bolder; }
第一行字体加粗

更多小细节
id 属性值 nav 必须在文档中是唯一的;但文档中的其他标签可以有相同的 class 属性值 demo
如果多个规则指定了相同的属性值都应用到一个元素上,CSS规定拥有更高确定度的选择器优先级更高。
内联样式大于id选择器,id选择器比类选择器更具确定度, 而类选择器比标签选择器(tag selector)更具确定度。例如:

  1. 当类选择器和标签选择器同时指定字体颜色时
<div class="demo" id="nav">demo div1</div>
#nav{ color:red; }
.demo{ color:yellow; }

最终字体颜色为红色。

  1. 当类选择器和标签选择器同时指定字体颜色时
<div class="demo" id="nav">demo div1</div>
div{ color:red; }
.demo{ color:blue; }

最终拥有类选择器的元素字体颜色为蓝色。

3. 标签选择器

根据指定的标签名称,在当前页面文档中找到该标签,然后设置css样式,这就是标签选择器。
要注意的是,标签选择器选中的是当前页面内所有的相同标签,而不能单独选中其中一个标签。
例如,页面内有多个div标签:

<div class="content">
   <div class="demo" id="nav">demo div1</div>
   <div>demo div2</div>
   <p>demo p1</p>
</div>
<p>demo p2</p>

在css样式表内,规定div元素字体为红色:

div{ color:red; }
外部p元素无变化

所有标签为div,以及在div标签内的p元素字体都变为了红色,div外的p标签没有变色。

二、伪类选择器

css中伪类是加在选择器后面,用来指定元素状态的关键字。比如,:hover 会在鼠标悬停在选中元素上时应用相应的样式。
伪类选择器的标志性符号是 :

css中有一些常用伪类选择器:

  • :link 超链接点击之前
  • :visited 链接被访问过之后
  • :hover “悬停”,鼠标放到标签上的时候
  • :active “激活”,鼠标点击标签,但是不松手时。
  • :focus 是某个标签获得焦点时的样式(比如某个输入框获得焦点)
  1. 对于我们经常用到的a标签,它有4个固定顺序的伪类选择器
a:link 、a:visited 、a:hover 、a:active  

正确状态下,它会这样显示:
未点击前,显示:link指定的 (黑色);当鼠标悬停时,显示:hover指定的 (红色);鼠标按下时,显示:active的 (蓝色);当点击过后,就显示:visited的 (绿色)了。
这四种状态,必须按照固定的顺序写,不然将失效。

a标签的小细节
a{}和a:link{}的区别:

  • a{}定义的样式针对所有的超链接(包括锚点)
  • a:link{}定义的样式针对所有写了href属性的超链接(不包括锚点)
    超链接a标签在使用的时候,比较难。因为不仅仅要控制a这个盒子,也要控制它的伪类。

我们一定要将a标签写在前面,将:link:visited:hover:active这些伪类写在后面。

  1. :focus 是某个标签获得焦点时的样式,例如输入框获得焦点时:
    :foucus
  1. 在CSS3中,又新增了其它的伪类选择器——结构伪类选择器:即通过结构来进行筛选。
  • E:first-child 匹配父元素的第一个子元素E。
  • E:last-child 匹配父元素的最后一个子元素E。
  • E:nth-child(n) 匹配父元素的第n个子元素E。注意,盒子的编号是从1开始算起,不是从0开始算起。
  • E:nth-child(odd) 匹配奇数
  • E:nth-child(even) 匹配偶数
  • E:nth-last-child(n) 匹配父元素的倒数第n个子元素E。

这里的父元素,是指 E 元素的父元素。并且以上选择器所选的元素,必须是指定的类型E,如果选不中,则无效。以下例来展示:

接着还有同类型的筛选兄弟元素:

  • E:first-of-type 匹配同类型中的第一个同级兄弟元素E。
  • E:last-of-type 匹配同类型中的最后一个同级兄弟元素E。
  • E:nth-of-type(n) 匹配同类型中的第n个同级兄弟元素E。
  • E:nth-last-of-type(n) 匹配同类型中的倒数第n个同级兄弟元素E。
    我们可以理解成,先在同级里找到所有的E类型,然后根据 n 进行匹配。例如:

具体的伪类选择器,可以看下图表格:
E:empty 匹配没有任何子节点(包括空格等text节点)的元素E。
E:target 匹配相关URL指向的E元素。要配合锚点使用。

三、属性选择器

属性选择器的标志性符号是 []
匹配字符中,^代表开头,$表示结尾, *表示包含。具体写法如下:

  • E[title] 选中页面的E元素,并且E存在 title 属性即可。
  • E[title="abc"]选中页面的E元素,并且E需要带有title属性,且属性值完全等于abc。
  • E[attr~=val] 选择具有 attr 属性且属性值为:用空格分隔的字词列表,其中一个等于 val 的E元素。
  • E[attr|=val] 表示要么是一个单独的属性值,要么这个属性值是以“-”分隔的。
  • E[title^="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 开头。
  • E[title$="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 结尾。
  • E[title*="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值任意位置包含abc。
    具体如下:

四、伪元素选择器

伪元素选择器的标志性符号是 ::具体写法如下:

  • E::before 设置在 元素E 前面(依据对象树的逻辑结构)的内容,配合content属性一起使用。
  • E::after 设置在 元素E 后面(依据对象树的逻辑结构)的内容,配合content属性一起使用。

E:after、E:before在旧版本里是伪类,在 CSS3 这个版本里是伪元素。CSS3版本里,E:after、E:before会被自动识别为E::after、E::before,按伪元素来对待,这样做的目的是用来做兼容处理。

通过伪元素选择器,就可以添加出类似于span标签的效果(记得要结合 content 属性使用)。
通过这两个属性添加的伪元素,是行内元素,需要转换成块元素才能设置宽高。

  • E::first-letter 设置元素 E 里面的第一个字符的样式。
  • E::first-line 设置元素 E 里面的第一行的样式。
  • E::selection 设置元素 E 里面被鼠标选中的区域的样式(一般设置颜色和背景色)。
    举例如下:

五、多元素组合选择器

选择器 释义
E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔
E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔
E>F 子元素选择器,匹配所有E元素的直接子元素F
E+F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F
E~F 普通相邻选择器,匹配E元素之后的同级元素F,无论直接相邻与否。
EF 交集选择器,E与F连写时无分隔符,匹配同时包含E与F的元素,可以用标签+id或class的方式表示元素。

由于多元素组合选择器细细讲来太多了,所以下次有空我再慢慢写出来。

引用链接:
https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Getting_started/Selectors
https://www.cnblogs.com/qianguyihao/p/8426799.html
http://www.ruanyifeng.com/blog/2009/03/css_selectors.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容