CSS选择器

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的元素。*

  • 类选择器

    可以为一个元素分配多个类名称-该class属性可以包含一个用空格分隔的类名称列表,可以将类选择器仅用于具有多个类名的元素。p.info.error { color:#900; font-weight:bold; }此规则将匹ji配p在其类名称表中同时包含info和error的元素。

类选择器和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片段匹配

注意

  • :not() 伪类不能被嵌套,这意味着 :not(:not(...)) 是无效的。
  • 由于伪元素不是简单的选择器,他们不能被当作 :not() 中的参数,形如 :not(p::before) 这样的选择器将不会工作。
  • 可以利用这个伪类写一个完全没有用处的选择器。例如, :not(*) 匹配任何非元素的元素,因此,这个规则将永远不会被应用。
  • 可以利用这个伪类提高规则的优先级 ,例如: #foo:not(#bar)#foo 会匹配相同的元素,但是前者的优先级更高。
  • :not(.foo) 将匹配任何非 .foo 的元素,包括 <html><body>
  • 这个选择器只会应用在一个元素上,无法用它来排除所有父元素。比如, body :not(table) a 依旧会应用到表格元素 <table> 内部的 <a> 上, 因为 <tr>将会被 :not(table) 这部分选择器匹配。

伪元素

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

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

参看文献

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

推荐阅读更多精彩内容

  • 基本选择器 *{} 通配符选择器,适用任何元素h1 标签选择器,选择h1标签内元素....
    字母31阅读 627评论 0 0
  • 一、基本选择器 1.*通用元素选择器,匹配任何元素 2.E标签选择器,匹配所有使用E标签的元素 3..infocl...
    ningluo阅读 179评论 0 0
  • 基本选择器 * 通用选择器,匹配任何元素 E 标签选择器,匹配所有使用E标签的元素 .class class选择器...
    疯狂的潜水员阅读 608评论 0 2
  • class 和 id 的使用场景 class:一个标签可以有多个class且同一个class可以用到不同的标签上,...
    尾巴尾巴尾巴阅读 419评论 0 0
  • 一、CSS选择器常见的有几种? 基本选择器 通配选择器~选择文档中所有的html元素,用一个*表示 元素选择器~选...
    dengpan阅读 962评论 0 3