当前位置: 首页 > article >正文

CSS 性能优化

目录

  • CSS 性能优化
    • CSS 提高性能的方法
      • 1. 选择器优化
        • 1.1 选择器性能原则
        • 1.2 选择器优化示例
      • 2. 重排(Reflow)和重绘(Repaint)优化
        • 2.1 重排和重绘的概念
        • 2.2 触发重排的操作
        • 2.3 触发重绘的操作
        • 2.4 优化重排和重绘的方法
      • 3. 资源优化
        • 3.1 CSS 文件优化
        • 3.2 图片资源优化
      • 4. 加载优化
        • 4.1 关键 CSS 优化
        • 4.2 媒体查询优化
      • 5. 其他优化建议


CSS 性能优化

CSS 提高性能的方法

1. 选择器优化

1.1 选择器性能原则
  • 避免使用通配符和深层次的嵌套选择器
  • 尽量使用类选择器,减少使用复杂的选择器
  • 避免使用标签选择器作为关键选择器
  • 减少选择器的嵌套层级
  • 优先使用类选择器
  • 避免使用 !important
1.2 选择器优化示例
/* 不推荐 */
div ul li a span {color: red;
}/* 推荐 */
.nav-link {color: red;
}

2. 重排(Reflow)和重绘(Repaint)优化

2.1 重排和重绘的概念
  • 重排(Reflow):当 DOM 元素的尺寸、结构或某些属性发生变化时,浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程称为重排。
  • 重绘(Repaint):当 DOM 元素的样式发生变化,但不影响布局时,浏览器会重新绘制元素,这个过程称为重绘。
2.2 触发重排的操作
  1. 改变元素尺寸

    /* 会触发重排 */
    element.style.width = '100px';
    element.style.height = '100px';
    element.style.padding = '10px';
    element.style.margin = '10px';
    
  2. 改变元素位置

    /* 会触发重排 */
    element.style.position = 'absolute';
    element.style.top = '100px';
    element.style.left = '100px';
    
  3. 改变元素内容

    // 会触发重排
    element.innerHTML = 'new content'
    element.innerText = 'new text'
    
  4. 改变窗口大小

    // 会触发重排
    window.addEventListener('resize', () => {})
    
2.3 触发重绘的操作
  1. 改变颜色相关属性

    /* 只触发重绘 */
    element.style.color = 'red';
    element.style.backgroundColor = 'blue';
    element.style.borderColor = 'green';
    
  2. 改变透明度

    /* 只触发重绘 */
    element.style.opacity = '0.5';
    
  3. 改变阴影

    /* 只触发重绘 */
    element.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)';
    
2.4 优化重排和重绘的方法
  1. 使用 transform 代替位置改变

    /* 不推荐 */
    element.style.left = '100px';
    element.style.top = '100px';/* 推荐 */
    element.style.transform = 'translate(100px, 100px)';
    
  2. 批量修改 DOM

    // 不推荐
    for (let i = 0; i < 100; i++) {element.style.width = i + 'px'
    }// 推荐
    const fragment = document.createDocumentFragment()
    for (let i = 0; i < 100; i++) {const div = document.createElement('div')div.style.width = i + 'px'fragment.appendChild(div)
    }
    document.body.appendChild(fragment)
    
  3. 使用 CSS 类名批量修改样式

    /* 推荐 */
    .active {background: red;color: white;padding: 10px;margin: 5px;
    }
    
  4. 使用绝对定位脱离文档流

    /* 推荐 */
    .animation-element {position: absolute;top: 0;left: 0;
    }
    
  5. 使用 CSS3 硬件加速

    /* 推荐 */
    .hardware-accelerated {transform: translateZ(0);/* 或 */backface-visibility: hidden;/* 或 */perspective: 1000;
    }
    

3. 资源优化

3.1 CSS 文件优化
  • 压缩 CSS 文件
  • 合并多个 CSS 文件
  • 移除未使用的 CSS
  • 使用 CSS 预处理器(Sass/Less)和后处理器(PostCSS)
3.2 图片资源优化
  • 使用 CSS Sprites 合并图片
  • 使用字体图标(Icon Font)代替图片
  • 使用 SVG 代替位图
  • 使用 WebP 格式图片
  • 使用响应式图片

4. 加载优化

4.1 关键 CSS 优化
<!-- 关键 CSS 内联 -->
<style>/* 首屏关键样式 */
</style><!-- 非关键 CSS 异步加载 -->
<linkrel="preload"href="non-critical.css"as="style"onload="this.onload=null;this.rel='stylesheet'"
/>
4.2 媒体查询优化
/* 分离桌面和移动端样式 */
@media screen and (min-width: 768px) {/* 桌面端样式 */
}@media screen and (max-width: 767px) {/* 移动端样式 */
}

5. 其他优化建议

  1. 使用 CSS 变量

    :root {--primary-color: #007bff;--secondary-color: #6c757d;
    }.element {color: var(--primary-color);
    }
    
  2. 使用 CSS Grid 和 Flexbox 布局

    /* 使用 Flexbox */
    .container {display: flex;justify-content: space-between;
    }/* 使用 Grid */
    .grid-container {display: grid;grid-template-columns: repeat(3, 1fr);
    }
    
  3. 使用 will-change 提示浏览器

    .will-animate {will-change: transform;
    }
    
  4. 避免使用 @import

    /* 不推荐 */
    @import 'other.css';/* 推荐 */
    <link rel="stylesheet" href="other.css">
    
http://www.lryc.cn/news/2402924.html

相关文章:

  • 华为×小鹏战略合作:破局智能驾驶深水区的商业逻辑深度解析
  • 4D毫米波雷达产品推荐
  • yolo 训练 中间可视化
  • Rust 学习笔记:关于 Cargo 的练习题
  • 光伏功率预测 | BiLSTM多变量单步光伏功率预测(Matlab完整源码和数据)
  • 20250606-C#知识:委托和事件
  • AI数字人技术革新进行时:井云数字人如何重塑人机交互未来?
  • ruoyi-plus-could 负载均衡 通过 Gateway模块配置负载均衡
  • 江科大读写内部flash到hal库实现
  • Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满!
  • 主流 AI IDE 之一的 Cursor 介绍
  • 0x-1 记一次SGA PGA设置失败,重新开库
  • 【科研绘图系列】R语言绘制和弦图(Chord diagram plot)
  • PPT转图片拼贴工具 v3.0
  • 关于安科瑞APD局部放电监测装置解决方案的应用分析
  • 设计模式-2 结构型模式
  • 大量企业系统超龄服役!R²AIN SUITE 一体化企业提效解决方案重构零售数智化基因
  • Cesium使用glb模型、图片标记来实现实时轨迹
  • 【拓扑剪枝+深搜剪枝/计数】2024睿抗-章鱼图的判断
  • Android基础回顾】六:安卓显示机制Surface 、 SurfaceFlinger、Choreographer
  • SpringBoot核心注解详解及3.0与2.0版本深度对比
  • 敏捷开发中如何避免过度加班
  • 深入浅出多路归并:原理、实现与实战案例解析
  • Java八股文——集合「Map篇」
  • 第1章_数据分析认知_知识点笔记
  • 111页可编辑精品PPT | 华为业务变革框架及战略级项目管理华为变革管理华为企业变革华为的管理模式案例培训
  • Python使用总结之Mac安装docker并配置wechaty
  • html文字红色粗体,闪烁渐变动画效果
  • 进阶配置与优化:配置 HTTPS 以确保数据安全传输
  • Python使用clickhouse-local和MySQL表函数实现从MySQL到ClickHouse数据同步