伪类和伪元素详解

一、伪元素和伪类的概念

  • 伪类:首先是类的一种,类似class,代表一些元素的状态,逻辑上存在,文档树中却无须标识的分类(典型的就是链接的各个状态)
  • 伪元素:首先是元素的一种,类似p标签,代表了某个元素的子元素,这个子元素逻辑上存在,但却并不实际存在于文档树中
  • 伪类:first-child
  • 1、将第一个p设成红色
p:first-child {color: red}
<div> 
  <p>第一个段落</p> //我将变成红色
  <p>第二个段落</p>
</div>

如果不用伪类,需要手动给DOM元素添加类来实现

.first-child {color: red}
<div> 
    <p class="first-child">第一个段落</p>
   <p>第二个段落</p>
</div>
  • 伪元素::first-letter
  • 2、给第一个字设成红色
p::first-letter {color: red}
<div>
 <p>第一个段落</p>
 <p>第二个段落</p>
</div>

如果不用伪元素,需要添加一个元素(如span)来实现

.first-letter {color: red}
<div>
 <p><span class="first-letter">第</span>一个段落</p>
 <p>第二个段落</p>
</div>

二、伪类和伪元素的区别

  • 伪类 模拟新 添加一个类 来实现某种效果
  • 伪元素 模拟新 添加一个元素 来实现某种效果
  • 伪类 作用于**标签(状态) **本身
  • 伪元素 作用于内容本身
  • 伪类 前面是一个冒号, 伪元素 前面是两个冒号(CSS3之前是一个冒号,CSS3后变成两个冒号,用于区分)
  • 举例:
    伪类:E:first-child
    伪元素:E::first-line
  • NOTE:
    • 伪元素跟伪类都是选择器的补充
    • 伪元素选择器选择出来的“部分” 不在dom里,也不能对其绑定事件,如果对伪元素前面的选择器定义的元素绑定了事件,伪元素同样会生效,永远记得伪元素生成的是“ 表现 ”。

三、伪类和伪元素种类

  • 伪类种类

  • 伪元素种类

  • 伪元素:::first-line,::first-letter,::before,::after,::selection

  • ::first-line,::first-letter分别是首行和首字母

  • ::before,::after相当于在元素内部插入两个额外的标签

  • ::selection用于匹配选中的文本(注意Firefox下是::-moz-selection)该伪元素只接受两个属性background、color

  • 伪类分类:动态,UI元素状态,目标,语言,结构,否定
    两种常用伪类

  • 动态伪类选择器::link,:visited,:hover,:active,:focus

  • UI元素状态伪类选择器::checked,:enabled,:disabled

基础知识学到这里就可以啦~

四、不常用伪类

其他伪类选择器:

  • 目标伪类选择器::target(用来获取锚点#部分)
  • 页面实现跳转定位很多都是使用a标签的锚点来来定位。
  • 其实原理是a标签的href属性能改变浏览器的location.hash,让页面在有滚动条的前提下实现页面内跳转
  • :target作用就是获取跳转的目标元素
  • 举例:如下可以获取到id="logo"div
<div id="logo"> …</div>
<a href="#logo">jump to logo</a>
  • 语言伪类选择器::lang(根据lang属性匹配元素)
  • 举例:
<html lang="en"> //可在html标签上设,也可以<body lang="en">标签里设
:lang(en) { …… } //根据页面的不同的语言(如英语和法语)对不同DOM元素进行处理
:lang(fr) { …… }
```
+ **结构伪类选择器:**`:first-child,:last-child,:nth-child(n),:nth-last-child(n),:nth-of-type(n),:nth-last-of-type(n),:first-of-type,:last-of-type,:only-child,:only-of-type,:root,:empty`

+ **否定伪类选择器:**`:not`(如不`hover`时,可以设置为`li:not(:hover)`)

**详解结构伪类选择:**
+ **结构伪类选择器:**
 + **:first-child** 第一个孩子,等同于`:nth-child(1)`
 + **:last-child** 最后一个孩子,等同于`:nth-last-child(1)`
 + **:nth-child(n)** 父标签里第n个孩子,反之*`:nth-last-child(n)`*就是倒数第n个孩子
 + **:nth-of-type(n)** 父标签里第n个某类型的孩子,反之**`:nth-last-of-type(n)`**父标签里倒数第n个某类型的孩子
   + 比较`:nth-child(n)、:nth-of-type(n)`
这两个伪类的参数n从0开始
可以写任意的表达式,如n+4,-n+6,3n-2等(当结果值等于或小于0时直接被无视掉)
   + 例如:*div下有两个p,我们想将第二个p变成红色*
```
p:nth-child(2) { color: red; }
```
```
p:nth-of-type(2) { color: red; }
```
   + 这两种都可以实现,但意义却不同
前者表示:该标签是p且是父标签里第二个孩子
后者表示:父标签里第二个p
 + **:first-of-type** 父标签里第一个某类型的孩子,反之**`:last-of-type`**是最后一个某类型的孩子,等同于`:nth-of-type(1),:nth-last-of-type(1)`
 + **:only-child** 父标签里仅有一个孩子
 + **:only-of-type**父标签里唯一一个该类型的孩子
 + **:root** 匹配根元素,HTML中根元素始终是`html`
 + **:empty** 表示当元素里面什么都没有的时候(包括空格、标签内换行)应用相关样式,常用于高亮提示用户搜索的结果为空
   + 例如:`.xx:empty { background-color: red; }`,
`div`里无内容:背景色成红色
`div`里有内容:无背景色
*但要注意伪元素不算内容*
   + 例如:`.xx::after { content: 'hello'; }`,
`div`里显示字但背景色仍旧是红色
   + 原因:
1、`::before,::after`是伪元素,不是真实元素,因此不会影响`:empty`判断
2、而且因为伪元素不在DOM树内,你无法取得`::before,::after`伪元素生成的`content`


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

推荐阅读更多精彩内容