(一)基本语法

在简写属性中设置多个值时所代表的边:
一个值用于四边;
两个值用于上下、左右;
三个值用于上、左右、下;
四个值用于上、右、下、左。

01 - 优先级

名称描述
行内 CSS
内部 CSS
外部 CSS

多个样式修饰一个元素按上诉优先级 优先级相同则读取最后一个样式生效

  • 其他优先级:
名称描述
ID 选择器
类选择器
类型选择器与伪元素

!important 将覆盖任何其他声明 (不建议使用)

02 - 规则

名称描述
@charset样式表使用的字符集
@import引入一个外部样式表
@namespaceXML 命名空间
  • 嵌套 @ 规则,可用于语句或规则组:
名称描述
@supports特性查询,满足特定 CSS 功能生效
@media媒体查询,满足设定尺寸生效
@keyframes动画序列关键帧
@page打印时的布局变化
@font-face描述将下载的外部字体
@media screen and (max-width: 970px) {
  body {
    background-color: red;
  }
}

@keyframes move {
  0% { top: 0; left: 0}
  25% { top: 20px; left: 20px;}
  50% { top: 60px; left: 60px}
  75% { top: 20px; left: 20px;}
  100% { top: 100px; left: 100px;}
  /***
  from {}
  to {}
  ***/
}

03 - 单位

名称描述
em相对于父元素的字体大小
rem相对于根元素的字体大小
lh元素的行高
rlh根元素的行高
vw1% 设备的宽度
vh1% 设备的高度
px像素
pt
pc派卡 1pc = 12pt = 16px
deg360°

04 - 颜色

名称描述
HEX#rrggbb
RGBArgba(red, green, blue, alpha) 红、绿、蓝、透明度
HSLAhsla(hue, saturation, lightness, alpha) 色相、饱和度、明度、透明度

05 - 布局

  • 块级格式化上下文(BFC)

    根元素、浮动元素、绝对定位元素(absolutefixed)、行内块元素、表格单元格、表格标题、匿名表格单元格元素、overflow 值不为visibleclip 的块元素、display 值为 flow-root 的元素、contain 值为 layoutcontentpaint 的元素、弹性元素、网格元素、多列容器。

  • 盒模型

    所有元素表示为一个个矩形的盒子,CSS 决定这些盒子的大小、位置、属性,盒子由四部分组成,分为内容边界、内边距边界、边框边界、外边框边界。除可替换元素外,行内元素周围有内边距和边框,但是占用的空间则是由 line-height 属性决定的。

  • 包含块

    元素的尺寸和位置经常受到包含块的影响,包含块通常指的是最近的祖先块元素的内容区,一些属性设置的百分比是包含块计算而来的。确定一个包含块依赖于这个元素的 position 属性:
    (1) 属性为 staticrelativesticky,包含块由它最近的祖先块元素的内容区边缘决定;
    (2) 属性为 absolute,包含块是最近的值不是 static 的祖先元素的内边距的边缘决定;
    (3) 属性为 fixed,包含块是 viewport

  • 布局模式

    ① 块布局;② 行内布局;③ 表格布局;④ 定位布局;⑤ 弹性盒子布局;⑥ 网格布局。

  • 外边距合并

    块的上下边距有时合并为单个边距,大小为边距最大的一方,这种行为称为边距折叠。
    (1) 同一层相邻元素之间,可以通过给元素后面添加 clear-fix 清除浮动来解决;
    (2) 父元素与后代元素之间,设置边框或内边距来解决。
    此现象发生在块级元素中,当设置了浮动、相对或绝对定位之后不会发生外边距合并。

  • 替换元素

    替换元素的展现效果不是 CSS 控制的,是一种外部对象,CSS 只影响它的大小和位置而不能影响内容。iframevideoembedimg,特定情况下可替代:optionaudiocanvasobject

  • 层叠上下文

  • 视觉格式化模型

06 - 选择器

基本选择器描述
通配选择器*
元素选择器elementName
类选择器.className
ID选择器#idName
属性选择器[属性=值]
分组选择器描述
列表选择器A, B 同时选择 A 和 B 元素
组合选择器描述
相邻兄弟选择器A + B B 选择的元素在水平方向上紧随 A 选择的元素
普通兄弟选择器AˋB A 选择的元素在 B 选择的元素之前,但不一定紧接
子选择器A > B B 是 A 的直接子元素
后代选择器A B B 是 A 的后代,不一定是直接子代

07 - 背景

属性描述
background:背景
> background-colorrgba/hsla/hex背景颜色
> background-imageurl()背景图像
linear-gradient(1,2,3...)上下线性渐变色
linear-gradient(to right,1,2,3...)左右线性渐变色
linear-gradient(to bottom right,1,2,3...)对角线线性渐变色
radial-gradient(circle, 1, 2, 3...)径向渐变均匀间隔
radial-gradient(1 5%, 2 15%, 3 25%...)径向渐变不同间距
> background-repeatrepeat-x、repeat-y、space、round、no-repeat背景图像重复
> background-attachmentscroll,fixed,local背景图像滚动方式
> background-position (-x/-y)top、right、bottom、left、%背景图像位置
> background-sizepx、%、contain、cover背景图像大小
> background-originborder-box、padding-box、content-box背景图像起始位置
> background-clipborder-box、padding-box、content-box、text背景图像绘制区域
opacity0-1不透明度,子元素将继承
filter将滤镜添加给元素
backdrop-filter为元素后面的区域添加滤镜效果
blur()高斯模糊

08 - 边框

属性描述
border:边框
-top、-right、-bottom、-left
> border-widthpx宽度
> border-styledotted、dashed、solid、double、groove、ridge、inset、outset、none、hidden样式
> border-colorrgba/hsla/hex颜色
border-imageurl()绘图
border-blockpx边界
border-radiuspx圆角

09 - 边距

属性描述
marginpx、%、auto、inherit外边距
-top、-right、-bottom、-left
paddingpx、%、auto、inherit内边距
-top、-right、-bottom、-left

10 - 宽高

属性描述
widthpx、%、auto、inherit宽度
heightpx、%、auto、inherit高度
max-width/max-heightpx、%、auto、inherit最大宽度/高度
min-width/min-heightpx、%、auto、inherit最小宽度/高度
box-sizingcontent-box、border-box如何计算宽高

11 - 轮廓

属性描述
outline:轮廓
> outline-style同border-style轮廓样式
> outline-widthpx轮廓宽度
> outline-offsetpx轮廓偏移 (间隙)
> outline-colorrgba/hsla/hex轮廓颜色

12 - 文本

属性描述
colorrgba/hsla/hex文本颜色
text-alignleft、center、right、justify文本水平对齐
text-decorationnone文本装饰
text-transformuppercase、lowercase、capitalize文本转换
text-indentpx文字缩进
text-shadowX轴、Y轴、模糊、颜色文本阴影
text-overflowclip、ellipsis文本溢出处理
line-heightpx行高
directionltr、rtl文本方向 (正、反)
vertical-aligntop、middle、bottom文本垂直对齐
word-spacingpx字间距
letter-spacingpx字母间距
font:字体
> font-family"黑体"字体
> font-styleitalic字体样式
> font-weightbold、lighter、bolder、number字体粗细
> font-sizepx、em、%、vw、vh字体大小

13 - 列表

属性描述
list-style:
> list-style-typecircle、square、upper-roman、lower-alpha项目标记
> list-style-imageurl()项目图像标记
> list-style-positionoutside、inside项目标记定位

14 - 表格

属性描述
caption-sidetop、bottom表格标题位置
border-collapsecollapse、separate表格边框合并
border-spacingpx单元格间距
table-layoutauto、fixed表格行列算法

15 - 显示

属性描述
display元素的内部和外部显示类型,
外部指块级或内联,内部指子元素
none隐藏后元素不占位
> outside:block块级元素
inline行内元素
run-in取决于相邻元素的形态
> inside:flow流式布局
flow-root
table块级表格形式
flex弹性布局
grid网格布局
> listitem:list-item列表形式
> legacy:inline-block
inline-table
inline-flex
inline-grid
visibilityhidden隐藏后元素依然占位

16 - 定位

属性描述
positionstatic默认静态,根据正常文档流定位
relative相对定位,相对于正常位置,会占据原来的位置
absolute绝对定位,相对于最近定位的祖先元素,不再占据原来的位置 (移除文档流)
fixed相对于视口定位的一种绝对定位 (移除文档流)
sticky粘性定位,根据用户的滚动位置定位,在 relative 和 fixed 之间切换
toppx
bottompx
rightpx
leftpx
z-indexnumber元素的堆叠层次

17 - 溢出

属性描述
overflowvisible默认不裁剪,在元素框外渲染
hidden溢出被裁剪,内容不可见
scroll溢出被裁剪,添加滚动条
overflow-x水平方向的溢出行为
overflow-y垂直方向的溢出行为

18 - 浮动

属性描述
floatnone无浮动
left左浮动
right右浮动
inline-start容器开始一侧
inline-end容器结束一侧
clearleft清除左侧浮动
right清除右侧浮动
both清除两侧浮动

移除文档流

  • 因浮动溢出容器之外时:
::after {
	content: "";
	clear: both;
	display: block;
}

19 - 伪类

属性描述
:root匹配元素的根元素 html
:link匹配未访问的链接
:visited匹配已访问的链接
:active匹配激活的元素 (鼠标点下未松开时)
:any-link匹配所有 href 属性
:checked匹配选中状态的 radio、checkbox、option
:disabled匹配任何被禁用的元素
:enabled匹配任何启用的元素
:focus匹配获得焦点的元素 tab 键
:in-rang匹配在指定范围的 input 元素
:out-of-child匹配在范围外的 input 元素
:valid匹配内容验证正确的 input 元素
:invalid匹配未通过验证的 input 元素
:hover鼠标悬停
:first-child匹配一组兄弟元素中的第一个元素
:last-child匹配一组兄弟元素中的最后一个元素
:nth-child(n)匹配一组兄弟元素中的第 n 个子元素
:nth-last-child(n)匹配一组兄弟元素中倒序第 n 个子元素
:first-of-type匹配一组兄弟元素中第一个此类型的元素
:last-of-type匹配一组兄弟元素中最后一个此类型的元素
:nth-of-type(n)匹配一组兄弟元素中第 n 个此类型的元素
:nth-last-of-type(n)匹配一组兄弟元素中倒序第 n 个此类型的元素
:only-child匹配没有任何兄弟元素的元素
:only-of-type匹配没有其他元素类型的兄弟元素
:lang(en)匹配特定语言
:required匹配带 required 属性的元素
:optional匹配不带 required 属性的元素
:read-only匹配带 readonly 属性的元素
:read-write匹配不带 readonly 属性的元素
:empty匹配没有子元素的元素
:fullscreen匹配处于全屏显示的元素
:#news:target选择当前活动为 news 的元素
:not()反选

20 - 伪元素

属性描述
::first-line块级元素首行
::first-letter块级元素首字母
::before创建伪元素,作为选中元素的第一个子元素,默认为行内元素
::after创建伪元素,作为选中元素的最后一个子元素,默认行内元素
> content为元素添加装饰内容
::selection用户选择部分

21 - 阴影

属性描述
box-shadowpx px px px color元素阴影
X轴 Y轴 模糊 扩散 颜色

22 - 2D/3D转换

属性描述
transformtranslate(px, px)在X轴,Y轴上移动
translate3d(px, px, px)在X轴,Y轴,Z轴上移动
translateX
translateY
translateZ
rotate(deg)旋转
rotate3d(1, 1, 1, 45deg)
rotateX
rotateY
rotateZ
scale()缩放
scale3d()
scaleX
scaleY
scaleZ
skew()倾斜
matrix矩阵
transform-origincenter、top left、50px 50px更改变形原点
transform-styleflat、preserve-3d元素位于平面或3d空间
perspectivepx指定观察者与z轴的距离,产生透视效果
perspective-origintop、center、bottom、left、right、%指定观察者的位置
translatepx单独声明平移变换

23 - 过渡

属性描述
transition:属性,时间,函数可以指定多项过渡时间
> transition-propertyall指定过渡属性名称
> transition-durations过渡动画所需时间
> transition-timing-functionease、ease-in、ease-out、linear、step-start、step-end、steps变化函数速度曲线
> transition-delays开始前的等待时间

24 - 动画

属性描述
@keyframes name {}from{} to {}定义动画帧
0%{} 25%{} 50%{} 100%{}
animation:指定一组或多组动画
> animation-name动画名绑定动画
> animation-durations、ms动画周期
> animation-delays、ms动画延迟时间
> animation-iteration-countnumber运行次数,infinite 无限次
> animation-directionreverse、alternate、alternate-reverse反向、交替执行、反向交替
> animation-timing-functionease、ease-in、ease-out、ease-in-out、linear、step-start、step-end动画速度曲线
> animation-fill-modeforwards、backwards、both动画填充模式
最后一个关键帧、首个关键帧、两个方向上扩展

25 - 多列

属性描述
column-countnumber列数
column-gappx列间隙
column-rule:
> column-rule-stylesolid列之间的样式规则
> column-rule-widthpx列之间规则的宽度
> column-rule-colorrgba/hsla/hex列之间规则的颜色
> column-widthpx指定列的宽度
> column-spanall指定跨多少列
columns6rem auto列宽与列数

26 - 变量

属性描述
:root{ --变量名:变量值; }设置全局变量
var( --变量名 )使用变量

27 - 弹性布局

属性描述
displayflex设置父元素容器
flex-directionrow从左到右(主轴方向)
row-reverse从右到左
column从上到下
column-reverse从下到上
flex-wrapnowrap不换行(换行方式)
wrap自动换行
warp-reverse相反顺序换行
flex-flowrow warp设置容器方向与元素换行
justify-contentstart起始对齐(主轴方向对齐方式)
flex-start开头对齐
flex-end末端对齐
center居中对齐
space-around分散对齐
space-between两端对齐
space-evenly均匀对齐
stretch填充对齐
align-itemsstart开头对齐(交叉轴方向对齐方式)
end末端对齐
center居中对齐
flex-start侧轴起点对齐
flex-end侧轴终点对齐
stretch拉伸填充
baseline基线对齐
align-contentstart起始对齐(多主轴在交叉轴上的对齐方式)
end末端对齐
center居中对齐
flex-start垂直轴起点对齐
flex-end垂直轴末尾对齐
space-around分散对齐
space-between两端对齐
stretch拉伸填充
align-self元素自身在交叉轴上的对齐方式
start起始对齐
end结束对齐
stretch拉伸对齐
flex:默认 0 1 auto
> flex-grownumber相对于其他项目的增长倍数
(在 flex 容器中分配剩余空间的相对比例)
> flex-shrinknumber相对于其他项目的收缩倍数
(仅在默认宽度之和大于容器时)
> flex-basispx元素在主轴方向上的初始大小
ordernumber布局顺序
row-gappx行之间的间隔

28 - 网格布局

属性描述
displaygrid设置父元素容器
grid-template:初始化网格行列
> grid-template-rows200px 100px auto auto初始化网格行数及高度
> grid-template-columns100px 200px auto auto初始化网格列数及宽度
> grid-template-areas网格排列方式定义(矩阵)
grid-auto-rowspx隐式网格行高
min-content
min-max()
auto
grid-auto-columnspx隐式网格列宽
min-content
min-max()
auto
grid-auto-flowrow、column、row dense自动布局排列方式
column-gappx列间隙
row-gappx行间隙
justify-content容器中水平对齐方式
justify-items容器内轴对齐方式
align-content容器中垂直对齐方式
justify-self该元素到其格栅区域内联轴上
align-self所选项目的对齐方式,覆盖align-items
grid-area:
grid-row:1/3行项目始末位置
> grid-row-start1行项目起始位置
> grid-row-end3行项目结束位置
grid-column:1/3列项目始末位置
> grid-column-start1列项目起始位置
> grid-column-end3列项目结束位置

隐式:如果定位到某行中的网格元素没有使用 grid-template-rowsgrid-template-columns 来指定大小,则会隐式创建 grid 轨道来保存它。

29 - 滚动条

属性描述
scrollbar-colortrack、thumb滚动条轨道和拇指颜色
scroll-widthpx设置滚动条宽度
scroll-behaviorauto 立即滚动、smooth 平顺滚动滚动行为
scroll-margin / -toppx拖动外边距
scroll-padding / -toppx拖动内边距
  • 修改基于 webkit 的浏览器的滚动条样式
属性描述
::-webkit-scrollbar整个滚动条颜色
::-webkit-scrollbar-button滚动条上下按钮
::-webkit-scrollbar-thumb滚动条滑块
::-webkit-scrollbar-track滚动条轨道
::-webkit-scrollbar-track-piece滚动条没有滑块的轨道部分
::-webkit-scrollbar-corner横竖滚动条交汇处
::-webkit-resizer底角可调节大小滑块

30 - 其他

属性描述
cursorhelp、wait、crosshair、not-allowed、zoom-in、grab鼠标指针样式
shape-outsidecircle()、ellipse()定义一个非矩形区域
shape-marginpx非矩形区域的外边距
allinitial、inherit、unset、revert重新设置为初始值
初始值、继承、前两者之间、还原
object-fitfill、contain、cover、none、scale-down裁切图像
填充会被拉伸、保持横纵比、调整大小保持横纵比、无、调整大小
resizeauto、vertical、both、none用户界面
自动、允许高度、允许高度和宽度、禁用
clip-pathcircle(50%)、ellipse()、polygon()、path()裁剪可显示区域
aspect-ratio1/1规定期待的横纵比
block-sizepx元素区块的宽高
calc()width: calc(100% - 80px)执行一些计算
clamp()clamp(1rem, 2.5rem)设定上下限制
caret-color光标颜色
mask使用遮罩或裁切隐藏元素

31 - 精灵图

  • 简介:

    精灵图(也称雪碧图)就是图片拼合技术,把多张图标小图合成一张大图,通过 CSS 中的 background-position 定位图标位置来显示对应图 (原点在图的左上角,X轴的右边是正值,左边是负值,Y轴同X轴),优势是减少图的请求次数。

(二)Less

  • Node 环境中使用:
    • 安装:npm install -g less
    • 编译:lessc style.less style.css
  • 浏览器环境中使用:
    • <link rel="stylesheet/less" type="text/css" href="styles.less" />
    • <script src="https://cdn.jsdelivr.net/npm/less@4" ></script>
📂 .less

/* 01 - 导入 */
@import "style";  // style.less
@import "style.css";

/* 02 - 变量 */
@width: 100px;
@height: @width + 10px;

/* 03 - 混合 */
.border {
  border-top: @width;
}

#menu {
  color: red;
  .border;
}

/* 04 - 嵌套 */
#header {
  color: red;
  .logo {
    height: @height;
    .title {
      width: @width;
    }
  }
  &:hover {
    color: green;
  }
  @media (min-width: 768px) {
    color: blue;
    @media (max-width: 1280px) {
      color: black;
    }
  }
}

/* 05 - 运算 + - * / calc() */

/* 06 - 函数:https://lesscss.org/functions/ */

/* 07 - 命名空间与访问符 */
#header() {
  .button {
    width: @width;
  }
  .title {
    ...
  }
}

#main {
  color: black;
  #header.button();
}

/* 08 - 映射 */
#colors() {
  primary: blue;
  secondary: green;
}

.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}

(三)Sass

  • Node 环境中使用:
    • 安装:npm install -g sass
    • 编译:sass input.scss output.css
📂 .scss

/* 01 - 导入 */
@import "style";  // style.scss

/* 02 - 变量 */
$nav-color: #fff;

#nav {
  $width: 100px;
  border: $width solid $nav-color;
}

/* 03 - 嵌套 */
#content {
  .article {
    h1 { color: #333; }
    p { font-size: 20px; }
  }
  $:hover {
    color: red;
  }
  > section { ... }
  + section { ... }
  ~ section { ... }
}

/* 04 - 混合器 */
@mixin main-border {
  border: 1px solid #fff;
  border-radius: 10px;
}

#main {
  color: red;
  @include main-border;
}

/* 05 - 混合器传参 */
@mixin link-color($normal, $hover, $visited) {
  color: $normal;
  $:hover { color: $hover; }
  $:visited { color: $visited; }
}

a {
  @include link-color(blue, red, green);
}

/* 06 - 继承 */
.error {
  border: 1px solid red;
  background-color: #fff;
}

.seriousError {
  @extend .error;
  border-width: 3px;
}

(四)Stylus

官方文档open in new window

(五)PostCSS

官方文档open in new window

(六)Bootstrap

V5文档open in new window

V4文档open in new window

V3文档open in new window

(七)TailwindCSS

官方文档open in new window