总结自: Learn to Code Advanced HTML & CSS 系列原文
网站优化的 20/80 二八原则: 20%优化( optimization )提高80%的网站效率
一 构建策略
网站构建策略是指网站的组织形式, 样式和内容如何高效地结合以达到性能要求, 并提出一些常见策略的规范
网站样式基础架构
-
基于内容分离的组织形式
- base style 👉 common (公共)
- interface 👉 user (用户)
- logic 👉 business (业务)
-
特性: 复用性 模块化
-
细分: (此外的.css文件不是特指单个文件, 而是组织的表示*)
- Base 👉 全局可用的通用样式
- normalize.css
- layout.css
- typography.css
- Components 👉 面向特定的用户接口, 某一功能组件
- alert.css
- button.css
- list.css
- ...
- Modules 👉 页面的业务逻辑
- aside.css
- footer.css
- header.css
- Base 👉 全局可用的通用样式
两种CSS实施策略
- Object Oriented CSS-面向对象css
- 分离"皮肤"和结构
- 抽象出布局结构
- 分离出主题元素
- 可无冲突地继承和展示
- 分离内容和容器
- 父子组件无依赖关系
- 可继承样式
- 可扩展样式
- 分离"皮肤"和结构
example
<style>
.alert{...}
.alert-error{...}
...
</style>
<div class="alert alert-error">
</div>
-
Scalable & Modular CSS 可扩展&模块化css
- 五个核心目录
- Base →包括核心element的样式, 涵盖默认的设置
- Layout →为不同element设置元素大小和网格布局样式
- Module →针对页面各个部分更具体的样式, 如navbar\banner等
- State →为有其他状态的元素, 增强或者覆盖额外的样式
- Theme →基于模块的不同外观样式
选择何种策略取决于你的网站, 通常结合两者进行按需构建网站的css架构会有更好的效果
- 五个核心目录
example
<style>
.alert {...}
.alert.is-error {...}
/*
.class01.class02 匹配同时拥有class01/class02的元素
.class01 .class02 匹配class01的子元素中包含class02的元素
*/
</style>
<div class="alert is-error"></div>
此处的is-error( state)就是描述alert( module )的一种状态
二 性能驱动的选择器
选择器滥用会影响
- 网页渲染速度
- 网站体系架构的实用性和模块化程度
简洁的选择器
简短的选择器可以
- 减低特异性 → 提高继承性和可移植性
- 提高效率 →过长的选择器会强制浏览器从右到左执行每个独立选择器类型, 太过具体增加负担
类选择器更好地识别具体元素, 而无需一个一个识别父级元素, 位置改变时不会丢失样式
/* Bad */
header nav ul li a {...}
/* Good */
.primary-link {...}
裁剪子类中同级的选择器以应对元素位置变化时的样式稳定
/* Bad */
button strong span {...}
button strong span .callout {...}
/* Good */
button span {...}
button .callout {...}
Class优先
浏览器从右到左地渲染选择器, 指定具体的类更好地帮助浏览器渲染
- key selector 是指浏览器首先渲染的第一个选择器, 良好语义化keyseletor
- 避免使用id选择器, 太过具体, 且不能复用( 类比!import )
/* Bad */
#container header nav {...}
/* Good */
.primary-nav {...}
/* Bad */
article.feat-post {...}
/* Good */
.feat-post {...}
三 压缩文件
通用压缩
- gzip 一种流行的压缩文件类型
- .htaccess是apache web服务器的文件压缩指定文件, 当然许多服务器都会有压缩功能
- 可以在developer-tools>network中查看文件的size选项, 大部分可以被压缩到60%
图片压缩
- 无损压缩可以保证图片不失真, 放心使用
- tools: PNGGuantlet for windows
- website: tinyping
四 减少HTTP请求
- 合并文件 多个css文件 → style.css 多个js文件 → main.js
- style位于之内 → 与网页同时加载 main.js位于之前 →逐个加载, 提倡异步加载
- sprite图
- 多张图片合并为一张背景图
- 使用background-position属性来进行裁剪
- base64 data URI
- 不用进行http请求
- 会增加缓存, 但利大于弊
- 注意比较两者大大小区别
五 缓存公用文件
- 在web server 里设置cache-control的缓存周期