├── .gitignore ├── CSS ├── background.html ├── border.html ├── color │ ├── color.html │ └── opacity.html ├── content │ ├── content.html │ ├── counter-increment&counter-reset.html │ └── quotes.html ├── dimension.html ├── font │ ├── font-family.html │ ├── font-size-adjust.html │ ├── font-size.html │ ├── font-stretch.html │ ├── font-style.html │ ├── font-variant.html │ ├── font-weight.html │ └── font.html ├── hack.html ├── img │ ├── chenwubai │ │ ├── attachment_fixed.JPG │ │ ├── attachment_local.JPG │ │ ├── attachment_scroll.JPG │ │ ├── bg.JPG │ │ ├── border.png │ │ └── tubiao.png │ ├── z-index-1.png │ └── z-index-2.png ├── layout │ ├── display.html │ ├── float.html │ └── layout.html ├── list │ └── list-style.html ├── margin.html ├── media.html ├── padding.html ├── positioning │ └── position.html ├── printing.html ├── printing │ └── page.html ├── private.html ├── rules │ └── font-face.html ├── table │ ├── border-collapse.html │ ├── border-spacing.html │ ├── caption-side.html │ ├── empty-cells.html │ └── table-layout.html ├── text │ ├── block-vertical-center.html │ ├── line-height.html │ ├── tab-size.html │ ├── text-align&text-align-last.html │ ├── text-indent.html │ ├── text-transform.html │ ├── vertical-align.html │ ├── white-space.html │ ├── word-break&word-wrap&overflow-wrap.html │ └── word-spacing&letter-spacing.html ├── textDecoration │ ├── text-decoration.html │ └── text-shadow.html ├── transform.html └── writingModes │ ├── direction&unicode-bidi.html │ └── writing-mode.html ├── HTML ├── doctype.html ├── form │ ├── form.html │ ├── input.html │ └── others.html ├── head │ ├── head.html │ └── meta.html ├── html.html ├── iframe.html ├── layout.html ├── special.html ├── svg │ ├── svg.html │ ├── svg_others.html │ ├── svg_shape.html │ └── svg_structure.html ├── table │ ├── others.html │ └── table.html ├── text │ └── text.html └── video.html ├── JavaScript ├── Array-Prototype.html ├── Array.html ├── Date.html ├── Iterator.html ├── Module.html ├── Promise.html ├── Reflect.html ├── RegExp.html ├── String.html ├── WeakSetp-WeakMap.html ├── destructuring.html ├── error.html ├── es6Function.html ├── function.html ├── let-const.html ├── misc_miscellaneous.html ├── miscellaneous.html ├── object-prototype.html ├── seniorFunction.html ├── set-map.html ├── strictMode.html ├── undefined.html └── urlEncode.html ├── LICENSE ├── README.md ├── Webpack ├── Concepts │ ├── README.md │ ├── concepts-part1.md │ ├── concepts-part2.md │ └── concepts-part3.md ├── Configuration │ ├── README.md │ ├── configuration-part1.md │ ├── configuration-part2.md │ ├── configuration-part3.md │ ├── configuration-part4.md │ ├── configuration-part5.md │ └── configuration-part6.md ├── Loaders │ ├── README.md │ ├── loaders-part1.md │ ├── loaders-part2.md │ ├── loaders-part3.md │ ├── loaders-part4.md │ └── loaders-part5.md └── Plugins │ ├── README.md │ ├── webpack-plugins1-6.md │ ├── webpack-plugins13-18.md │ ├── webpack-plugins19-24.md │ ├── webpack-plugins25-30.md │ ├── webpack-plugins31-36.md │ └── webpack-plugins7-12.md └── images ├── Object-Function-prototype-proto.png ├── __proto__-prototype.png ├── hasOwnProperty-browser-support.png └── toString.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Object files 2 | *.o 3 | *.ko 4 | *.obj 5 | *.elf 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Libraries 12 | *.lib 13 | *.a 14 | *.la 15 | *.lo 16 | 17 | # Shared objects (inc. Windows DLLs) 18 | *.dll 19 | *.so 20 | *.so.* 21 | *.dylib 22 | 23 | # Executables 24 | *.exe 25 | *.out 26 | *.app 27 | *.i*86 28 | *.x86_64 29 | *.hex 30 | 31 | # Debug files 32 | *.dSYM/ 33 | 34 | .idea 35 | .DS_Store 36 | -------------------------------------------------------------------------------- /CSS/color/color.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 颜色属性介绍 6 | 29 | 30 | 31 |

颜色属性介绍-color

32 |

语法

33 | 41 |

说明

42 | 取值单位包括 43 |
44 |
颜色名称:颜色名称设定的color不一定能被识别
45 |
red,green
46 |
HEX:十六进制颜色值
47 |
#ff33E9;,#3e3/#33ee33
48 |
RGB:R[红]G[绿]B[蓝]
49 |
rgb(123,231,13),rgb(20%,25%,100%)
50 |
RGBA:比RGB多了一个透明度值
51 |
rgba(123,231,13,0.5)
52 |
HSL:H[色调][0-360]、S[饱和度][0%-100%]、L[亮度][0%-100%]
53 |
hsl(280,100%,
75%)
54 |
HSLA:比HSL多了一个透明度值
55 |
hsla(120,100%,75%,0.7)
56 |
transparent:透明色,IE8及以下浏览器将文本颜色设置为transparent,文本将显示为黑色
57 |
transparent
58 |
59 |

其他特性

60 |

1.color属性值被间接用来提供一个中间值 currentColor 以供其他接受颜色值的属性(如border)使用

61 | 62 |
63 | div{ 64 | border:2px solid; 65 | color:red; 66 | } 67 |
68 |

2.相应的脚本特性为color,即通过el.style.color即可设置或获取颜色

69 |

兼容性

70 |

颜色名称和RGB单位所有浏览器都支持.

71 |

RGBA,HSL,HSLA,transparent在IE6-8不支持。transparent会被设置成黑色(不管父级元素有没有color属性),其他方式设置无效,如果有继承的颜色就表现为继承的颜色,如果没有就是黑色(user agent)

72 | 73 | 74 | -------------------------------------------------------------------------------- /CSS/color/opacity.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 透明度属性介绍 6 | 29 | 30 | 31 |

透明度属性介绍-opacity

32 |

语法

33 | 41 |

说明

42 | <number>:使用浮点数,在0.0-1.0之间,0.0表示完全透明,1.0表示完全不透明,取值小于0.0的话按0.0展现,大于1.0的话按照1.0展现 43 |

其他特性

44 |

1.这里的透明度和color属性中rgba的透明度是有区别的,这里指的是整体的透明度,包括字体,颜色,边框,rgba只是表示字体的透明度。

45 |

2.如果既设置了rgba或hsla的透明度,又设置了opacity,容器中字体的透明度绘会叠加(应该是相乘的关系)

46 |
47 | div{ 48 | opacity:0.49; 49 | color:rgb(123,231,13); 50 | } 51 |
52 |
53 | div{ 54 | opacity:0.7; 55 | color:rgba(123,231,13,0.7); 56 | } 57 |
58 | 59 |

3.相应的脚本特性为opacity,即通过el.style.opacity即可设置或获取透明度

60 |

兼容性

61 |

IE6-8不支持该属性,可以通过设置IE私有的滤镜属性实现相同效果,opacity的取值范围是0-100,对应opacity的0.0-1.0

62 |
63 | div{ 64 | filter:alpha(opacity=50); 65 | opacity:0.5; 66 | } 67 |
68 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /CSS/content/content.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 在元素前或后显示内容 6 | 17 | 18 | 19 |

设置在元素前或后显示内容- content

20 |

取值

21 | 29 |

说明

30 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /CSS/content/counter-increment&counter-reset.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 计数器 6 | 33 | 34 | 35 |

设置计数器- counter-increment/counter-reset

36 |

取值

37 |

counter-increment/counter-reset

38 | 43 |

说明

44 | 47 |

示例

48 |
    49 |
  1. 列表项
  2. 50 |
  3. 列表项
  4. 51 |
  5. 列表项
  6. 52 |
53 |
    54 |
  1. 列表项
  2. 55 |
  3. 列表项
  4. 56 |
  5. 列表项
  6. 57 |
58 | 59 | 60 | -------------------------------------------------------------------------------- /CSS/content/quotes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 嵌套标记 6 | 20 | 21 | 22 |

设置嵌套标记- quotes

23 |

取值

24 | 28 |

说明

29 | 32 |

示例

33 |
34 |

Quote me Quote me Quote me!

35 |
36 | 37 | 38 | -------------------------------------------------------------------------------- /CSS/dimension.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 尺寸 6 | 33 | 34 | 35 |

尺寸相关

36 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /CSS/font/font-family.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 字体名称属性介绍 6 | 17 | 18 | 19 |

字体名称属性介绍-font-family

20 |

语法

21 | 29 |

取值说明

30 | 34 |

示例

35 |

指定字体

36 | 37 |

其他特性

38 |

1.相应的脚本特性为fontFamily,即通过el.style.fontFamily即可设置或获取字体类型

39 |

2.扩展字体 @font-face

40 |

兼容性

41 |

所有浏览器均支持该属性

42 | 43 | 44 | -------------------------------------------------------------------------------- /CSS/font/font-size-adjust.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 字体大小调整属性介绍 6 | 17 | 18 | 19 |

字体大小调整属性介绍-font-size-adjust

20 |

语法

21 | 29 |

取值说明

30 | 34 |

示例

35 |

这是正常的<h1>

36 |

这是设置font-size-adjust: 0.8的<h1>

37 |

这是设置font-size-adjust: 0.3的<h1>

38 | 39 |

其他特性

40 |

1.相应的脚本特性为fontSizeAdjust,即通过el.style.fontSizeAdjust即可设置或获取字体大小调整

41 |

2.字体的小写字母 "x" 的高度与字号之间的比率被称为一个字体的 aspect 值

42 |

3.高 aspect 值的字体被设置为很小的尺寸时会更易阅读。举例:Verdana 的 aspect 值是 0.58(意味着当字体尺寸为 100px 时,它的 x-height 是 58px)。Times New Roman 的 aspect 值是 0.46。这就意味着 Verdana 在小尺寸时比 Times New Roman 更易阅读。

43 |

4.可以使用这个公式来为可用字体推演出合适的字号:可应用到可用字体的字体尺寸 = 首选字体的字体尺寸 * (font-size-adjust 值 / 可用字体的 aspect 值)

44 |

兼容性

45 |

只有FireFox浏览器支持该属性

46 | 47 | 48 | -------------------------------------------------------------------------------- /CSS/font/font-size.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 字体大小属性介绍 6 | 17 | 18 | 19 |

字体大小属性介绍-font-size

20 |

语法

21 | 29 |

取值说明

30 | 36 |

示例

37 |

指定xx-small字体

38 |

指定x-small字体

39 |

指定small字体

40 |

指定medium字体

41 |

指定large字体

42 |

指定x-large字体

43 |

指定xx-large字体

44 | 45 |

指定smaller字体

46 |

指定larger字体

47 | 48 |

指定xx-large字体

49 | 50 |

父级20px指定父级60%的字体

51 | 52 |

其他特性

53 |

1.相应的脚本特性为fontSize,即通过el.style.fontSize即可设置或获取字体大小

54 |

兼容性

55 |

所有浏览器均支持该属性

56 | 57 | 58 | -------------------------------------------------------------------------------- /CSS/font/font-stretch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 字体宽度属性介绍 6 | 17 | 18 | 19 |

字体宽度属性介绍-font-stretch

20 |

语法

21 |

取值说明

22 |

示例

23 | 24 |

其他特性

25 |

1.相应的脚本特性为fontStretch,即通过el.style.fontStretch即可设置或获取字体宽度

26 |

兼容性

27 |

所有浏览器均 不支持该属性

28 | 29 | 30 | -------------------------------------------------------------------------------- /CSS/font/font-style.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 字体风格属性介绍 6 | 17 | 18 | 19 |

字体风格属性介绍-font-style

20 |

语法

21 | 29 |

说明

30 | 35 |

示例

36 |

指定正常字体

37 |

指定设置斜体字

38 |

指定倾斜的文本

39 | 40 |

其他特性

41 |

1.相应的脚本特性为fontStyle,即通过el.style.fontStyle即可设置或获取字体风格

42 |

兼容性

43 |

所有浏览器均支持该属性

44 | 45 | 46 | -------------------------------------------------------------------------------- /CSS/font/font-variant.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 小型大写字母属性介绍 6 | 17 | 18 | 19 |

小型大写字母属性介绍-font-variant

20 |

语法

21 | 29 |

说明

30 | 34 |

示例

35 |

This is normal font.

36 |

This is small-caps font.

37 | 38 |

其他特性

39 |

1.相应的脚本特性为fontVariant,即通过el.style.fontVariant即可设置或获取字体是否为小型的大写字母

40 |

兼容性

41 |

所有浏览器均支持该属性

42 |

注意事项

43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /CSS/font/font-weight.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 字体粗细属性介绍 6 | 17 | 18 | 19 |

字体粗细属性介绍-font-weight

20 |

语法

21 | 29 |

说明

30 | 37 |

示例

38 |

指定正常字体

39 |

指定设置粗体

40 |

指定设置更粗体

41 |

指定设置比继承的更轻的字体

42 |

指定设置800的字体

43 |

指定设置100的字体

44 | 45 |

其他特性

46 |

1.相应的脚本特性为fontWeight,即通过el.style.fontWeight即可设置或获取字体粗细

47 |

2.作用由客户端系统安装的字体的特定字体变量映射决定。系统选择最近的匹配。也就是说,用户可能看不到不同值之间的差异

48 |

兼容性

49 |

所有浏览器均支持该属性

50 | 51 | 52 | -------------------------------------------------------------------------------- /CSS/font/font.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 字体属性介绍 6 | 17 | 18 | 19 |

字体属性介绍-font

20 |

语法

21 | 29 |

说明

30 | 44 |

示例

45 |

指定字体大小和字体: 18px Simsun, arial

46 |

指定字体样式、大小和字体: italic 18px Simsun, arial

47 |

指定字体样式、小型大写字母、大小和字体: italic small-caps 18px Simsun, arial

48 |

指定字体样式、小型大写字母、粗细、大小和字体: italic small-caps bold 18px Simsun, arial

49 |

指定字体样式、小型大写字母、粗细、大小、行高和字体: italic small-caps bold 18px/20px Simsun, arial

50 |

指定字体为 caption = normal normal normal normal 13px normal .HelveticaNeueDeskInterface-Regular

51 |

指定字体为 icon = normal normal normal normal 13px normal .HelveticaNeueDeskInterface-Regular

52 |

指定字体为 menu = normal normal normal normal 13px normal .HelveticaNeueDeskInterface-Regular

53 |

指定字体为 small-caption = normal normal normal normal 11px normal .HelveticaNeueDeskInterface-Regular

54 |

指定字体为 status-bar = normal normal normal normal 10px normal .HelveticaNeueDeskInterface-Regular

55 | 56 |

其他特性

57 |

1.相应的脚本特性为font,即通过el.style.font即可设置或获取字体

58 |

兼容性

59 |

所有浏览器均支持该属性

60 |

需要注意的点

61 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /CSS/hack.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Hack - CSS 7 | 8 | 9 | 20 | 21 | 22 |

Hack

23 |

条件Hack

24 | 52 | 53 |

属性级Hack

54 | 73 | 74 |

选择符级Hack

75 | 96 | 97 | -------------------------------------------------------------------------------- /CSS/img/chenwubai/attachment_fixed.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/chenwubai/attachment_fixed.JPG -------------------------------------------------------------------------------- /CSS/img/chenwubai/attachment_local.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/chenwubai/attachment_local.JPG -------------------------------------------------------------------------------- /CSS/img/chenwubai/attachment_scroll.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/chenwubai/attachment_scroll.JPG -------------------------------------------------------------------------------- /CSS/img/chenwubai/bg.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/chenwubai/bg.JPG -------------------------------------------------------------------------------- /CSS/img/chenwubai/border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/chenwubai/border.png -------------------------------------------------------------------------------- /CSS/img/chenwubai/tubiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/chenwubai/tubiao.png -------------------------------------------------------------------------------- /CSS/img/z-index-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/z-index-1.png -------------------------------------------------------------------------------- /CSS/img/z-index-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xgfe/Basics/4a400988c69dd8cc8afd301f40b3f297eebc632c/CSS/img/z-index-2.png -------------------------------------------------------------------------------- /CSS/layout/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 常用布局 6 | 201 | 202 | 203 |

布局相关主要参考[张鑫旭]对布局的讲解

204 |

一列剧中:使用margin:0 auto剧中

205 |
206 |
207 | 208 | 209 |

单行两列布局:float布局

210 |
211 |
212 |
213 |
214 |
215 | 216 |

三行两列布局:定高

217 |
218 |
219 |
220 |
221 |
222 | 223 | 224 |

三列布局:使用absolute(定高)

225 |
226 |
227 |
228 |
229 |
230 | 231 |

三栏网页宽度自适应布局:左右两栏目宽度固定,中间拦宽度自适应--absolute

232 |
233 |
234 |
235 |
236 |
237 | 238 |

三栏网页宽度自适应布局:左右两栏目宽度固定,中间拦宽度自适应--margin负值法

239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 | 247 |

三栏网页宽度自适应布局:左右两栏目宽度固定,中间拦宽度自适应--自身浮动法

248 |
249 |
250 |
251 |
252 |
253 | 254 | -------------------------------------------------------------------------------- /CSS/list/list-style.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 列表项目相关内容 6 | 17 | 18 | 19 |

设置列表项目相关内容- list-style

20 |

语法

21 | 24 |

说明

25 | 30 |

注意事项

31 |

1.当使用符合属性时,list-style-image要写在list-style-type之后。

32 |

2.复合属性或单独属性都只适用于 display 设置为list-item的元素。

33 | 34 | 35 | -------------------------------------------------------------------------------- /CSS/padding.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 内补白相关 6 | 59 | 60 | 61 |

内补白相关

62 | 94 |

扩展

95 |

时常在我们设计页面的时候,margin和padding都能够在视觉上达到同样的效果。To be margin or to be padding, that's a question.

96 |

padding的作用是用来隔绝元素和其中的内容,而margin的作用是用隔绝元素与元素之间的距离。同时,对于隔开子元素和父元素的距离这样的问题,如果用margin的话,很可能会因为意外出现的margin折叠而打乱了自己的原本的设计。

97 |
98 |
99 |
我是孩子1和孩子2的父节点的兄弟节点,我的margin是30px。
100 |
101 |
我是孩子1,为了隔开与父亲的距离,我的margin-top为10px。
102 |
我是孩子2
103 |
104 |
105 |
106 |
我是孩子1和孩子2的父节点的兄弟节点,我的margin是30px。
107 |
108 |
我是孩子1,为了隔开我和父亲的距离,我的父亲的padding-top为10px。
109 |
我是孩子2
110 |
111 |
112 |
113 |

可以看到,上述左边的例子并没有达到想要的效果,因为这时候孩子1的父亲的兄弟节点的margin-bottom(30px)和孩子1的margin-top折叠了。所以,这时候用padding是更明智的选择。

114 |

参考链接

115 | 118 | 119 | -------------------------------------------------------------------------------- /CSS/positioning/position.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | positioning(定位)属性知识点总结 6 | 117 | 118 | 119 |

position

120 |
    121 |
  1. 含义:定义对象的定位方式
  2. 122 |
  3. 123 |

    取值

    124 |
      125 |
    1. 126 |

      static:对象遵循常规流.top,right,left,bottom等属性不会被应用.

      127 |
        128 |
      • 常规流中元素框的位置由元素所在HTML中的位置决定.
      • 129 |
      130 |
    2. 131 |
    3. 132 |

      relative:对象遵循常规流,并且参照自身在常规流中的位置通过 top,right,left,bottom属性进行偏移时不影响常规流中的任何元素.

      133 |
        134 |
      • 如果对一个元素进行相对定位,它将出现在它所在的位置上,通过设置水平或者垂直位置使元素"相对于"它的起点移动.使用相对定位,无论移动与否,它仍然占据原来的空间,移动元素会导致它覆盖其他框
      • 135 |
      • 136 |
        137 |

        Demo

        138 |
        139 |

        140 | position: relative; 141 | left:20px; 142 | top:20px; 143 |

        144 |
        145 |
        146 |
        147 |
      • 148 |
      149 |
    4. 150 |
    5. 151 |

      absolute:对象脱离常规流,使用top,right,left,bottom等属性进行绝对定位,盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠.

      152 |
        153 |
      • 绝对定位的元素的位置是相对于距离它最近的那个已定位的祖先元素确定的,如果元素没有已定位的祖先元素,那么它的位置是相对于初始包含块根据用户代理的不同,初始包含块可能是画布或者HTML元素.
      • 154 |
      • 绝对定位元素与文档流无关,因此它们不影响普通流中的框,如果扩大绝对定位的框,周围的框不会重新定位,因此,尺寸的任何变化都会导致绝对定位的框产生重叠
      • 155 |
      • 156 |
        157 |

        Demo

        158 |
        159 |

        Tel: 185159474XX

        160 |
        161 |
        162 |
      • 163 |
      164 |
    6. 165 |
    7. 166 |

      fixed:对象脱离常规流,使用top,right,left,bottom等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动.

      167 |
        168 |
      • 固定定位是绝对定位的一种,差异在.于固定定位元素的包含块是视口(viewport).可以创建总是出现在窗口中相同位置的浮动元素.
      • 169 |
      • IE6及以下版本不支持,IE7也只是部分支持.
      • 170 |
      • 171 |
        172 |

        Demo

        173 |
        174 |

        175 | demo: 176 | position:fixed; 177 | left:20px; 178 | top:20px; 179 |

        180 |
        181 |
        182 |
      • 183 |
      184 |
    8. 185 |
    9. 186 |

      center:对象脱离常规流,使用top,right,left,bottom等属性指定盒子的位置或尺寸大小.盒子在其包含容器垂直水平居中.盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠.(CSS3)(暂无浏览器支持)

      187 |
    10. 188 |
    11. 189 |

      page(css3)(暂无浏览器支持)

      190 |
    12. 191 |
    13. 192 |

      sticky:对象在常态时遵循常规流.它就像是「relative」和「fixed」的合体,当在屏幕中时按常规流排版,当卷动到屏幕外时则表现如「fixed」.该属性的表现是现实中你见到的吸附效果.如[美团商家位置]的效果(CSS3)(部分浏览器支持)

      193 |
    14. 194 |
    195 |
  4. 196 |
  5. 197 |

    注意事项

    198 |
      199 |
    1. 当 position的值为非static时,其层叠级别通过z-index属性定义.
    2. 200 |
    3. 绝对定位的元素,在top,right,left,bottom属性未设置时,会紧随在其前面的兄弟元素之后,但在位置上不影响常规流中的任何元素.
    4. 201 |
    202 |
  6. 203 |
204 | 205 |

z-index

206 |
    207 |
  1. 208 |

    含义:检索或设置对象的层叠顺序.为元素指定沿着Z轴的值.

    209 |
      210 |
    1. 在这个坐标系中有较高z-index值的元素比z-index值较低的元素离读者更近.
    2. 211 |
    3. 212 |

      图例

      213 |
        214 |
      • 215 |

        叠放概念视图

        216 | 217 |
      • 218 |
      • 219 |

        具体叠放

        220 | 221 |
      • 222 |
      223 |
    4. 224 |
    225 |
  2. 226 |
  3. 取值:auto(元素在当前层叠上下文中的层叠级别是0.元素不会创建新的局部层叠上下文,除非它是根元素的层叠上下文)|'integer'(可以为负值)li> 227 |
  4. 适用对象:定位元素
  5. 228 |
  6. 注意点:如果存在父元素设置了z-index,子元素也设置了z-index.则依据父元素设置的z-index进行覆盖,并且子元素不会超出父优先级.
  7. 229 |
  8. 230 |
    231 |

    Demo

    232 |
    233 |
    z-index:1 234 |
    z-index:100
    235 |
    236 |
    z-index:2 237 |
    z-index:10
    238 |
    239 |
    240 |
    241 |
  9. 242 |
243 | 244 |

clip

245 |
    246 |
  1. 含义:检索或设置对象的可视区域.区域外的部分是透明的.
  2. 247 |
  3. 248 |

    取值

    249 |
      250 |
    1. auto:对象无剪切
    2. 251 |
    3. rect(|auto |auto |auto |auto):依据上右下左的顺序提供自对象左上角(0,0)坐标计算的四个偏移数值,其中任何一个数值都可以用auto替换,即此边部剪切.
    4. 252 |
    5. '上,左'方位的裁剪:从0开始剪裁直到设定值,即'上,左'方位的auto值等同于0;
    6. 253 |
    7. '右,下'方位的裁剪:从设定值开始剪裁直到最右边和最下边,即 '右,下'方位的auto值为盒子的实际宽度和高度.
    8. 254 |
    255 |
  4. 256 |
  5. 适用对象:position设为absolute或fixed的元素.
  6. 257 |
  7. 注意:使用clip剪切掉的区域不可见.
  8. 258 |
  9. 259 |
    260 |

    Demo

    261 |
      262 |
    1. clip:rect(auto 50px 20px auto):上边不剪切,右边从左起第50个像素开始剪切直至最右边,下边从上起第20个像素开始剪切直至最底部,左边不剪切.
    2. 263 |
    3. 效果:剩余区域宽50px,高20px.
    4. 264 |
    265 |

    clip 属性剪切了一幅图像:

    266 |

    267 |
    268 |
  10. 269 |
270 | 271 | -------------------------------------------------------------------------------- /CSS/printing.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 打印属性 - CSS 7 | 8 | 9 | 10 | 11 |

打印属性

12 | 65 | 66 | -------------------------------------------------------------------------------- /CSS/printing/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | page demo 7 | 13 | 14 | 15 |

这是答应测试,请通过cmd+p开启打印预览查看效果。

16 |
@page:first{size: A4 landscape; margin: 50px;}
17 |
@page:left{size: A4 portrait; margin: 100px;}
18 |
@page{size: A4 portrait; margin: 150px;}
19 | 20 | -------------------------------------------------------------------------------- /CSS/private.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 常用浏览器私有属性 - CSS 7 | 8 | 9 | 20 | 21 | 22 |

常用浏览器私有属性

23 |

常用IE私有属性

24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 38 | 39 | 40 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 54 | 55 | 56 | 57 | 58 | 59 | 62 | 63 | 64 | 65 | 66 | 67 | 70 | 71 | 72 | 73 | 74 | 75 | 78 | 79 | 80 | 81 | 82 | 83 | 86 | 87 | 88 | 89 | 90 | 91 | 94 | 95 | 96 | 97 | 98 | 99 | 102 | 103 | 104 | 105 | 106 | 107 | 110 | 111 | 112 | 113 | 114 | 115 |
属性版本继承性描述
36 | scrollbar-3dlight-color 37 | CSS1检索或设置对象滚动条3d亮色阴影边框(threedlightshadow)的外观颜色。
44 | scrollbar-darkshadow-color 45 | CSS1检索或设置对象滚动条3d暗色阴影边框(threeddarkshadow)的外观颜色。
52 | scrollbar-highlight-color 53 | CSS1检索或设置对象滚动条3d高亮边框(threedhighlight)的外观颜色。
60 | scrollbar-shadow-color 61 | CSS1检索或设置对象滚动条3d阴影边框(threedshadow)的外观颜色。
68 | scrollbar-arrow-color 69 | CSS1检索或设置对象滚动条方向箭头的颜色。当滚动条出现但不可用时,此属性失效。
76 | scrollbar-face-color 77 | CSS1检索或设置对象滚动条3D表面的(threedface)的外观颜色。
84 | scrollbar-track-color 85 | CSS1检索或设置对象滚动条拖动区域的外观颜色。
92 | scrollbar-base-color 93 | CSS1检索或设置对象滚动条基准颜色,其它界面颜色将据此自动调整。
100 | filter 101 | CSS1设置或检索对象所应用的滤镜效果。
108 | behavior 109 | CSS1设置或检索对象的DHTML行为。
116 |

常用Firefox私有属性

117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 |
属性版本继承性描述
border-colorsCSS3设置或检索对象边框的多重颜色
border-top-colorsCSS3设置或检索对象顶边的多重颜色
border-right-colorsCSS3设置或检索对象右边的多重颜色
border-bottom-colorsCSS3设置或检索对象底边的多重颜色
border-left-colorsCSS3设置或检索对象左边的多重颜色
159 |

常用Webkit私有属性

160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 |
属性版本继承性描述
text-fill-colorCSS3设置或检索对象中的文字填充颜色
text-strokeCSS3复合属性。设置或检索对象中的文字的描边
text-stroke-widthCSS3设置或检索对象中的文字的描边厚度
text-stroke-colorCSS3设置或检索对象中的文字的描边颜色
box-reflectCSS3设置或检索对象的倒影
tap-highlight-colorCSS3设置或检索对象轻按时高亮
user-dragCSS3设置或检索一个元素可以被拖拽,而不它的内容
214 | 215 | -------------------------------------------------------------------------------- /CSS/rules/font-face.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 设置嵌入HTML文档的字体 6 | 23 | 24 | 25 |

设置嵌入HTML文档的字体-@font-face

26 |

语法

27 | 30 |

取值说明

31 | 34 |

示例

35 |
36 |   
37 |     @font-face {
38 |       font-family: 'iconfont';
39 |       src: url('../font/fontello.eot');    /* IE9*/
40 |       src: url('../font/fontello.eot#iefix') format('embedded-opentype'),  /* IE6-IE8 */
41 |       url('../font/fontello.woff') format('woff'),  /* chrome、firefox */
42 |       url('../font/fontello.ttf') format('truetype'),       /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
43 |       url('../font/fontello.svg#fontello') format('svg');   /* iOS 4.1- */
44 |     }
45 |   
46 | 
47 | 48 |

兼容性

49 |

不同格式的字体文件对于不同的浏览器。

50 |

扩展阅读

51 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /CSS/table/border-collapse.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 表格的行和单元格的边是合并还是独立 6 | 26 | 27 | 28 |

设置表格的行和单元格的边是合并还是独立- border-collapse

29 |

取值

30 | 34 |

说明

35 | 38 |

示例

39 | 40 | 41 | 42 | 43 | 44 | 45 |
10010000100
46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 |
100010000100
54 | 55 | 56 | -------------------------------------------------------------------------------- /CSS/table/border-spacing.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 行和单元格的边框在横向和纵向上的间距 6 | 23 | 24 | 25 |

设置行和单元格的边框在横向和纵向上的间距- border-spacing

26 |

取值

27 | 30 |

说明

31 | 35 |

示例

36 | 37 | 38 | 39 | 40 | 41 | 42 |
10010000100
43 |
44 | 45 | 46 | 47 | 48 | 49 | 50 |
100010000100
51 | 52 | 53 | -------------------------------------------------------------------------------- /CSS/table/caption-side.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 表格的caption对象的位置 6 | 21 | 22 | 23 |

设置表格的caption对象的位置- border-collapse

24 |

取值

25 | 29 |

说明

30 | 33 |

示例

34 |

caption在上边

35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
caption在上边
这是某一单元格这是某一单元格
这是某一单元格这是某一单元格
48 | 49 |

caption在右边

50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
caption在右边
这是某一单元格这是某一单元格
这是某一单元格这是某一单元格
63 | 64 |

caption在下边

65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
caption在下边
这是某一单元格这是某一单元格
这是某一单元格这是某一单元格
78 | 79 |

caption在左边

80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 |
caption在左边
这是某一单元格这是某一单元格
这是某一单元格这是某一单元格
93 | 94 | 95 | -------------------------------------------------------------------------------- /CSS/table/empty-cells.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 是否显示该单元格的边框 6 | 19 | 20 | 21 |

设置当表格的单元格无内容时,是否显示该单元格的边框- empty-cells

22 |

取值

23 | 27 |

说明

28 | 32 |

示例

33 |

show:

34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
序号姓名年龄
1Joy26
2Kate
53 | 54 |

hide:

55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
序号姓名年龄
1Joy26
2Kate
74 | 75 | 76 | -------------------------------------------------------------------------------- /CSS/table/table-layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 表格的布局算法 6 | 26 | 27 | 28 |

设置表格的布局算法- table-layout

29 |

取值

30 | 34 |

说明

35 | 38 |

示例

39 | 40 | 41 | 42 | 43 | 44 | 45 |
100000000000000000000000000010000000100
46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 |
100000000000000000000000000010000000100
54 |

设置两个table的三列宽度分别为20%,40%,40%,但是table-layout设置为auto的table并没有按照设置的宽度渲染,而是根据文本内容。table-layout设置为fixed的就可以按照指定宽度显示。

55 | 56 | 57 | -------------------------------------------------------------------------------- /CSS/text/block-vertical-center.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | vertical-center 6 | 60 | 61 | 62 |
63 |
 64 | .first .inner{
 65 |     position: absolute;
 66 |     left: 50%;
 67 |     top: 50%;
 68 |     margin-top: -50px;
 69 |     margin-left: -50px;
 70 | }
 71 |         
72 |
73 |
74 |
75 |
 76 | .second .inner{
 77 |     margin: auto;
 78 |     position: absolute;
 79 |     top: 0; left: 0; bottom: 0; right: 0;
 80 | }
 81 |     
82 |
83 |
84 |
85 |
 86 | .third{
 87 |     display: -webkit-box;
 88 |     (-webkit-)box-align:center;
 89 |     (-webkit-)box-pack:center;
 90 | }
 91 |     
92 |
93 |
94 |
95 |
96 |
 97 | .forth{
 98 |     display: table-cell;
 99 |     vertical-align:middle;
100 |     width: 500px;
101 | }
102 |     
103 |
104 |
105 |
106 |
107 | .fifth{
108 |     height:300px;
109 |     line-height: 300px;
110 | }
111 | .fifth .inner{
112 |     vertical-align:middle;
113 |     display: inline-block;
114 | }
115 |     
116 | 117 |
118 |
119 |
120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /CSS/text/line-height.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 元素内文本的行高 6 | 21 | 22 | 23 |

设置对象的行高。即字体最底端与字体内部顶端之间的距离- line-height

24 |

取值说明

25 | 31 |

示例

32 | 52 |

注意事项

53 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /CSS/text/tab-size.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 制表符的长度 6 | 20 | 21 | 22 |

设置制表符的长度- tab-size

23 |

取值说明

24 | 28 |

注意事项

29 | 33 |

示例

34 |
35 | 你站在桥上看风景,
36 | 	看风景的人在楼上看你。
37 | 明月装饰了你的窗子,
38 | 	你装饰了别人的梦。
39 | 
40 |

兼容性

41 |

兼容性不是很好,IE不兼容,高级浏览器的高级版本才兼容。

42 | 43 | 44 | -------------------------------------------------------------------------------- /CSS/text/text-align&text-align-last.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本对齐方式 6 | 87 | 88 | 89 |

设置文本对齐方式- text-align,text-align-last

90 |

取值说明

91 | 101 |

注意事项

102 | 108 |

单行文本的两端对齐

109 |

由于所有主流浏览器都支持text-align的justify,但是大部分的浏览器不支持text-align-last属性,所以针对不同的浏览器需要采取不同的措施。

110 |

1.当支持text-align-last的时候,使用text-align-last将文本对齐,参看示例二。

111 |

2.当浏览器不支持text-align-last时,可以使用可以对非IE及IE7以上浏览器使用伪对象生成额外的内容(IE7及以下的使用)text-align-last,置于第二行并将其隐藏,这时第一行文本(即要对齐的那个单行文本)可使用text-align:justify来对齐。参看示例三。

112 |

示例一

113 |
114 |

正常情况下的start

115 |

正常情况下的left

116 |

特殊文本方向情况下的start

117 |

特殊文本方向情况下的left

118 |
119 |

示例二

120 |
121 |

我是 待对齐 文本

122 |
123 |

示例三

124 |
125 |

我也是 待对齐 文本

126 |
127 |

应用场景:form表单的label文本两端对齐

128 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /CSS/text/text-indent.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本的缩进 6 | 20 | 21 | 22 |

设置文本的缩进- text-indent

23 |

取值说明

24 | 28 |

注意事项

29 | 32 |

示例

33 |

我是内敛元素,我设置30px缩进无效

34 |

我是块级元素,我的左边有30px的缩进

35 |

兼容性

36 |

所有浏览器均不兼容CSS3新特性hanging 和 each-line。

37 | 38 | 39 | -------------------------------------------------------------------------------- /CSS/text/text-transform.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本的大小写 6 | 29 | 30 | 31 |

文本的大小写- text-transform

32 |

取值说明

33 | 40 |

示例

41 | 42 |
43 |

无转换

44 |
转换前:hello world!
45 |
转换后: hello world!
46 |
47 |
48 |

首字母大写

49 |
转换前:hello world!
50 |
转换后: hello world!
51 |
52 |
53 |

全部大写

54 |
转换前:hello world!
55 |
转换后: hello world!
56 |
57 |
58 |

全部小写

59 |
转换前:hello world!
60 |
转换后: hello world!
61 |
62 |
63 |

full-width(在Firefox中才能看到效果)

64 |
转换前:hello world!
65 |
转换后: hello world!
66 |
67 | 68 |

兼容性

69 |

full-width只有Firefox兼容

70 |

需要注意的点

71 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /CSS/text/vertical-align.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 垂直对齐 6 | 28 | 29 | 30 |

设置文本的垂直对齐- vertical-align

31 |

取值说明

32 | 38 |

注意事项

39 | 42 |

示例

43 | 81 |

扩展

82 |

vertical-align只是文本的垂直对齐,而且只适用于内联元素,这里列举了一些块垂直居中的方式,传送门

83 | 84 | 85 | -------------------------------------------------------------------------------- /CSS/text/white-space.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本空格的处理方式 6 | 17 | 18 | 19 |

元素里文本空格的处理方式- white-space

20 |

取值说明

21 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
取值换行符空格和制表符文字转行
normal合并合并转行
nowrap合并合并不转行
pre保留保留不转行
pre-wrap保留保留转行
pre-line保留合并转行
41 |

兼容性

42 |

除pre-wrap和pre-line比较特殊之外,其他属性均兼容多浏览器,pre-wrap和pre-line个别旧浏览器不兼容。

43 | 44 | 45 | -------------------------------------------------------------------------------- /CSS/text/word-break&word-wrap&overflow-wrap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本的字内换行行为 6 | 17 | 18 | 19 |

元素内文本的字内换行行为- word-break,word-wrap,overflow-wrap

20 |

21 | 这三个属性都是定义元素内文本换行行为(内容超出容器边界是否断行)。 22 |

23 |

取值说明

24 |

word-break

25 | 30 |

word-wrap,overflow-wrap

31 | 35 |

注意事项

36 | word-break主要用于亚洲语言的折断换行,而word-wrap和overflow-wrap主要用户非亚洲语言的折断换行,而且在CSS3中将 word-wrap改名为overflow-wrap,所以在需要文本超出容器折断换行的话,需要同时写三个属性,即: 37 |
38 |     word-break:break-all;
39 |     word-wrap:break-word;
40 |     overflow-wrap:break-word;/*为了保证向前兼容*/
41 | 
42 |

这样才能保证最大的兼容性。

43 | 44 | 45 | -------------------------------------------------------------------------------- /CSS/text/word-spacing&letter-spacing.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 单词以及字母之间的间距 6 | 23 | 24 | 25 |

单词以及字母之间的间距- word-spacing,letter-spacing

26 |

取值说明

27 | 31 |

注意事项

32 | 35 |

示例一:word-spacing

36 |
37 |

我是正常文本间距

38 |

我 的 文 本 间 距 是 20px

39 |
40 |

示例二:letter-spacing

41 |
42 |

Normal Hello World

43 |

Hello World

44 |
45 |

兼容性

46 |

所有浏览器都不支持百分比属性值。

47 | 48 | 49 | -------------------------------------------------------------------------------- /CSS/textDecoration/text-decoration.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本装饰属性 6 | 17 | 18 | 19 |

文本装饰属性- text-decoration

20 |

语法

21 | 24 |

说明

25 | 30 |

注意事项

31 |

1.大部分浏览器都不支持text-decoration-line的blink值。

32 |

2.text-decoration-style的取值dotted和dashed取值在除FF的浏览器中要么实现不了,要么表现为实线。

33 |

兼容性

34 |

FireFox对text-decoration属性支持的比较好,其他浏览器欠佳。

35 | 36 | 37 | -------------------------------------------------------------------------------- /CSS/textDecoration/text-shadow.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本的文字是否有阴影及模糊效果 6 | 21 | 22 | 23 |

文本的文字是否有阴影及模糊效果- text-shadow

24 |

取值

25 | 32 |

说明

33 | 36 |

示例

37 |
38 |

火焰文字

39 |
40 | 41 | 42 | -------------------------------------------------------------------------------- /CSS/writingModes/direction&unicode-bidi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本流的方向 6 | 28 | 29 | 30 |

设置文本流的方向- direction&unicode-bidi

31 |

direction取值

32 | 36 |

unicode-bidi取值

37 | 42 |

说明

43 | 46 |

示例

47 |
48 |

本段文字将按照从左到右的方向进行流动。

49 |

本段文字将按照从右到左的方向进行流动。

50 |
51 | 52 | 53 | -------------------------------------------------------------------------------- /CSS/writingModes/writing-mode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本流的方向 6 | 17 | 18 | 19 |

设置对象的内容块固有的书写方向- writing-mode

20 |

取值

21 | 28 |

说明

29 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /HTML/doctype.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <!DOCTYPE>标签简介 6 | 11 | 12 | 13 |

<!DOCTYPE>标签简介

14 |

<!DOCTYPE>不是HTML标签,它是一项声明,告诉浏览器目前所处的文档是什么类型的文档,从而让浏览器能够正常的显示网页。

15 |

因为HTML 4.0基于SGML,所以在HTML 4.01中引用了DTD,DTD的作用是规定标记语言的规则;而HTML 5不是基于SGML的,所以不需要引用DTD。

16 |

常见声明

17 | 66 | 67 | -------------------------------------------------------------------------------- /HTML/form/form.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The form element 6 | 9 | 10 | 11 |

form元素属性列表

12 | 38 |

示例:

39 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /HTML/form/input.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The input Element 6 | 9 | 10 | 11 |

input元素属性列表

12 | 67 |

示例:

68 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /HTML/form/others.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The other Elements 6 | 9 | 10 | 11 |

form元素中的其它元素简介

12 | 64 |

示例:

65 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /HTML/head/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The head Element 6 | 13 | 14 | 15 |

<head>标签简介

16 |

17 | head标签用于描述文档的头部,它是所有文档头部元素的容器。
18 | 在head部分可以使用<base>, <link>, <meta>, <script>, <style>以及<title>标签。
19 | 在head标签上支持profile属性和html的全局属性,profile属性的值是一个由空格分隔的url列表,这些url包含着有关页面的元数据信息,profile属性主要是为将来的开发保留的占位符。 20 |

21 |

可以用在head中的标签

22 | 85 |

示例:

86 | 141 | 142 | -------------------------------------------------------------------------------- /HTML/head/meta.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The meta Element 6 | 10 | 11 | 12 |

<meta>标签简介

13 |

14 | meta元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。 15 | meta标签位于文档的头部,不包含任何内容。<meta>标签的属性定义了与文档相关联的名称/值对。 16 |

17 |

meta标签上的属性

18 | 37 |

示例:

38 | 43 | 44 | -------------------------------------------------------------------------------- /HTML/html.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The html Element 6 | 12 | 13 | 14 |

<html>标签简介

15 |

html元素的作用是告诉浏览器其本身是一个html文档。

16 |

<html>与</html>标签限定了文档的开始点和结束点,在它们之间是文档的头部和主体。

17 |

<html>标签上的属性如下:

18 | 27 |

html的全局属性如下(忽略部分被大多数浏览器不支持的属性):

28 | 64 |

html标签示例:

65 |
66 | <!DOCTYPE html>
67 | <html lang="en">
68 |   <head>
69 |     <meta charset="UTF-8">
70 |     <title></title>
71 |   </head>
72 |   <body>
73 |   </body>
74 | </html>
75 |
76 | 77 | -------------------------------------------------------------------------------- /HTML/iframe.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The Iframe element 6 | 14 | 15 | 16 |

iframe元素

17 | 54 |

示例:

55 | 78 | 79 | 80 | 81 | 90 | -------------------------------------------------------------------------------- /HTML/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 布局标签简介 6 | 16 | 17 | 18 |

布局标签简介

19 |

布局类标签

20 | HTML5 layout 21 | 85 |

列表类标签

86 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /HTML/special.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 特殊标签简介 6 | 13 | 14 | 15 |

特殊标签简介

16 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /HTML/svg/svg.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SVG简介 6 | 17 | 18 | 19 |

SVG简介

20 |

SVG意为可缩放矢量图形,全称为Scalable Vector Graphics。

21 |

SVG是使用 XML 来描述二维图形和绘图程序的语言。

22 |

SVG的使用形式

23 | 77 |

SVG中的全局属性

78 |

有一些属性在SVG内的元素上是基本通用的,它们是:

79 | 87 |

在SVG中,值可以带单位也不可以不带。一个不带单位的值可以在用户空间中通过用户单位声明。如果值通过用户单位声明,那么这个值的数值被认为和px单位的数值一样。

88 |

SVG的兼容性

89 |

目前除了IE在9之前(不包括9)不支持SVG以外,各大浏览器基本都对SVG进行了支持,详情可参见Caniuse

90 |

参考资料

91 | 99 | 100 | -------------------------------------------------------------------------------- /HTML/svg/svg_others.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SVG元素 6 | 23 | 24 | 25 |

SVG除形状和结构外的常用元素

26 | 156 |

参考资料

157 | 168 | 169 | -------------------------------------------------------------------------------- /HTML/svg/svg_shape.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SVG形状相关元素 6 | 22 | 23 | 24 |

SVG形状相关元素

25 | 194 |

参考资料

195 | 203 | 204 | -------------------------------------------------------------------------------- /HTML/svg/svg_structure.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SVG结构相关元素 6 | 22 | 23 | 24 |

SVG结构相关元素

25 | 104 |

参考资料

105 | 110 | 111 | -------------------------------------------------------------------------------- /HTML/table/others.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The Table element 6 | 15 | 16 | 17 |

<th><td>

18 | 68 |

<col>

69 | 107 |

<colgroup>

108 | 144 |

<caption>

145 | 154 |

示例:

155 | 229 | 230 | 231 | -------------------------------------------------------------------------------- /HTML/table/table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The Table element 6 | 18 | 19 | 20 |

table标签属性列表

21 | 60 |

thead、tbody、tfoot

61 | 84 | 85 |

示例:

86 | 183 | 184 | 185 | -------------------------------------------------------------------------------- /HTML/text/text.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本类标签简介 6 | 13 | 14 | 15 |

文本类标签简介

16 |

HTML 文本标签用来组织文本块或者片段,一般放置在body标签中。这些标签具有较强的语义化涵义,对于可访问性和搜索引擎优化有积极的作用。

17 |

常见标签

18 | 139 |

计算机相关标签

140 | 176 |

其他特殊文本标签

177 | 231 | 232 | 233 | -------------------------------------------------------------------------------- /HTML/video.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The VIDEO element 6 | 18 | 19 | 20 |

video标签属性列表

21 | 58 |

audio标签属性列表

59 | 81 | 82 |

示例:

83 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /JavaScript/undefined.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | undefined 6 | 155 | 156 | 157 |

undefined

158 | 159 | 169 | 170 | 171 | 172 | 173 | 174 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 鲜果FE 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Basics 2 | Frontend Basic Knowledge 3 | -------------------------------------------------------------------------------- /Webpack/Concepts/README.md: -------------------------------------------------------------------------------- 1 | # Webpack: concepts 2 | -------------------------------------------------------------------------------- /Webpack/Concepts/concepts-part2.md: -------------------------------------------------------------------------------- 1 | by huopanpan 2018.07 2 | 3 | ### 目录: 4 | * configuration 5 | * 基本配置 6 | * 多个Target 7 | * 使用其他配置语言 8 | * modules 9 | * webpack模块 10 | * 支持的模块类型 11 | * module resolution 12 | * webpack中的解析规则 13 | * Resolving Loaders 14 | * 缓存 15 | * dependency graph 16 | * 如何生成依赖关系 17 | * Stats Data 18 | 19 | ## 配置(configuration) 20 | 21 | 你可能注意到,很少有webpack配置看起来完全相同。这是因为webpack的配置文件,是导出一个对象的JavaScript文件。此对象是由webpack根据对象定义的属性进行解析。 22 | 23 | 因为webpack配置是标准的Node.js CommonJS模块,你可以做到以下事情: 24 | 25 | - 通过 `require(...)` 导入其他文件 26 | - 通过 `require(...)` 使用npm的工具函数 27 | - 使用JavaScript控制流表达式,例如 `?:` 操作符 28 | - 对常用值使用常量或变量 29 | - 编写并执行函数来生成部分配置 30 | 31 | 请在合适的时机使用这些特性。 32 | 33 | 虽然技术上可以,但应避免以下做法: 34 | 35 | - 在使用webpack命令接口(CLI)时访问CLI参数(应该编写自己的命令接口(CLI),或者使用 `--env`) 36 | - 导出不确定的值(调用webpack两次应该产生同样的输出文件) 37 | - 编写很长的配置(应该将配置拆分为多个文件) 38 | 39 | webpack配置可以有很多种的格式和风格,但为了团队能够易于理解和维护,团队中应始终采取同一种用法、格式和风格。 40 | 41 | ### 基本配置 42 | 43 | webpack.config.js 44 | 45 | ``` 46 | var path = require('path'); 47 | 48 | module.exports = { 49 | mode: 'development', 50 | entry: './foo.js', 51 | output: { 52 | path: path.resolve(__dirname, 'dist'), 53 | filename: 'foo.bundle.js' 54 | } 55 | }; 56 | ``` 57 | 58 | ### 多个Target 59 | 60 | - 导出为一个函数 61 | - 导出一个Promise 62 | - 导出多个配置对象 63 | 64 | **更详细地内容请参考之后配置中的configuration types部分。** 65 | 66 | ### 使用其他配置语言 67 | 68 | webpack接受以多种编程和数据语言编写的配置文件。 69 | 70 | - TypeScript 71 | - CoffeeScript 72 | - Babel and JSX 73 | 74 | **更详细地内容请参考之后配置中的configuration languages部分。** 75 | 76 | ## 模块(modules) 77 | 78 | 在模块化编程中,开发者将程序分解成离散功能块,并称之为模块。 79 | 80 | 每个模块具有比完整程序更小的接触面,使得校验、调试、测试轻而易举。精心编写的模块提供可靠的抽象和封装界限,使得应用程序中每个模块都具有条理清楚的设计和明确的目的。 81 | 82 | Node.js从最一开始就支持模块化编程。然而,在web,模块化的支持正缓慢到来。在web存在多种支持JavaScript模块化的工具,这些工具各有优势和限制。webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文件。 83 | 84 | ### 什么是webpack模块 85 | 86 | 与Node.js模块相比较,webpack模块能够以各种方式表达它们的依赖关系,例子如下: 87 | 88 | - ES2015 `import` 语句 89 | - CommonJS require() 语句 90 | - AMD define 和 require 语句 91 | - css/sass/less 文件中的 `@import` 语句 92 | - 样式( `url(...)` )或HTML文件( `` )中的图片链接(image url) 93 | 94 | *webpack1 需要特定的loader来转换ES2015 `import` ,然而通过webpack2可以直接使用。* 95 | 96 | ### 支持的模块类型 97 | webpack通过loder可以支持各种语言和预处理器编写模块。loader描述了webpack如何处理非JavaScript(non-JavaScript)模块,并且在bundle中引入这些依赖。webpack社区已经为各种流行语言和语言处理器构建了loader,包括: 98 | 99 | - CoffeeScript 100 | - TypeScript 101 | - ESNext(Babel) 102 | - Sass 103 | - Less 104 | - Stylus 105 | 106 | 总的来说,webpack提供了可定制的、强大和丰富的API,允许任何技术栈使用webpack,保持了在开发、测试和生成流程中**无侵入性(non-opinionated)**。 107 | 108 | **有关完整的列表,请参看之后的loader章节或自己编写。** 109 | 110 | ## 模块解析(module resolution) 111 | 112 | resolver是一个库(library),用于帮助找到模块的绝对路径。一个模块可以作为另一个模块的依赖模块,然后被后者引用。如下: 113 | 114 | ``` 115 | import foo from 'path/to/module' 116 | // 或者 117 | require('path/to/module') 118 | ``` 119 | 所依赖的模块可以是来自应用程序代码或第三方的库(library)。resolver帮助webpack找到bundle中需要引入的模块代码,这些代码在包含每个 `require` / `import`语句中。当打包模块时,`webpack` 使用enhanced-resolve来解析文件路径 120 | 121 | ### webpack中的解析规则 122 | 123 | 使用 `enhanced-resolve` ,webpack能够解析三种文件路径: 124 | 125 | - 绝对路径 126 | - 相对路径 127 | - 模块路径 128 | 129 | ### 绝对路径 130 | 131 | ``` 132 | import "/home/me/file"; 133 | 134 | import "C:\\Users\\me\\file"; 135 | ``` 136 | 137 | 已经取得文件的绝对路径,因此不需要进一步再做解析。 138 | 139 | ### 相对路径 140 | 141 | ``` 142 | import "../src/file1"; 143 | import "./file2"; 144 | ``` 145 | 146 | 在这种情况下,使用 `import` 或 `require` 的资源文件(resource file)所在的目录被认为是上下文目录(context directory)。在 `import/require` 中给定的相对路径,会添加此上下文路径(context path),以产生模块的绝对路径(absolute path)。 147 | 148 | ### 模块路径 149 | 150 | ``` 151 | import "module"; 152 | import "module/lib/file"; 153 | ``` 154 | 155 | 模块将在 `resolve.modules` 中指定的所有目录内搜索。也可以替换初始模块路径,此替换路径通过使用 `resolve.alias` 配置选项来创建一个别名。 156 | 157 | 一旦根据上述规则解析路径后,解析器(resolver)将检查路径是否指向文件或目录。如果路径指向一个文件: 158 | 159 | - 如果路径具有文件扩展名,则直接将文件打包。 160 | 否则,将使用[ `resolve.extensions` ]选项作为文件扩展名来解析,此选项告诉解析器在解析中能够接受哪些扩展名(例如 `.js` , `.jsx `) 。 161 | 162 | 如果路径指向一个文件夹,则采取以下步骤找到具有正确扩展名的正确文件: 163 | 164 | - 如果文件夹中包含 `package.json` 文件,则按照顺序查找 `resolve.mainFields` 配置选项中指定的字段,并且 `package.json` 中的第一个这样的字段确定文件路径。 165 | - 如果 `package.json` 文件不存在或者 `package.json` 文件中的main字段没有返回一个有效路径,则按照顺序查找 `resolve.mainFiles` 配置选项中指定的文件名,看是否能在 import/require 目录下匹配到一个存在的文件名。 166 | - 文件扩展名通过 `resolve.extensions` 选项采用类似的方法进行解析。 167 | 168 | webpack根据构建目标为这些选项提供了合理的默认配置。 169 | 170 | ### 解析Loader(Resolving Loaders) 171 | 172 | Loader解析遵循与文件解析器指定的规则相同的队则。但是 `resolveLoader` 配置选项可以用来为Loader提供独立的解析规则。 173 | 174 | ### 缓存 175 | 176 | 每个文件系统访问都被缓存,以便更快触发对同一文件的多个并行或串行请求。在观察模式下,只有修改过的文件会从缓存中摘出。如果关闭观察模式,在每次编译前清理缓存。 177 | 178 | **更多详细地模块解析内容,请参考之后配置章节的解析(resolve)部分。** 179 | 180 | ## 依赖图(dependency graph) 181 | 182 | 任何时候,一个文件依赖于另一个文件,webpack就把此视为文件之间有依赖关系。这使得webpack可以接收非代码资源(例如图像或web字体),并且可以把它们作为依赖提供给应用程序。 183 | 184 | webpack从命令行或配置文件中定义的一个模块列表开始,处理应用程序。从这个入口起点开始,webpack递归地构建一个依赖图,这个依赖图包含着应用程序所需的每个模块,然后将所有这些模块打包为少量的bundle - 通常只有一个 - 可由浏览器加载 185 | 186 | *对于HTTP/1.1客户端,由webpack打包应用程序会尤其强大,因为在浏览器发起一个新请求时,它能够减少应用程序必须等待的实践。对于HTTP/2,可以使用代码拆分以及通过webpack打包来实现最佳优化* 187 | 188 | 189 | **如何生成依赖关系** 190 | 191 | 通过 webpack 编译源文件时,用户可以生成包含有关于模块的统计数据的 JSON 文件。这些统计数据不仅可以帮助开发者来分析应用的依赖图表,还可以优化编译的速度。这个 JSON 文件可以通过以下的命令来生成: 192 | 193 | ``` 194 | webpack --profile --json > compilation-stats.json 195 | ``` 196 | 197 | 这个标识是告诉 webpack compilation-stats.json 要包含依赖的图表以及各种其他的编译信息。一般来说,也会把 --profile 一起加入,这样每一个包含自身编译数据的模块对象(modules object) 都会添加 profile 。 198 | 199 | 为了能直观地观察依赖关系,可以访问[可视化依赖关系分析](http://webpack.github.io/analyse/) 200 | 201 | **详细地Stats Data内容,可以参看API模块的Stats Data部分**concepts-part1 202 | -------------------------------------------------------------------------------- /Webpack/Concepts/concepts-part3.md: -------------------------------------------------------------------------------- 1 | by pengxiaojia 2018.07 2 | 3 | ### 目录: 4 | 5 | * The Manifest 6 | * Runtime 7 | * Manifest 8 | * Target 9 | * 用法 10 | * 多个Target 11 | * 资源 12 | * Hot module replacement 13 | * 应用程序中 14 | * 编译器中 15 | * 模块中 16 | * HMR Runtime中 17 | 18 | ##The Manifest 19 | **使用webpack构建的典型应用程序或站点,会有三种主要的代码类型** 20 | 21 | 1. 你或你的团队编写的源码。 22 | 2. 你的源码会依赖的任何第三方的 library 或 "vendor" 代码。 23 | 3. webpack 的 runtime 和 manifest,管理所有模块的交互。 24 | 25 | 这里重点介绍着三部分中的最后部分,**runtime**和**manifest** 26 | 27 | ###Runtime 28 | 这里我们只是简单的介绍一下. runtime连同manifest数据,主要是指:在浏览器运行时,webpack 用来连接模块化的应用程序的所有代码。runtime 包含:在模块交互时,连接模块所需的加载和解析逻辑。包括浏览器中的已加载模块的连接,以及懒加载模块的执行逻辑。 29 | 30 | ###Manifest 31 | 那么,一旦你的应用程序中,形如 index.html 文件、一些 bundle 和各种资源加载到浏览器中,会发生什么?你精心安排的 /src 目录的文件结构现在已经不存在,所以 webpack 如何管理所有模块之间的交互呢?这就是 manifest 数据用途的由来…… 32 | 33 | 当编译器(compiler)开始执行、解析和映射应用程序时,它会保留所有模块的详细要点。这个数据集合称为 "Manifest",当完成打包并发送到浏览器时,会在运行时通过 Manifest 来解析和加载模块。无论你选择哪种模块语法(ES6,commonJS,AMD),那些 import 或 require 语句现在都已经转换为 \__webpack _ require__ 方法,此方法指向模块标识符(module identifier)。通过使用 manifest 中的数据,runtime 将能够查询模块标识符,检索出背后对应的模块。 34 | 35 | ###问题 36 | 所以,现在你应该对 webpack 在幕后工作有一点了解。“但是,这对我有什么影响呢?”,你可能会问。答案是大多数情况下没有。runtime 做自己该做的,使用 manifest 来执行其操作,然后,一旦你的应用程序加载到浏览器中,所有内容将展现出魔幻般运行。然而,如果你决定通过使用浏览器缓存来改善项目的性能,理解这一过程将突然变得尤为重要。 37 | 38 | 通过使用 bundle 计算出内容散列(content hash)作为文件名称,这样在内容或文件修改时,浏览器中将通过新的内容散列指向新的文件,从而使缓存无效。一旦你开始这样做,你会立即注意到一些有趣的行为。即使表面上某些内容没有修改,计算出的哈希还是会改变。这是因为,runtime 和 manifest 的注入在每次构建都会发生变化。 39 | 40 | 查看管理构建文件指南的 [manifest](https://www.webpackjs.com/guides/output-management#the-manifest) 部分,了解如何提取 manifest,并阅读下面的指南,以了解更多长效缓存错综复杂之处。 41 | ###进一步阅读 42 | 43 | - [分离 Manifest](https://survivejs.com/webpack/optimizing/separating-manifest/) 44 | - [使用 webpack 提供可预测的长效缓存](https://medium.com/webpack/predictable-long-term-caching-with-webpack-d3eee1d3fa31) 45 | - [缓存](https://www.webpackjs.com/guides/caching) 46 | 47 | ##Target 48 | **因为服务器和浏览器代码都可以用 JavaScript 编写,所以 webpack 提供了多种构建目标(target),你可以在你的 webpack 配置中设置。** 49 | 50 | ###用法 51 | 设置 target 属性,只需要在你的 webpack 配置中设置 target 的值。 52 | 53 | **webpack.config.js** 54 | 55 | ``` 56 | module.exports = { 57 | target: 'node' 58 | }; 59 | ``` 60 | 在上面例子中,使用 node webpack 会编译为用于「类 Node.js」环境(使用 Node.js 的 require ,而不是使用任意内置模块(如 fs 或 path)来加载 chunk)。 61 | 每个target都有各种部署(deployment)/环境(environment)特定的附加项,以支持满足其需求。查看[target 的可用值](https://www.webpackjs.com/configuration/target)。 62 | 63 | ###多个Target 64 | 尽管 webpack 不支持向 target 传入多个字符串,你可以通过打包两份分离的配置来创建同构的库: 65 | 66 | **webpack.config.js** 67 | 68 | ``` 69 | var path = require('path'); 70 | var serverConfig = { 71 | target: 'node', 72 | output: { 73 | path: path.resolve(__dirname, 'dist'), 74 | filename: 'lib.node.js' 75 | } 76 | //… 77 | }; 78 | 79 | var clientConfig = { 80 | target: 'web', // <=== 默认是 'web',可省略 81 | output: { 82 | path: path.resolve(__dirname, 'dist'), 83 | filename: 'lib.js' 84 | } 85 | //… 86 | }; 87 | 88 | module.exports = [ serverConfig, clientConfig ]; 89 | ``` 90 | 上面的例子将在你的 dist 文件夹下创建 lib.js 和 lib.node.js 文件。 91 | ###资源 92 | 从上面的选项可以看出有多个不同的部署_目标_可供选择。下面是一个示例列表,以及你可以参考的资源。 93 | 94 | [compare-webpack-target-bundles](https://github.com/TheLarkInn/compare-webpack-target-bundles):有关「测试和查看」不同的 webpack target 的大量资源。也有大量 bug 报告。 95 | 96 | [Boilerplate of Electron-React Application](https://github.com/chentsulin/electron-react-boilerplate):一个 electron 主进程和渲染进程构建过程的很好的例子。 97 | 98 | ##Hot module replacement 99 | 100 | **模块热替换(HMR - Hot Module Replacement)功能会在应用程序运行过程中替换、添加或删除模块,而无需重新加载整个页面。**主要是通过以下几种方式,来显著加快开发速度: 101 | 102 | - 保留在完全重新加载页面时丢失的应用程序状态。 103 | - 只更新变更内容,以节省宝贵的开发时间。 104 | - 调整样式更加快速 - 几乎相当于在浏览器调试器中更改样式。 105 | 106 | ###这一切是如何运行的 107 | 让我们从一些不同的角度观察,以了解 HMR 的工作原理. 108 | 109 | ####在应用程序中 110 | 通过以下步骤,可以做到在应用程序中置换(swap in and out)模块: 111 | 112 | 1. 应用程序代码要求 HMR runtime 检查更新。 113 | 2. HMR runtime(异步)下载更新,然后通知应用程序代码。 114 | 3. 应用程序代码要求 HMR runtime 应用更新。 115 | 4. HMR runtime(异步)应用更新。 116 | 117 | 你可以设置 HMR,以使此进程自动触发更新,或者你可以选择要求在用户交互时进行更新。 118 | 119 | ####在编译器中 120 | 除了普通资源,编译器(compiler)需要发出 "update",以允许更新之前的版本到新的版本。"update" 由两部分组成: 121 | 122 | 1. 更新后的 [manifest](https://www.webpackjs.com/concepts/manifest)(JSON) 123 | 2. 一个或多个更新后的 chunk (JavaScript) 124 | 125 | manifest 包括新的编译 hash 和所有的待更新 chunk 目录。每个更新 chunk 都含有对应于此 chunk 的全部更新模块(或一个 flag 用于表明此模块要被移除)的代码。 126 | 127 | 编译器确保模块 ID 和 chunk ID 在这些构建之间保持一致。通常将这些 ID 存储在内存中(例如,使用 [webpack-dev-server](https://www.webpackjs.com/configuration/dev-server/) 时),但是也可能将它们存储在一个 JSON 文件中。 128 | 129 | ####在模块中 130 | HMR 是可选功能,只会影响包含 HMR 代码的模块。举个例子,通过 style-loader 为 style 样式追加补丁。 为了运行追加补丁,style-loader 实现了 HMR 接口;当它通过 HMR 接收到更新,它会使用新的样式替换旧的样式。 131 | 132 | 类似的,当在一个模块中实现了 HMR 接口,你可以描述出当模块被更新后发生了什么。然而在多数情况下,不需要强制在每个模块中写入 HMR 代码。如果一个模块没有 HMR 处理函数,更新就会冒泡。这意味着一个简单的处理函数能够对整个模块树(complete module tree)进行更新。如果在这个模块树中,一个单独的模块被更新,那么整组依赖模块都会被重新加载。 133 | 134 | 有关 module.hot 接口的详细信息,请查看 [HMR API](https://www.webpackjs.com/api/hot-module-replacement) 页面。 135 | 136 | ####在HMR Runtime中 137 | 这些事情比较有技术性……如果你对其内部不感兴趣,可以随时跳到 [HMR API](https://www.webpackjs.com/api/hot-module-replacement) 页面或 [HMR 指南](https://www.webpackjs.com/guides/hot-module-replacement)。 138 | 139 | 对于模块系统的 runtime,附加的代码被发送到 parents 和 children 跟踪模块。在管理方面,runtime 支持两个方法 check 和 apply。 140 | 141 | check 发送 HTTP 请求来更新 manifest。如果请求失败,说明没有可用更新。如果请求成功,待更新 chunk 会和当前加载过的 chunk 进行比较。对每个加载过的 chunk,会下载相对应的待更新 chunk。当所有待更新 chunk 完成下载,就会准备切换到 ready 状态。 142 | 143 | apply 方法将所有被更新模块标记为无效。对于每个无效模块,都需要在模块中有一个更新处理函数,或者在它的父级模块们中有更新处理函数。否则,无效标记冒泡,并也使父级无效。每个冒泡继续直到到达应用程序入口起点,或者到达带有更新处理函数的模块(以最先到达为准)。如果它从入口起点开始冒泡,则此过程失败。 144 | 145 | 之后,所有无效模块都被(通过 dispose 处理函数)处理和解除加载。然后更新当前 hash,并且调用所有 "accept" 处理函数。runtime 切换回闲置状态,一切照常继续。 146 | 147 | ###入门 148 | 在开发过程中,可以将 HMR 作为 LiveReload 的替代。[webpack-dev-server](https://www.webpackjs.com/configuration/dev-server/) 支持 hot 模式,在试图重新加载整个页面之前,热模式会尝试使用 HMR 来更新。更多细节请查看[模块热更新指南](https://www.webpackjs.com/guides/hot-module-replacement)。 149 | 150 | 与许多其他功能一样,webpack 的强大之处在于它的可定制化。取决于特定项目需求,会有许多种配置 HMR 的方式。然而,对于多数实现来说,webpack-dev-server 能够配合良好,可以让你快速入门 HMR。 151 | 152 | -------------------------------------------------------------------------------- /Webpack/Configuration/README.md: -------------------------------------------------------------------------------- 1 | # Webpack: configuration 2 | -------------------------------------------------------------------------------- /Webpack/Loaders/README.md: -------------------------------------------------------------------------------- 1 | # Webpack: loaders -------------------------------------------------------------------------------- /Webpack/Loaders/loaders-part4.md: -------------------------------------------------------------------------------- 1 | by wangpan 2018.11 2 | 3 | * postcss-loader 4 | * raw-loader 5 | * react-proxy-loader 6 | * restyle-loader 7 | * sass-loader 8 | * script-loader 9 | * source-map-loader 10 | * style-loader 11 | 12 | ### postcss-loader 13 | 14 | install 15 | >npm i -D postcss-loader 16 | 17 | postcss.config.js 18 | 19 | ``` 20 | module.exports = { 21 | plugins: { 22 | 'postcss-cssnext': {} 23 | } 24 | } 25 | ``` 26 | 27 | webpack.config.js 28 | 29 | ``` 30 | module.exports = { 31 | module: { 32 | rules: [ 33 | { 34 | test: /.\css/ 35 | use: [ 36 | 'style-loader', 37 | { loader: 'css-loader', options: { importLoaders: 1 } }, 38 | 'postcss-loader' 39 | ] 40 | } 41 | ] 42 | } 43 | } 44 | ``` 45 | 常用插件列表 46 | 47 | 1. autoprefixer: 方便写出规范兼容的css,它的来源主要是can i use,插件的配置参数是browsers 48 | ``` 49 | module.exports = { 50 | plugins: [ 51 | require('autoprefixer')({ browsers: 'last 2 versions' }) 52 | ] 53 | } 54 | ``` 55 | 2. postcss-partial-import: 让css文件支持@import 56 | 3. cssnano : css代码的压缩工具 57 | 4. postcss-px2rem: 移动端适配使用的将px转换为rem的插件 58 | 59 | 推荐阅读:《深入Postcss Web设计》 60 | 61 | 62 | #### raw-loader 63 | 64 | 把文件内容作为字符串返回。 65 | 66 | install 67 | >npm install -D raw-loader 68 | 69 | 70 | webpack.config 71 | 72 | ``` 73 | module.exports = { 74 | module: { 75 | rules: [ 76 | test: /.\txt$/, 77 | use: 'raw-loader' 78 | ] 79 | } 80 | } 81 | ``` 82 | 83 | usage: 84 | 85 | ``` 86 | import txt from 'file.txt' 87 | ``` 88 | 89 | 90 | #### restyle-loader 91 | 92 | 通过hash值来触发样式重载 93 | 94 | install 95 | > npm install --save-dev restyle-loader 96 | 97 | 98 | webpack.config 99 | 100 | ``` 101 | module.exports = { 102 | { 103 | test: /\.css?$/, 104 | use: [ 105 | { 106 | loader: "restyle-loader" 107 | }, 108 | { 109 | loader: "file-loader", 110 | options: { 111 | name: "[name].css?[hash:8]" 112 | } 113 | } 114 | ] 115 | } 116 | } 117 | ``` 118 | 119 | #### sass-loader 120 | 对sass/scss css预编译语言进行编译 121 | install 122 | >npm install --save-dev node-sass sass-loader 123 | 124 | 125 | webpack.config 126 | 127 | ``` 128 | module.exports = { 129 | module: { 130 | rules: [{ 131 | test: /\.scss$/, 132 | use: [{ 133 | loader: "style-loader" // 将 JS 字符串生成为 style 节点 134 | }, { 135 | loader: "css-loader" // 将 CSS 转化成 CommonJS 模块 136 | }, { 137 | loader: "sass-loader" // 将 Sass 编译成 CSS 138 | }] 139 | }] 140 | } 141 | }; 142 | ``` 143 | 144 | Source maps 145 | 146 | 要启用 CSS source map,需要将 sourceMap 选项作为参数,传递给 sass-loader 和 css-loader 147 | 148 | webpack.config 149 | 150 | ``` 151 | module.exports = { 152 | devtool: "source-map", // any "source-map"-like devtool is possible 153 | module: { 154 | rules: [{ 155 | test: /\.scss$/, 156 | use: [{ 157 | loader: "style-loader" 158 | }, { 159 | loader: "css-loader", options: { 160 | sourceMap: true 161 | } 162 | }, { 163 | loader: "sass-loader", options: { 164 | sourceMap: true 165 | } 166 | }] 167 | }] 168 | } 169 | }; 170 | ``` 171 | 172 | 173 | #### script-loader 174 | 在全局上下文(global context)执行一次 JS 脚本。在 node.js 中不会运行 175 | 176 | install 177 | >npm install --save-dev script-loader 178 | 179 | webpack.config.js 180 | 181 | ``` 182 | module.exports = { 183 | module: { 184 | rules: [ 185 | { 186 | test: /\.exec\.js$/, 187 | use: [ 'script-loader' ] 188 | } 189 | ] 190 | } 191 | } 192 | ``` 193 | 194 | #### demo-source-map 195 | 对打包压缩过的文件进行源码映射,前提是该js文件有正确引用 196 | 197 | install 198 | >npm i -D source-map-loader 199 | 200 | 201 | ``` 202 | module.exports = { 203 | module: { 204 | rules: [ 205 | { 206 | test: /\.js$/, 207 | use: ["source-map-loader"], 208 | enforce: "pre" 209 | } 210 | ] 211 | } 212 | }; 213 | ``` 214 | 215 | #### style-loader 216 | 217 | Adds CSS to the DOM by injecting a