CSS选择器

2019-11-28  本文已影响0人  shandamengcheng

CSS选择器

选择器基础

CSS选择器是由与文档树中所有元素匹配的模式组成。当模式中的所有条件均满足时,选择器匹配,并且规则中的声明将应用于匹配的一个或多个元素。

p { color:red;} 

这个规则会匹配文档中所有的p元素,并将其中文本的颜色设置为红色。

选择器概述

一些术语:
后代:文档数中的子代,孙子或者更高后代的元素。
祖先:元素由于存在嵌套关系,所以一个元素,他可以是文档树中元素的父级,祖父母或更早的祖先。
子代:元素的直接后代。两者之间没有其他元素。
父母:元素的直接祖先。两者之间不能有其他元素。
兄弟:与当前元素具有相同的父元素的元素。

基本选择器

序号 选择器 含义
1 * 通用选择器,匹配任何元素
2 E 元素选择器,匹配所有E标签的元素
3 .infor 类选择器,匹配所有class属性中包含info的元素
4 #foot id选择器,匹配所有id属性等于foot的元素

例子:

‘ * { color: RED; }
p { font-size:2em;}
.infor { backgroud:blue; }
‘ #foot { color: pink; }
p.infor { font-weight: bold; }
p#foot { color: green; }

这里要注意:p.infor 和 p .infor 有一些不一样。前一个表示规则应用于所有class属性包含infor的p元素,后一个表示规则应用于所有p元素的后代中,class属性包含infor的元素。*

类选择器和ID选择器的区别

  1. 同一个类名可以应用于多个元素,而ID能且只能应用于一个元素

虽然,浏览器不会时时检测ID, 即把同一个ID应用于多个元素,浏览器不会报错且样式正常渲染,但是当使用DOM脚本函数时,对于类选择器来说,通过getElementsByClassName()函数可以获取到所有具有同一类名的元素,而getElementById()函数仅可以获取到第一个元素。

  1. id属性不支持值为以空格分隔的列表。也就是说,不能把多个ID选择符串在一起使用。而类选择符则可以。

多元素的组合选择器

选择器 含义
E,F 多元素选择器,同时匹配所有E元素和F元素,其中逗号是必须的,用来分割元素
E F 后代元素选择器,用于匹配所有E元素的后代元素F,E和F之间用空格分割
E>F 子元素选择器,用于匹配所有E元素的子代F元素
E+F 相邻同辈选择器,用于匹配所有属于同一父元素的且紧跟在E元素之后的兄弟F元素
E~F 一般同辈选择器,匹配任何在E元素之后的同级F元素,两元素只需为属于同一父元素的同辈即可,不一定非要是紧邻同胞

属性选择器

选择器 含义
E[att] 匹配任何具有att属性的E元素
E[att=val] 匹配任何att属性值为val的E元素
E[att^=val] 匹配任何att属性值以val开头的E元素
E[att$=val] 匹配任何att属性值以val结尾的E元素
E[att*=val] 匹配任何att属性值包含“val”字符串的E元素
E[att~=val 匹配任何att属性具有多个空格分隔的值且其中一个值等于val的元素
E[att1=val] 匹配所有att属性具有多个连字符号分隔(eg:us-image)的值且其中一个值以val开头的E元素,或者是val本身,主要用于lang元素。比如:“en”“en-us”“en-gb”等

支持多个属性选择,E[att1][att2].... 属性的值与指定的值要完全一致

<p class = "fir sec">Hello</p>

若是要通过属性选择器匹配这个元素,顺序、个数等等要完全一致,即:

p[class = "fir sec"]  // 顺序、个数等等要完全一致

当用到最后一个属性选择器时,只有属性的值或为单个值,即val,或为多个值均是包含连字符时,规则才会被应用。

  div[class|="us"] {
            color: red;
        }
 <div class="us us-image us-hap">
        计算机科学与技术
    </div>
    <div class="us">
        Jona Zhu 小诸葛
    </div>

以上代码最终结果:"计算机科学与技术"仍是黑色,"Jona Zhu 小诸葛"为红色。
但是如果 class="us us-image us-hap"改为class="us us-image us-hap”,那么结果文本全是红色。

伪类

选择器 含义
E:first-child 匹配父元素的第一个E元素
E:link 匹配所有未被点击的链接
E:visited 匹配所有被点击过的链接
E:active 匹配鼠标已经按下还没有释放的E元素
E:hover 匹配鼠标悬停其上的E元素
E:focus 匹配当前获得焦点的E元素
E:lang((c) 匹配lang属性等于c的E元素
E:required 匹配带有required属性的表单元素
E:optional 匹配无required属性的表单元素
E:enabled 匹配表单中激活的元素
E:disabled 匹配表单中禁用的元素
E:checked 匹配被选中的表单单选或多选元素
E:selection 匹配当前用户选中的元素

结构性伪类

选择器 含义
:root 匹配文档的根元素,对于HTML文档,就是HTML元素
:nth-child(n) 匹配其父元素的第n个子元素,第一个为1
:nth-last-child(n) 匹配父元素倒数第n个子元素
:nth-of-type(n) 与nth-child()类似,但会忽略非指定类型的元素
:nth-last-of-type(n) 与nth-last-child()类似,但会忽略非指定类型的元素
:last-child 匹配父元素中的最后一个子元素
:only-child 匹配父元素中仅有的一个子元素,等同于:first-child:last-child
:first-of-type 匹配父元素中同种标签的第一个元素
:last-of-type 匹配父元素使用同一种标签的最后一个子元素
:only-of-type 匹配父元素下使用同种标签的唯一的一个子元素
:empty 匹配一个不包含任何子元素的元素。子元素只可以是元素节点或文本(包括空格)。
:not(s) 匹配不符合一组选择器的元素,它有时也被称为反选伪类(negation pseudo-class)。不能包含另外一个否定选择器。
:target 代表一个唯一的页面元素(目标元素),其id与当前URL片段匹配

注意

伪元素

选择器 含义
E:first-line 匹配E的第一行
E:first-letter 匹配E元素的第一个字母
E:before 在元素前面插入内容
E:after 在元素后面插入内容

::first-line 和::first-letter伪元素只能应用于块级元素,如标签或段落等,不能应用于行内元素。

参看文献

上一篇下一篇

猜你喜欢

热点阅读