前端 CSS 样式书写与选择器 基础知识

1.CSS介绍

CSS是Cascading Style Sheet的缩写,中文意思为"层叠样式表",它是网页的装饰者,用来修饰各标签 排版(大小、边距、背景、位置等)、改变字体的样式(字体大小、字体颜色、对齐方式等)。

2.CSS书写位置

2.1 样式表特征

  •    层叠性:多组不同的css样式可以共同作用于同一个元素
  •    继承性:有些css样式会自动从父元素传给子元素  大部分文字样式属性都会被继承
  •    优先级: 显示哪个样式,浏览器默认样式和继承下来的样式优先级最低

2.2 行内样式

借助了所有标签都有的属性style,为当前的元素添加样式声明。

<标签名 style="样式声明">

CSS样式声明: 由CSS属性和值组成

  • CSS属性:希望给HTML标签设置的样式名字
  • 值:使用值来控制某个属性显示的效果
style="css属性名:值;css属性名:值;"
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 书写位置:1.行内样式/内联样式:通过style属性直接写在标签中语法:<标签名 style="样式声明">  样式声明:css属性和属性值组成--><p style="font-weight: bold;">学习前端</p><p style="color: red;">学习CSS</p></body>
</html>

 运行结果:

2.3 内嵌样式

借助于style标签,在HTML文档中嵌入 CSS 样式代码,可以实现 CSS 样式与HTML标签之间的分离。同时需借助于CSS选择器到HTML中匹配元素并应用样式。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* css代码 */p{color: green;} div{font-size: 40px;}</style>
</head>
<body><!-- 2.内嵌样式/内部样式:通过style标签来写,style标签放在head标签中语法:<style>选择器{css属性名:值;css属性名2:值;}</style>选择器:选择元素(标签) --><p>学习前端</p><p>学习CSS</p><div>666</div></body>
</html>

 运行结果:

2.4 外链样式表

创建外部样式表文件 后缀使用 .css ,在HTML文件中使用<link> 标签引入外部样式表 

<!-- rel:引入文件资源类型    href:引入文件资源的路径  --><link rel="stylesheet" href="外部样式表的地址">

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="./outpre.css"> </head>
<body><!-- 书写位置:3.外部样式:新建一个样式文件(后缀名为.css)引入样式文件:link标签(写在head标签中)rel:文件的类型href:css文件的路径(相对路径,和img标签中的相对路径同理)--><p>学习前端</p><p>学习CSS</p><div>666</div>
</body>
</html>

运行结果:

3.CSS简单选择器

3.1 标签选择器 

一个完整的HTML文档由各式各样的标签组成,而标签选择器可以通过具体的标签名称来匹配文档内所有同名的标签。


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>p{color: aqua;}div{color: red;}</style>
</head>
<body><!-- css选择器:用了查找元素简单选择器:1.标签选择器:通过标签名找到某个元素  可以选中页面中的所有这个标签名的元素语法:标签名{属性:值} --><p>p标签</p><div>容器标签</div></body>
</html>

运行结果:

3.2 类选择器

 类选择器可以根据标签的 class 属性,找到具体的HTML标签。类选择器的定义需要用到一个英文的句号‘.’,后面紧跟 class 属性的值。

命名规范:

  • 类名应该反映元素的用途或内容,而不仅仅是样式。这有助于提高代码的可读性。
  • 推荐使用连字符而不是驼峰命名法来分隔单词,因为连字符在HTML和CSS中更为普遍。
  • 类名不应以数字开头。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.text-box {font-size: 20px; /* 设置字体大小 */}.text-red {color: red; /* 设置文本颜色为红色 */}.text-green {color: green; /* 设置文本颜色为绿色 */}</style></head>
<body>
<!-- css选择器:用了查找元素2.class选择器(类选择):通过类名找到具体某个标签语法:.类名{属性:值}类名可以不唯一(可以重复),允许不同的标签,使用相同的类名一个元素可以有多个类名,类名之间空格隔开--><div class="text-red">红色</div><div class="text-green">绿色</div><div class="text-box text-red">红色</div>
</body>
</html>

运行结果:

3.3 ID选择器

ID选择器用来找到HTML文档中具有指定ID属性的标签,ID选择器的定义需要用到井号#,后面紧跟ID 属性的值。ID选择器的使用方式和类选择器的使用方式是非常像,但是ID选择器的主要作用是结合js用 于确定页面上的唯一元素。单个标签不允许拥有多个id名,同页面中不存出现重复的id名(id重名会影响 js代码获取标签)。并不是主要用来设置css的。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>#qq2{color: purple;font-size: 30px;}</style>
</head>
<body><!-- css选择器:用了查找元素3.id选择器:通过类名精准找到某个标签,主要用来结合js确定页面的唯一元素语法:.类名{语法:#id名{属性:值}id名具有唯一性(不能重复),会影响js获取代码--><div id="qq2">带有id的容器标签</div><div>容器标签</div>
</body>
</html>

3.4 通配符选择器 

通配符选择器用星号*表示,它不匹配某个特定的HTML元素,而是匹配 HTML文档中的每个元素。我 们通常使用通用选择器来清除HTML元素中默认的内外边距。通配符选择器在开发中不会使用,一般我们页面的标签的样式不会长的都完全一样。在平常的练习去除 标签默认的 margin 和 padding 。

<style>* {margin: 0;padding: 0;}
</style>

4.CSS复杂选择器

两个或两个以上的选择器配合使用

4.1 交集选择器

  • 找到页面中既能被选择器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><style>p.one{color: red;}</style>
</head>
<body><!-- 复杂选择器1.组合选择器(交集选择器):两个或者两个以上的选择器配合使用,两个选择器之间紧密相连语法:选择器1选择器2{}例如:p.one{}需求:只要学习两个字改变颜色,但是不添加任何东西注意:标签选择器和类选择器一起使用的时候,标签在前,类在后 --><p class="one">学习</p><div><span class="one">认真学习</span><p>认真学习前端</p></div>
</body>
</html>

运行结果:

4.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><style>#one p {color: orange;}
</head>
<body><!-- 2.后代选择器:选择所有后代,选择器之间空格隔开语法:选择器1 选择器2{属性:值;
}找到选择器1的所有后代(直接后代,间接后代),在这些后代中找到满足选择器2的标签 --><div id="one"><p>111</p><p>333<span>222</span></p><div><p>666</p></div><span>444</span></div><div id="two">555</div>
</body></html>

运行结果:

4.3 子代选择器

在选择器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><style>     #one>p {color: green;} </style>
</head><body><!-- 3.子代选择器:选择所有直接后代,选择器之间>隔开语法:选择器1>选择器2{属性:值;
}找到选择器1的所有直接后代,在这些后代中找到满足选择器2的标签 --><div id="one"><p>111</p><p>333<span>222</span></p><div><p>666</p></div><span>444</span></div><div id="two">555</div></body></html>

运行结果:

222 虽然不属于子代,但由于继承性仍会变色

4.4 相邻兄弟选择器

相邻兄弟选择器用于匹配某个元素之后紧邻的另一个元素,这两个元素拥有同一个父级元素并且不 存在嵌套关系。相邻兄弟选择器的定义需要用到加号+,加号两边为相邻的两个元素,选择器会 匹配加号后面的元素

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>    .three+p {color: green;}.four+p {color: red;}</head>
<body><!-- 4.相邻兄弟选择器:匹配某个元素后面紧邻的元素,这两个元素拥有同一个父级并且不存在嵌套关系语法:选择器1+选择器2{属性:值;
} --><div id="one"><p class="three">111</p><p>222</p><p>555</p><p class="four">333</p><p>666<span>444</span></p></div></body></html>

运行结果:

4.5 通用兄弟选择器

通用兄弟选择器同样会匹配同一父级元素下的兄弟元素,但兄弟元素之间无需紧邻。定义通用兄弟 选择器需要用到波浪号~,波浪号两边为同一父级元素下的两个元素,选择器会匹配波浪号后面 的元素

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.two~p {color: blue;margin: 0;}</style>
</head>
<body><!-- 5.通用(所有)兄弟选择器:匹配某个元素后面的所有兄弟,兄弟不需要紧邻,这些元素拥有同一个父级并且不存在嵌套关系语法:选择器1~选择器2{属性:值;
} --><div id="one"><p>111</p><p class="two">222</p><div>333</div><p>444<span>555</span></p><span>666</span><p>777</p><div><p>888</p></div></div></body>
</html>

运行结果:

4.6 分组选择器

  • 结构: 选择器1,选择器2 {css属性名:属性值;}
  • 同时选择多组标签,设置相同的样式
  • 并集选择器中的每组选择器之间通过 , 分隔
  • 选择器中的每组选择器通常一行写一个,提高代码的可读性
  <style>p,h1,h2,h3,div,span {padding: 0;margin: 0;}</style>

5.层叠性与优先级

层叠性:所谓的层叠即叠加的意思,表示样式可以一层一层的层叠覆盖。多个选择器给同一个标签设置 不同的样式,会共同作用在标签上。

优先级:如果同一个标签被多个选择器赋予了相同的属性且值不一样时,会按照选择器的优先级来决定 以哪个样式为准

  • !important > 行内 > id选择器 > 类选择器 > 标签 > 继承
  • 先比较级别,级别一样比较各级别选择器出现的次数
  • 当两个选择器权重一样时,以最后出现的为准
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>#red{color: red;}p{color: green !important;font-size: 20px ;}.blue{color: blue;}</style>
</head>
<body><!-- 选择器优先级:页面通过选择器查找元素时的速度来决定的,速度越快,优先级越高,以权重来表示各类选择器的权重大小:通配符:0标签:1类:10id:100行内:1000!important:10000选择器权重越大,优先级越高复杂选择器,选择器权重是所有选择器权重之和并集选择器以每个选择器单独的权重为准,不进行相加强制提升优先级  !important写在分号里面,和样式属性之间空格隔开!important > 行内 > id选择器 > 类选择器 > 标签  > 继承--><p id="red" class="blue" style="color: purple; font-size: 40px ;">我爱中国</p><div id="red" class="blue" style="color: purple; font-size: 20px;">I love china</div>
</body>
</html>

运行结果:

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

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

相关文章

鸿蒙 从打开一个新窗口到Stage模型的UIAbility组件

打开一个新的窗口 我们首先来实现如何在一个应用中打开一个新窗口&#xff0c;使用的模型是 Stage 模型 在项目文件里&#xff0c;新建一个 newWindow.ets 新文件 src/main/ets/pages/newWindow.ets newWindow.ets文件里面随便写点什么都行&#xff0c;这里是第一步创建的文件…

Linux的日志管理

日志管理服务rsyslogd 配置文件 | 日志类型 | 说明 | | -------------------- | ----------------------------------- | | auth | pam产生的日志 | | authpriv | ssh、ftp等…

【PhysUnits】4.1 类型级比特位实现解释(boolean.rs)

一、源码 该代码实现了一个类型级(type-level)的布尔系统&#xff0c;允许在编译时进行布尔运算。 //! 类型级比特位实现 //! //! 这些是基础的比特位类型&#xff0c;作为本库中其他数值类型的构建基础 //! //! 已实现的**类型运算符**&#xff1a; //! //! - 来自 core::op…

【docker】--数据卷挂载

文章目录 存储卷管理创建存储卷查看存储卷详细信息查看存储卷删除存储卷 存储卷管理 # 目录挂载 docker run -v 本机目录&#xff1a;容器目录#1&#xff09; # 将容器内部的 “/usr/share/nginx/html” 进行持久化挂载 会在宿主机生成一个随机的存储卷 docker run -v /usr/sh…

双重差分模型学习笔记2(理论)

【DID最全总结】90分钟带你速通双重差分&#xff01;_哔哩哔哩_bilibili 目录 一、staggered DID 交错双重差分 二、动态双重差分 动态双重差分法公式解释 符号解释 公式逻辑与案例 与标准DID的区别 总结 “双减” 政策动态差分模型 &#xff08;一&#xff09;设定处…

预测模型开发与评估:基于机器学习的数据分析实践

在当今数据驱动的时代&#xff0c;预测模型已成为各行各业决策制定的核心工具。本文将分享我在COMP5310课程项目中开发预测模型的经验&#xff0c;探讨从数据清洗到模型优化的完整过程&#xff0c;并提供详细的技术实现代码。 ## 研究问题与数据集 ### 研究问题 我们的研究聚焦…

Java 并发编程归纳总结(可重入锁 | JMM | synchronized 实现原理)

1、锁的可重入 一个不可重入的锁&#xff0c;抢占该锁的方法递归调用自己&#xff0c;或者两个持有该锁的方法之间发生调用&#xff0c;都会发生死锁。以之前实现的显式独占锁为例&#xff0c;在递归调用时会发生死锁&#xff1a; public class MyLock implements Lock {/* 仅…

数据治理域——数据同步设计

摘要 本文主要介绍了数据同步的多种方式&#xff0c;包括直连同步、数据文件同步和数据库日志解析同步。每种方式都有其适用场景、技术特点、优缺点以及适用的数据类型和实时性要求。文章还详细探讨了数据直连同步的特点、工作原理、优点、缺点、适用场景等&#xff0c;并对数…

AI人工智能在教育领域的应用

AI人工智能在教育领域的应用 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;逐渐成为推动教育变革的重要力量。AI在教育领域的应用不仅改变了传统的教学模式&#xff0c;还为个性化学习、教育资源优化和教育管理带来了前所未有的机遇。本文将从多个方面探…

ohttps开启群晖ssl证书自动更新

开启群晖ssl证书自动更新OHTTPS ohttps是一个免费自动签发ssl证书、管理、部署的项目。 https://ohttps.com 本文举例以ohttps项目自动部署、更新群晖的ssl证书。 部署 签发证书 打开ohttps-证书管理-创建证书-按你实际情况创建证书。创建部署节点 打开Ohttps-部署节点-添加…

ElasticSearch聚合操作案例

1、根据color分组统计销售数量 只执行聚合分组&#xff0c;不做复杂的聚合统计。在ES中最基础的聚合为terms&#xff0c;相当于 SQL中的count。 在ES中默认为分组数据做排序&#xff0c;使用的是doc_count数据执行降序排列。可以使用 _key元数据&#xff0c;根据分组后的字段数…

SQLite 数据库常见问题及解决方法

一、数据库文件锁定问题 1. 问题表现 在多线程或多进程环境下访问 SQLite 数据库时&#xff0c;常常会出现数据库文件被锁定的情况。当一个进程对数据库执行写操作时&#xff0c;其他进程的读写操作都会被阻塞&#xff0c;导致应用程序出现卡顿甚至无响应。比如在移动应用开发…

DeepSeek基础:PPO、DPO、GRPO概念详解

DeepSeek-R1 的强化学习方案中&#xff0c;其亮点之一在于通过 GRPO 算法取代RLHF 常用的 PPO&#xff0c;通过尽可能减少人类标注数据&#xff0c;设计纯 RL 的环境&#xff0c;用精心设计的奖励机制来训练模型自己学会推理。那么什么是PPO、GRPO&#xff0c;其产生的背景、核…

一分钟了解机器学习

一分钟了解机器学习 A Minute to Know About Machine Learning By JacksonML 1. 什么是机器学习&#xff1f; 机器学习&#xff08;Machine Learning,ML&#xff09; 是人工智能的分支&#xff0c;通过从数据中自动学习规律&#xff0c;使计算机无需显式编程即可完成任务。…

mvc-service引入

什么是业务层 1&#xff09;Model1&#xff08;JSP&#xff09;和Model2&#xff08;模糊的mvc&#xff09;: MVC&#xff1a;Model(模型)&#xff0c;View(视图)&#xff0c;Controller&#xff08;控制器&#xff09; 视图层&#xff1a;用于数据展示以及用户交互的界…

第一次做逆向

题目来源&#xff1a;ctf.show 1、下载附件&#xff0c;发现一个exe和一个txt文件 看看病毒加没加壳&#xff0c;发现没加那就直接放IDA 放到IDA找到main主函数&#xff0c;按F5反编译工具就把他还原成类似C语言的代码 然后我们看逻辑&#xff0c;将flag.txt文件的内容进行加…

docker(四)使用篇二:docker 镜像

在上一章中&#xff0c;我们介绍了 docker 镜像仓库&#xff0c;本文就来介绍 docker 镜像。 一、什么是镜像 docker 镜像本质上是一个 read-only 只读文件&#xff0c; 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。 我们可以把…

k8s 1.10.26 一次containerd失败引发kubectl不可用问题

k8s 1.10.26 一次containerd失败引发kubectl不可用问题 开机k8s 1.10.26时&#xff0c;报以下错误 [rootmaster ~]# kubectl get no E0515 08:03:00.914894 7993 memcache.go:265] couldnt get current server API group list: Get "https://192.168.80.50:6443/api?…

今日积累:若依框架配置QQ邮箱,来发邮件,注册账号使用

QQ邮箱SMTP服务器设置 首先&#xff0c;我们需要了解QQ邮箱的SMTP服务器地址。对于QQ邮箱&#xff0c;SMTP服务器地址通常是smtp.qq.com。这个地址适用于所有使用QQ邮箱发送邮件的客户端。 QQ邮箱SMTP端口设置 QQ邮箱提供了两种加密方式&#xff1a;SSL和STARTTLS。根据您选…

无缝部署您的应用程序:将 Jenkins Pipelines 与 ArgoCD 集成

在 DevOps 领域&#xff0c;自动化是主要目标之一。这包括自动化软件部署方式。与其依赖某人在部署软件的机器上进行 rsync/FTP/编写软件&#xff0c;不如使用 CI/CD 的概念。 CI&#xff0c;即持续集成&#xff0c;是通过代码提交创建工件的步骤。这可以是 Docker 镜像&#…