热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

神通广大的CSS3选择器

作者:大额_skylarhttp:www.cnblogs.comskylarpcss3-selector.html每个前端工程师可能每天都会写一些css,其中选择器是很主要的一部分。但是,大
作者:大额_skylar

http://www.cnblogs.com/skylar/p/css3-selector.html

每个前端工程师可能每天都会写一些css,其中选择器是很主要的一部分。但是,大家可能每天写的大多是#id,.class这样的选择器,这并不稀奇,但是如果我们了解并且熟用css3为我们提供的强大并且优雅的选择器,就可以简化我们的代码。

我在学习和整理css3的选择器的时候都不会去考虑它的浏览器的支持程度,如果有需要,可以在这里查看它的浏览器支持情况:「caniuse.com」。

一、基本选择器

1. 通配选择器 「*」

1 *{margin: 0;padding: 0} //选择页面中的所有元素并设置margin和padding值为0
2 .demo *{background:#000} //选择类名为demo的元素下面的所有元素并设置背景为黑色

2.元素选择器 「Element」

1 body{background:#ccc} //选择body元素 
2 ul{background:#fff} //选择列表ul元素

3.ID选择器 「#id」

1 html:
2

3 css:
4 #demo{do something}

4.类选择器 「.class」

1  html:
2  

    3  css:
    4  .demo{do something}
    5  ul.demo{do something} //这样只会选择有demo类名的ul元素

    需要注意的是:多个页面元素可以有相同的类名,但是元素的id在页面中必须是唯一的。

    5.群组选择器 「selector1,…,selectorN」

    1 html:
    2

    3

    4

    5 ccss:
    6 .section-1,.section-2,.section-3{do something} //给三个页面元素定义公用的样式
    二、层次选择器

    6.后代选择器「E F」

    选择匹配E的元素内的所有匹配F的元素。

    1 html:
    2

    3        

    4        

    5              

    6                  

    7            

    8        
        9

    10
    11 css:
    12
    13 .parent div{do something} //会选择parent里面的所有div,不管是子元素.child还是孙元素.c-child和.c-c-child        

    7.子选择器「E > F」

    选择配配E的元素的匹配F的直系子元素。

     1    html:
    2  

    3          

    4          

    5                

    6                    

    7              

    8          
        9  

    10  
    11  css:
    12  .parent > div{do something} //只会选择.parent元素的直系子元素,也就是只会选择到 .child元素

    8.相邻兄弟元素选择器「E + F」

    E和F是同辈元素,具有相同的父元素,并且F元素紧邻在E元素的后面,此时可以使用相邻兄弟选择器。

    1 html:
    2

    3    
    1

    4    
    2

    5    
    3

    6

    7
    8 css:
    9 10 .demo + div {do something}//会选中内容为2的div

    9.通用兄弟选择器「E ~ F」

    E和F是同辈元素,具有相同的父元素,并且F元素在E元素之后,E ~ F将选中E元素后面的所有F元素。

     1  html:
    2  

    3      
    1

    4      
    2

    5      
    3

    6      
    4

    7  

    8  
    9   css:
    10  
    11  .demo ~ div {do something}//会选中内容为2,3,4的div
    三、伪类选择器

    10.动态伪类选择器「E:link,E:visited,E:active,E:hover,E:focus」

    1 E:link{do something} //选择定义了超链接但链接还未被访问过的元素
    2 E:visited{do something} //选择定义了超链接并且链接已经被访问过的元素
    3 E:active{do something} //选择匹配的E元素,且元素被激活,常用在锚点和按钮上
    4 E:hover{do something} //选择鼠标停留的匹配的E元素
    5 E:focus{do something} //选择匹配的E元素,且元素获得焦点

    11.目标伪类选择器「E:target」

    选择匹配E的所有元素,且匹配元素被相关URL指向。

    通俗点说,页面的url如果带有#something这样的字样(https://rawgit.com/zhangmengxue/Practice/master/demo.html#section-1)那么:target就是用来匹配页面中id为#something(section-1)的元素的。

    12.语言伪类选择器「E:lang(language)」

    用来选择指定了lang属性的元素,其值为language。

    1 html:
    2
    3
    4 css:
    5 :lang(en-US) {do something}

    有时候网页切换不同的语言版本的时候,可以通过这个选择器做一些特殊的处理。

    13.状态伪类选择器「E:checked,E:enabled,E:disabled」

    1 E:checked{do something} //匹配表单中被选中的单选按钮或复选按钮
    2 E:enabled{do something} //匹配所有起用的表单元素
    3 E:disabled{do something} //匹配所有禁用的表单元素

    14.结构伪类选择器「E:first-child,E:last-child,E:root,E:nth-child(n),E:nth-last-child(n),E:nth-of-type(n),E:nth-last-of-type(n),E:first-of-type,E:last-of-type,E:only-child,E:only-of-type,E:empty」

    14.1 [E:first-child]

    用来选取特定元素的第一个子元素。

     1 html:
    2

      3    
    • 1

    • 4    
    • 2

    • 5    
    • 3

    • 6    
    • 4

    • 7    
    • 5

    • 8

    9 css:10 11 ul > li:first-child {do something} //用来选取ul中的第一个li元素

    14.2 [E:last-child]

    用来选取特定元素的最后一个子元素。

     1  html:
    2  

      3      
    • 1

    • 4      
    • 2

    • 5      
    • 3

    • 6      
    • 4

    • 7      
    • 5

    • 8  

    9   css:10   ul > li:last-child {do something} //用来选取ul中的最后一个li元素

    14.3 [E:nth-child()],[E:nth-last-child()]

    用来选取某个父元素的一个或多个特定的子元素,其中的n可以是数值(从1开始),也可以是包含n的表达式,也可以是odd(奇数),even(偶数)。

    E:nth-last-child()选择器的使用方法于E:nth-child()是相同的,不同的是E:nth-last-child()选择的元素是从父元素的最后一个子元素开始算起。

     1   html:
    2    

      3        
    • 1

    • 4        
    • 2

    • 5        
    • 3

    • 6        
    • 4

    • 7        
    • 5

    • 8    

    9   css:10    ul > li:nth-child(2n+1) {do something} //用来选取ul中的第2n+1(奇数)个li元素

    14.4 [E:root]

    用来匹配元素E所在的文档中的根元素,在html文档中根元素就始终是html。

    14.5 [E:nth-of-type(),E:nth-last-of-type()]

    E:nth-of-type()只计算父元素中指定的某种类型的子元素,当某个元素的子元素类型不只是一种时,使用nth-of-type来选择会比较有用。

    E:nth-last-of-type()的用法同E:nth-of-type()相同,不同的是:nth-last-of-type()也是从父元素的最后一个子元素开始算起。

    li:nth-of-type(3)的话就会标识它只会选择第三个li元素,别的元素会忽略掉,如:

     1 html:
    2

      3    
    • 1

    • 4    
    • 2

    • 5    
      3

      6    
      4

      7    
    • 5

    • 8    
    • 6

    • 9    
    • 7

    • 10    
    • 8
    • 11

    12
    13 ul > li:nth-of-type(3){do something} //会选中内容为5的li元素

    但是使用nth-child就会是这样:

     1 html:
    2

      3    
    • 1

    • 4    
    • 2

    • 5    
      3

      6    
      4

      7    
    • 5

    • 8    
    • 6

    • 9    
    • 7

    • 10    
    • 8
    • 11

    12
    13 ul > li:nth-child(3){do something} //会选中内容为3的div元素

    14.6 [E:first-of-type,E:last-of-type]

    :first-of-type和:last-of-type这两个选择器类似于:first-child和:last-child,不同的就是指定了元素的类型。

     1  html:
    2  

      3      
      1

      4      
      2

      5      
    • 3

    • 6      
    • 4

    • 7      
    • 5

    • 8      
    • 6

    • 9  

    10  CSS:
    11  ul > li:first-of-type{do something} //会选中内容为3的li元素

    14.7 [E:only-child]

    匹配的元素E是其父元素的唯一子元素,也就是说匹配元素的父元素只有一个子元素。

     1 html:
    2

    3    

    1-1


    4    

    1-2


    5

    6

    7    

    2-1


    8

    9
    10 css:
    11 .demo > p:only-child{do something}//会选取到内容为2-1的p元素

    14.8 [E:only-of-type]

    :only-of-type用来选择一个元素,他的类型在他父元素的所有子元素中是唯一的。也就是说,一个父元素有很多子元素,而其中只有一个子元素的类型是唯一的,那么就可以使用:only-of-type来选取这个元素。

    这个属性说起来有点绕口,写了个简陋的demo说明意思:[查看源码][运行demo]

    14.9 [E:empty]

    :empty用来选择没有任何内容的元素,哪怕是一个空格都没有的元素。

    15 否定伪类选择器「E:not(F)」

    可以用来选取所有除了F外的所有元素。

    input:not([type=submit]){do something} //可以用来给表单的所有input元素定义样式,除了submit按钮之外

    四、伪元素

    以前我们使用的伪元素是:first-letter,:first-line,:before,:after,这样的。但css3定义的伪元素变成了双冒号,主要用来区分伪类和伪元素。对于IE6-8,仅支持单冒号表示方法,但是其他现代浏览器两种表示方法是都可以的,也就是说在现代浏览器中伪元素使用双冒号和单冒号都是会识别的。

    16「::first-letter」

    ::first-letter用来选择文本块的第一个字母,常用于文本排版方面。

    1  html:
    2  

    3      

    this is test line.....


    4  
    5
    6 css:
    7
    8 div p::first-letter{do something} //将会选中

    中的第一个字母t

    17「::first-line」

    ::first-line用于匹配元素的第一行文本,也是常用于文本排版。

     1  html:
    2  

    3      


    4          this is first line..........省略.......
    5          this is the second line ...省略....
    6      


    7  

    8  
    9  css:
    10  
    11  div p::first-line{do something} //将会选中

    中的第一行文字

    18「::before,::after」

    ::before,::after同我们之前熟用的:before和:after使用方法相同,它们不是指存于标记中的内容,是配合使用content属性可以插入额外内容的位置,尽管生成的内容不会成为DOM的一部分,但它同样可以设置样式。

    19「::selection」

    css3新定义的伪元素::selection用来匹配突出显示的文本。但是使用前需要确认浏览器对它的支持程度。

    浏览器默认的情况下,我们选中的文本背景是蓝色,字体是白色。通过使用::selection,我们可以改变它的效果。

    ::selection{background:#ccc;color:red} //这样改写后我们选中的文本背景颜色和文字颜色就可以自定义了 

    但是需要注意的是,::selection仅接受两个属性,一个是background,一个是color。

    五、属性选择器

    在html中,通过给元素添加属性,给以给元素添加一些附加的信息,属性选择器就可以通过定位属性来选取特定的元素。

    20「 E[attr] 」

    用来选择有某个属性的元素,不论这个属性的值是什么。

    1 html:
    2

    3  
    4  
    5  
    6
    7 css:
    8 a[id]{do something} //将会选择具有id属性的a标签

    21「 E[attr=val] 」

    用来选取具有属性attr并且属性值为val的元素。

    1  html:
    2  

    3    

    4    
    5    
    6
    7  css:
    8  a[id=test][title]{do something} //将会选择具有id属性值为test且具有title属性的a标签

    22「 E[attr|=val] 」

    E[attr|=val]用来选择具有属性attr且属性的值为val或以val-开头的元素(其中-是不可或缺的)。

    1  html:
    2  

    3    

    4    
    5    
    6  
    7  css:
    8   a[lang|=zh]{do something} //将会选择具有lang属性值为zh或属性值以zh开头的a标签

    23「 E[attr~=val] 」

    当某个元素的某个属性具有多个用空格隔开的属性值,此时使用E[attr~=val]只要attr属性多个属性值中有一个于val匹配元素就会被选中。

    1  html:
    2  

    3    

    4    
    5    
    6  
    7   css:
    8   a[title~=test]{do something} //将会选择具有title属性且其中一个属性值为test的a标签

    24「 E[attr^=val] 」

    用来选择属性attr的属性值是以val开头的所有元素,注意它与E[attr|=val]的区别,attr|=val中-是必不可少的,也就是说以val-开头。

    1  html:
    2      

    3        

    4        
    5        
    6    
    7   css:
    8      a[href^=http]{do something} //将会选择href属性以http开头的a标签

    25「 E[attr$=val] 」

    这个选择器刚好跟E[attr^=val]相反,用来选择具有attr属性且属性值以val结尾的元素。

    1  html:
    2      

    3        

    4        
    5        
    6      
    7  css:
    8       a[href$=png]{do something} //将会选择href属性以png结尾的a标签

    推荐阅读
    • 面试中2次被问到过这个知识点,实际开发中,应用事件委托也比较常见。JS中事件委托的实现主要依赖于事件冒泡。那什么是事件冒泡?就是事件从最深 ... [详细]
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
      本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
    • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
    • Html5-Canvas实现简易的抽奖转盘效果
      本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
    • 深入理解CSS中的margin属性及其应用场景
      本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
    • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
    • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
    • React基础篇一 - JSX语法扩展与使用
      本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
    • 第8章 使用外部和内部链接
      8.1使用web地址LearnAboutafricanelephants. ... [详细]
    • 使用HTML创建弹出框以便用户输入信息
      在做项目的过程中,我们时常需要进行一些弹框操作,比如在后台管理时需要进行的一些增删改操作,这个时候我们需要使用到弹框,或者在 ... [详细]
    • backgroundposition和长图实现鼠标悬浮动画效果
      以下图片及代码均来自京东云点击这里进入京东云思路和效果图:background-position:00可以用js动态的将长图按帧数一帧一阵的展示出来效果类似gif,红框就是可视界面 ... [详细]
    • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
    • 前端不规则图像点击_如何在前端开发的潮流中快速学习学好学以致用?
      大家好,我是致力于前端开发,前端设计,前端入门的前端小姐姐,今天为大家带来的前端新知识是【雪碧图和滑动门】,不 ... [详细]
    • css自适应字体样式?如果是一排文字,一个background‘red’;就搞定了。是多行的话,只有根据文字行高,用一张背景图横向重复。css样式自适应分辨率高度和宽度尽量使用百分 ... [详细]
    author-avatar
    小佛瞌睡蓝
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有