引入 css 的方式 ⇧
三种引入方式
- 行内样式 在元素上添加属性
style - 页面级样式 使用
style标签 - 外部
css文件 使用link标签
行内样式表:行内样式 ⇧
|
|
- 直接写
css属性 - 无需
css选择器
内部样式表:页面级样式 <style> 元素中 ⇧
|
|
style标签 属性type="text/css"- 一般放在
head元素中,先于body内容加载,防止页面闪烁
外部样式表:外部css文件 使用<link> 元素 ⇧
- 使用单独文件
xxx.css - 使用
link标签引入 一般放在
head元素中,先于body内容加载,防止页面闪烁1 2 3 4 5 6 7<head> <link rel="stylesheet" type="text/css" href="xxx.css"> </head> <body> <div></div> </body>
优点
- 外部样式可以解决多页面样式重复的问题
- 有利于浏览器缓存,从而提高页面响应速度
- 有利于代码分离(HTML和C5S),更容易阅读和维护
css资源文件 ⇧
- 服务器上
192.168.xxx.xxx:xxxx/xxx.css - 开启新线程下载该
css文件,同时不阻塞原html下载线程- 异步加载,同时下载另一个文件
CSS基本语法一:样式语法 ⇧
CSS规则 = 选择器 + 声明块
|
|
selectors-list ::= selector[:pseudo-class] [::pseudo-element] [, selectors-list]
properties-list ::= [property : value] [; properties-list]
eg.
|
|
基本语法注意事项 ⇧
所有符号都是英文符号,IDE只开英语输入,中文从记事本里粘贴进来(开不同应用不同输入法:both Win & Mac);标点写错,浏览器会警告,但不报错 > 有可能犯错的地方终究会错——墨菲定律
区分大小写,a 和 A 不同
没有//注释,只是把选择器拼错不生效而已
最后一个分号建议不要省略
任何地方写错了,都不报错,浏览器会直接忽略,继续渲染,只给警告⚠️
怎么纠错?调试看下文
注意,规则定义中的任何CSS语法错误都将使整个规则无效。无效的规则将被浏览器忽略。
注意CSS定义完全是基于文本(ASCII)的。
eg.
|
|
行内元素标签换行间距问题
|
|
<span>元素间为保持代码格式而换行,页面显示时会多处一个空格- 可以在父元素统一加上
font-size: 0;,在子元素中添加font-size: 12px;处理
样式选择器 ⇧
选择器:帮助你精准地选中想要的元素 基本选择器:
- ID 选择器
- 类选择器
- 属性选择器
- 类型选择器 (元素/标签选择器)
- 通用选择器(通配符 选择器)
id 选择器 ⇧
|
|
- 需要确保
id唯一对应一个标签 - 如果重复,后面的会覆盖掉前面的
类型选择器 Type selectors (元素/标签选择器) ⇧
|
|
- 会匹配所有该标签
一般用来初始化浏览器中默认样式
reset.css1 2 3 4 5 6 7 8 9a { text-decoration: none; } ul { list-style: none; padding: 0; margin: 0; }
类型选择器 (class 类选择器) ⇧
|
|
属性选择器 ⇧
根据属性名和属性值选中元素
|
|
参考
通配符 选择器 ⇧
选中所有元素
|
|
- 通用选择器(*)、组合符(+、>、~、’ ‘)和调整优先级的选择器(:where())不会影响优先级。
一般用来初始化浏览器中默认样式
reset.css1 2 3 4 5* { box-sizing: border-box; padding: 0; margin: 0; }
伪选择器(Pseudo) ⇧
包括 伪类选择器 和 伪元素选择器
伪类 ⇧
选中某些元素的某种状态,先介绍几种常用的
|
|
- 在浏览器开发者工具中,打开
:hov状态,查看
伪类一般书写顺序,保证符合用户直觉的样式
linkvisitedhoveractive
子伪类选择器 ⇧
:first-child选中第一个子元素(当前范围内的第一个子元素)a:first-child当前范围内的第一个子元素,并且为a标签的元素a > :first-child表示a标签内的第一个子元素
:first-of-type表示一组兄弟元素中其类型(比如标签名)的第一个元素a:first-of-type当前范围内的第一个a元素
:last-child:last-of-type:nth-child()选中指定的第几个子元素:nth-child(n):nth-child(-n):nth-child(2n):nth-child(n + 1):nth-child(odd):nth-child(even)p:nth-child(n+8):nth-child(-n+15)表示兄弟元素列表中的第 8 到第 15 个,且为元素的元素
of <selector>语法chrome@111+:nth-child(-n + 3 of li.important) {}匹配属于前三个子元素,且与选择器 li.important 匹配的列表项:nth-child(n of :not())
:nth-of-type()
参考
否定伪类(negation pseudo-class)(:not()) ⇧
|
|
聚焦内部(:focus 和 :focus-within) ⇧
|
|
:has()
|
|
:where
|
|
:is
|
|
前后伪元素 ⇧
在元素中的内容前或后插入一个额外元素
|
|
首字母伪元素 ::first-letter ⇧
选中元素中的第一个字母或文字
1 2 3 4 5 6 7 8 9 10<head> <style> </style> </head> <body> <p> <span class="pseudo"></span> </p> </body>
首行伪元素 ::first-line ⇧
选中元素中第一行的文字
1 2 3 4 5 6 7 8 9 10<head> <style> </style> </head> <body> <p> <span class="pseudo"></span> </p> </body>
选中伪元素 ::selection ⇧
选中被用户框选的文字
1 2 3 4 5 6 7 8 9 10<head> <style> </style> </head> <body> <p> <span class="pseudo"></span> </p> </body>
分组选择器(Grouping selector) ⇧
就是不同选择器的组合方式,可以组合任意选择器,以类选择器为例
选择器并列 ⇧
表示需要同时满足多个选择器
|
|
选择器列表 ⇧
语法糖
|
|
- 使用逗号分隔,共用相同样式
组合器(Combinator) ⇧
- 后代组合器
- 直接子代组合器
- 一般兄弟组合器
紧邻兄弟组合器
1 2 3 4.a .b {} .a > .b {} .a ~ .b {} .a + .b {}
后代组合器 ⇧
|
|
- 匹配所有位于任意元素之内
选择器匹配顺序
|
|
- 从右往左匹配
直接子代组合器 ⇧
|
|
- 前一个元素的直接子代
一般兄弟组合器 ⇧
|
|
- 共享同一个父节点
- 匹配到在前一个节点后面的任意位置的选择器
紧邻兄弟组合器 ⇧
|
|
- 共享同一个父节点
- 匹配到相邻元素,紧跟在前一个选择器之后的那个选择器
样式层叠 ⇧
样式声明冲突
- 同一个样式,多次应用到同一个元素
自定义样式表 与 浏览器默认样式(用户代理样式表)的冲突
user agent stylesheet通常被用户自定义样式覆盖
利用层叠样式的特性,可以先声明一个通用的样式,再对具体每一个选择器,声明特殊的样式
- 层叠:解决声明冲突的过程,浏览器自动处理(权重计算)
- 不用自己计算,主流
IDE和 浏览器元素选项卡 中,都有明确提示(0, 0, 0)
样式层叠的顺序,即权重计算顺序 ⇧
- 比较重要性
- 比较特殊性
- 比较源次序
选择器优先级-简单判断 ⇧
!important> 行内样式 >id选择器 >class选择器 | 属性选择器 > 标签选择器 > 通配符选择器
css 权重,真正影响样式的原因 ⇧
| 类型 | 错误地归类(仅帮助理解)-权重 | 官方归类-权重 |
|---|---|---|
作者样式表的!important |
infinity |
不参与权重计算,但会覆盖其他所有普通规则的层叠样式,也会受到先后顺序和其他样式累加影响 |
| 元素标签的行内样式 | 1000 |
可以理解为 1-0-0-0 但实际不计入特异性分数,直接覆盖除了!important以外的所有样式 |
id选择器 |
100 |
1-0-0 |
class选择器/属性选择器/伪类 |
10 |
0-1-0 |
| 标签选择器/伪元素 | 1 |
0-0-1 |
| 通配符选择器 | 0 |
对权重计算无影响 可覆盖 用户代理样式表 |
浏览器默认样式 user agent stylesheet |
无 | 权重最低 |
- 同一行同类型的选择器权重可累加
- 旧版浏览器中样式权累加重满
255进位;现代浏览器中各个分开存储,互不影响 - 作者样式表
Author Stylesheet:开发者书写的样式 - 浏览器默认样式表
User-Agent Stylesheet !important最好禁用,覆盖成本巨大
比较重要性 ⇧
CSS重要性由低到高
- 作者样式表中的
!important样式 - 作者样式表中的普通样式
- 浏览器默认样式表中的样式
比较特殊性 ⇧
比较重要性后仍有样式重叠冲突,之后需要比较特殊性,作者样式表覆盖浏览器默认样式表
|
|
- 总体规则:看选择器,选择器选中的范围越窄,越特殊
- 具体规则:
- 行内样式具有最高的特异性(Specificity),可以覆盖任何来自样式表(
!important除外)的其他常规样式 - 通过选择器,计算出一个3位数
(0-0-0) (n-0-0)等于选择器中所有id选择器的数量(0-n-0)等于选择器中所有 类型选择器(类、伪类、属性选择器) 的数量(0-0-n)等于选择器中所有 元素或伪元素选择器 的数量- 三个级别是独立的,没有一个级别会向其更高或更低级别“借位”或“进位”
- 浏览器在比较两个特异性时,是按从左到右的顺序逐级比较的,类似于比较数字
- 区别于选择器匹配顺序,是从右往左匹配
- 行内样式具有最高的特异性(Specificity),可以覆盖任何来自样式表(
比较源次序 ⇧
- 代码书写靠后的胜出
一个应用就是当书写
a元素的伪类时,一般需要按以下的次序协选择器:
|
|
- 适用于各种状态重叠
css 层叠特性 权重应用 ⇧
重置样式表:书写一些作者样式,覆盖浏览器的默认样式,统一样式
1 2 3 4<head> <link rel="stylesheet" href="style/reset.css"></link> <link rel="stylesheet" href="style/index.css"></link> </head>
参考
- google.ai 对 CSS 特异性的总结
- CSS 特异性
- CSS 优先级 Selector Specificity MDN
- CSS 层叠、优先级与继承 优先级 MDN
- 鱼类类比图 specifishity
- CSS初始化样式文件.md
选择器嵌套 ⇧
CSS语法二:常用属性 ⇧
- 文字相关
fontfont-*font-size每个元素必须有字体大小,如果没有声明,则直接使用父元素的字体大小,无父元素使用基准字号font-weight预设值font-family必须用户计算机中存在的字体才会有效;使用多个字体,以匹配不同环境font-style斜体color字体颜色line-height行高:- 每行文本的高度,该值越大,每行文本的距离越大
- 设置行高为容器的高度,可以让单行文本垂直居中
- 行高可以设置为纯数字,表示相对于当前元素的字体大小
text-align文字对齐:元素内部文字的水平排列方式text-indent首行文本缩进text-decoration装饰线条letter-space文字间隙text-overflowvertical-align
- 容器相关
marginborderpaddingwidthheight- 背景相关
background background-image: url('');background-size: 100px 100px;过小则重复平铺图片background-repeat: no-repeat;background-position: 100px 100px;
- 定位
position - 光标相关
cursor
补充:常用单位
px: 像素,绝对单位,简单的理解为文字的高度占多少个像素em: 相对单位,相对于父元素的字体大小
样式继承 ⇧
- 子元素会继承父元素的某些
CSS属性 - 通常,跟文字内容相关的属性都能被继承
- 在
MDN中搜索查看 某一个属性是否是可继承的 font Inheritance
不能被继承的样式 ⇧
- 宽高
widthheight background开发者调试面板Styles中是 淡灰色- 在
Computed面板中中是默认值
- 在
参考
属性值的计算过程 ⇧
一个元素一个元素依次渲染,顺序按照页面文档的树形目录结构进行
- 渲染每个元素的前提条件:该元素的所有CSS属性必须有值
- 一个元素,从所有属性都没有值,到所有的属性都有值,这个计算过程,叫
CSS做属性值计算过程
属性值计算过程 ⇧
- 确定声明值:开发者样式表声明 和 浏览器默认样式表声明中,参考样式表中没有冲突的声明,先直接作为CSS属性值
- 处理 层叠冲突:对样式表有冲突的声明使用层叠规则,确定CSS属性值(比较重要性、比较特殊性、比较源次序)
- 使用继承:对仍然没有值的属性,若可以继承,则继承父元素的值
- 使用默认值:对仍然没有值的属性,使用默认值
问初始条件下,a元素展示的颜色是?
|
|
- 是浏览器默认样式表中声明的颜色,并没有继承父元素的颜色
查看
reset.css中重置a元素的样式
|
|
特殊的两个CSS取值:
- inherit: 手动(强制)继承,将父元素的值取出应用到该元素
- initial: 初始值,将该属性设置为默认值
CSS语法三:常用@语法 at-rule ⇧
|
|
@import ⇧
@import "path";导入另外一个css文件- 可以在浏览器的控制台
Network面板查看CSS资源加载 - 加载和解析的顺序相反
@import必须以分号;结尾
@charset ⇧
@charset必须放在第一行,解析中文字符- 可以在浏览器的控制台
Network面板查看Font资源加载 charset字面是字符集的意思,UTF-8是字符编码encodeing- 历史遗留问题,
encodeing ∈ charset,charset指文件编码(而不是字符集) @charset必须以分号;结尾1@charset "UTF-8";
参考
@font-face ⇧
@media ⇧
基本单位 ⇧
长度单位 ⇧
px像素em相对于自身font-size的倍数1,2,3,4em=1x,2x,3x,4x font-size- 百分数
- 整数
remvw|vh- 其他,少,不用了解
颜色 ⇧
hsla(h, s, l, a): (30°, 100%, 100%, 0.5)rgba(r, g, b,a): (255, 127, 0,0.5)Hex triplet: #FF7F00淘宝色
#FF6600透明
transparent
自动填充背景色
在body上添加一个颜色,外面也同样变成这个色,但并不意味着背景全是body,只有加了border,才能看出body的实际范围
用border来确定body在哪
参考文章 ⇧
相关文章 ⇧
- 作者: Joel
- 文章链接:
- 版权声明
- 非自由转载-非商用-非衍生-保持署名