这是一份关于 CSS 优点的快速参考备忘单,列出了选择器语法、属性、单位和其他有用的信息
CSS 功能丰富,不仅仅是布局页面
<link><link
  href="./path/to/stylesheet/style.css"
  rel="stylesheet"
  type="text/css"
>
<style><style>
  body {
    background-color: linen;
  }
</style>
style<h2 style="text-align: center;">
  居中文本
</h2>
<p style="color: blue; font-size: 18px;">
  蓝色,18像素文本
</p>
<div class="classname"></div>
<div class="class1 ... classn"></div>
支持一个元素上的多个类
.post-title {
    color: blue !important;
}
覆盖所有以前的样式规则
h1 { } 
#job-title { }
div.hero { }
div > p { }
查看: CSS 选择器
color: #2a2aff;
color: green;
color: rgb(34, 12, 64, 0.6);
color: hsla(30 100% 50% / 0.6);
查看: Colors
background-color: blue;
background-image: url("nyan-cat.gif");
background-image: url("../image.png");
查看: Backgrounds
.page-title {
  font-weight: bold;
  font-size: 30px;
  font-family: "Courier New";
}
查看: Fonts
.box {
  position: relative;
  top: 20px;
  left: 20px;
}
另见: Position
animation: 300ms linear 0s infinite;
animation: bounce 300ms linear infinite;
查看: Animation
/* 这是一行注释 */
/* 这是
   多行注释 */
div {
  display: flex;
  justify-content: center;
}
div {
  display: flex;
  justify-content: flex-start;
}
查看: Flexbox | Flex Tricks
#container {
  display: grid;
s  grid: repeat(2, 60px) / auto-flow 80px;
}
#container > div {
  background-color: #8ca0ff;
  width: 50px;
  height: 50px;
}
查看: Grid Layout
counter-set: subsection;
counter-increment: subsection;
counter-reset: subsection 0;
:root {
  --bg-color: brown;
}
element {
  background-color: var(--bg-color);
}
查看: 动态内容
h1, h2 {
    color: red;
}
h3.section-heading {
    color: blue;
}
div[attribute="SomeValue"] {
    background-color: red;
}
p:first-child {
    font-weight: bold;
}
.box:empty {
  background: lime;
  height: 80px;
  width: 80px;
}
| 选择器 | 说明 | 
|---|---|
| p::after | 在 p 之后添加内容 # | 
| p::before | 在 p 之前添加内容 # | 
| p::first-letter | p中的第一个字母 # | 
| p::first-line | p 中的第一行 # | 
| ::selection | 由用户选择 # | 
| ::placeholder | 占位符 属性 # | 
| :root | 文档根元素 # | 
| :target | 突出显示活动锚点 # | 
| div:empty | 没有子元素的元素 # | 
| p:lang(en) | 带有 en 语言属性的 P # | 
| :not(span) | 不是跨度的元素 # | 
| :host | shadowDOM 中选择自定义元素 # | 
| ::backdrop | 处于全屏模式的元素样式 # | 
| ::marker | li项目符号或者数字 # | 
| ::file-selector-button | type="file" input按钮 # | 
| 选择器 | 说明 | 
|---|---|
| input:checked | 检查 input# | 
| input:disabled | 禁用 input# | 
| input:enabled | 启用的 input# | 
| input:default | 有默认值的元素 # | 
| input:blank | 空的输入框 # | 
| input:focus | input有焦点 # | 
| input:in-range | 范围内的值 # | 
| input:out-of-range | input值超出范围 # | 
| input:valid | input有效值 # | 
| input:invalid | input无效值 # | 
| input:optional | 没有必需的属性 # | 
| input:required | 带有必需属性的 input# | 
| input:read-only | 具有只读属性 # | 
| input:read-write | 没有只读属性 # | 
| input:indeterminate | 带有 indeterminate 状态 # | 
| 选择器 | 说明 | 
|---|---|
| p:first-child | 第一个孩子 # | 
| p:last-child | 最后一个孩子 # | 
| p:first-of-type | 第一个 p 类型的元素 # | 
| p:last-of-type | 某种类型的最后一个 # | 
| p:nth-child(2) | 其父母的第二个孩子 # | 
| p:nth-child(3n42) | Nth-child(an + b) 公式 # | 
| p:nth-last-child(2) | 后面的二孩 # | 
| p:nth-of-type(2) | 其父级的第二个 p # | 
| p:nth-last-of-type(2) | ...从后面 # | 
| p:only-of-type | 其父级的唯一性 # | 
| p:only-child | 其父母的唯一孩子 # | 
| :is(header, div) p | 可以选择的元素 # | 
| :where(header, div) p | 与 :is相同 # | 
| a:has(> img) | 包含 img元素的a元素 # | 
| ::first-letter | 第一行的第一个字母 # | 
| ::first-line | 第一行应用样式 # | 
font: italic    400     14px    /     1.5        sans-serif
      ┈┈┬┈┈┈    ┈┬┈     ┈┬┈┈          ┈┬┈        ┈┬┈┈┈┈┈┈┈┈
       样式      粗细    大小(必需的)    行高        字体(必需的)
font-family: Arial, sans-serif;
font-size: 12pt;
letter-spacing: 0.02em;
div {
  /* 首字母大写 Hello */
  text-transform: capitalize;
  /* 字母大写 HELLO */
  text-transform: uppercase;
  /* 字母小写 hello */
  text-transform: lowercase;
}
@font-face {
  font-family: 'Glegoo';
  src: url('../Glegoo.woff');
}
color: red;
color: orange;
color: tan;
color: rebeccapurple;
更多标准颜色名称
color: #090;
color: #009900;
color: #090a;
color: #009900aa;
color: rgb(34, 12, 64, 0.6);
color: rgba(34, 12, 64, 0.6);
color: rgb(34 12 64 / 0.6);
color: rgba(34 12 64 / 0.3);
color: rgb(34.0 12 64 / 60%);
color: rgba(34.6 12 64 / 30%);
color: hsl(30, 100%, 50%, 0.6);
color: hsla(30, 100%, 50%, 0.6);
color: hsl(30 100% 50% / 0.6);
color: hsla(30 100% 50% / 0.6);
color: hsl(30.0 100% 50% / 60%);
color: hsla(30.2 100% 50% / 60%);
color: inherit;
color: initial;
color: unset;
color: transparent;
color: currentcolor; /* 关键字 */
/* 全局值 */
color: inherit;
color: initial;
color: unset;
background: #ff0   url(a.jpg)   left     top    /  100px auto   no-repeat   fixed;
            #abc   url(b.png)   center   center /  cover        repeat-x    local;
            ┈┬┈┈    ┈┬┈┈┈┈┈┈┈   ┈┬┈┈     ┈┬┈       ┈┈┬┈┈┈┈┈┈┈   ┈┈┬┈┈┈┈┈┈   ┈┈┬┈┈┈
            颜色     图片         位置x    位置x       图片大小     图像重复方式  位置是在视口内固定
background: url(img_flwr.gif) right bottom no-repeat, url(paper.gif) left top repeat;
background: url(img_man.jpg) no-repeat center;
background: rgb(2,0,36);
background: linear-gradient(90deg, rgba(2,0,36,1) 0%,
  rgba(13,232,230,1) 35%,
  rgba(0,212,255,1) 100%);
.column {
  max-width: 200px; /* 最大宽度 200 像素 */
  width: 500px;     /* 宽度 500 像素 */
}
另见: max-width / min-width / max-height / min-height
.block-one {
  margin: 20px;  /* 边距 20 像素 */
  padding: 10px; /* 补白 10 像素 */
}
另见: 边距(margin) / 补白(padding)
.container {
  /* 设置的边框和补白的值是包含在 width 内的 */
  box-sizing: border-box;
}
另见: box-sizing
.invisible-elements {
  visibility: hidden; /* 隐藏元素 */
}
另见: Visibility
div {
  /* 览器自己选择一个合适的外边距 */
  margin: auto;
}
另见: 边距(margin)
.small-block {
  /* 浏览器总是显示滚动条 */
  overflow: scroll;
}
另见: 溢出(overflow)
animation:  bounce   300ms      linear     100ms    infinite   alternate-reverse  both                   reverse  
            ┈┬┈┈     ┈┬┈┈┈      ┈┬┈┈┈┈     ┈┈┬┈┈    ┈┈┈┬┈┈┈┈   ┈┈┬┈┈┈┈┈┈┈┈┈┈┈┈┈┈  ┈┈┬┈┈┈                 ┈┈┬┈┈┈
            动画名    动画时间     缓动函数    延迟     运行的次数   动画是否反向播放      如何将样式应用于其目标    是否运行或者暂停
/* @keyframes duration | timing-function | delay |
   iteration-count | direction | fill-mode | play-state | name */
animation: 3s ease-in 1s 2 reverse both paused slidein;
/* @keyframes duration | timing-function | delay | name */
animation: 3s linear 1s slidein;
/* @keyframes duration | name */
animation: 3s slidein;
animation: 4s linear 0s infinite alternate move_eye;
animation: bounce 300ms linear 0s infinite normal;
animation: bounce 300ms linear infinite;
animation: bounce 300ms linear infinite alternate-reverse;
animation: bounce 300ms linear 2s infinite alternate-reverse forwards normal;
.one('webkitAnimationEnd oanimationend msAnimationEnd animationend')
.container {
  display: flex;
}
.container > div {
  flex: 1 1 auto;
}
.container {
  display: flex;
  display: inline-flex;
  
  flex-direction: row;            /* ltr - 行(左向右) ▶ */
  flex-direction: row-reverse;    /* rtl - 行(右向左) ◀ */
  flex-direction: column;         /* top-bottom ▼ */
  flex-direction: column-reverse; /* bottom-top ▲ */
  
  flex-wrap: nowrap;       /* 摆放到一行 */
  flex-wrap: wrap;         /* 被打断到多个行中 */
  
  align-items: flex-start; /* 垂直对齐 - 顶部 */
  align-items: flex-end;   /* 垂直对齐 - 底部 */
  align-items: center;     /* 垂直对齐 - 中间 */
  align-items: stretch;    /* 所有人都一样的高度 (默认) */
  
  justify-content: flex-start;    /* [◀◀◀        ] */
  justify-content: center;        /* [    ■■■    ] */
  justify-content: flex-end;      /* [        ▶▶▶] */
  justify-content: space-between; /* [◀    ■    ▶] */
  justify-content: space-around;  /* [ ■   ■   ■ ] */
  justify-content: space-evenly;  /* [  ■  ■  ■  ] */
}
.container > div {
  /* 这个: */
  flex: 1 0 auto;
  /* 相当于这个: */
  flex-grow: 1;
  flex-shrink: 0;
  flex-basis: auto;
  order: 1;
  align-self: flex-start;  /* left */
  margin-left: auto;       /* right */
}
justify-content: flex-start | flex-end | center | space-between
flex-start:左对齐(默认值)
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆╭┈┈╮╭┈╮╭┈┈┈╮                     ┆
┆╰┈┈╯╰┈╯╰┈┈┈╯                     ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
flex-end:右对齐
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆                     ╭┈┈╮╭┈╮╭┈┈┈╮┆
┆                     ╰┈┈╯╰┈╯╰┈┈┈╯┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
center: 居中
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆          ╭┈┈╮╭┈╮╭┈┈┈╮           ┆
┆          ╰┈┈╯╰┈╯╰┈┈┈╯           ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
space-between:两端对齐,项目之间的间隔都相等
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆╭┈┈╮           ╭┈╮          ╭┈┈┈╮┆
┆╰┈┈╯           ╰┈╯          ╰┈┈┈╯┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
space-around:每个项目两侧的间隔相等,项目之间的间隔比项目与边框的间隔大一倍
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆   ╭┈┈╮        ╭┈╮       ╭┈┈┈╮   ┆
┆   ╰┈┈╯        ╰┈╯       ╰┈┈┈╯   ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
上面示例,假设主轴为从左到右
flex-wrap: nowrap | wrap | wrap-reverse;
nowrap:不换行(默认)
╭1╮╭2╮╭3╮╭4╮╭5╮╭6╮╭7╮╭8╮╭9╮╭10╮
╰┈╯╰┈╯╰┈╯╰┈╯╰┈╯╰┈╯╰┈╯╰┈╯╰┈╯╰┈┈╯
wrap:换行,第一行在 上方
╭1┈╮ ╭2┈╮ ╭3┈╮ ╭4┈╮ ╭5┈╮ ╭6┈╮ ╭7┈╮
╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯
╭8┈╮ ╭9┈╮ ╭10╮
╰┈┈╯ ╰┈┈╯ ╰┈┈╯
wrap-reverse:换行,第一行在 下方
╭8┈╮ ╭9┈╮ ╭10╮
╰┈┈╯ ╰┈┈╯ ╰┈┈╯
╭1┈╮ ╭2┈╮ ╭3┈╮ ╭4┈╮ ╭5┈╮ ╭6┈╮ ╭7┈╮
╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯
项目都排在一条线(又称"轴线")上
flex-direction: row | row-reverse | column | column-reverse;
╭┈┈╮  ▲         ╭┈┈╮  ┆
╰┈┈╯  ┆         ╰┈┈╯  ┆
╭┈┈╮  ┆         ╭┈┈╮  ┆
╰┈┈╯  ┆         ╰┈┈╯  ┆     ┈┈┈┈┈┈┈┈┈┈┈▶    ◀┈┈┈┈┈┈┈┈┈┈┈
╭┈┈╮  ┆         ╭┈┈╮  ┆    ╭┈┈╮ ╭┈┈╮ ╭┈┈╮  ╭┈┈╮ ╭┈┈╮ ╭┈┈╮
╰┈┈╯  ┆         ╰┈┈╯  ▼    ╰┈┈╯ ╰┈┈╯ ╰┈┈╯  ╰┈┈╯ ╰┈┈╯ ╰┈┈╯
┈┬┈┈┈┈┈┈        ┈┬┈┈┈┈┈┈    ┈┬┈┈┈┈┈┈┈┈┈┈┈   ┈┬┈┈┈┈┈┈┈┈┈┈┈ 
column-reverse  column       row             row-reverse
属性决定主轴的方向(即项目的排列方向)
align-items: flex-start | flex-end | center | baseline | stretch;
  ▶ flex-start(起点对齐)    ▶ flex-end(终点对齐)
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮  ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ ╭┈┈╮ ╭┈┈╮ ╭┈┈╮ ╭┈┈╮ ┆  ┆                     ┆
┆ ┆  ┆ ┆  ┆ ╰┈┈╯ ┆  ┆ ┆  ┆      ╭┈┈╮           ┆
┆ ╰┈┈╯ ┆  ┆      ╰┈┈╯ ┆  ┆ ╭┈┈╮ ┆  ┆      ╭┈┈╮ ┆
┆      ╰┈┈╯           ┆  ┆ ┆  ┆ ┆  ┆ ╭┈┈╮ ┆  ┆ ┆
┆                     ┆  ┆ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯  ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
  ▶ center(中点对齐)        ▶ stretch(占满整个容器的高度)
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮  ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆      ╭┈┈╮           ┆  ┆ ╭┈┈╮ ╭┈┈╮ ╭┈┈╮ ╭┈┈╮ ┆
┆ ╭┈┈╮ ┆  ┆      ╭┈┈╮ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆
┆ ┆  ┆ ┆  ┆ ╭┈┈╮ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆
┆ ┆  ┆ ┆  ┆ ╰┈┈╯ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆
┆ ╰┈┈╯ ┆  ┆      ╰┈┈╯ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆  ┆ ┆
┆      ╰┈┈╯           ┆  ┆ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯  ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
  ▶ baseline(第一行文字的基线对齐)
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆  ╭┈┈┈┈┈┈╮               ╭┈┈┈┈┈┈╮             ┆
┆  ┆      ┆ ╭┈┈┈┈╮ ╭┈┈┈┈╮ ┆      ┆ ╭┈┈┈┈╮╭┈┈┈┈╮┆
┆  ┆ text ┆ ┆text┆ ┆text┆ ┆ text ┆ ┆text┆┆text┆┆
┆  ┆      ┆ ╰┈┈┈┈╯ ┆    ┆ ┆      ┆ ╰┈┈┈┈╯┆    ┆┆
┆  ╰┈┈┈┈┈┈╯        ╰┈┈┈┈╯ ╰┈┈┈┈┈┈╯       ╰┈┈┈┈╯┆
┆                                              ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
 ▶ flex-start(起点对齐)     ▶ flex-end(终点对齐)
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮  ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ ╭┈┈╮╭┈╮╭┈┈┈╮╭╮╭┈┈┈┈╮ ┆  ┆                      ┆
┆ ╰┈┈╯╰┈╯╰┈┈┈╯╰╯╰┈┈┈┈╯ ┆  ┆ ╭┈┈╮╭┈╮╭┈┈┈╮╭╮╭┈┈┈┈╮ ┆
┆ ╭┈┈┈╮╭╮              ┆  ┆ ╰┈┈╯╰┈╯╰┈┈┈╯╰╯╰┈┈┈┈╯ ┆
┆ ╰┈┈┈╯╰╯              ┆  ┆ ╭┈┈┈╮╭╮              ┆
┆                      ┆  ┆ ╰┈┈┈╯╰╯              ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯  ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
 ▶ center(中点对齐)         ▶ stretch(满整个交叉轴)
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮  ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆                      ┆  ┆ ╭┈┈╮╭┈╮╭┈┈┈╮╭╮╭┈┈┈┈╮ ┆
┆ ╭┈┈╮╭┈╮╭┈┈┈╮╭╮╭┈┈┈┈╮ ┆  ┆ ┆  ┆┆ ┆┆   ┆┆┆┆    ┆ ┆
┆ ╰┈┈╯╰┈╯╰┈┈┈╯╰╯╰┈┈┈┈╯ ┆  ┆ ╰┈┈╯╰┈╯╰┈┈┈╯╰╯╰┈┈┈┈╯ ┆
┆ ╭┈┈┈╮╭╮              ┆  ┆ ╭┈┈┈╮╭╮╭┈╮           ┆
┆ ╰┈┈┈╯╰╯              ┆  ┆ ┆   ┆┆┆┆ ┆           ┆
┆                      ┆  ┆ ╰┈┈┈╯╰╯╰┈╯           ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯  ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
 ▶ space-between(两端对齐)  ▶ space-around(均匀分布项目)
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮  ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ 
┆ ╭┈┈╮╭┈┈╮╭┈┈╮╭┈┈╮╭┈┈╮ ┆  ┆                      ┆ 
┆ ╰┈┈╯╰┈┈╯╰┈┈╯╰┈┈╯╰┈┈╯ ┆  ┆ ╭┈┈╮╭┈┈╮╭┈┈╮╭┈┈╮╭┈┈╮ ┆ 
┆                      ┆  ┆ ╰┈┈╯╰┈┈╯╰┈┈╯╰┈┈╯╰┈┈╯ ┆ 
┆                      ┆  ┆                      ┆ 
┆                      ┆  ┆ ╭┈┈╮                 ┆ 
┆ ╭┈┈╮                 ┆  ┆ ╰┈┈╯                 ┆ 
┆ ╰┈┈╯                 ┆  ┆                      ┆ 
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯  ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ 
.item {
  order: <integer>;
}
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈╮
┆ ╭1┈╮ ╭1┈┈╮ ╭1┈╮ ╭2┈╮ ╭3┈┈┈┈┈┈╮ ┆ ┆ ╭2┈┈┈┈╮ ┆
┆ ╰┈┈╯ ╰┈┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈┈┈┈┈┈╯ ┆ ┆ ╰┈┈┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ╭2┈┈┈┈╮ ┆
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ╰┈┈┈┈┈╯ ┆
┆ ╭-┈┈╮ ╭┈┈┈╮ ╭┈┈┈┈┈┈┈┈╮ ╭┈┈┈╮   ┆ ┆ ╭99┈┈┈╮ ┆
┆ ┆-1 ┆ ┆ 1 ┆ ┆ 2      ┆ ┆ 5 ┆   ┆ ┆ ┆     ┆ ┆
┆ ╰┈┈┈╯ ╰┈┈┈╯ ╰┈┈┈┈┈┈┈┈╯ ╰┈┈┈╯   ┆ ┆ ╰┈┈┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈╯
属性 order 定义项目的排列顺序。数值越小,排列越靠前,默认为 0
.item {
  flex-grow: <number>; /* default 0 */
}
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ ╭┈┈1┈┈╮╭┈┈2┈┈╮╭┈┈1┈┈╮ ┆
┆ ╰┈┈┈┈┈╯╰┈┈┈┈┈╯╰┈┈┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ ╭┈1┈╮╭┈┈┈┈2┈┈┈┈╮╭┈1┈╮ ┆
┆ ╰┈┈┈╯╰┈┈┈┈┈┈┈┈┈╯╰┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
属性 flex-grow 定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大
.container {
  display: flex;
}
.container > div {
  width: 100px;
  height: 100px;
  margin: auto;
}
.container {
  display: flex;
  /* 垂直的 */
  align-items: center; 
  /* 水平的 */
  justify-content: center;
}
.container > .top {
 order: 1;
}
.container > .bottom {
 order: 2;
}
.container {
  display: flex;
  flex-direction: column;
}
.container > .top {
  flex: 0 0 100px;
}
.container > .content {
  flex: 1 0 auto;
}
一个固定高度的顶部栏和一个动态高度的内容区域
.container {
  display: flex;
}
/* 这里的“px”值只是建议的百分比 */
.container > .checkbox { flex: 1 0 20px; }
.container > .subject  { flex: 1 0 400px; }
.container > .date     { flex: 1 0 120px; }
这会创建具有不同宽度的列,但会根据情况相应地调整大小
.container {
  align-items: center;
}
垂直居中所有项目
.menu > .left  { align-self: flex-start; }
.menu > .right { align-self: flex-end; }
#grid-container {
  display: grid;
  width: 100px;
  grid-template-columns: 20px 20% 60%;
}
.grid {
  display: grid;
  width: 100px;
  grid-template-columns: 1fr 60px 1fr;
}
/* 行间距为 20px */
/* 列之间的距离是 10px */
#grid-container {
  display: grid;
  grid-gap: 20px 10px;
}
CSS 语法:
.item {
  grid-row: 1 / span 2;
}
#grid-container {
    display: block;
}
#grid-container {
  display: inline-grid;
}
grid-row-gap: length;
任何合法的长度值,例如 px 或 %。0 是默认值
.item1 {
  grid-area: 2 / 1 / span 2 / span 3;
}
.grid {
  display: grid;
  grid-template-columns: 100px minmax(100px, 500px) 100px; 
}
定义了一个长宽范围的闭区间
CSS 语法:
grid-row-start: 2;
grid-row-end: span 2;
#container {
  display: grid;
  justify-items: center;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr 1fr 1fr;
  grid-gap: 10px;
}
.item {
  grid-area: nav;
}
.grid-container {
  display: grid;
  grid-template-areas:
  'nav nav . .'
  'nav nav . .';
}
#grid-container {
  display: grid;
  justify-items: start;
}
.grid-items {
  justify-self: end;
}
网格项目位于行的右侧(末尾)
#container {
  display: grid;
  align-items: start;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr 1fr 1fr;
  grid-gap: 10px;
}
定义 CSS 变量
:root {
  --first-color: #16f;
  --second-color: #ff7;
}
变量用法
#firstParagraph {
  background-color: var(--first-color);
  color: var(--second-color);
}
另见: CSS Variable
/* Set "my-counter" to 0 */
counter-set: my-counter;
/* Increment "my-counter" by 1 */
counter-increment: my-counter;
/* Decrement "my-counter" by 1 */
counter-increment: my-counter -1;
/* Reset "my-counter" to 0 */
counter-reset: my-counter;
另见: Counter set
body { counter-reset: section; }
h3::before {
  counter-increment: section; 
  content: "Section." counter(section);
}
ol {
  counter-reset: section;   
  list-style-type: none;
}
li::before {
  counter-increment: section;
  content: counters(section, ".") " "; 
}
div {
  width: calc(100% - 30px);
  height: calc(100% - 30px);
}
calc() CSS 函数允许您在指定 CSS 属性值时执行计算
font-size: clamp(1rem, 10vw, 2rem);
设置随窗口大小改变的字体大小
p:before {
  content: attr(data-foo) " ";
}
获取选择到的元素的某一 HTML 属性值
返回一个代表计数器的当前值的字符串
<ol>
  <li></li>
  <li></li>
  <li></li>
</ol>
ol {
  counter-reset: listCounter;
}
li {
  counter-increment: listCounter;
}
li::after {
  content: "[" counter(listCounter) "] == ["
    counter(listCounter, upper-roman) "]";
}
显示
1. [1]==[I]
2. [2]==[II]
3. [3]==[III]
ol {
  counter-reset: count;
}
li {
  counter-increment: count;
}
li::marker {
   content: counters(count, '.', upper-alpha) ') ';
}
li::before {
  content: counters(count, ".", decimal-leading-zero) " == " counters(count, ".", lower-alpha);
}
嵌套计数器,返回表示指定计数器当前值的连接字符串
<meta name="viewport" content="... viewport-fit=cover">
body {
  padding:
    env(safe-area-inset-top, 20px)
    env(safe-area-inset-right, 20px)
    env(safe-area-inset-bottom, 20px)
    env(safe-area-inset-left, 20px);
}
用户代理定义的环境变量值插入你的 CSS 中
fit-content(200px)
fit-content(5cm)
fit-content(30vw)
fit-content(100ch)
将给定大小夹紧为可用大小
从一个逗号分隔的表达式列表中选择最大(正方向)的值作为属性的值
width: max(10vw, 4em, 80px);
例子中,宽度最小会是 80px,除非视图宽度大于 800px 或者是一个 em 比 20px 宽
width: min(1vw, 4em, 80px);
从逗号分隔符表达式中选择一个最小值作为 CSS 的属性值
minmax(200px, 1fr)
minmax(400px, 50%)
minmax(30%, 300px)
minmax(100px, max-content)
minmax(min-content, 400px)
minmax(max-content, auto)
minmax(auto, 300px)
minmax(min-content, auto)
repeat(auto-fill, 250px)
repeat(auto-fit, 250px)
repeat(4, 1fr)
repeat(4, [col-start] 250px [col-end])
repeat(4, [col-start] 60% [col-end])
定义了一个长宽范围的闭区间
background: url("topbanner.png") #00D no-repeat fixed;
list-style: square url(http://www.example.com/redball.png)
:root {
  --main-bg-color: pink;
}
body {
  background-color: var(--main-bg-color);
}
代替元素中任何属性中的值的任何部分
p {
  white-space:nowrap;
}
p {
  word-break:break-all; /* 英文 */
  white-space:pre-wrap; /* 中文 */
}
html {
  scroll-behavior: smooth;
}
点击我页面会平滑滚动到入门
input[type="text"]:autofill {
  box-shadow: 0 0 0 1000px #000 inset;
  -webkit-text-fill-color: white;
}
另见: :autofill
input[type="color"] {
  -webkit-appearance: none;
  border: none;
  width: 32px;
  height: 32px;
}
input[type="color"]::-webkit-color-swatch-wrapper {
  padding: 0;
}
input[type="color"]::-webkit-color-swatch {
  border: none;
}
br + br {
  display: none;
}
:empty {
  display: none;
}
html {
  box-sizing: border-box;
}
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
有助于在不同的浏览器之间强制样式一致性,并为样式元素提供干净的盒子
body {
  caret-color: red;
}
html {
  -webkit-filter: grayscale(.95);
}
上面示例设置了当前卡片灰色
<textarea>自动增加其高度textarea {
  form-sizing: normal
}
div {
  aspect-ratio: 1/1 
}
属性 aspect-ratio 可以非常容易的定义一个容器的长宽比
使用 all 速记来指定元素的所有属性。将值设置为 unset 会将元素的属性更改为其初始值:
button {
  all: unset;
}
注意:IE11 不支持 all 和 unset 速记
p {
  overflow: hidden;/*超出部分隐藏*/
  /* 超出部分显示省略号 */
  text-overflow:ellipsis;
  /* 规定段落中的文本不进行换行 */
  white-space: nowrap;
  width: 250px;/*需要配合宽度来使用*/
}
您不需要为每个 <p>、<h*> 等添加行高。相反,将其添加到正文:
body {
  line-height: 1.5;
}
这样文本元素可以很容易地从 body 继承
div {
  cursor: url('path-to-image.png'), url('path-to-fallback-image.png'), auto;
  /* 表情符号作为光标 */
  cursor: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'  width='40' height='48' viewport='0 0 100 100' style='fill:black;font-size:24px;'><text y='50%'>🚀</text></svg>"), auto;
}
.overflow-ellipsis {
  width: 200px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
一行文本截断显示省略号 (...)
.overflow-truncate {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}
多行文本截断到特定的行数,末尾显示省略号 (...)
.sticky {
  position: sticky;
  top: 0;
}
属性 sticky 能在滚动到顶部的位置固定住元素
a[href^="http"]:empty::before {
  content: attr(href);
}
如果 <a> 标签里面没有内容,将 href 的值作为内容展示
响应式布局中的字体大小应该能够根据每个视口进行调整,您可以使用 :root 根据视口高度和宽度计算字体大小
:root {
  font-size: calc(1vw + 1vh + .5vmin);
}
您可以根据 :root 计算的值使用根 em 单位:
body {
  font: 1rem/1.6 sans-serif;
}
.container {
  height: 250px;
  overflow-x: scroll;
  display: flex;
  scroll-snap-type: x mandatory;
  column-gap: 10px;
}
.child {
  flex: 0 0 66%;
  width: 250px;
  background-color: #663399;
  scroll-snap-align: center;
}
可用于 轮播图 效果,效果预览
div {
  -webkit-user-modify: 
    read-write-plaintext-only;
}
通过样式来控制一个元素 div 是否可以编辑
尝试使用 table-layout: fixed 以保持单元格宽度相等:
table {
  table-layout: fixed;
}
当 <a> 元素没有文本内容,但有 href 属性的时候,显示它的 href 属性:
a[href^="http"]:empty::before {
  content: attr(href);
}
给 “默认” 链接定义样式:
a[href]:not([class]) {
  color: #008000;
  text-decoration: underline;
}
通常没有 class 属性,以上样式可以甄别它们,而且不会影响其它样式
在根元素设置基本字体大小后 (html { font-size: 100%; }), 使用 em 设置文本元素的字体大小:
h2 { 
  font-size: 2em;
}
p {
  font-size: 1em;
}
然后设置模块的字体大小为 rem:
article {
  font-size: 1.25rem;
}
aside .module {
  font-size: .9rem;
}
现在,每个模块变得独立,更容易、灵活的样式便于维护
这是一个自定义用户样式表的不错的技巧。避免在加载页面时自动播放。如果没有静音,则不显示视频:
video[autoplay]:not([muted]) {
  display: none;
}
再次,我们利用了 :not() 的优点
当触发 <select> 的下拉列表时,为了避免表单元素在移动浏览器(iOS Safari 和其它)上的缩放,加上font-size:
input[type="text"],
input[type="number"],
select,
textarea {
  font-size: 16px;
}
指针事件允许您指定鼠标如何与其触摸的元素进行交互。要禁用按钮上的默认指针事件,例如:
button:disabled {
  opacity: .5;
  pointer-events: none;
}
就这么简单
div:has(img) {
  background: black;
}
设置包含子元素 img 的 div 元素样式,还可以嵌套:
div:has(h2):has(ul) {
  background: black;
}
display: none用户使用额外的换行符
br + br {
  display: none;
}
body 添加行高body {
  line-height: 1.5;
}
您不需要为每个 <p>、<h*> 等分别添加行高。相反,将其添加到正文
@font-face {
  font-family: "Dank Mono";
  src:
    /* Full name */
    local("Dank Mono"),
    /* Postscript name */
    local("Dank-Mono"),
    /* 否则,请下载它! */
    url("//...a.server/DankMono.woff");
}
code {
  font-family: "Dank Mono",
        system-ui-monospace;
}
您可以在远程获取字体之前检查是否在本地安装了字体,这也是一个很好的性能提示
<a href="https://example.com">超链接</a>
attr HTML 元素的属性名。
a:after {
  content: " (" attr(href) ")";
}
:focusa:focus, button:focus, input:focus,
select:focus, textarea:focus {
  box-shadow: none;
  outline: #000 dotted 2px;
  outline-offset: .05em;
}
有视力的键盘用户依靠焦点来确定键盘事件在页面中的位置。使表单元素的焦点比浏览器的默认实现更加突出和一致
html, body {
  height: 100%;
  margin: 0;
}
body {
  -webkit-align-items: center;
  -ms-flex-align: center;
  align-items: center;
  display: -webkit-flex;
  display: flex;
}
...还有 CSS 网格:
body {
  display: grid;
  height: 100vh;
  margin: 0;
  place-items: center center;
}
img {
  width: 200px;
  height: 200px;
  /** 确保图片按原始宽高比例进行缩放 */
  object-fit: cover;
  object-position: left top;
  transition: 1s;
}
img:hover {
  /** 指定图片显示的位置,结合鼠标移动+过渡动画 */
  object-position: right bottom;
}
.clamp {
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}
html 文本超过 3 行将被截断,显示省略号...
<p class="clamp">
  展示多行文本,超过 3 行将被截断,显示省略号...
</p>
ul > li:not(:last-child)::after {
  content: ",";
}
使列表项看起来像一个真实的逗号分隔列表,使用 :not() 伪类,最后一项不会添加逗号