css节点选择器

基础选择器

基础选择器是选择器的所有选择器的基本组成元素,也最简单,包含如下5个类别:

  1. ID选择器
  2. 标签选择器
  3. 类选择器
  4. 属性选择器:类选择器算是一个特殊的属性选择器,通用的属性选择器举例如下:
#css代码
[href="http://www.baidu.com/"] {font-size: 12px;}

#html代码
<a href="http://www.baidu.com/>百度</a>"
  1. 通配选择器:就是特殊符号*,一般不建议单独使用,因为这个匹配效率很低

组合选择器

  1. A B:后代选择器,A的所有儿子孙子等后代中匹配B的节点
  2. A > B:儿子选择器,只选A的儿子节点中匹配B的节点
  3. A + B:相邻兄弟选择器,A的兄弟选择器中的第一个满足B的兄弟节点,注意只选择第一个
  4. A ~ B: 普通兄弟选择器,跟B类似,只不过是所有满足B的兄弟节点,而不只是相邻的第一个

伪类选择器

最常见的选择器有如下几个类别:

  1. 跟鼠标有关的几个选项:
  2. link:还没有访问过的链接的状态
  3. visited:已经访问过的链接的状态
  4. hover:鼠标滑动到组件上面的时候的状态
  5. active:鼠标单击左键放下到松开左键这段时间的状态
  6. 跟聚焦有关的几个选项
  7. 这个类别主要是指表单的各种输入组件,当某个输入组件获得焦点的时候状态
  8. focus:当某个组件获得焦点
  9. focus-within:当所有的儿子孙子节点中有一个节点获得焦点的状态
  10. 跟节点动态选择的几个选项
  11. first-child:当一个节点是父亲所有直系儿子的第一个节点,且前面的匹配条件
  12. first-of-type:所有节点中第一个满足前面的匹配条件的节点,跟上面first-child的区别在于及时满足节点的条件不是_长子_也能匹配
  13. nth-child(an+b);所有儿子节点都挑出来,逐个匹配前面的条件,如果匹配上了,在根据节点的offset信息进行(offste-b%a == 0)的判断,看是否能匹配上
    1. 通过这个属性,我们可以设置第几个儿子节点(0n+b),前几个儿子节点(-1n+b),奇数(2n+1)或者偶数(2n)节点的选择;
    1. 跟这个类似的还有nth-last-child:从后往前数的意思;
  14. nth-of-type(an+b):这个跟上面是类似的,唯一不同的是offset的算法,这个属性是先进行条件匹配,将节点进行一轮筛选过后的index再执行数值判断,感觉这个会比较常用;
    1. 通过这个属性,我们可以设置第几个儿子节点,前几个儿子节点,奇数或者偶数节点的选择;
    1. 跟这个属性类似的还会有first-of-type和last-of-type的属性
  15. 其他几个常见选项
  16. empty:当节点中内容为空,连空格都没有的时候,就能匹配
  17. target:当节点包含id,并且URL是通过http://host/params#id来访问的时候,该id对应的节点就能命中
  18. checked:用于radiobutton、checkbox、select选项当选项被选中的时候,就能命中
  19. enable/disable:当节点是enable或者disable的时候的就能命中

伪节点选择器

伪节点选择器常见的有如下几个:

  1. ::before:在指定元素的最前面创建一个子元素;
  2. ::after:在指定元素的最后面创建一个子元素;
  3. ::first-letter:指定元素的第一个字母;
  4. ::first-line:指定元素的第一行文字;

选择器优先级

如果某个HTML节点的某个属性命中了多个CSS的选择器,那么就需要一个冲突解决机制来确保到底使用哪个规则。

CSS的优先级选择有三个规则:

  1. 如果css的某个属性后面加了!important的话,就一定会使用他,他是优先级最高的
  2. 如果都没指定!important,就用精确度匹配算法计算出规则的优先级得分,得分高的使用
  3. 如果优先级得分一样,就采用出现在文本最后的那个规则,即跟文本的先后顺序相关

可以看到,如上三个规则中,最重要的就是第二个规则精确度匹配算法,该算法的大概逻辑如下:

首先,优先级算法有一个原则,就是精细度越高的规则,优先级就越高,比如id选择器 > 类选择器 > 标签选择器。

然后,由于一个选择器可能会有多个基础选择器组合而来的,所以需要有一个组合计算器的计算方法,计算方法如下:

priority_score =
    100 * count(ID选择器) + // 百位数
    10  * count(类选择器|属性选择器|伪类选择器) + // 十位数
    1   * count(标签选择器|伪元素选择器) // 个位数

注意两点

  1. 在所有基础选择器当中,通配选择器、组合符合(>, +, ~)、以及否定伪类(div:not(.my_content)) 不参与到优先级计算当中;
  2. 属性选择器的例子,div[id="my_div"],这个会按照属性参与,而不是ID选择器;且该选择器中,标签选择器和属性选择器计数都会+1;

原文地址:https://www.cnblogs.com/xuanku/p/css_node_select.html

时间: 2024-10-10 14:16:20

css节点选择器的相关文章

初探CSS 4选择器

2014年1月,我写了一篇文章:The Current Generation of CSS3 Selectors,这篇文章的目的是介绍一些CSS3中新增的选择器.文中的选择器已经有了很多文档,并且也被大多数浏览器支持(包括IE9+). 由于Selectors Level 4 specification目前已是工作草案状态,并且Editor's Draft of the same spec也在进行中(编辑草案通常被视为更有权威),未来的CSS选择器看起来很明朗了, 这篇文章重点介绍没有在之前那篇文

Css3之高级-1 Css复杂选择器(兄弟选择器 、属性选择器、伪类选择器、伪元素选择器)

一.兄弟选择器 相邻兄弟选择器 - 相邻兄弟选择器匹配指定元素的相邻兄弟元素 - 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器 - 使用加号(+)作为结合符 通用兄弟选择器 - 通用兄弟选择器匹配某元素后面的所有兄弟元素 - 使用符号(~)作为结合符,即 element1~element2 - 两种元素必须拥有相同的父元素,但是element2不必直接紧随element1 二.属性选择器 属性选择器 - 属性选择器能够将元素附带的属性用于选择器中,从而对带

JS实战 &#183; 仿css样式选择器

代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>仿css样式选择器</title> <style type="text/css"> #textid{ height: 100px; width: 300px; } #fontid{ heig

css笔记-选择器详解

css笔记-选择器详解 CSS通过选择器来定位要应用样式的元素. 下面对所有的选择器做了一个解释(CSS为版本号). CSS选择器详解 选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname id="firstname" 的所有元素. 1 * * 选择所有元素. 2 element p 选择所有 <p> 元素. 1 element,element div,p 选择所有

CSS属性选择器

属性选择器 1 <!DOCTYPE html> 2 <html lang="zh-cn"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <link rel="stylesheet" type="text/css" href="./css/属性选择器.css&qu

CSS系列(7)CSS类选择器Class详解

这一篇文章,以笔记形式写. 1,  CSS 类选择器详解 http://www.w3school.com.cn/css/css_selector_class.asp 知识点: (1)    使用类选择器的前提是给标签添加上类属性,比如<p class="important"></p> (2)    类选择器的语法为:*.important {color:red;},不过一般省略前面的通配符选择器,写成 .important {color:red;},这样就会给所

浅谈css中选择器的优先级

学习web前端,主要学习的课程html5,css,js,ajax等一些基本的编程语言,当然这是一门高深的学问.而这篇文章主要是谈谈我对css中选择器优先级的一些简单的理解与看法,希望对您的学习提供一些帮助.好了,废话不多说了,让我们开始进入主题吧. css中文解释是“层叠式样式表”,在这里我要说一下,所谓层叠样式表的意思就是说我们可以给一个标签或者文本内容同时添加许多种样式,简单点说就是可以通过多种方式去支配同一个东西.那么就会出现这样的问题了——选择优先级的问题.就是谁的属性能起到控制的最终目

css类选择器

<!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus?"> <meta name="Author" content=""> <meta name="K

css标签选择器

<!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus?"> <meta name="Author" content=""> <meta name="K