CSS那些事

简介: CSS那些事

CSS特性

1.优先级

选择器 权重
!important 最高优先级
内联样式
ID
类/伪类/属性
元素/伪元素
通配符/子选择器/相邻选择器 最低优先级
!important > 行内样式 > ID 选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性

2.继承性

  • 继承得到的样式的优先级是最低的,在任何时候,只要元素本身有同属性的样式定义,就可以覆盖掉继承值。
  • 在存在多个继承样式时,层级关系距离当前元素最近的父级元素的继承样式,具有相对最高的优先级。

可以继承的属性:

  1. font-familyfont-sizefont-weightf 开头的 CSS 样式。
  2. text-aligntext-indentt 开头的样式。
  3. color

3.层叠性

层叠就是浏览器对多个样式来源进行叠加,最终确定结果的过程。

CSS 之所以有「层叠」的概念,是因为有多个样式来源。CSS 层叠性是指 CSS 样式在针对同一元素配置同一属性时,依据层叠规则(权重)来处理冲突,选择应用权重高的 CSS选择器所指定的属性,一般也被描述为权重高的覆盖权重低的,因此也称作层叠。

CSS 书写顺序

浏览器并不是一获取到 CSS 样式就立马开始解析,而是根据 CSS 样式的书写顺序将之按照 DOM 树的结构分布渲染样式,然后开始遍历每个树结点的 CSS 样式进行解析,此时的 CSS 样式的遍历顺序完全是按照之前的书写顺序。

建议顺序:

  1. 定位属性
position  display  float  left  top  right  bottom   overflow  clear   z-index

 2.自身属性

width  height  padding  border  margin   background

 3.文字样式

font-family   font-size   font-style   font-weight   font-varient   color

 4.文本属性

text-align   vertical-align   text-wrap   text-transform   text-indent    text-decoration   letter-spacing    word-spacing    white-space   text-overflow

 5.CSS3 中新增属性

content   box-shadow   border-radius  transform

优化策略

1. 使用 id selector 非常的高效

在使用 id selector 的时候需要注意一点:因为 id 是唯一的,所以不需要既指定 id 又指定 tagName

/* Bad  */
p#id1 {color:red;}
/* Good  */
#id1 {color:red;}

2. 避免深层次的 node

譬如:

/* Bad  */
div > div > div > p {color:red;}
/* Good  */
p-class{color:red;}

3. 不要使用 attribute selector

如:p[att1=”val1”],这样的匹配非常慢。更不要这样写:p[id="id1"],这样将 id selector 退化成 attribute selector

/* Bad  */
p[id="jartto"]{color:red;}
p[class="blog"]{color:red;}
/* Good  */
#jartto{color:red;}
.blog{color:red;}

4. 将浏览器前缀置于前面,将标准样式属性置于最后

CSS那些事儿.pdf

image.png

下载

类似:

.foo {
  -moz-border-radius: 5px;
  border-radius: 5px;
}

可以参考这个 Css 规范。

5. 遵守 CSSLint 规则

font-faces                 不能使用超过5个web字体
import                    禁止使用@import
regex-selectors              禁止使用属性选择器中的正则表达式选择器
universal-selector           禁止使用通用选择器*
unqualified-attributes       禁止使用不规范的属性选择器
zero-units                  0后面不要加单位
overqualified-elements       使用相邻选择器时,不要使用不必要的选择器
shorthand                 简写样式属性
duplicate-background-images    相同的url在样式表中不超过一次

6. 减少 CSS 文档体积

  • 移除空的 CSS 规则(Remove empty rules)。
  • 值为 0 不需要单位。
  • 使用缩写。
  • 属性值为浮动小数 0.xx,可以省略小数点之前的 0
  • 不给 h1-h6 元素定义过多的样式。

7. CSS Will Change

WillChange 属性,允许作者提前告知浏览器的默认样式,使用一个专用的属性来通知浏览器留意接下来的变化,从而优化和分配内存。

8. 不要使用 @import

使用 @import 引入 CSS 会影响浏览器的并行下载。

使用 @import 引用的 CSS 文件只有在引用它的那个 CSS 文件被下载、解析之后,浏览器才会知道还有另外一个 CSS 需要下载,这时才去下载,然后下载后开始解析、构建 Render Tree 等一系列操作。

多个 @import 会导致下载顺序紊乱。在 IE 中,@import 会引发资源文件的下载顺序被打乱,即排列在 @import 后面的 JS 文件先于 @import 下载,并且打乱甚至破坏 @import 自身的并行下载。

CSS那些事儿.pdf

image.png

下载

9. 避免过分回流/重排(Reflow

浏览器重新计算布局位置与大小。

常见的重排元素:

width
height
padding
margin
display
border-width
border
top
position
font-size
float
text-align
overflow-y
font-weight
overflow
left
font-family
line-height
vertical-align
right
clear
white-space
bottom
min-height

10. 高效利用 computedStyle

  • 公共类。
  • 慎用 ChildSelector
  • 尽可能共享。

更多请查看上文 - 高效的 ComputedStyle

11. 减少昂贵属性

当页面发生重绘时,它们会降低浏览器的渲染性能。所以在编写 CSS 时,我们应该尽量减少使用昂贵属性,如:

  • box-shadow
  • border-radius
  • filter
  • :nth-child

12. 依赖继承

如果某些属性可以继承,那么自然没有必要在写一遍。

13. 遵守 CSS 顺序规则


相关文章
|
9月前
|
搜索推荐 Python
使用Python自动化生成物业通知单
本文介绍如何使用Python结合Pandas和python-docx库自动化生成物业通知单。通过读取Excel数据并填充至Word模板,实现高效准确的通知单批量制作。包括环境准备、代码解析及效果展示,适用于物业管理场景。
211 14
|
弹性计算
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
2024年阿里云服务器的优惠价格新鲜出炉,有特惠云服务器也有普通优惠价格,本文为大家整理汇总了2024年阿里云服务器的优惠价格,包含特惠云服务器和其他配置云服务器的优惠价格。以便大家了解自己想购买的云服务器选择不同实例规格和带宽情况下的价格,仅供参考。
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
|
弹性计算 运维 Linux
地图在人物不在的存档修复
地图在人物不在的存档修复
|
9月前
|
SQL 安全 Java
除了Flask框架,还有哪些框架能防止SQL注入攻击?
这些框架都在安全方面有着较好的表现,通过它们的内置机制和安全特性,可以有效地降低 SQL 注入攻击的风险。然而,无论使用哪个框架,开发者都需要具备良好的安全意识,正确配置和使用框架提供的安全功能,以确保应用的安全可靠。同时,持续关注安全更新和漏洞修复也是非常重要的。
267 61
|
SQL 存储 NoSQL
SQL、NoSQL还是NewSQL
【7月更文挑战第5天】SQL、NoSQL还是NewSQL
255 1
解锁时间价值:日程安排管理的科学方法
本文探讨了日程安排管理的重要性、常见问题及优化策略,强调了有效管理时间对提高工作效率、减轻压力、实现目标和平衡生活的重要性。通过设定SMART目标、运用优先级管理工具、合理规划时间、利用数字工具和技术、管理干扰与分心、保持灵活性以及激励自己与团队等策略,帮助个人和企业构建高效的时间管理体系。
|
9月前
|
消息中间件 算法 调度
深入理解操作系统之进程管理
本文旨在通过深入浅出的方式,带领读者探索操作系统中的核心概念——进程管理。我们将从进程的定义和重要性出发,逐步解析进程状态、进程调度、以及进程同步与通信等关键知识点。文章将结合具体代码示例,帮助读者构建起对进程管理机制的全面认识,并在实践中加深理解。
|
数据采集 数据可视化 数据挖掘
使用R语言进行生物统计分析:探索生命科学的奥秘
【9月更文挑战第1天】通过上述实例,我们可以看到R语言在生物统计分析中的强大功能。从数据准备、差异表达分析到结果可视化,R语言提供了一整套完整的解决方案。随着生物数据的不断积累和分析技术的不断进步,R语言在生物统计分析中的应用前景将更加广阔。我们相信,通过不断学习和实践,R语言将成为每一位生物统计学家不可或缺的工具。
270 9
|
网络虚拟化 安全 网络架构
|
存储 缓存 安全
USB 2.0 规范摘录2
USB 2.0 规范摘录
231 1