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

news2024/11/18 22:27:44

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, corrupti
		eveniet repellat minima magni consectetur accusantium laboriosam, eos cum nemo a explicabo rerum asperiores
		quas! Lorem ipsum dolor sit amet consectetur adipisicing elit. Sunt consequatur at natus sapiente aliquid
		provident, 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 molestiae
		laudantium officia repellendus incidunt assumenda quam aperiam id dignissimos maxime iste tempora ab rem
		perferendis pariatur?</p>
</body>

</html>

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

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

相关文章

【DDD】学习笔记-数据模型与对象模型

在建立数据设计模型时&#xff0c;我们需要注意表设计与类设计之间的差别&#xff0c;这事实上是数据模型与对象模型之间的差别。 数据模型与对象模型 我们首先来分析在设计时对冗余的考虑。前面在讲解数据分析模型时就提及&#xff0c;在确定数据项模型时&#xff0c;需要遵…

Go语言每日一练——链表篇(五)

传送门 牛客面试笔试必刷101题 ----------------合并k个已排序的链表 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的合并链表题目类似&#xff0c;但是由于有K个且时间复杂度要求控制在O(nlogn)&#xff0c;这里主要有两种解法&#xff1a;一种是依旧使用归并来…

7.0 Zookeeper 客户端基础命令使用

zookeeper 命令用于在 zookeeper 服务上执行操作。 首先执行命令&#xff0c;打开新的 session 会话&#xff0c;进入终端。 $ sh zkCli.sh 下面开始讲解基本常用命令使用&#xff0c;其中 acl 权限内容在后面章节详细阐述。 ls 命令 ls 命令用于查看某个路径下目录列表。…

函数的连续与间断【高数笔记】

【连续】 分类&#xff0c;分几个&#xff1f;每类特点&#xff1f; 连续条件&#xff0c;是同时满足还是只需其一&#xff1f; 【间断】 分类&#xff0c;分几个大类&#xff0c;又分几个小类&#xff1f;每类特点&#xff1f; 间断条件&#xff0c;是同时满足还是只需其一&am…

PAT-Apat甲级题1008(python和c++实现)

PTA | 1008 Elevator 1008 Elevator 作者 CHEN, Yue 单位 浙江大学 The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified order. It …

【C/C++ 17】继承

目录 一、继承的概念 二、基类和派生类对象赋值转换 三、继承的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员变量 七、菱形继承与虚拟继承 一、继承的概念 继承是指一个类可以通过继承获得另一个类的属性和方法&#xff0c;扩展自己的功能&…

二、SSM 整合配置实战

本章概要 依赖整合和添加控制层配置编写(SpringMVC 整合)业务配置编写(AOP/TX 整合)持久层配置编写(MyBatis 整合)容器初始化配置类整合测试 2.1 依赖整合和添加 数据库准备 数据库脚本 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT…

MQ,RabbitMQ,SpringAMQP的原理与实操

MQ 同步通信 异步通信 事件驱动优势&#xff1a; 服务解耦 性能提升&#xff0c;吞吐量提高 服务没有强依赖&#xff0c;不担心级联失败问题 流量消峰 ​ 小结: 大多情况对时效性要求较高&#xff0c;所有大多数时间用同步。而如果不需要对方的结果&#xff0c;且吞吐…

2024美赛数学建模E题:房产保险的可持续性,思路全解,代码模型分析

2024美赛数学建模E题思路全解&#xff0c;代码模型分析,完整详细内容见文末名片 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 保险公司应该在承保保单时考虑多种因素&#xff0c;以确保公司的长期健康和稳定性。以下是一个可能的模式&#xff0c;以确…

C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现

前言 我们开发的tcp客户端程序在连接服务器以后,经常会遇到服务器已经关闭但是作为客户端的我们不知道,这时候应该应该有一个机制我们可以实时监测客户端和服务器已经断开连接,如果已经断开了连接,我们应该及时报警提示用户客户端和服务器已经断开连接,本文介绍三种可以监…

力扣面试题 05.03. 翻转数位(前、后缀和)

Problem: 面试题 05.03. 翻转数位 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.将十进制数转换为二进制数&#xff08;每次按位与1求与&#xff0c;并且右移&#xff09;&#xff1b; 2.依次求取二进制数中每一位的前缀1的数量和&#xff0c;和后缀1的数量和…

zabbix配置主动监控

1.准备一台新的主机&#xff0c;安装相关软件包。 [rootsishi ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm [rootsishi ~]# yum -y install zabbix-agent2.修改zabbix-agent端的配置文件 [rootsishi ~]# vim /etc/z…

【并发编程】原子累加器

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳重求进&#xff0c;晒太阳 JDK8之后有专门做累加的类&#xff0c;效率比自己做快数倍以上 累加器性能比较 参数是方法 // supplier 提供者 无中生有 ()->结果// func…

3.0 Zookeeper linux 服务端集群搭建步骤

本章节将示范三台 zookeeper 服务端集群搭建步骤。 所需准备工作&#xff0c;创建三台虚拟机环境并安装好 java 开发工具包 JDK&#xff0c;可以使用 VM 或者 vagrantvirtualbox 搭建 centos/ubuntu 环境&#xff0c;本案例基于宿主机 windows10 系统同时使用 vagrantvirtualb…

负重20kg复合翼垂直起降无人机应用,复合翼无人机技术分析

主要任务应用 1.管线巡查 挂载可见光/红外二合一光电载荷和小型SAR设备&#xff0c;对既定线路进行昼夜巡视侦察&#xff0c;利用图像实时传回指挥控制中心&#xff0c;可用于石油管路、电力线路、舰艇航线及周围态势感知&#xff0c;利于依据现场实情进行战略决策和指令传达…

文心一言 VS 讯飞星火 VS chatgpt (195)-- 算法导论14.3 3题

三、用go语言&#xff0c;请给出一个有效的算法&#xff0c;对一个给定的区间i&#xff0c;返回一个与i重叠且具有最小低端点的区间;或者当这样的区间不存在时返回T.nil。 文心一言&#xff0c;去掉math&#xff0c;代码正常运行&#xff1a; 在Go语言中&#xff0c;你可以使…

栈--数据结构

初始化栈、入栈、出栈 栈&#xff1a;只允许在一端进行插入或删除操作的线性表 栈顶&#xff08;Top&#xff09; 代码实战步骤依次是初始化栈&#xff0c;判断栈是否为空&#xff0c;压栈&#xff0c;获取栈顶元素&#xff0c;弹栈。 代码 #include <stdio.h>#define …

Linux系统c/c++开发环境配置

安装LLVM全家桶及CMAKE 输入以下命令&#xff0c;安装clang&#xff0c;clangd&#xff0c;lldb及cmake。 sudo apt install clang clangd lldb cmake yukeyangDESKTOP-QFK2F47:~/myfiles/test$ sudo apt install clang clangd lldb cmake [sudo] password for yukeyang: Re…

re:从0开始的CSS学习之路 1. CSS语法规则

0. 写在前面 现在大模型卷的飞起&#xff0c;感觉做页面的活可能以后就不需要人来做了&#xff0c;不知道现在还有没有学前端的必要。。。 1. HTML和CSS结合的三种方式 在HTML中&#xff0c;我们强调HTML并不关心显示样式&#xff0c;样式是CSS的工作&#xff0c;现在就轮到C…

如何在Linux中安装新版的Python软件

一、引言 Python是目前世界上最为流行的编程语言&#xff0c;其在人工智能领域表现尤为出色。通常&#xff0c;我们为了测试github上面的一些项目&#xff0c;比如&#xff1a;chat-on-wechat&#xff0c; 我们就可以在vps上的Linux系统中安装Python&#xff0c;从而实现各种人…