千家信息网

CSS选择器基本知识有哪些

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这期内容当中小编将会给大家带来有关CSS选择器基本知识有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。CSS选择器基本知识一、基本选择器序号 选择器 含义1.
千家信息网最后更新 2025年11月11日CSS选择器基本知识有哪些

这期内容当中小编将会给大家带来有关CSS选择器基本知识有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

CSS选择器基本知识

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

实例:

CSS Code复制内容到剪贴板

  1. * { margin:0; padding:0; }

  2. p { font-size:2em; }

  3. .info { background:#ff0; }

  4. p.info { background:#ff0; }

  5. p.info.error { color:#900; font-weight:bold; }

  6. #info { background:#ff0; }

  7. p#info { background:#ff0; }

二、多元素的组合选择器
序号 选择器 含义
5. E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔
6. E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔
7. E > F 子元素选择器,匹配所有E元素的子元素F
8. E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F

实例:

CSS Code复制内容到剪贴板

  1. div p { color:#f00; }

  2. #nav li { display:inline; }

  3. #nav a { font-weight:bold; }

  4. div > strong { color:#f00; }

  5. p + p { color:#f00; }



三、CSS 2.1 属性选择器
序号 选择器 含义
9. E[att] 匹配所有具有att属性的E元素,不考虑它的值
10. E[att=val] 匹配所有att属性等于"val"的E元素
11. E[att~=val] 匹配所有att属性具有多个空格分隔的值、其中一个值等于"val"的E元素
12. E[att|=val] 匹配所有att属性具有多个连字号分隔(hyphen-separated)的值、其中一个值
以"val"开头的E元素,主要用于lang属性,比如"en"、"en-us"、"en-gb"等等

实例:

CSS Code复制内容到剪贴板

  1. p[title] { color:#f00; }

  2. div[class=error] { color:#f00; }

  3. td[headers~=col1] { color:#f00; }

  4. p[lang|=en] { color:#f00; }

  5. blockquote[class=quote][cite] { color:#f00; }


四、CSS 2.1中的伪类
序号 选择器 含义
13. E:first-child 匹配父元素的第一个子元素
14. E:link 匹配所有未被点击的链接
15. E:visited 匹配所有已被点击的链接
16. E:active 匹配鼠标已经其上按下、还没有释放的E元素
17. E:hover 匹配鼠标悬停其上的E元素
18. E:focus 匹配获得当前焦点的E元素
19. E:lang(c) 匹配lang属性等于c的E元素

实例:

CSS Code复制内容到剪贴板

  1. p:first-child { font-style:italic; }

  2. input[type=text]:focus { color:#000; background:#ffe; }

  3. input[type=text]:focus:hover { background:#fff; }

  4. q:lang(sv) { quotes: "\201D" "\201D" "\2019" "\2019"; }


五、 CSS 2.1中的伪元素
序号 选择器 含义
20. E:first-line 匹配E元素的第一行
21. E:first-letter 匹配E元素的第一个字母
22. E:before 在E元素之前插入生成的内容
23. E:after 在E元素之后插入生成的内容

实例:

CSS Code复制内容到剪贴板

  1. p:first-line { font-weight:bold; color;#600; }

  2. .preamble:first-letter { font-size:1.5em; font-weight:bold; }

  3. .cbb:before { content:""; display:block; height:17px; width:18px; background:url(top.png) no-repeat 0 0; margin:0 0 0 -18px; }

  4. a:link:after { content: " (" attr(href) ") "; }


六、CSS 3的同级元素通用选择器
序号 选择器 含义
24. E ~ F 匹配任何在E元素之后的同级F元素

实例:序号 选择器 含义
25. E[att^="val"] 属性att的值以"val"开头的元素
26. E[att$="val"] 属性att的值以"val"结尾的元素
27. E[att*="val"] 属性att的值包含"val"字符串的元素

CSS Code复制内容到剪贴板

  1. p ~ ul { background:#ff0; }

七、CSS 3 属性选择器

实例:

C# Code复制内容到剪贴板

  1. div[id^="nav"] { background:#ff0; }

八、CSS 3中与用户界面有关的伪类
序号 选择器 含义
28. E:enabled 匹配表单中激活的元素
29. E:disabled 匹配表单中禁用的元素
30. E:checked 匹配表单中被选中的radio(单选框)或checkbox(复选框)元素
31. E::selection 匹配用户当前选中的元素

实例:

CSS Code复制内容到剪贴板

  1. input[type="text"]:disabled { background:#ddd; }

九、CSS 3中的结构性伪类
序号 选择器 含义
32. E:root 匹配文档的根元素,对于HTML文档,就是HTML元素
33. E:nth-child(n) 匹配其父元素的第n个子元素,第一个编号为1
34. E:nth-last-child(n) 匹配其父元素的倒数第n个子元素,第一个编号为1
35. E:nth-of-type(n) 与:nth-child()作用类似,但是仅匹配使用同种标签的元素
36. E:nth-last-of-type(n) 与:nth-last-child() 作用类似,但是仅匹配使用同种标签的元素
37. E:last-child 匹配父元素的最后一个子元素,等同于:nth-last-child(1)
38. E:first-of-type 匹配父元素下使用同种标签的第一个子元素,等同于:nth-of-type(1)
39. E:last-of-type 匹配父元素下使用同种标签的最后一个子元素,等同于:nth-last-of-type(1)
40. E:only-child 匹配父元素下仅有的一个子元素,等同于:first-child:last-child
或 :nth-child(1):nth-last-child(1)
41. E:only-of-type 匹配父元素下使用同种标签的唯一一个子元素,等同于:first-of-type:last-of-type
或 :nth-of-type(1):nth-last-of-type(1)
42. E:empty 匹配一个不包含任何子元素的元素,注意,文本节点也被看作子元素

实例:

CSS Code复制内容到剪贴板

  1. p:nth-child(3) { color:#f00; }

  2. p:nth-child(odd) { color:#f00; }

  3. p:nth-child(even) { color:#f00; }

  4. p:nth-child(3n+0) { color:#f00; }

  5. p:nth-child(3n) { color:#f00; }

  6. tr:nth-child(2n+11) { background:#ff0; }

  7. tr:nth-last-child(2) { background:#ff0; }

  8. p:last-child { background:#ff0; }

  9. p:only-child { background:#ff0; }

  10. p:empty { background:#ff0; }


十、CSS 3的反选伪类
序号 选择器 含义
43. E:not(s) 匹配不符合当前选择器的任何元素

实例:

CSS Code复制内容到剪贴板

  1. :not(p) { border:1px solid #ccc; }

十一、CSS 3中的 :target 伪类
序号 选择器 含义
44. E:target 匹配文档中特定"id"点击后的效果

关于选择器使用的一些建议

CSS选择符由一些初始化参数组成,这些参数指明了要应用这个CSS规则的页面元素。作为一个网站的前端开发工程师,应该避免编写一些常见的开销很大的CSS选择符模式,尽量编写高效的CSS选择符,从而加快页面的渲染速度,缩短页面呈现时间。
Google 资深web开发工程师Steve Souders对CSS选择器的效率从高到低做了一个排序:

1.id选择器(#myid)2.类选择器(.myclassname)3.标签选择器(div,h2,p)4.相邻选择器(h2+p)5.子选择器(ul < li)6.后代选择器(li a)7.通配符选择器(*)8.属性选择器(a[rel="external"])9.伪类选择器(a:hover,li:nth-child)

上面九种选择器中ID选择器的效率是最高,而伪类选择器的效率则是最底。
综合上面的顺序,我们清楚的知道,id和类名用于关键选择器上效率是最高的,而CSS3的仿伪类和属性选择器,虽然使用方便,但其效率却是最低的。

知道了基本原理以后,我们编写CSS时就应该注意了。下面举几个例子,让大家理解的更透彻一些:
1.不要在编写id规则时用标签名或类名

BAD
button#backButton {…}
BAD
.menu-left#newMenuIcon {…}
GOOD
#backButton {…}
GOOD
#newMenuIcon {…}

由于样式系统从最右边的选择符开始向左进行匹配,只要当前选择符的左边还有其他选择符,样式系统就会继续向左移动,直到找到和规则匹配的元素,或者因为不匹配而退出,所以,在button#backButton {…}中,样式系统先找到id为backButton的元素,然后继续向左匹配,查看该元素的标签名是不是button,如果不是,查找下一个id为backButton的元素,再检查这个元素的标签名,如此周而复始,直到到达文档末尾。如果只是#backButton {…},则样式系统找到id为backButton的元素后,因为左边没有其他选择符了,它就退出而结束查找了。

另外,根据HTML规范,id在HTML中是唯一的,也就是说一个HTML页面只限定有一个id为"XX"的元素,而不限制拥有这个ID元素的标签名,所以,在button#backButton {…}中,button标签完全是无意义的,可以,而且应该去掉,button#backButton {…}与#backButton {…}是等价的。在#backButton前多写了button,只会引起样式系统向左移动,继续查找页面元素,损耗页面性能,延长页面渲染时间。

另一方面,在id元素前面添加标签名,还会引起另一个致命的问题,比如原来id为backButton的标签名是button,如果原来样式声明写成button#backButton {…},则现在需要把button标签改成input,id不变,则button#backButton {…}声明的样式规则在这个id同样为backButton的input元素上不起作用,不信大家可以自己动手编写试一下。
2.不要在编写class规则时用标签名

BAD
treecell.indented {…}
GOOD
.treecell-indented {…} //语言化和标签名绑在一起 假设treecell
BEST
.hierarchy-deep {…} //语言化和标签名无关

原理参考第一条。
3.把多层标签选择规则用class规则替换,减少css查找

BAD
treeitem[mailfolder="true"] > treerow > treecell {…}
GOOD
.treecell-mailfolder {…}

4.避免使用子选择器

现在我们来看看David Hyatt的第3段话:后代选择器在CSS中是最昂贵的选择器。贵得要命——尤其是把它和标签或通配符放在一起!

BAD
treehead treerow treecell {…}
BETTER, BUT STILL BAD (see next guideline)
treehead > treerow > treecell {…}

标签后面最好永远不要再增加子选择器

BAD
treehead > treerow > treecell {…}
GOOD
.treecell-header {…}
BAD
treeitem[IsImapServer="true"] > treerow > .tree-folderpane-icon {…}
GOOD
.tree-folderpane-icon[IsImapServer="true"] {…}

5.依靠继承

BAD
#bookmarkMenuItem > .menu-left { list-style-image: url(blah) }
GOOD

#bookmarkMenuItem { list-style-image: url(blah) }

最后,我们来做个总结,网站编写CSS时,应该优先考虑使用class选择器,避免使用通配符选择器(*)和属性选择器(a[rel="external"]),后代选择器与标签选择器结合使用也应避免。使用id选择器的性能最好,但是编写时要注意其唯一性,谨慎使用。CSS3选择器(例如::nth-child(n)第n个孩子)在帮助我们锁定我们想要的元素的同时保持标记的干净和语义化,但事实是,这些花哨的选择器让更多的浏览器资源被密集使用。引用David Hyatt关于CSS3选择器的论述:如果你关心页面性能的话,他们真不该被使用!

上述就是小编为大家分享的CSS选择器基本知识有哪些了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

元素 选择 属性 内容 标签 含义 序号 剪贴板 实例 剪贴 个子 页面 样式 规则 后代 效率 系统 知识 文档 基本知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南宁西乡塘区软件开发多少钱 软件开发实习调查报告 新乡市铭德教育软件开发有限公司 上海的dns服务器 成都手机软件开发公司 中国电信华为平台服务器时间地址 何为地形图数据库 网络技术qq群 35岁软件开发和销售 达梦数据库自增为啥从0开始 网络安全公益广告图片怎么制作 汽车互联网科技 黄山市软件开发工资标准 eas网络安全 数据库查询是谁在操作 服务器连接两个路由器怎么设置 华为回应5g网络安全工具箱 通过数据库获取关闭按钮 网站没有谷歌收录数据库 网络安全知识宣传过程 女生学应用软件开发 分布式数据库mysql 软件开发包含哪些经营范围 项目团队完成了一个从旧数据库 广东软件开发公司 拒不履行义务导致的网络安全案件 杭州佳屹网络技术有限公司 黑客文化与网络安全考试答案 机载网络安全是干啥 青浦区数据网络技术质量保证
0