Skip to content

Commit 4856aae

Browse files
committed
Update notes.
1 parent 914efeb commit 4856aae

File tree

3 files changed

+43
-49
lines changed

3 files changed

+43
-49
lines changed

.gitignore

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,5 @@ npm-debug.log
2222
*.gz
2323

2424
*.psd
25-
notes/*/*.md
26-
!notes/chapter-0/*.md
27-
!notes/chapter-1/*.md
28-
!notes/chapter-2/*.md
29-
!notes/chapter-3/*.md
30-
!notes/chapter-4/*.md
31-
!notes/chapter-5/*.md
32-
!notes/chapter-6/*.md
33-
!notes/chapter-7/*.md
34-
!notes/chapter-8/*.md
35-
notes/*/508.extra.md
25+
notes/featured/*.md
26+
!notes/featured/102.*.md

notes/chapter-1/102.md

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,6 @@ Iterations 是 Basecamp 公司的一个内部管理工具。
2222
Basecamp 公司原来叫做 37signals,从 2014 年开始改为现在的名字。Basecamp 原来是这家公司的主打产品的名字,后来当产品的名气远远超过公司名气的时候,公司改名也就是顺理成章的事情了。
2323

2424

25-
## 经验分享
25+
## 延伸阅读
2626

27-
#### 如何正确编写 Fallback 样式
28-
29-
在浏览器特性参差不齐的大环境下,“渐进增强” 与 “平稳退化” 是一种务实的策略。因此,在编写华丽样式的同时,我们还需要想好退路,为功能较弱的浏览器提供 fallback(回退样式)。
30-
31-
总的来说,我们应该利用 CSS 自身的机制来组织回退样式,而不是依赖 CSS hack 来实现。
32-
33-
![rgba-black](https://cloud.githubusercontent.com/assets/1231359/14772958/a0e504ca-0ad6-11e6-9d43-ccb4fe0da42c.jpg)
34-
35-
举个例子,设计师要求某个元素的背景色显示为半透明的黑色。但我们都知道,低版本 IE 等浏览器并不支持 RGBA 颜色,因此对于这些浏览器,我们需要将它的背景色设置为最接近设计意图的纯黑色。那么在这里,半透明黑色是我们期望的 “理想样式”,而纯黑色则是用来兜底的 “回退样式”。
36-
37-
在搞清楚状况之后,我们很快写出了下面的代码:
38-
39-
```stylus
40-
background: rgba(0,0,0,0.75);
41-
background: #000\9;
42-
```
43-
44-
这段代码的意图是这样的:第一条声明是我们理想的样式,写给标准浏览器;第二条声明是专门写给 IE 的 CSS hack,因为只有 IE 浏览器才能识别这一行,所以在 IE 下这个元素的背景色就是黑色的了。
45-
46-
听起来似乎很有道理,现实中也有很多代码就是这样写的,但它存在一些明显的缺陷:
47-
48-
* 首先,第二行代码命中的是 “IE 浏览器”,但实际上我们应该命中那些 “不支持 RGBA 的浏览器”。虽然从现状上来说,这两个集合的重合度相当高,但代码的作用和我们的实际意图不符,这是一个不小的问题。
49-
50-
* 此外,这种回退样式的写法在 IE6、7、8 当道的年代还算说得通,但当 IE9+ 出现之后就站不住脚了。因为 IE9+ 一方面是支持 RGBA 的,另一方面又可以识别第二条声明,最终导致 IE9+ 也把元素显示为纯黑背景(它本可以显示出我们理想的效果)。在这里我们也可以看出 CSS Hack 的脆弱之处——没有人能对它的未来兼容性提供担保。
51-
52-
我们不妨换个思路,其实 CSS 有一项非常重要的 “向前兼容” 机制——当浏览器遇到无法识别的某行声明时,并不会报错或中止解析,只是默默地忽略它而已。(实际上 CSS Hack 之所以会起作用,也是利用了这个机制。另外,当浏览器遇到无法识别的选择符时,会忽略整条规则。)
53-
54-
因此,正确的代码组织方式应该是先写 “回退样式”,再写 “理想样式”:
55-
56-
```stylus
57-
background: #000;
58-
background: rgba(0,0,0,0.75);
59-
```
60-
61-
这种写法更像是具备了 “特性检测” 的功效:不支持 RGBA 的浏览器不识别第二条声明,因此只有第一条会生效;而对于支持 RGBA 的浏览器来说,它们可以同时识别这两条声明,但由于第二条声明的权重更高,这些浏览器最终将显示出半透明的效果。
62-
63-
> <sup>(插图来源:取自 @Justineo 的 GitHub-HoverCard 项目)</sup>
27+
* [如何正确编写 Fallback 样式](https://github.com/cssmagic/CSS-Secrets/issues/82)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
title: "[注解·加强版] 如何正确编写 Fallback 样式"
3+
---
4+
5+
在浏览器特性参差不齐的大环境下,“渐进增强” 与 “平稳退化” 是一种务实的策略。因此,在编写华丽样式的同时,我们还需要想好退路,为功能较弱的浏览器提供 fallback(回退样式)。
6+
7+
总的来说,我们应该利用 CSS 自身的机制来组织回退样式,而不是依赖 CSS hack 来实现。
8+
9+
![rgba-black](https://cloud.githubusercontent.com/assets/1231359/14772958/a0e504ca-0ad6-11e6-9d43-ccb4fe0da42c.jpg)
10+
11+
举个例子,设计师要求某个元素的背景色显示为半透明的黑色(如上图所示)。但我们都知道,低版本 IE 等浏览器并不支持 RGBA 颜色,因此对于这些浏览器,我们需要将它的背景色设置为最接近设计意图的纯黑色。那么在这里,半透明黑色是我们期望的 “理想样式”,而纯黑色则是用来兜底的 “回退样式”。
12+
13+
在搞清楚状况之后,我们很快写出了下面的代码:
14+
15+
```stylus
16+
background: rgba(0,0,0,0.75);
17+
background: #000\9;
18+
```
19+
20+
这段代码的意图是这样的:第一条声明是我们理想的样式,写给标准浏览器;第二条声明是专门写给 IE 的 CSS hack,因为只有 IE 浏览器才能识别这一行,所以在 IE 下这个元素的背景色就是黑色的了。
21+
22+
听起来似乎很有道理,现实中也有很多代码就是这样写的,但它存在一些明显的缺陷:
23+
24+
* 首先,第二行代码命中的是 “IE 浏览器”,但实际上我们应该命中那些 “不支持 RGBA 的浏览器”。虽然从现状上来说,这两个集合的重合度相当高,但代码的作用和我们的实际意图不符,这是一个不小的问题。
25+
26+
* 此外,这种回退样式的写法在 IE6、7、8 当道的年代还算说得通,但当 IE9+ 出现之后就站不住脚了。因为 IE9+ 一方面是支持 RGBA 的,另一方面又可以识别第二条声明,最终导致 IE9+ 也把元素显示为纯黑背景(它本可以显示出我们理想的效果)。在这里我们也可以看出 CSS Hack 的脆弱之处——没有人能对它的未来兼容性提供担保。
27+
28+
我们不妨换个思路,其实 CSS 有一项非常重要的 “向前兼容” 机制——当浏览器遇到无法识别的某行声明时,并不会报错或中止解析,只是默默地忽略它而已。(实际上 CSS Hack 之所以会起作用,也是利用了这个机制。另外,当浏览器遇到无法识别的选择符时,会忽略整条规则。)
29+
30+
因此,正确的代码组织方式应该是先写 “回退样式”,再写 “理想样式”:
31+
32+
```stylus
33+
background: #000;
34+
background: rgba(0,0,0,0.75);
35+
```
36+
37+
这种写法更像是具备了 “特性检测” 的功效:不支持 RGBA 的浏览器不识别第二条声明,因此只有第一条会生效;而对于支持 RGBA 的浏览器来说,它们可以同时识别这两条声明,但由于第二条声明的权重更高,这些浏览器最终将显示出半透明的效果。
38+
39+
> <sup>(插图来源:取自 \@Justineo 的 GitHub-HoverCard 项目)</sup>

0 commit comments

Comments
 (0)