31种选择器的应用

2023-11-19

选择器(selector)是CSS中很重要的概念,所有HTML语言中的标记都是通过不同的CSS选择器进行控制的。用户只需要通过选择器对不同的HTML标签进行控制,并赋予各种样式声明,即可实现各种效果。

    

 1. *

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

  星号选择器用于选取页面中的所有元素,可用于快速清除所有元素的 margin 与 padding,但最好只在测试的时候使用,而不要正式用在 CSS 文件中,否则会大大加重浏览器负担。此外,星号选择器也可以给父层的所有子元素设定样式,重复一遍,尽量少用这种方式:

1 #container * { border: 1px solid black; }

  兼容 IE6+

 2. #X

1 #container { width: 960px; margin: auto; }

  id 选择器,最常见的选择器用法之一,不可重复使用。

  兼容 IE6+

 3. .X

1 .error { color: red; }

  class 选择器,也是最常见的选择器用法之一,与 id 选择器不同的是 class 选择器可同时选取多个元素,而 id 选择器只能给一个独一无二的元素设定样式。

  兼容 IE6+

 4. X Y

1 li a { text-decoration: none; }

  后代选择器 (descendant selector),选取 X 元素内的所有 Y 元素,比如上面这段代码将选取 li 标签内的所有链接。

  兼容 IE6+

 5. X

1 a { color: red; } ul { margin-left: 0; }

  标签选择器 (type selector),用于选取 HTML 标签 (tag)。

  兼容 IE6+

 6. X:visited and X:link

1 a:link { color: red; } a:visted { color: purple; }

  :link 伪类选择器 (pseudo class selector) 用于选取所有未点击过的链接,而 :visited 则用于选取所有已访问过的链接。

  兼容 IE6+

 7. X + Y

1 ul + p { color: red; }

  临近选择器 (adjacent selector),选取紧邻在 X 元素后面出现的第一个元素,比如上面这段代码将选取 ul 元素后出现的第一个元素,也就是 p 元素。

  兼容性 IE6+

 8. X > Y

1 div#container > ul { border: 1px solid black; }

  在第 4 条中,后代选择器 X Y 选取父层 X 内的所有 Y 元素;子选择器 X > Y 则只选取直接出现在父层 X 内的 Y 元素。比如下面的 HTML 结构中,#container > ul 选取直接出现在 div#container 内的 ul 元素,不包含嵌套在 li 内的 ul 元素:

1 <div id="container"> <ul> <li> List Item <ul> <li> Child </li> </ul> </li> <li> List Item </li> <li> List Item </li> <li> List Item </li> </ul> </div>

  兼容 IE6+

 9. X ~ Y

1 ul ~ p { color: red; }

  同样也是临近选择器,前面第 7 条 X + Y 选取紧邻在 X 后出现的第一个元素,而 X ~ Y 将选取 X 元素后出现的所有同级元素。上面这段代码将选取 ul 元素后出现的所有同级 p 元素,而不是像 ul + p 这样选取第一个出现的 p 元素。

  兼容 IE7+

 10. X[title]

1 a[title] { color: green; }

  属性选择器 (attributes selector),根据元素使用的属性进一步缩小选取范围,上面这段代码将选取所有使用了 title 属性的链接,或者 a[title="title content"]{color:green} 再进一步缩小选取范围。

  兼容 IE7+

 11. X[href="foo"]

1 a[href="http://net.tutsplus.com"] { color: #1f6053; /* nettuts green */ }

  上面这段代码将选取所有跳转到 http://net.tutsplus.com 的链接,这些链接将显示为绿色,其他链接不受影响。

  只是这种方式很严格不能相差一个字符,下面将会逐一介绍更灵活的用法。

  兼容 IE7+

 12. X[href*="nettuts"]

1 a[href*="tuts"] { color: #1f6053; /* nettuts green */ }

  * 表示只要属性值中包含双引号内的内容就满足选取要求,这段代码将选取跳转到 nettuts.com,net.tutsplus.com,或者 tutsplus.com 等链接。

  兼容 IE7+

 13. X[href^="http"]

1 a[href^="http"] { background: url(path/to/external/icon.png) no-repeat; padding-left: 10px; }

  ^ 表示只要属性值以双引号内的内容开头就满足选取要求,这段代码也常用来给页面中所有外部接设定样式。

  兼容 IE7+

 14. X[href$=".jpg"]

1 a[href$=".jpg"] { color: red; }

  $ 表示只要属性值以双引号内的内容结尾就满足选取要求,这段代码将选取所有跳转到 jpg 图片的链接。

  兼容 IE7+

 15. X[data-*="foo"]

  上面第 14 条提到了如何选取所有跳转到 jpg 图片的链接,若要选取跳转到图片的所有链接可以用下面的方法:

1 a[href$=".jpg"], a[href$=".jpeg"], a[href$=".png"], a[href$=".gif"] { color: red; }

  或者,先给图片链接添加 data- 属性(注:HTML5 Custom Data Attributes)

1 <a href="path/to/image.jpg" data-filetype="image"> Image Link </a>

  然后再通过属性选择器选取:

a[data-filetype="image"] { color: red; }

  兼容 IE7+

 16. X[foo~="bar"]

1 a[data-info~="external"] { color: red; } a[data-info~="image"] { border: 1px solid black; }

  如果属性值中有用空格分隔的一连串属性值,~ 可以选取其中一个属性值,比如:

1 <a href="path/to/image.jpg" data-info="external image"> Click Me, Fool </a>

  借助 ~ 选取包含 external 或者 image 属性值的元素:

1 /* Target data-info attr that contains the value "external" */ a[data-info~="external"] { color: red; } /* And which contain the value "image" */ a[data-info~="image"] { border: 1px solid black; }

  兼容 IE7+

 17. X:checked

1 input[type=radio]:checked { border: 1px solid black; }

  :checked 伪类选择器用于选取所有标记为 checked 的元素,比如单选框 (radio button) 或复选框 (checkbox)。

  兼容 IE9+

 18. X:after

  :before 与 :after 是两个令人兴奋的伪类选择器,几乎每天都有人发明出一些新用法,这里简单介绍一下如何用它清除浮动:

1 .clearfix:after { content: ""; display: block; clear: both; visibility: hidden; font-size: 0; height: 0; } .clearfix { *display: inline-block; _height: 1%; }

  这种方式通过 :after 在元素后面添加一块区域,然后将其隐藏,可以弥补 overflow: hidden; 的缺陷。

    根据 CSS3 选择器标准,理论上伪类选择器应该使用双冒号,但实际上浏览器也支持单冒号的形式,所以可以继续使用单冒号。

  兼容 IE8+

 19. X:hover

1     div:hover { background: #e3e3e3; }

  最常用的伪类选择器,不多解释了,只是需要注意 IE6 不支持将 :hover 作用于除 a 链接外的其他元素。

1 a:hover { border-bottom: 1px solid black; }

  另外提醒一点:border-bottom: 1px solid black; 的效果要比 text-decoration: underline; 好看一些。

  兼容 IE6+ (在 IE6 中 :hover 只能作用于链接)

 20. X:not(selector)

1 div:not(#container) { color: blue; }

  :not 伪类选择器有时会起到很重要的作用,假设现在要选取除 #contaienr 外的所有 div 元素,就可以用上面的代码实现。

  兼容 IE9+

 21. X::pseudoElement

1 p::first-line { font-weight: bold; font-size: 1.2em; }

  通过伪元素(使用双冒号 ::)可以给元素的某一部分设定样式,比如第一行、或者第一个字母。需要注意的是,这只对块级元素 (block level elements) 生效。

    提示:伪元素 (pseudo element) 使用双冒号 ::

  选取段落的第一个字母

1 p::first-letter { float: left; font-size: 2em; font-weight: bold; font-family: cursive; padding-right: 2px; }

  这段代码将选取页面中所有 p 元素,然后再选取其中的第一个字母。

  选取段落的第一行

1 p::first-line { font-weight: bold; font-size: 1.2em; }

  与上面的例子类似,通过 ::first-line 选取页面的第一行。


    为了兼容 CSS1 与 CSS2 中的伪元素(比如 :first-line, :first-letter, :before 以及 :after),浏览器接受单冒号与双冒号两种格式,但对于 CSS3 中最新引入的伪元素,必须使用双冒号。

  兼容 IE6+

 22. X:nth-child(n)

1 li:nth-child(3) { color: red; }

  :nth-child(n) 用于选取 stack 中的某一个元素,只接受整数作参数(参数从 1 开始计数),如果你想选取第二个 li 元素,只需这样写 li:nth-child(2)。

  也可以设定可变的参数,比如 li:nth-child(4n) 将选取第 4, 8 , 12… 个元素(4*n, n=1, n++)。

  兼容 IE9+

 23. X:nth-last-child(n)

1 li:nth-last-child(2) { color: red; }

  除了正序(从上往下)选择,也可以使用 :nth-last-child(n) 倒序(从下往上)选择第几个元素,其他用法与第 22 条完全一样。

  兼容 IE9+

 24. X:nth-of-type(n)

1 ul:nth-of-type(3) { border: 1px solid black; }

  :nth-of-type(n) 的作用不是选取子元素 (child element),而是选取同类元素 (type of element)。想象一下 HTML 文件中包含 5 个 ul 元素,现在要选取第三个,只需使用上面的代码,而不用再单独这个 ul 添加 id。

    关于 :nth-child 与 :nth-of-type 的区别,具体请查看 CSS-Tricks 网站的解释,简单来说,如果父层内只包含一种元素(比如都是 p 元素)那两种用法是等效的,如果父层包含多种元素(比如 p 元素与同级的其他元素),需要选取第几个 p 元素时应该用 :nth-of-type。

  兼容 IE9+

 25. X:nth-last-of-type(n)

1 ul:nth-last-of-type(3) { border: 1px solid black; }

  与第 24 条用法相同,倒序选取同类元素。

  兼容 IE9+

 26. X:first-child

1 ul li:first-child { border-top: none; }

  选取父层内的第一个子元素。

  兼容 IE7+

 27. X:last-child

1 ul > li:last-child { color: green; }

  与第 26 条用法相同,区别在于 :last-child 选取父层元素内的最后一个子元素。

  :first-child 与 :last-child 通常用来清除边框 (border),比如 <ul></ul> 内每个 <li></li> 都使用了 border-top 与 border-bottom 边框,结果是,第一个元素的上方与最后一个元素的下方会是单边框效果。这种情况可以用 :first-child 与 :last-child 清除上下的边框,而不用给第一个元素添加id="first" 或者给最后一个元素添加 id="last"。

  兼容 IE9+

 28. X:only-child

1 div p:only-child { color: red; }

  这个伪类选择器不常用,它可以选取包含唯一指定子元素的父层。比如上面的代码中将选取下面第一个 div 元素,而不是第二个 div 中的 p 元素。

1 <div><p> My paragraph here. </p></div> <div> <p> Two paragraphs total. </p> <p> Two paragraphs total. </p> </div>

  兼容 IE9+

 29. X:only-of-type

1 li:only-of-type { font-weight: bold; }

  这个选择器会选取某个元素,并且这个元素在其父层内没有其他同级同类元素(不一定是唯一元素)。比如,要选取所有只包含一个 li 元素的 ul 元素该怎么做呢?如果使用 ul li 将选取所有 li 元素,应该使用 only-of-type。

  兼容 IE9+

 30. X:first-of-type

  first-of-type 伪类可以选取某种元素的第一个同类元素。

  为了更好地理解它的用法,现在思考一下如何在下面的 HTML 结构中选取 List Item 2 ?

1 <div> <p> My paragraph here. </p> <ul> <li> List Item 1 </li> <li> List Item 2 </li> </ul> <ul> <li> List Item 3 </li> <li> List Item 4 </li> </ul> </div>

  方法一

1 ul:first-of-type > li:nth-child(2) { font-weight: bold; }

  这段代码的意思是:首先选取第一个 ul 元素;然后选取其中的所有直接子元素,也就是 li;最后选取第二个子元素。

  方法二

1 p + ul li:last-child { font-weight: bold; }

  找到 p 元素后第一个出现的 ul 元素,然后选取其中的最后一个子元素。

  方法三

1 ul:first-of-type li:nth-last-child(1) { font-weight: bold; }

  找到第一个 ul 元素,然后从上往下选取第一个子元素。

  兼容 IE9+

 31. 伪类选择器叠用

  有些伪类选择器或者伪元素是可以叠用的,例如:

1 #post p:nth-of-type(2):first-letter { float: left; margin: 0 5px 0 1em; width: 1em; height: 1em; font-size: 2em; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

31种选择器的应用 的相关文章

  • CentOS6.5源码安装MySQL5.6.35

    原文地址 http www cnblogs com ShanFish p 6531365 html 参考地址 http blog csdn net 1099564863 article details 51622709 http blog
  • 几种应用程序调用Oracle存储过程的方法

    一 Java中调用带Cursor的存储过程 存储过程定义 PROCEDURE GET CURSOR RESULT2 CR OUT CURSOR RESULT IS BEGIN OPEN CR FOR select t1 id t1 acco
  • nginx修改配置后reload原理初探

    前言 nginx启动时 会启动两个进程 一个是Master进程和worker进程 改变配置后nginx做的事 1 改变了nginx配置之后 HUP signal的信号需要发送给主进程 2 主进程首先会检测新配置的语法有效性 3 尝试应用新的
  • Android Studio 安装应用失败总结

    昨天公司刚发了测试机 我拿到一台魅蓝max 刚拆开手机 今天插上数据线 run 结果居然安装失败 提示信息为 INSTALL FAILED USER RESTRICTED 顿时懵逼了 刚买的新机 就出现这个问题 无语啊 刚开始还以为是And
  • 判断当前日期是否在[startDate, endDate]区间

    原文地址 http www cnblogs com linjiqin p 5569601 html 判断当前日期是否在 startDate endDate 区间 param startDate 开始日期 param endDate 结束日期
  • Linux应用编程

    孤儿进程 在Linux Unix环境中 我们是通过fork函数来创建子进程的 创建完毕之后 父子进程独立运行 父进程无法预知子进程什么时候结束 通常情况下 子进程退出后 父进程会使用wait或waitpid函数进行回收子进程的资源 并获得子
  • qq的Tencent://Message/协议

    QQ即时聊天代码 为QQ号码 以前这样写 http wpa qq com msgrd V 1 Uin Site hexun com ngdao Menu yes 现在这样写 tencent message uin Site hexun co
  • Java 的JSON、XML转换方法——目录索引

    原文地址 http blog csdn net ibm hoojo article details 6366429 JSON及XML的Java序列化 反序列化 转换 在WebService Ajax数据传递中 用得比较多 如 在用ExtJS
  • 【已解决】NFS客户端写入NFS共享文件夹出错:Permission denied

    原文地址 https www crifan com nfs client write to nfs server share folder error permission denied 背景 折腾 已解决 在远程Ubuntu服务器中开通N
  • 网络体系结构总结

    网络体系结构总结 七层结构 应用层 各种应用 网络虚拟终端 SMTP 文件传输 HTTP EMALL等 表示层 完成特定的常见的功能 关心所传输信息的语法和语义 数据压缩 数据转换 数据加密 会话层 为会话用户提供一个建立连接及在上按顺序传
  • 常用运放电路计算与分析

    常用运放电路计算与分析 1 运放的符号表示 2 集成运算放大器的技术指标 1 开环差模电压放大倍数 开环增益 大 Ao Ad Vo V V 107 1012倍 2 共模抑制比高 KCMRR 100db以上 3 输入电阻大 ri gt 1MW
  • 根据地理信息获取经纬度

    同步坐标 function synchronizationCoordinate var url http maps google com maps api geocode json address encodeURIComponent va
  • 【Android Socket专题】:UDP通信客户端app的demo的实现

    Android Socket 专题 UDP Client客户端 http blog csdn net shankezh article details 50731287 UDP Server服务器 http blog csdn net sh
  • 中国国家气象局天气预报信息接口

    想在自己的android应用中获得当天的天气情况 这该怎么做呢 不用担心 中国国家气象局提供了获取所在城市天气预报信息接口 通过这个接口 我们就可以获取天气信息了 中国国家气象局天气预报接口总共提供了三个 http www weather
  • 关于无法卸载和安装VISIO2010的问题

    之前装个Visio2010突然就打不开了 并且最可恨的是 每次打开word编辑转化搜狗输入法就会提示什么安装错误程序停止工作问是否继续 虽然点击确定后不影响word的使用 但每次都这样就很闹心了 试了用软件助手强力卸载不行 采用window
  • 分享一百多套开发视频教程的下载地址

    原文地址 http www cnblogs com dennisit p 3184225 html 北京圣思Java培训教学视频 资源共享网 2 Lucene WebService SVN Ant SpringMVC视频 学习资料库网 3
  • webpack 插件之Html-Webpack-Plugin

    webpack 插件之Html Webpack Plugin 1 为什么我们需要这个插件 先来看一个应用场景 我们自己打算搭建一个网站 这个网站有很多个页面 我们为每个页面创建一大堆的css样式 js脚本 然后尝试用webpack进行打包
  • 31种选择器的应用

    选择器 selector 是CSS中很重要的概念 所有HTML语言中的标记都是通过不同的CSS选择器进行控制的 用户只需要通过选择器对不同的HTML标签进行控制 并赋予各种样式声明 即可实现各种效果 1 1 margin 0 padding
  • maven安装和环境变量配置

    myeclipse自带maven Maven4MyEclipse 创建项目 新建Web Projects项目 在新建的页面上打上maven的勾 新建的项目里会多出个pom xml文件 为项目添加依赖包 右键项目 选择Maven4MyEcli
  • AI在广告中的应用——预测性定位和调整

    营销人员的工作就是在恰当的时间将适合的产品呈现在消费者面前 从而增加他们购买的可能性 随着时间的推移 营销人员能够深入挖掘越来越精准的客户细分市场 他们不仅具备了实现上述目标的能力 而且这种能力还在呈指数级提升 在AI技术帮助下 现在的营销

随机推荐

  • 如何在 Ubuntu 22.04 上的 PostgreSQL 中静态加密数据库

    介绍 PostgreSQL是一个数据库管理系统 自 1996 年以来一直存在 就像其他数据库系统一样 SQL MySQL Oracle等 PostgreSQL的主要目的是为用户提供一种创建数据库用于存储和数据检索的方式 其突出的功能之一包括
  • 如何在 Ubuntu 12.04 上使用 Iptables 设置防火墙

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • Java 中的死锁示例

    java中的死锁是两个或多个线程永远被阻塞的一种编程情况 Java 死锁情况发生在至少两个线程和两个或更多资源的情况下 这里我写了一个简单的程序 该程序会导致java死锁场景 然后我们将看到如何分析它 Java 中的死锁 Let s hav
  • 深入探讨 Iptables 和 Netfilter 架构

    介绍 防火墙是一个重要的工具 可以配置它来保护您的服务器和基础设施 在Linux生态系统中 iptables是一种广泛使用的防火墙工具 与内核一起工作netfilter数据包过滤框架 由于复杂的语法和涉及的相互关联部分的数量 创建可靠的防火
  • 如何使用 Dovecot 设置 Postfix 电子邮件服务器:动态 Maildirs 和 LMTP

    Preface 本教程基于如何使用 Dovecot 设置 Postfix 电子邮件服务器并从第一部分结束的地方开始 请先阅读该教程 在本文中 我们将使用 dovecot 的 LMTP 服务器作为传递机制将邮箱与系统帐户分离 并使用 post
  • Java ArrayList 的数组、ArrayList 的 Array

    今天我们将学习如何创建Java数组ArrayList 我们还将学习如何创建数组元素的 ArrayList Java ArrayList 的数组 Creating array of list in java is not complex Be
  • 如何将本地 Django 应用程序部署到 VPS

    先决条件 本教程假设您已经使用所选操作系统设置了虚拟专用服务器 本教程使用 Debian 7 Ubuntu 也可以 如果您还没有这样做 您可以按照此操作tutorial 在开始之前 请确保您的云服务器已正确配置为托管 Django 应用程序
  • 如何在 Arch Linux 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

    关于兰普 LAMP 堆栈是一组用于启动和运行 Web 服务器的开源软件 该缩写词代表 Linux Apache MySQL 和 PHP Arch Linux 使用功能强大的 Pacman 安装程序 只需一个命令即可下载每个程序所需的所有最新
  • JSON 服务器(json-server)

    今天我们将研究一个非常方便的工具 json server 它可以在一分钟内为您提供一个模拟的 Rest json 服务器 在常规企业应用程序中 您需要与许多团队和第三方 API 合作 想象一下您必须致电第三方宁静的网络服务这将使您能够处理
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • java中的静态关键字

    Java中的static关键字在java编程中被大量使用 Java static关键字用于在java中创建类级别变量 静态变量和方法是类的一部分 而不是类的实例 java中的静态关键字 Java static keyword can be
  • 如何在 Apache 和 Nginx 上配置 OCSP 装订

    介绍 OCSP 装订是一种 TLS SSL 扩展 旨在提高 SSL 协商的性能 同时维护访问者隐私 在继续配置之前 先简要介绍一下证书吊销的工作原理 本文使用免费证书由 StartSSL 发出来演示 本教程将使用下面概述的 Apache 和
  • 在 Linux 中创建分区 - 分步指南

    在本教程中 我们将介绍在 Linux 中创建分区的步骤 这可以帮助您为特定用途分配不同的内存区域 创建分区还可以帮助您在计算机上安装多个操作系统 并最大限度地减少磁盘损坏时的损坏 如何在Linux中创建分区 在本教程中 我们将使用 fdis
  • Python实战项目23个实战小项目小程序简单

    Python项目23个小项目简单 项目类别 部分项目运行截图 含代码注释 项目类别 51商城 AI智能联系人管理 双击即启动 BBS问答社区 DIY字符画 双击即启动 Excel数据分析师 双击即启动 RCQ读者书库 双击即启动 Word助
  • LaTeX+Overleaf 论文速通教程

    一 文本 排版 二 章节和段落 三 数学公式 四 插入图片 五 插入表格 六 参考文献与交叉引用 不使用BibTeX 使用BibTeX 推荐 七 交叉引用label和ref Overleaf开发界面 latex命令 命令 可选参数 必选参数
  • 【ts】使用ts的vue项目必须安装的插件和要进行的配置(一般使用搭建vue的时候脚手架会帮忙弄好,但是还是要知道项目里这些代码都是什么)

    使用ts的项目 是需要安装ts loader来处理 ts文件的 例如babel loader是用于处理js文件 而ts就是ts loader 先确保项目是否安装了webpack和typescript npm install webpack
  • 前端面试话术集锦第 14 篇:高频考点(React常考基础知识点)

    这是记录前端面试的话术集锦第十四篇博文 高频考点 React常考基础知识点 我会不断更新该博文 1 生命周期 在V16版本中引入了Fiber机制 这个机制一定程度上的影响了部分生命周期的调用 并且也引入了新的2个API来解决问题 在之前的版
  • 深度学习用streamlit做网页demo

    CSDN话题挑战赛第2期 参赛话题 学习笔记 深度学习 图像生成领域许多工作都会做网页demo 技术与应用接轨 让用户体验模型能力 之前试过用轻量级Web应用框架Flask将深度学习模型部署到微信小程序端 pytorch模型部署小程序 三思
  • 智能机器人编程有必要学吗?

    机器人编程是由各种传统的学科构成的 例如 数学 物理 化学 结构 建筑 地理 生物 能源 信息技术等 学习机器人可以培养孩子的各种能力 包括动手 想象 创造 观察 分析 判断 归纳 理解 决策 组织 实验 计划性 条理性等 如果你正为这些纷
  • 31种选择器的应用

    选择器 selector 是CSS中很重要的概念 所有HTML语言中的标记都是通过不同的CSS选择器进行控制的 用户只需要通过选择器对不同的HTML标签进行控制 并赋予各种样式声明 即可实现各种效果 1 1 margin 0 padding