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, 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.mfbz.cn/a/373302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CISCRISC? CPU架构有哪些? x86 ARM?

编者按&#xff1a;鉴于笔者水平有限&#xff0c;文中难免有不当之处&#xff0c;还请各位读者海涵。 是为序 我猜&#xff0c;常年混迹CSDN的同学应该不会没听说过CPU吧&#xff1f; 但你真的了解CPU吗&#xff1f;那笔者问你CPU有哪些架构呢&#xff1f; 如果你对你的答案…

忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际

RAG&#xff08;检索增强生成&#xff09;设计模式通常用于开发特定数据领域的基于实际情况的ChatGPT。 然而&#xff0c;重点主要是改进检索工具的效率&#xff0c;如嵌入式搜索、混合搜索和微调嵌入&#xff0c;而不是智能搜索。 这篇文章介绍了一种新的方法&#xff0c;灵感…

使用代理IP有风险吗?如何安全使用代理IP?

代理IP用途无处不在。它们允许您隐藏真实IP地址&#xff0c;从而实现匿名性和隐私保护。这对于保护个人信息、绕过地理受限的内容或访问特定网站都至关重要。 然而&#xff0c;正如任何技术工具一样&#xff0c;代理IP地址也伴随着潜在的风险和威胁。不法分子可能会滥用代理IP…

编程实例分享,麻将馆计时方法计费系统,棋牌室计时计费管理系统软件试用版教程

编程实例分享&#xff0c;麻将馆计时方法计费系统&#xff0c;棋牌室计时计费管理系统软件试用版教程 一、前言 以下教程以 佳易王棋牌计时计费管理系统软件V17.9为例说明 1、恢复上次状态&#xff1a;在突然停电或非正常关机情况下&#xff0c;再次打开软件&#xff0c;可以…

汽车零部件MES系统解决方案

汽车零部件行业现状 随着全球汽车产业不断升级&#xff0c;汽车零部件市场竞争日趋激烈&#xff0c;从上游的钢铁、塑料、橡胶等生产到下游的主机厂配套制造&#xff0c;均已成为全球各国汽车制造大佬战略目标调整的焦点&#xff0c;其意欲在汽车零部件行业快速开疆扩土&#x…

YOLOv5改进 | 细节涨点篇 | DySample一种超级轻量的动态上采样算子(效果完爆CARAFE)

一、 本文介绍 本文给大家带来的改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外…

【漏洞复现】EPON上行A8-C政企网关未授权下载漏洞

Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品&#xff0c;提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关配置文件未授权下载漏洞&#xff0c;攻击者在未授权状态下下载配置文件&#xff0c;获取配置文件内敏感信息。 Nx03 产品主页 fofa-query: "Z…

架构整洁之道-软件架构-测试边界、整洁的嵌入式架构、实现细节

6 软件架构 6.14 测试边界 和程序代码一样&#xff0c;测试代码也是系统的一部分。甚至&#xff0c;测试代码有时在系统架构中的地位还要比其他部分更独特一些。 测试也是一种系统组件。 从架构的角度来讲&#xff0c;所有的测试都是一样的。不论它们是小型的TDD测试&#xff…

docker-学习-5

docker-学习第五天 docker-学习第五天1. 昨天的练习回顾1.1. 练习11.2. 练习2 2. 命令2.1. 看镜像的详细信息 3. Dockerfile指令3.1. 常见的指令3.2. ENTRYPOINT和CMD的区别3.3. RUN中的set指令 4. 镜像的原理4.1. 为什么 Docker 镜像要采用这种分层结构呢&#xff1f;4.2. doc…

mysql8通过binlog恢复数据

参考资料: 通过binlog恢复误update的数据(一)_binlog 恢复update-CSDN博客 记录一次工作中的误删除&#xff0c;使用binlog恢复数据的问题。 1&#xff1a;找到mysql8的binlog文件。 2&#xff1a;把binlog文件转换为初始sql文件 mysqlbinlog -vv --base64-outputdecode-row…

PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle

目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快&#xff1f; Spar…

Akamai 如何揪出微软 RPC 服务中的漏洞

近日&#xff0c;Akamai研究人员在微软Windows RPC服务中发现了两个重要漏洞&#xff1a;严重程度分值为4.3的CVE-2022-38034&#xff0c;以及分值为8.8的CVE-2022-38045。这些漏洞可以利用设计上的瑕疵&#xff0c;通过缓存机制绕过MS-RPC安全回调。我们已经确认&#xff0c;所…

Golang 学习(一)基础知识

面向对象 Golang 也支持面向对象编程(OOP)&#xff0c;但是和传统的面向对象编程有区别&#xff0c;并不是纯粹的面向对象语言。 Golang 没有类(class)&#xff0c;Go 语言的结构体(struct)和其它编程语言的类(class)有同等的地位&#xff0c;Golang 是基于 struct 来实现 OOP…

爬虫工作量由小到大的思维转变---<第四十四章 Scrapyd 用gerapy管理多台机器爬虫>

前言: 之前讲过关于如何在gerapy中部署本地爬虫, 爬虫工作量由小到大的思维转变---&#xff1c;第三十四章 Scrapy 的部署scrapydGerapy&#xff1e;_gerapy如何登录-CSDN博客 爬虫工作量由小到大的思维转变---&#xff1c;第三十五章 Scrapy 的scrapydGerapy 部署爬虫项目&…

云计算市场分析

目录 一、云计算市场概述 1.1 概述 二、国外云计算厂商 2.1 亚马逊AWS 2.2 微软AzureAzure 2.3 Apple iCloud 三、国内云计算厂商 3.1 阿里云 3.2 腾讯云 3.3 华为云 3.4 百度智能云 一、云计算市场概述 1.1 概述 云计算从出现以来&#xff0c;其发展就非常迅速。以…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之QRCode组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之QRCode组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、QRCode组件 用于显示单个二维码的组件。 子组件 无。 接口 QRCode(value: st…

深入实战:ElasticSearch的Rest API与迭代器模式在高效查询中的应用

在我们公司&#xff0c;大多数Java开发工程师在项目中都有使用Elasticsearch的经验。通常&#xff0c;他们会通过引入第三方工具包或使用Elasticsearch Client等方式来进行数据查询。然而&#xff0c;当涉及到基于Elasticsearch Rest API的/_sql?formatjson接口时&#xff0c;…

【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总

【NLP概念合集&#xff1a;一】预训练 Pre-Training&#xff0c;微调 Fine-Tuning 及其方法的概念区别 前言请看此正文预训练 Pre-Training无监督学习 unsupervised learning概念&#xff1a;标签PCA 主成分分析&#xff08;Principal Component Analysis&#xff09;降维算法L…

基于SSM的协同过滤技术的网上书城(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的协同过滤技术的网上书城&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Sp…

ElasticSearch查询语句用法

查询用法包括&#xff1a;match、match_phrase、multi_match、query_string、term 1.match 1.1 不同字段权重 如果需要为不同字段设置不同权重&#xff0c;可以考虑使用bool查询的should子句来组合多个match查询&#xff0c;并为每个match查询设置不同的权重 {"query&…
最新文章