re:从0开始的CSS学习之路 2. 选择器超长大合集

0. 写在前面

虽然现在还是不到25的青年人,有时仍会感到恐慌,害怕不定的未来,后悔失去的时间,但细细想来,只有自己才知道,再来一次也不会有太多的改变。
在这里插入图片描述

CSS的选择器五花八门,而且以后在JavaScript中也会用到,所以就把所有的选择器写到一篇文章里好了。
注意:同时为了方便展示,全部使用内部样式表的形式,实际的应用中还是推荐使用外部样式表!!

导航

  • 0. 写在前面
  • 1. 标签选择器(tag selector)
  • 2. 类选择器(class selector)
  • 4. id选择器(id selector)
  • 5. 通配符选择器(wildcard selector)
  • 6. 选择器分组(并集选择器/selector grouping)
  • 7. 交集选择器(intersection selector)
  • 8. 关系选择器(relationship selector)
  • 9. 属性选择器(attribute selector)
  • 10. 伪类选择器(pseudo class selector)
  • 11. 伪元素选择器(pseudo element selector)

1. 标签选择器(tag selector)

标签选择器(元素选择器):顾名思义,根据HTML标签名选中指定的元素,使用 HTML 标签名作为选择器,为页面中的一类标签指定样式

语法格式:标签名 {属性1: 属性值1;……}

示例如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>2.标签选择器</title>div {color: red;}p {color: yellowgreen;}
</head><body><div>我是div</div><p>我是1个p</p><p>我是2个p</p><p>我是3个p</p><p>我是4个p</p><p>我是5个p</p>
</body></html>

head标签中的div和p就是标签选择器

2. 类选择器(class selector)

类选择器:通过给标签添加类名class="",可以选择一个或多个标签,为其添加样式

  1. 语法格式:
    注意:CSS语法中是.类名一定要记得加.!!!,在JS中也会用这一类选择器
    .类名 {属性1: 属性值1;……
    }
    
  2. 使用步骤
    1. 为标签设置class属性
    2. 利用类选择器选中一个/多个标签
  3. 注意:
    1. 类选择器以英文的 . 开头
    2. 可以为多个标签指定相同的类名
    3. 类名尽量不要使用数字开头,不要使用中文,若类名过长且由多个单词组成,可以使用"-"提高可读性
      如:xxx-yyy
    4. 标签的class属性名可以同时指定多个,每个类名之间以空格隔开即可

示例如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>类选择器</title>.div1 {color: red;}.p1 {font-size: 30px;}
</head>
<body><div class="div1">我是div</div><p class="div1 p1 p2 p3">我是1个p</p><p>我是2个p</p><p>我是3个p</p><p>我是4个p</p><p>我是5个p</p></body>
</html>

这里有几个类,分别是div1 p1 p2 p3 p4,给div标签添加了div1的类,此处的div标签就会套用对应的样式。当然,我们并没有写p1 p2 p3类的样式,所以p也只有div1的样式

4. id选择器(id selector)

id选择器:通过HTML标签的id属性选中唯一一个标签。

  1. 语法格式
    #id名 {属性1:属性值1;……
    }
    
  2. 使用步骤:
    1. 为HTML标签设置id属性
    2. 利用id选择器选中指定标签
  3. 注意:
    1. id选择器以 # 开头
    2. 标签的id属性值不能重复,就像身份证号一样,是唯一的标识

示例如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>4.id chooser</title>#baby {color: red;font-size: 30px;}
</head>
<body><div id="baby">baby,你是我的唯一</div><div id="baby">baby,你是我的唯一</div>
</body>
</html>

注意:这里我们写了具有相同id的标签,而且发现也可以正常的显示,实际上是浏览器进行了一些修正,实际情况下CSS不允许出现相同的id
如果使用WebStorm的话编辑器会给出报错提示,VS Code可能有插件可以给出提示(但我不知道hh)

5. 通配符选择器(wildcard selector)

通配符选择器:用于选中页面中所有的元素

  1. 语法格式:
    * {……
    }
    

示例如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>5.wildcard selector</title>* {color: red;font-size: 30px;}
</head>
<body><div>我是div</div><span>我是span</span><p>我是p</p>
</body>
</html>

通配符选择器非常的简单粗暴,他可以给页面中所有的标签添加上相同的样式

6. 选择器分组(并集选择器/selector grouping)

选择器分组(并集选择器):同时选中多个选择器对应的元素。当为不同选择器选中的元素设置相同的样式时

  1. 语法格式:
    选择器1, 选择器2,……, 选择器n {……
    }
    

示例如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>/* h1 {color: red;font-size: 30px;}.div1 {color: red;font-size: 30px;}#baby {color: red;font-size: 30px;} */h1, .div1, #baby {color: red;font-size: 30px;}
</head>
<body><h1>我是标题</h1><div class="div1">我是div</div><p id="baby">你就是我的唯一</p>
</body>
</html>

可以发现并集选择器的优势在于,可以为不同类型的选择器设置相同的样式

7. 交集选择器(intersection selector)

交集选择器:选中满足多个选择器需求的元素。

  1. 语法格式:
    选择器1选择器2……选择器n {……
    }
    
  2. 注意:
    1. 选择器之间不能有任何的符号,必须紧密的连接在一起
    2. 若交集选择器中有标签选择器,标签选择器必须在首位

示例如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>.d1 {color: red;}p.d1 {font-size: 50px;}
</head>
<body><div class="d1">我是div</div><p class="d1">我是p</p>
</body>
</html>

注意:如果标签选择器不放在第一个,就会变成.d1p,CSS会把他认为是一个叫d1p的类,这并不是我们想要的

8. 关系选择器(relationship selector)

关系选择器:利用标签之间的关系选中指定的元素。
在开始关系选择器前,首先要进行必要的科普环节:
标签之间的关系:标签之中创建另外一对标签,外面的标签称为父标签,里面的标签称为子标签
标签的一层层父级标签,统称为祖先标签
标签的一层层子级标签,统称为后代标签
同一个层级的标签之间,称为兄弟标签

  1. 子元素选择器

    1. 语法格式
      父元素A > 子元素B{……
      }
      
    2. 作用:选中指定父元素A中所有的子元素B
  2. 后代元素选择器

    1. 语法格式
      祖先元素A 后代元素B {……
      }
      
    2. 作用:选中指定祖先元素A中所有的后代元素B
  3. 兄弟元素选择器
    1)相邻兄弟选择器

    1. 语法格式
      兄弟A + 兄弟B {……
      }
      
    2. 作用:选中兄弟A相邻的一个兄弟B

    2)通用兄弟选择器

    1. 语法格式
      兄弟A ~ 兄弟B {……
      }
      
    2. 作用:选中兄弟A后面所有的兄弟B

示例如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>relationship selector</title><!-- 子元素选择器 -->ul>li {color: red;}<!-- 后代元素选择器 -->div span {color: blue;}<!-- 相邻兄弟选择器 -->ul+span {background-color: #c7decc;}<!-- 通用兄弟选择器 -->ul~span {background-color: #fde6e0;}
</head><body><div><ul><li>项目1</li><li>项目2</li><li>项目3<span>我是span</span></li></ul><div></div><span>我是span</span><span>小兄弟span</span></div><ol><li>项目1</li><li>项目2</li><li>项目3</li></ol>
</body></html>

注意:兄弟选择器只会往后选,而不会往前选

9. 属性选择器(attribute selector)

属性选择器:为带有属性的元素指定样式
语法格式一:标签必须包含某属性
        标签名[属性名]

语法格式二:标签属性必须等于某值
        标签名[属性名=属性值]

CSS3对属性选择器的扩展:
语法格式三:标签属性以某个值开头
        标签名[属性名^=属性值]

语法格式四:标签属性以某个值结尾
        标签名[属性名$=属性值]

语法格式五:标签属性必须包含某个值
        标签名[属性名*=属性值]
注意:属性选择器实际上由两部分选择器组成,这会影响选择器的优先级,暂且不提。真正的属性选择器是[]及[]里的内容
示例如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>attribute selector</title>input[value] {background-color: #c7decc;}input[value="哈哈"] {background-color: #fde6e0;}div[class^="div"] {background-color: #dce2f1;}div[class$="hello"] {color: red;}div[class*="d"] {font-size: 30px;}
</head><body><input type="text" value="呵呵"><input type="text" value="哈哈"><div class="div1">我是div1</div><div class="div2">我是div2</div><div class="div3">我是div3</div><div class="d1-hello">我是hello1</div><div class="d2-hello">我是hello2</div><div class="d3-hello">我是hello3</div>
</body></html>

10. 伪类选择器(pseudo class selector)

伪类:同一个标签,在不同的状态下显示的样式不同,这一类标签,称为伪类
        例如:超链接(未被点击过、已被点击过、鼠标悬停时、鼠标正在点击时)
伪类选择器:选中标签状态的选择器,为标签的状态指定样式。伪类选择器都是以 : 开头

  1. 链接伪类选择器
    :link 选择未被访问的链接
    :visited 选择已被访问的链接
    上述两个选择器仅对于超链接使用,下面两个选择器任何标签都适用
    :hover 选择鼠标“悬停”时
    :active 选择鼠标正在点击时(鼠标点击,不松开时)

  2. 其他伪类选择器
    :first-child 匹配器第一个子元素
    :last-child 匹配最后一个子元素
    :nth-child(n) 匹配第n个子元素

     n的值可以是以下三种方式:1. 数字2. 关键字 odd:奇数,even:偶数3. 公式(an+b) a b是自然数,n从0开始,递增1:first-of-type 匹配同类型的第一个子元素:last-of-type 匹配同类型的最后一个子元素:nth-of-type(n) 匹配同类型的第n个子元素
    

    element:first-child 匹配父元素下的第一个子元素,是则选中,不是则不选中
    element:first-of-type 匹配父元素下所有的子元素中的 第一个 element
    :focus 获取某个标签的焦点时(比如文本框获取焦点)

示例如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Pseudo class selector</title>a:link {color: yellowgreen;}a:visited {color: indianred;}a:hover {background-color: #dce2f1;}a:active {background-color: #c7edcc;font-size: 30px;}div p:last-child {color: red;}div p:nth-child(2n+1) {color: blue;}div p:first-of-type {color: red;}input:focus {background-color: #c7edcc;}
</head><body><a href="#">超链接</a><div><span>我是span</span><p>第1个</p><p>第2个</p><p>第3个</p><p>第4个</p><p>第5个</p></div><input type="text" name="" id="">
</body></html>

        

11. 伪元素选择器(pseudo element selector)

伪元素:在HTML文档中并不真实存在的元素,以两个英文的 :: 开头

  1. 常见的伪元素
    ::before 在元素内部最前面插入一些内容
    ::after 在元素内部最后面插入内容

    ::first-letter 在元素内的第一个字母
    ::first-line 在元素内部的第一行
    ::selection 表示被选中的内容,只有少量属性可以被设置

  2. 注意:

    1. ::before::after中必须包含content属性
    2. 伪元素在文档树中找不到,具体表现为,这个元素可以看见,但不可选中,既然不可选中,那么就不可用JS的DOM对其进行操作

示例如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Pseudo element selector</title>div::before {content: "乐";}div::after {content: "笑哈哈";}p::first-letter {font-size: 30px;}p::first-line {background-color: #c7decc;}p::selection {color: red;background-color: #fde6c0;}
</head><body><div>呵呵</div><p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sed voluptas non eligendi aspernatur, ullam, corruptieveniet repellat minima magni consectetur accusantium laboriosam, eos cum nemo a explicabo rerum asperioresquas! Lorem ipsum dolor sit amet consectetur adipisicing elit. Sunt consequatur at natus sapiente aliquidprovident, adipisci in vero explicabo placeat hic nisi unde cum delectus eaque ratione. Nesciunt, impedit ex?Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quidem nulla, quisquam numquam molestiaelaudantium officia repellendus incidunt assumenda quam aperiam id dignissimos maxime iste tempora ab remperferendis pariatur?</p>
</body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker部署docker管理工具easydockerweb

重要提示 功能比较少,建议体验一下即可 安装 docker run -it -d -p 10041:3000 -e EDW_USERNAMEadmin -e EDW_PASSWORDadmin -v /var/run/docker.sock:/var/run/docker.sock qfdk/easydockerweb 使用 概览 镜像管理 容器管理

vue - 指令(一)

看文章可以得到什么&#xff1f; 1.可以快速的了解并会使用vue的指令 2.可以加深你对vue指令的理解&#xff0c;知道每个指令代表什么功能​​​​​​​ 目录 什么是vue的指令&#xff1f;​​​​​​​ vue常见指令的使用 v-html v-show v-if v-else 和v-else-…

java多线程实现(二)Java并发容器和框架

一、CouncurrentHashMap 二、ConcurrentLinkedQueue 三、java中的阻塞队列 jdk7提供了7个阻塞队列 四、Fork / Join框架

SpringBoot日志插件log4J和slf4J的使用和比较含完整示例

点击下载《SpringBoot日志插件log4J和slf4J的使用和比较含完整示例》 1. 前言 本文主要介绍了在 Spring Boot 框架中如何使用 Log4j 和 Slf4j&#xff0c;并通过对比分析它们的优缺点&#xff0c;帮助读者更好地选择合适的日志记录工具。文章中提供了完整的示例代码&#xff…

Spring Data Envers 数据审计实战

随着各行各业信息化发展&#xff0c;决策者们越来越意识到数据版本追踪的重要性&#xff0c;尤其是上市公司&#xff0c;数据对于他们尤为重要。考虑到研发成本&#xff0c;对重要表单数据支持页面级的修改历史查看、对所有业务数据支持DB级的版本查看是一个不错的选择。 对于…

有奖调查 | @所有人,MatrixOne 有一份问卷邀您填写~

MO社区系统调查问卷 活动时间&#xff1a;即日起至2月17日 前言 PREFACE 在“信创”国产化操作系统的号召下&#xff0c;随着 CentOS 7 的维护周期接近尾声&#xff0c;社区很多小伙伴都在积极调研新的操作系统进行测试和更换。为最大程度的保障 MatrixOne 在社区使用场景下…

设计模式学习笔记(一):基本概念;UML

文章目录 参考面向对象的设计原则创建型模式结构型模式行为型模式 UML视图图&#xff08;Diagram&#xff09;模型元素(Model Element)通用机制类之间的关系关联关系复杂&#xff01;&#xff01;聚合关系组合关系 依赖关系泛化关系接口与实现关系 参考 https://github.com/fa…

2.0 Zookeeper 安装配置

Linux 安装 zookeeper 下载地址为: Apache ZooKeeper。 选择一稳定版本&#xff0c;本教程使用的 release 版本为3.4.14&#xff0c;下载并安装。 打开网址 https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz&#xff0c;看到如下界…

c#cad 创建-圆(二)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是一个AutoCAD插件&#xff0c;用于在模型空间中创建一个圆形。 首先&#xff0c;我们需要定义一个命令类CreateCircleCommand&#xff0c;并在命名空间CreateCircleInCad中声明。 在CreateCircleCommand类中&a…

h5页面内嵌到app,解决ios无法使用左右侧滑返回上一页

背景&#xff1a;vuevant组合开发的h5页面&#xff0c;嵌入多个app,其中安卓手机都可实现侧滑返回上一页&#xff0c;而苹果端不行&#xff0c;app本身不展示title顶部的返回箭头。 解决办法&#xff1a;判断机型&#xff0c;处理ios端监听左右滑动事件&#xff0c;结合transit…

Java中的深拷贝和浅拷贝

在 Java 中&#xff0c;深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是两种不同的对象复制方式&#xff0c;它们在处理对象复制时的行为有所不同。 一、定义 浅拷贝&#xff08;Shallow Copy&#xff09; 浅拷贝是指创建一个新对象…

【技能树学习】Git入门——练习题解析

前言 本篇文章给出了Git入门技能树中部分的练习题解析&#xff0c;包括分支管理&#xff0c;Git标签&#xff0c;在Mac和Windows上使用GitVSCode的步骤。强调了git cherry-pick不直接支持从标签中选择提交&#xff0c;git tag -d只能删除本地标签&#xff0c;Mac系统的终端可以…

23、数据结构/查找相关练习20240205

一、请编程实现哈希表的创建存储数组{12,24,234,234,23,234,23},输入key查找的值&#xff0c;实现查找功能。 代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h> #include<math.h> typedef struct Node {int data;struct n…

flutter使用webview_flutter在安卓和ios上打开网页

webview_flutter仓库地址&#xff1a;webview_flutter | Flutter package github地址&#xff1a;https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter 要打开非https协议的网页&#xff0c;需要在安卓平台上添加权限&#xff1a;andro…

C++ [NOIP2007 提高组] 矩阵取数游戏

有一个n行m列的矩阵&#xff0c;每个格子中有一个正整数。现在要从左上角的格子(1, 1)出发&#xff0c;每次只能向下或向右走一格&#xff0c;最后到达右下角的格子(n, m)。在走过的格子中取数&#xff0c;求取得的数的和的最大值。 输入&#xff1a; 第一行包含两个整数n和m&a…

若依整合mybatis-plus

文章目录 1.注释掉原本的MybatisConfig2. 将mybatis的配置文件改为mybatis-plus文件 ##前言 出先下列异常&#xff1a; 请求地址’/prod-api/user’,发生未知异常. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ruoyi.web.mapper.Us…

HP数组面试题

PHP数组面试题 问题&#xff1a; 如何创建一个空数组和一个带有初始值的数组&#xff1f; 答案&#xff1a; 创建空数组&#xff1a;可以使用array()函数或空数组语法[]来创建一个空数组&#xff0c;例如$arr array();或$arr [];。创建带有初始值的数组&#xff1a;可以在创建…

C# BackgroundWorker的使用

C# 中的 BackgroundWorker 类是 .NET Framework 提供的一个组件&#xff0c;用于在后台线程上异步执行长时间运行的操作&#xff0c;同时保持与用户界面&#xff08;UI&#xff09;的交互&#xff0c;如更新进度信息或处理取消请求。这使得可以轻松地在不冻结UI的情况下执行耗时…

003集—三调数据库添加三大类字段——arcgis

在国土管理日常统计工作中经常需要用到三大类数据&#xff08;农用地、建设用地、未利用地&#xff09;&#xff0c;而三调数据库中无三大类字段&#xff0c;因此需要手工录入三大类字段&#xff0c;并根据二级地类代码录入相关三大类名称。本代码可一键录入海量三大类名称统计…

什么是Java中的垃圾回收器,你能解释一下不同种类的垃圾回收算法吗?

什么是Java中的垃圾回收器&#xff0c;你能解释一下不同种类的垃圾回收算法吗&#xff1f; 在Java中&#xff0c;垃圾回收器是一种负责自动管理内存的机制&#xff0c;它负责检测和回收不再使用的对象&#xff0c;释放它们占用的内存空间。垃圾回收器的存在大大简化了程序员对…