HTML/CSS/Javascript 查漏补缺

HTML/CSS/Javascript 查漏补缺

CSS 部分


https://developer.mozilla.org/zh-CN/docs/Web/CSS

* 基础

1. 选择器

2. @规则

@media@font-face@page@support

3. css 渲染机制

css渲染机制是建立在基础盒子模型之上的,图文样式、布局都可以抽象为对各个盒子的渲染排布。CSS 渲染的内容是HTML元素

4. 块级元素 vs 行内级元素

CSS 渲染的内容是HTML元素,分为块级元素和行内级元素。

行内即内联,本文将 inline 翻译为 行内

5. 基础盒模型

渲染引擎根据 CSS 基础盒模型将 元素 表示为一个个矩形盒子

每个盒子由四个部分(区域)组成:内容区域内边距区域边框区域外边距区域

6. 视觉格式化模型(visual formatting model)

https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Visual_formatting_model

视觉格式化模型会根据 基础盒模型 将文档中的元素转换为一个个盒子,该模型会根据盒子的包含块(containing block)的边界来渲染盒子。通常,盒子会创建一个包含其后代元素的包含块,但是盒子并不由包含块所限制,当盒子的布局跑到包含块的外面时称为溢出(overflow)。

块:block,一个抽象的概念,一个块在文档流上占据一个独立的区域,块与块之间在垂直方向上按照顺序依次堆叠。

包含块:containing block,包含其他盒子的块称为包含块。

7. 盒子 抽象的概念 CSS引擎创建元素定位布局视觉格式化

盒子与元素并不是一一对应的,有时多个元素会合并生成一个盒子,有时一个元素会生成多个盒子(如匿名盒子)。

盒子有多种类型:

块容器盒子侧重于当前盒子作为“容器”的这一角色,它不参与当前块的布局和定位,它所描述的仅仅是当前盒子与其后代之间的关系。换句话说,块容器盒子主要用于确定其子元素的定位、布局等。有些块级盒子并不是块容器盒子,比如表格;而有些块容器盒子也不是块级盒子,比如非替换行内块和非替换表格单元格。

我个人目前的理解是张鑫旭大佬可能只是为了通俗解释,实际情况是只生成了 块级盒子或者块容器盒子或块盒子,用哪种盒子主要看是否作为容器角色和是否参与布局定位。

但感觉还是有些问题(主要疑惑是:块盒子、块容器盒子是和块级盒子同级的概念还是块级盒子的特例,一个元素是不是会同时生成这些盒子),有空抠一下规范:



* 块格式化上下文(Block Formatting Context,BFC)

https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context

是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

块格式化上下文包含创建它的元素内部的所有内容.

块格式化上下文对浮动定位(参见 float)与清除浮动(参见 clear)都很重要。浮动定位和清除浮动时只会应用于同一个BFC内的元素。浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。

* box-sizing

box-sizing: >=IE8,指定 width/height 作用于哪个区域

box-sizing 默认为 content-box,内容区域的大小可明确地通过 width、min-width、max-width、height、min-height,和 max-height 控制。

支持情况:

.box1 { box-sizing: content-box; } /* 默认值 */
.box2 { box-sizing: padding-box; } /* Firefox曾经支持*/
.box3 { box-sizing: border-box; } /* 全线支持 */
.box4 { box-sizing: margin-box; } /* 从未支持过 */

* 确定包含块

确定一个元素的包含块的过程完全依赖于这个元素的 position 属性:

* float

在浮动定位中,浮动盒子会浮动到当前行的开始或尾部位置。这会导致普通流中的文本及其他内容会“流”到浮动盒子的边缘处,除非元素(块级元素)通过 clear 清除了前面的浮动。

一个盒子的 float 值不为 none,并且其 position 为 static 或 relative 时,该盒子为浮动定位。如果将 float 设置为 left,浮动盒子会定位到当前行盒子的开始位置(左侧),如果设置为 right,浮动盒子会定位到当前行盒子的尾部位置(右侧)。不管是左浮动还是右浮动,行盒子都会伸缩以适应浮动盒子的大小。

清除浮动

.clear::after {
  content: ' ';
  display: table | block | list-item; 只要是 块级元素 即可
  list-style: none;  针对 list-item,IE <=11不支持
  clear: both;
}

* height 百分比值

百分比高度值要想起作用:

jungle