同样也是按照语言和功能来划分,语言部分从大到小有各种语法结构,比如@rule、选择器、单位等等;功能的部分大致可以分为布局、绘制和交互类。
在布局类我们常用的布局有: 正常流和弹性布局;绘制类则分成图形相关和文字相关的绘制;最后则是动画和其他的交互。
语法
@rule 规则
- @charset 用于提示 CSS 文件使用的字符编码方式,它如果被使用,必须出现在最前面。这个规则只在给出语法解析阶段前使用,并不影响页面上的展示效果。
1 | @charset "utf-8"; |
- @import 用于引入一个 CSS 文件,除了 @charset 规则不会被引入,@import 可以引入另一个文件的全部内容。(支持 supports 和 media query 形式)
1 | @import "mystyle.css"; |
- @media media query 使用的规则,它能够对设备的类型进行一些判断。在 media 的区块内,是普通规则列表。
1 | @media print { |
- @page 用于分页媒体访问网页时的表现设置,页面是一种特殊的盒模型结构,除了页面本身,还可以设置它周围的盒。
1 | @page { |
- @counter-style 产生一种数据,用于定义列表项的表现。
1 | @counter-style triangle { |
- @keyframes 产生一种数据,用于定义动画关键帧。
1 | @keyframes diagonal-slide { |
- @fontface 用于定义一种字体,icon font 技术就是利用这个特性来实现的。
1 | @font-face { |
- @supports 检查环境的特性,它与 media 比较类似。
- @namespace 用于跟 XML 命名空间配合的一个规则,表示内部的 CSS 选择器全都带上特定命名空间。
- @viewport 用于设置视口的一些特性,不过兼容性目前不是很好,多数时候被 html 的 meta 代替。
- 其他 (不太推荐)
- @color-profile 是 SVG1.0 引入的 CSS 特性,但是实现状况不怎么好。
- @document 还没讨论清楚,被推迟到了 CSS4 中。
- @font-feature-values 。todo 查一下。
普通规则
关键词索引: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference#Keyword_index
选择器 complex-selector
- 选择符 combinator
空格
: 后代选择器 选中所有子节点及其所有后代节点>
: 子元素选择器 选中子节点+
: 相邻兄弟选择器 选中下一个相邻节点~
: 后续兄弟选择器 选中之后所有的相邻节点||
: 列组选择器 Column combinator (实验内容) 选择表格的一列
- 复合选择器 compound-selector
- 类型选择器 type-selector
- 子选择器 subclass-selector
- id
- class
- 属性 attribute
- 伪类 pseudo-class
- 伪元素 pseudo-element
声明: 属性和值
声明部分是一个由“属性: 值”组成的序列。
- 属性 是由中划线、下划线、字母等组成的标识符,CSS 还支持使用反斜杠转义。我们需要注意的是: 属性不允许使用连续的两个中划线开头,这样的属性会被认为是 CSS 变量。
在CSS Variables 标准中,以双中划线开头的属性被当作变量,与之配合的则是 var 函数:
1 | :root { |
-
值 的部分,主要在标准 CSS Values and Unit,根据每个 CSS 属性可以取到不同的值,这里的值可能是字符串、标识符。
CSS 属性值可能是以下类型。
- CSS 范围的关键字: initial,unset,inherit,任何属性都可以的关键字。
- 字符串: 比如 content 属性。
- URL: 使用 url() 函数的 URL 值。
- 整数 / 实数: 比如 flex 属性。
- 维度: 单位的整数 / 实数,比如 width 属性。
- 百分比: 大部分维度都支持。
- 颜色: 比如 background-color 属性。
- 图片: 比如 background-image 属性。
- 2D 位置: 比如 background-position 属性。
- 函数: 来自函数的值,比如 transform 属性。
CSS 支持一批特定的计算型函数:
- calc() 函数是基本的表达式计算,它支持加减乘除四则运算。在针对维度进行计算时,calc() 函数允许不同单位混合运算,这非常的有用。
- max() 表示取两数中较大的一个
- min() 表示取两数之中较小的一个
- clamp() 给一个值限定一个范围,超出范围外则使用范围的最大或者最小值
- toggle() (不建议使用,在任何浏览器中都不生效)函数在规则选中多于一个元素时生效,它会在几个值之间来回切换,比如我们要让一个列表项的样式圆点和方点间隔出现,可以使用下面代码:
1
2
3ul {
list-style-type: toggle(circle, square);
}- attr() 函数允许 CSS 接受属性值的控制。
功能
布局
正常流
浏览器最基本的排版方案是正常流排版,它包含了顺次排布和折行等规则,这是一个跟我们提到的印刷排版类似的排版方案,也跟我们平时书写文字的方式一致,所以我们把它叫做正常流。
浏览器可以支持元素和文字的混排,元素被定义为占据长方形的区域,还允许边框、边距和留白,这个就是所谓的盒模型
在正常流的基础上,浏览器还支持两类元素: 绝对定位元素和浮动元素。
- 绝对定位元素把自身从正常流抽出,直接由 top 和 left 等属性确定自身的位置,不参加排版计算,也不影响其它元素。绝对定位元素由 position 属性控制。
- 浮动元素则是使得自己在正常流的位置向左或者向右移动到边界,并且占据一块排版空间。浮动元素由 float 属性控制。