第35章 CSS架构
第三十五章:CSS 架构与预处理器
CSS架构让代码更易维护,预处理器让开发更高效。学会这些,你就是CSS架构师了!
35.1 CSS 架构模式
35.1.1 BEM命名规范
BEM(Block__Element–Modifier)是一种三段式命名规范:Block(块)__Element(元素)–Modifier(修饰符),组合起来才是完整的类名,让类名清晰易懂。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| /* BEM = Block__Element--Modifier */
/* Block(块)*/
.card { }
/* Element(元素)*/
.card__header { }
.card__body { }
.card__footer { }
.card__image { }
.card__title { }
.card__description { }
.card__button { }
/* Modifier(修饰符)*/
.card--featured { }
.card--disabled { }
.card__button--primary { }
.card__button--secondary { }
.card__button--disabled { }
|
1
2
3
4
5
6
7
8
9
10
11
| <div class="card card--featured">
<div class="card__header">
<h3 class="card__title">标题</h3>
</div>
<div class="card__body">
<p class="card__description">描述内容</p>
</div>
<div class="card__footer">
<button class="card__button card__button--primary">主要按钮</button>
</div>
</div>
|
35.1.2 SMACSS五层架构
SMACSS把CSS分成五层,从通用到特殊。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| /* SMACSS五层架构 */
/* 1. Base(基础样式)*/
html, body {
margin: 0;
padding: 0;
font-family: sans-serif;
}
/* 2. Layout(布局样式)*/
.l-header { }
.l-sidebar { }
.l-main { }
.l-footer { }
/* 3. Module(模块样式)*/
.button { }
.card { }
.modal { }
/* 4. State(状态样式)*/
.button.is-active { }
.card.is-hidden { }
.modal.is-open { }
/* 5. Theme(主题样式)*/
.theme-dark { }
.theme-light { }
|
35.2 预处理器
35.2.1 Sass/SCSS核心功能
Sass和scss是CSS预处理器,提供变量、嵌套、Mixin等功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| /* Sass/SCSS基本功能 */
/* 变量 */
$primary-color: #3498db;
$spacing-sm: 8px;
$spacing-md: 16px;
$spacing-lg: 24px;
/* Mixin(可复用代码块)*/
@mixin flex-center {
display: flex;
align-items: center;
justify-content: center;
}
/* 调用Mixin */
.container {
@include flex-center;
}
/* 占位符 */
%button-base {
padding: 12px 24px;
border: none;
border-radius: 8px;
cursor: pointer;
}
.primary-button {
@extend %button-base;
background: $primary-color;
}
|
35.3 @layer层叠规则
35.3.1 @layer声明
@layer可以创建命名的层,控制优先级。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| /* @layer基本用法 */
/* 声明层顺序 */
@layer reset, base, components, utilities;
/* 在各层中写样式 */
@layer reset {
* { margin: 0; padding: 0; }
}
@layer base {
body { font-size: 16px; }
}
@layer components {
.card { background: white; }
}
@layer utilities {
.text-center { text-align: center; }
}
|
35.4 可访问性
35.4.1 颜色对比度
文本与背景的对比度至少要4.5:1。
1
2
3
4
5
6
| /* 高对比度文本 */
.high-contrast-text {
color: #333; /* 深色文字 */
background: #fff; /* 浅色背景 */
/* 对比度约12.6:1 ✅ */
}
|
35.4.2 :focus-visible
区分键盘焦点和鼠标焦点。
1
2
3
4
5
| /* :focus-visible代替:focus */
:focus-visible {
outline: 2px solid #3498db;
outline-offset: 2px;
}
|
本章小结
CSS架构模式让代码更易维护。
下章预告
下一章我们将学习交互相关属性!