CSS 整理

同样也是按照语言和功能来划分,语言部分从大到小有各种语法结构,比如@rule、选择器、单位等等;功能的部分大致可以分为布局、绘制和交互类。

在布局类我们常用的布局有: 正常流和弹性布局;绘制类则分成图形相关和文字相关的绘制;最后则是动画和其他的交互。

语法

@rule 规则

  • @charset 用于提示 CSS 文件使用的字符编码方式,它如果被使用,必须出现在最前面。这个规则只在给出语法解析阶段前使用,并不影响页面上的展示效果。
1
@charset "utf-8";
  • @import 用于引入一个 CSS 文件,除了 @charset 规则不会被引入,@import 可以引入另一个文件的全部内容。(支持 supports 和 media query 形式)
1
2
3
4
5
6
  @import "mystyle.css";
@import url("mystyle.css");
---
@import [ <url> | <string> ]
[ supports( [ <supports-condition> | <declaration> ] ) ]?
<media-query-list>? ;
  • @media media query 使用的规则,它能够对设备的类型进行一些判断。在 media 的区块内,是普通规则列表。
1
2
3
4
5
@media print {
body {
font-size: 10pt;
}
}
  • @page 用于分页媒体访问网页时的表现设置,页面是一种特殊的盒模型结构,除了页面本身,还可以设置它周围的盒。
1
2
3
4
5
6
7
8
9
10
11
@page {
size: 8.5in 11in;
margin: 10%;

@top-left {
content: 'Hamlet';
}
@top-right {
content: 'Page ' counter(page);
}
}
  • @counter-style 产生一种数据,用于定义列表项的表现。
1
2
3
4
5
@counter-style triangle {
system: cyclic;
symbols: ‣;
suffix: ' ';
}
  • @keyframes 产生一种数据,用于定义动画关键帧。
1
2
3
4
5
6
7
8
9
10
@keyframes diagonal-slide {
from {
left: 0;
top: 0;
}
to {
left: 100px;
top: 100px;
}
}
  • @fontface 用于定义一种字体,icon font 技术就是利用这个特性来实现的。
1
2
3
4
5
6
7
8
@font-face {
font-family: Gentium;
src: url(http://example.com/fonts/Gentium.woff);
}

p {
font-family: Gentium, serif;
}
  • @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

css-selector-gamma

  • 选择符 combinator
    • 空格: 后代选择器 选中所有子节点及其所有后代节点
    • >: 子元素选择器 选中子节点
    • +: 相邻兄弟选择器 选中下一个相邻节点
    • ~: 后续兄弟选择器 选中之后所有的相邻节点
    • ||: 列组选择器 Column combinator (实验内容) 选择表格的一列
  • 复合选择器 compound-selector
    • 类型选择器 type-selector
    • 子选择器 subclass-selector
      • id
      • class
      • 属性 attribute
      • 伪类 pseudo-class
    • 伪元素 pseudo-element

声明: 属性和值

声明部分是一个由“属性: 值”组成的序列。

  • 属性 是由中划线、下划线、字母等组成的标识符,CSS 还支持使用反斜杠转义。我们需要注意的是: 属性不允许使用连续的两个中划线开头,这样的属性会被认为是 CSS 变量。

    CSS Variables 标准中,以双中划线开头的属性被当作变量,与之配合的则是 var 函数:

1
2
3
4
5
6
7
8
:root {
--main-color: #06c;
--accent-color: #006;
}
/* The rest of the CSS file */
#foo h1 {
color: var(--main-color);
}
  • 的部分,主要在标准 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
    3
    ul {
    list-style-type: toggle(circle, square);
    }
    • attr() 函数允许 CSS 接受属性值的控制。

功能

布局

正常流

浏览器最基本的排版方案是正常流排版,它包含了顺次排布和折行等规则,这是一个跟我们提到的印刷排版类似的排版方案,也跟我们平时书写文字的方式一致,所以我们把它叫做正常流。

浏览器可以支持元素和文字的混排,元素被定义为占据长方形的区域,还允许边框、边距和留白,这个就是所谓的盒模型

在正常流的基础上,浏览器还支持两类元素: 绝对定位元素和浮动元素。

  • 绝对定位元素把自身从正常流抽出,直接由 top 和 left 等属性确定自身的位置,不参加排版计算,也不影响其它元素。绝对定位元素由 position 属性控制。
  • 浮动元素则是使得自己在正常流的位置向左或者向右移动到边界,并且占据一块排版空间。浮动元素由 float 属性控制。

弹性布局 flex

栅格布局 grid

绘制

颜色和形状

文字相关

交互

动画

其他交互