Skip to content
On this page

CSS优化

CSS优化是提升网页加载速度和渲染性能的重要手段。通过合理的CSS编写和加载策略,可以减少渲染阻塞、降低文件大小并提升用户体验。

选择器优化

避免低效选择器

CSS选择器的效率从高到低依次为:

  • ID选择器 (#id)
  • 类选择器 (.class)
  • 标签选择器 (div)
  • 相邻选择器 (h2 + p)
  • 子选择器 (ul > li)
  • 后代选择器 (ul a)
  • 通配符选择器 (*)
css
/* 推荐 */
.header-nav { }

/* 不推荐 */
ul.nav li a { }

减少选择器层级

避免过深的选择器嵌套:

css
/* 推荐 */
.card-title { }

/* 不推荐 */
.main-content .container .card .title { }

文件优化

压缩CSS

移除不必要的空格、注释和换行:

css
/* 原始CSS */
.container {
  margin: 0 auto; /* 居中对齐 */
  padding: 20px;
  width: 100%;
}

/* 压缩后 */
.container{margin:0 auto;padding:20px;width:100%}

关键CSS内联

将首屏必需的CSS内联到HTML中:

html
<head>
  <style>
    /* 首屏关键CSS */
    body { margin: 0; font-family: Arial; }
    .header { height: 60px; background: #fff; }
  </style>
  <link rel="stylesheet" href="non-critical.css">
</head>

渲染性能

避免强制同步布局

避免在JavaScript中强制浏览器立即计算样式:

javascript
// 不推荐
element.style.width = '100px';
console.log(element.offsetHeight); // 强制重新计算布局
element.style.height = '200px';

// 推荐
element.style.width = '100px';
element.style.height = '200px';
console.log(element.offsetHeight);

使用transform和opacity

使用transform和opacity属性来实现动画,这些属性不会触发重排:

css
/* 推荐 - 使用transform */
.animate-move {
  transition: transform 0.3s ease;
}
.animate-move:hover {
  transform: translateX(10px);
}

/* 不推荐 - 改变left值会触发重排 */
.move {
  transition: left 0.3s ease;
}
.move:hover {
  left: 10px;
}

响应式优化

合理使用媒体查询

组织媒体查询以提高缓存效率:

css
/* 推荐 - 将响应式规则放在相关组件旁边 */
.card {
  width: 100%;
  padding: 10px;
}

.card-title {
  font-size: 16px;
}

@media (min-width: 768px) {
  .card {
    width: 50%;
  }
  .card-title {
    font-size: 18px;
  }
}

字体优化

优化字体加载

使用font-display属性优化字体加载:

css
@font-face {
  font-family: 'CustomFont';
  src: url('custom-font.woff2') format('woff2');
  font-display: swap; /* 允许使用备用字体直到自定义字体加载完成 */
}

CSS变量

使用CSS自定义属性

利用CSS变量提高维护性:

css
:root {
  --primary-color: #007bff;
  --secondary-color: #6c757d;
  --border-radius: 4px;
}

.button {
  background: var(--primary-color);
  border-radius: var(--border-radius);
}

预处理器优化

使用SCSS/Less时的注意事项

  • 避免过度嵌套(建议不超过3层)
  • 合理使用@mixin和@extend
  • 利用函数进行复用

工具和最佳实践

使用CSS-in-JS

在现代框架中考虑使用CSS-in-JS方案:

javascript
// styled-components 示例
import styled from 'styled-components';

const Button = styled.button`
  background: ${props => props.primary ? 'palevioletred' : 'white'};
  color: ${props => props.primary ? 'white' : 'palevioletred'};
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;

性能监测

使用开发者工具

  • 使用Chrome DevTools的Performance面板
  • 检查CSS解析和样式计算时间
  • 识别复杂的重绘和回流

最佳实践总结

  • 优先加载关键CSS
  • 最小化CSS文件大小
  • 使用高效的CSS选择器
  • 避免CSS阻塞渲染
  • 使用硬件加速属性
  • 定期清理未使用的CSS代码