Open anjia opened 2 years ago
CSS 选择器是 CSS 规则的一部分,CSS 规则描述了该规则将匹配文档中的哪些元素,匹配到的元素将应用规则的指定样式。
CSS 选择器有 4 大类,如下:
分类 | 选择器 | 说明 | 备注 |
---|---|---|---|
基本选择器 | ID 选择器 | #id |
|
类选择器 | .class |
||
类型选择器 | elementName |
可带命名空间 | |
属性选择器 | 根据特定属性的存在或值 | ||
通配符 | * 匹配所有类型 |
可带命名空间 | |
组合选择器 | A B |
全后代 | 来的都是亲戚(后辈) |
A > B |
直接子 | > 直系后一代(子女) |
|
A + B |
紧跟后面的那一个亲兄弟 | + 手拉手的那一个(兄弟) |
|
A ~ B |
后面的全部兄弟们 | ~ 一条船上的(兄弟) |
|
伪选择器 | 伪类 | : 元素的特定状态 |
|
伪元素 | :: 元素的特定部分 |
后产生的所以有两个: |
|
分组选择器 | A, B |
多个独立选择器以 , 分隔 |
很直观 |
可以使用命名空间的选择器(类型选择器和通配符)在处理包含多个命名空间的文档时会很有用,比如 HTML5 里带有内联的 SVG 和 MathML,或者 XML 元素。
- basic selectors, 基本选择器
- combinators /ˈkɒmbɪneɪtər/, 组合/复合符
- pseudo /ˈs(j)uːdoʊ/, 伪
- grouping selectors, 分组选择器
下面详细介绍下属性选择器、伪类和伪元素。
属性选择器根据给定属性的存在或值来匹配元素。
格式 | 说明 | 例子 |
---|---|---|
[attr] |
存在属性 | [required] |
[attr=value] |
属性值等于 value |
input[type="text"] |
[attr^=value] |
值以 value 开头 |
a[href^="#"] |
[attr$=value] |
值以 value 结尾 |
a[href$="github.com"] |
[attr*=value] |
值包含 value 字符串 |
a[href*="/docs/"] |
[attr~=value] |
空格分隔的值,其中有个等于 value |
div[class~="g-title"] |
[attr\|=value] |
值等于 value 或值以 value 开头且后跟连字符 - |
div[lang\|="zh"] |
[attr operator value i] |
属性选择器后面跟字符 i 或 I 表示比较不分大小写(ASCII 字符) |
|
[attr operator value s] |
属性选择器后面跟字符 s 或 S 表示比较区分大小写(ASCII 字符) |
a[href*="cAsE" s] |
case-sensitive, 大小写敏感
case-insensitive, 大小写不敏感
属性选择器可以将多个连起来使用,比如 a[href^="https"][href$=".com"]
。
伪类根据所选元素的指定状态来匹配元素。
分类 | 伪类 | 说明 |
---|---|---|
用户操作(5个) | :hover :active |
|
:focus :focus-visible :focus-within |
||
位置(7个) | :link :visited :any-link :local-link |
没被访问的链接 已被访问 包含以上两种 指向相同文档的链接 |
:target :target-within |
当前文档里的目标元素 | |
:scope |
选择器的参考点 | |
DOM 树结构(14个) | :first-child :last-child :only-child :nth-child() :nth-last-child() |
兄弟(An+B) |
:first-of-type :last-of-type :only-of-type :nth-of-type() :nth-last-of-type() |
也是兄弟(An+B) |
|
:empty |
没孩子,除了空白字符 | |
:root |
根节点 | |
:nth-col() :nth-last-col() |
||
输入(17个) | :disabled :enabled :checked :required :optional :read-write :read-only |
禁用状态 启用 必填 可选 可读写(可编辑) 只读(不能修改) |
:placeholder-shown :blank :valid :invalid :user-invalid :in-range :out-of-range :autofill |
显示占位符 内容是空 内容有效 内容无效 输入无效(仅交互时) 值在范围内 值超范围了 内容被浏览器自动填充了 |
|
:default :indeterminate |
一组表单元素中的默认元素 状态不确定的表单元素 |
|
语言(2个) | :lang() :dir() |
|
多媒体(7个) | :past :current :future |
WebVTT,比如字幕 |
:playing :paused |
多媒体的状态 | |
:fullscreen :picture-in-picture |
||
Web Components(4个) | :defined :host :host() :host-context() |
|
Paged Media(3个) | :first :left :right |
|
其它(5个) | :is() :where() :not() :has() |
老版本 matches() , :any() |
:state() |
pseudo-classes
- user action ... 用户操作
- location ... 位置
- tree-structural ... 树结构
- the input ... 输入
- linguistic ... 语言
- time-dimensional ... 时间维度
- resource state ... 资源状态
伪元素用于选择元素的特定部分,我们只能在选择器中使用一个伪元素,且它必须在简单选择器之后。
分类 | 伪元素 | 说明 |
---|---|---|
最常用(8个) | ::before ::after |
|
::first-letter ::first-line |
||
::selection |
被用户选中的内容,比如在文本上单击或拖拽鼠标 | |
::placeholder |
占位符文本,<input> 或 <textarea> |
|
::file-selector-button |
type="file" 的 <input> |
|
::marker |
列表项的标记框,通常是个圆点或数字 | |
其它(4个) | ::slotted() ::part() |
Web Components |
::cue ::cue-region |
WebVTT 提示,比如字幕 | |
实验中(4个) | ::backdrop |
全屏模式下,比如使用了全屏 API 或是 <dialog> 元素 |
::target-text |
滚动到的文本,对于支持滚动到文本片段的浏览器 | |
::spelling-error |
浏览器标记为拼写错误的文本片段 | |
::grammar-error |
浏览器标记为语法错误的文本片段 |
/* 命名空间 */
@namespace svg url(http://www.w3.org/2000/svg);
svg|* {
color: blue;
}
svg|a {
color: red;
}
/* 通配符 */
article *:first-child {
font-weight: bold;
}
article:first-child {
font-weight: bold;
}
.floating + * {
clear: left;
}
/* 属性选择器 */
div[lang] {
color: green;
}
div:not([lang]) {
font-style: italic;
}
div[data-lang="zh-TW"] {
color: purple;
}
div[lang|="zh"] {
color: red;
}
a[href^="https"][href$=".com"] {
text-decoration: underline;
}
/* 组合符 */
img + p {
font-weight: bold;
}
h1 ~ p {
font-weight: bold;
background-color: #333;
color: #fff;
padding: 0.5em;
}
ul.my-things li {
margin: 2em;
}
/* 伪类+伪元素 */
a:link,
a:visited {
color: rebeccapurple;
font-weight: bold;
}
a:hover {
color: hotpink;
}
article p:first-child {
font-size: 120%;
font-weight: bold;
}
article p:first-child::first-line {
font-size: 120%;
font-weight: bold;
}
.box::after {
content: " ➥";
}
/* 多个简单选择器可连成一个 */
h1#heading {
color: rebeccapurple;
}
li.spacious.elegant {
margin: 2em;
}
ul > li[class="a"] {
}
a[href^="https"][href$=".com"] {
text-decoration: underline;
}
/* 分组选择器 */
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: helvetica;
}
#main,
.content,
article {
font-size: 1.1em;
}
本文简要介绍了 CSS 选择器,旨在对其有个整体印象。
选择器分类 | 选择器 | 内容 | 说明 | 相关链接 |
---|---|---|---|---|
基本选择器 | #id |
|||
.class |
||||
elementName |
||||
[] 存在/值 |
[attr] [attr=value] [attr^=value] , [attr$=value] [attr*=value] , [attr~=value] [attr\|=value] [... i] , [... s] |
存在 值等于 开始 + 结束 包含字符串, 字符项 值等于 or 值以 它- 开头是否区分大小写 |
||
* |
||||
组合选择器 | A B |
全后代(后辈) | ||
A > B |
直接子(子女) | |||
A + B |
手拉手的那一个(兄弟) | |||
A ~ B |
一条船上的(兄弟) | |||
伪选择器 | : |
用户操作 + 位置 DOM结构 + 输入 语言 + 多媒体 + 函数 Web Components + Paged Media |
特定状态(64个) | |
:: |
before/after, 首字母/行 选中, 占位符, 列表标记 Web Components, 多媒体 |
特定部分(16个) | ||
分组选择器 | A, B |
新年快乐 😂
新年快乐 😂
哈哈哈 新年快乐!虎年大吉~!
每个 CSS 声明都包含一个属性:值
对。根据不同的属性,其值可能是一个关键字或数值,也可能是一系列关键字或值,它们有的带单位有的不带单位。在 CSS 中,就有一组 CSS 属性可以接受的通用数据类型(值和单位)。
CSS 数据类型定义了 CSS 属性和函数所能接受的典型值(值和单位)。CSS 函数也是一种 CSS 值,它能表示更复杂的数据类型或是调用特殊的数据处理和计算逻辑。
最常用的数据类型和函数都定义在《CSS Values and Units》规范中,其它的数据类型就定义在与其相关联的规范中。
CSS data type, CSS 数据类型
CSS functional notation, CSS 功能符号, 通常叫 CSS 函数
本文只介绍被 <>
括起来的数据类型(不包含关键字)和常见的 CSS 函数。
分类 | 数据类型 | 说明 | 相关函数(61个) |
---|---|---|---|
基本(4个) | <string> |
字符串 | |
<number> <integer> |
数值 | ||
<position> |
top , right , bottom , left center <length-percentage> |
||
尺寸(8个) | <dimension> |
由 <number> +单位 组成 |
指定距离/时间/频率/分辨率等尺寸 |
<length> |
由 <number> +单位 组成 |
绝对单位(长度):px , pc , pt in cm , mm , Q 相对单位(字体): em , rem ex , rex cap , rcap ch , rch ic , ric 相对单位(视口): vw , vh vmin , vmax |
|
<time> |
由 <number> +s|ms 组成 |
单位 s , ms |
|
<angle> |
由 <number> +单位 组成 |
单位 deg , grad , rad , turn |
|
<flex> |
由 <number> +fr 组成 |
单位 fr |
|
<resolution> |
分辨率,像素密度 | 单位 dpi , dpcm , dppx , x |
|
<ratio> |
由 <number>/<number> 组成纵横比,媒体查询,eg.16/9 |
||
<percentage> |
由 <number> +% 组成 |
||
%(3个) | <length-percentage> |
<length> 或 <percentage> |
|
<time-percentage> |
<time> 或 <percentage> |
||
<angle-percentage> |
<angle> 或 <percentage> |
||
文件 | <url> |
an absolute URL a relative URL a data URI |
url() |
二维图像(2个) | <image> |
二维图像,综合型 | 可以是以下类型:<url> <gradient> 可以是以下函数: element() image() , image-set() cross-fade() paint() |
<gradient> |
linear-gradient() conic-gradient() radial-gradient() repeating-linear-gradient() repeating-radial-gradient() repeating-conic-gradient() |
||
颜色(2个) | <color> |
综合型 可以是各种关键字 |
rgb() , rgba() hsl() , hsla() hwb() , lch() , lab() color() color-mix() color-contrast() |
<blend-mode> |
当元素重叠时如何显示颜色 用在如下属性: background-blend-mode mix-blend-mode |
||
形状 | <basic-shape> |
在以下属性中使用:clip-path shape-outside offset-path |
inset() 矩形circle() ellipse() polygon() path() |
<shape> (已废弃) |
用在 clip 属性(已废弃)已被 clip-path 属性替代 |
rect() 已废弃 |
|
函数(3个) | <transform-function> |
rotate() rotate3d() rotateX() rotateY() rotateZ() |
|
scale() scale3d() scaleX() scaleY() scaleZ() |
|||
skew() skewX() skewY() |
|||
translate() translate3d() translateX() translateY() translateZ() |
|||
matrix() matrix3d() |
|||
perspective() |
|||
<timing-function> |
ease ease-in ease-out ease-in-out |
cubic-bezier() |
|
step-start step-end |
steps() |
||
<filter-function> |
图像效果 | grayscale() opacity() blur() |
|
brightness() hue-rotate() |
|||
contrast() drop-shadow() invert() saturate() sepia() |
|||
display (6个) |
<display-outside> |
block , inline , run-in |
|
<display-inside> |
flow , flow-root table , flex , grid ruby |
||
<display-listitem> |
block , inline , run-in ? && flow , flow-root ? &&list-item |
||
<display-internal> |
table-header-group table-footer-group table-column-group table-row-group table-caption table-column table-row table-cell |
||
ruby-base , ruby-text ruby-base-container ruby-text-container |
|||
<display-box> |
contents , none |
||
<display-legacy> |
inline-block inline-table inline-flex inline-grid inline-list-item |
其它(6个):
<ident>
和 <custom-ident>
表示用作标识符的任意(用户定义)字符串<frequency>
和 <frequency-percentage>
没有元素使用<shape>
已废弃。为了方便对比,也在上述表格中列出来了<an-plus-b>
除了上述表格中列出的与特定类型相关的函数之外,还有以下 CSS 函数。
分类 | 函数 | 说明 |
---|---|---|
数学(21个) | calc() |
|
clamp() min() , max() abs() , sign() |
||
sqrt() pow() , exp() log() round() |
||
sin() , cos() , tan() asin() , acos() , atan() , atan2() |
||
hypot() mod() , rem() |
||
引用(4个) | attr() |
属性 |
var() |
自定义变量 | |
env() |
环境变量 | |
url() |
||
计数器(3个) | counter() counters() |
content 属性 |
symbols() |
list-style 属性, counter styles |
|
Grid(3个) | repeat() minmax() fit-content() |
|
字体(8个) | stylistic() styleset() character-variant() swash() ornaments() annotation() |
font-variant-alternates 属性 |
local() , format() |
@font-face 的 src 描述符的值 |
其它(7个):
target-counter()
, target-counters()
, target-text()
type()
, layer()
, leader()
, selector()
本文主要对 CSS 的通用数据类型(值和单位)和常见函数做了下分类整理,旨在对其有个整体印象。
分类 | 内容 | 说明 |
---|---|---|
数据类型(36 个) | 基本 + 尺寸(有单位) + 百分比 文件 + 图像 + 颜色 + 形状(都有函数) 函数:转换 + 时间 + 滤镜(均是函数) display |
相关函数(61 个) |
CSS 函数(46 个) | 数学 + 引用 + 计数器 + Grid 字体 |
// https://developer.mozilla.org/en-US/docs/Web/CSS/Reference
let datatypeArr = [], funcArr = [], unitArr = [];
document.querySelectorAll(".index code").forEach(item => {
if(/^:/.test(item.innerText)) {}
else if (/<[a-z-]+>/.test(item.innerText)) datatypeArr.push(item.innerText);
else if (/\(\)$/.test(item.innerText)) funcArr.push(item.innerText);
else if (/#/.test(item.innerText)) unitArr.push(item.innerText);
});
// 37(36+1), 82, 30
console.log(datatypeArr.length, funcArr.length, unitArr.length);
CSS 的基本目标是让浏览器使用特定的功能(比如定位/颜色/装饰等)来绘制页面上的元素,它的语法就很好地反映了这一目标。CSS 的基本构建块如下:
property
标识符是一个人类可读的名称,它定义了特定的功能value
描述了渲染引擎该如何处理此功能每一个属性(property)都有一组有效值,它们由形式语法和语义来定义,并由浏览器引擎来实现。CSS 语言的核心功能就是给属性设置特定的值,大约有超过 100 种不同的 CSS 属性和几乎不限数量的 CSS 值。
本文就带大家来一起看看 CSS 属性,我们先介绍与布局相关的,再介绍非布局类的。
属性 | 相关属性 | 四方向属性 | 逻辑属性 | 逻辑方向属性 |
---|---|---|---|---|
box-sizing |
||||
width height |
max-width max-height min-width min-height |
block-size inline-size |
max-block-size max-inline-size min-block-size min-inline-size |
|
padding |
padding-top padding-right padding-bottom padding-left |
padding-block padding-inline |
padding-block-start padding-block-end padding-inline-start padding-inline-end |
|
border |
border-top border-right border-bottom border-left |
border-block border-inline |
border-block-start border-block-end border-inline-start border-inline-end |
|
border-width |
border-top-width border-right-width border-left-width border-bottom-width |
border-block-width border-inline-width |
border-block-start-width border-block-end-width border-inline-start-width border-inline-end-width |
|
border-style |
border-top-style border-right-style border-left-style border-bottom-style |
border-block-style border-inline-style |
border-block-start-style border-block-end-style border-inline-start-style border-inline-end-style |
|
border-color |
border-top-color border-right-color border-bottom-color border-left-color |
border-block-color border-inline-color |
border-block-start-color border-block-end-color border-inline-start-color border-inline-end-color |
|
border-radius |
border-top-left-radius border-top-right-radius border-bottom-left-radius border-bottom-right-radius |
border-start-start-radius border-start-end-radius border-end-end-radius border-end-start-radius |
||
border-image |
border-image-outset border-image-repeat border-image-slice border-image-source border-image-width |
|||
margin |
margin-top margin-right margin-bottom margin-left |
margin-block margin-inline |
margin-block-start margin-block-end margin-inline-start margin-inline-end |
布局 | 属性 | 缩写 | 相关属性 | 说明 |
---|---|---|---|---|
层级(1个) | z-index |
|||
浮动(2个) | float |
clear |
||
绝对定位 (12个) |
position |
top right bottom left |
inset inset-block inset-inline inset-block-start inset-block-end inset-inline-start inset-inline-end |
|
多列布局 (17个) |
column-width column-count |
columns |
多列布局 | |
column-fill column-span |
||||
column-rule-width column-rule-style column-rule-color |
column-rule |
|||
row-gap column-gap |
gap |
间距(这3个是标准的) flex, grid 也能用 |
||
align-items (flex)justify-items |
place-items |
flex, grid 也能用 | ||
align-content (flex)justify-content (flex) |
place-content |
flex, grid 也能用 | ||
align-self (flex)justify-self |
place-self |
flex, grid 也能用 | ||
Flex(12个) | flex-direction flex-wrap |
flex-flow |
flex container | |
justify-content align-items align-content |
main-axis, flex container cross-axis cross-axis, multi-line |
|||
flex container(多列的3个gap) | ||||
flex-grow flex-shrink flex-basis |
flex |
flex item | ||
align-self |
flex item, cross-axis | |||
order |
flex item | |||
Grid(18个) | grid-template-rows grid-template-columns grid-template-areas grid-auto-rows grid-auto-columns grid-auto-flow |
grid-template grid |
grid container | |
grid-row-gap (已废弃)grid-column-gap (已废弃) |
grid-gap (已废弃) |
最新见多列的3个gap | ||
masonry-auto-flow align-tracks justify-tracks |
grid container(实验中) | |||
grid-row-start grid-row-end grid-column-start grid-column-end |
grid-row grid-column grid-area |
grid item |
分类 | 属性 | 缩写 | 说明 |
---|---|---|---|
字体(8个) | font-family font-size (它)font-stretch font-style font-variant (缩写)font-weight line-height (它) |
font |
|
对齐(10个) | vertical-align |
||
text-align text-align-last text-justify text-indent |
文本 | ||
object-fit object-position image-orientation image-rendering image-resolution |
图片 | ||
书写模式(5个) | writing-mode direction unicode-bidi |
||
text-orientation text-combine-upright |
|||
断行(20个) | overflow-wrap (新名)word-wrap (旧名)word-break line-break (CJK)hyphens (兼容性不好)text-overflow white-space |
||
-webkit-line-clamp line-clamp hyphenate-character (连字符)hyphens (断行时)box-decoration-break (文本段) |
|||
break-after break-before break-inside |
|||
page-break-after page-break-before page-break-inside |
|||
orphans widows |
孤儿 寡母 |
分类 | 属性 | 缩写 | 说明 |
---|---|---|---|
表格(5个) | table-layout caption-side border-collapse border-spacing empty-cells |
||
列表(7个) | list-style-type list-style-position list-style-image |
list-style |
|
counter-set counter-reset counter-increment |
|||
ruby(3个) | ruby-position ruby-align ruby-merge |
<ruby> 元素 |
|
颜色(3个) | color color-scheme color-adjust |
||
背景(12个) | background-attachment background-clip background-color background-image background-origin background-position background-repeat background-size |
background |
|
background-position-x background-position-y background-blend-mode (混色) |
|||
混色(2个) | isolation mix-blend-mode |
是否创建独立堆叠上下文 如何混合(和父亲/自己背景) |
|
裁切(24个) | clip-path clip (已废弃) |
clip | |
shape-outside shape-margin shape-image-threshold |
|||
filter backdrop-filter |
滤镜 | ||
mask-clip mask-composite mask-image mask-mode mask-origin mask-position mask-repeat mask-size |
mask |
mask | |
mask-border-mode mask-border-outset mask-border-repeat mask-border-slice mask-border-source mask-border-width |
mask-border |
||
mask-type |
|||
文本(21个) | text-decoration-color text-decoration-line text-decoration-style text-decoration-thickness |
text-decoration |
装饰线 |
text-decoration-skip text-decoration-skip-ink text-underline-offset text-underline-position |
|||
text-emphasis-style text-emphasis-color |
text-emphasis |
强调符 | |
text-emphasis-position |
|||
word-spacing letter-spacing text-transform text-shadow tab-size initial-letter initial-letter-align |
单词间距 字符间距 大小写 阴影 tab 首字母 首字母 |
||
hanging-punctuation |
标点符号的位置(行首/尾) | ||
字体(14个) | font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric |
font-variant |
可变字体 |
font-variant-position font-variation-settings font-feature-settings font-size-adjust |
上下标 控制可变字体 OpenType字体 小写字母的相对大小 |
||
font-language-override font-optical-sizing font-kerning font-synthesis |
|||
覆盖系统(11个) | outline-color outline-style outline-width |
outline |
outline |
outline-offset |
|||
caret-color accent-color |
输入光标的颜色 复选框/单选框等的颜色 |
||
scrollbar-width scrollbar-color scrollbar-gutter |
滚动条 | ||
appearance |
平台原生样式 | ||
其它(18个) | touch-action pointer-events user-select resize |
触屏交互 能否成为事件目标 能否被选中 能否改变大小 |
|
will-change contain content-visibility text-rendering |
性能相关 | ||
content quotes |
很好用 | ||
cursor opacity visibility box-shadow |
鼠标 不透明度 隐藏(占位) 阴影 |
||
paint-order |
绘制顺序(fill, stroke, markers) | ||
aspect-ratio |
首选纵横比 | ||
--* |
自定义变量 | ||
all |
所有的 CSS 属性 除了 unicode-bidi , direction 和自定义变量 |
分类 | 属性 | 相关属性 | 逻辑属性 | 逻辑方向属性 |
---|---|---|---|---|
溢出 (8个) | overflow |
overflow-x overflow-y |
overflow-block overflow-inline |
|
overflow-wrap |
||||
overflow-anchor overflow-clip-margin |
||||
滚动 (26个) | scroll-behavior scroll-snap-type scroll-snap-align scroll-snap-stop |
|||
scroll-margin |
scroll-margin-top scroll-margin-right scroll-margin-bottom scroll-margin-left |
scroll-margin-block scroll-margin-inline |
scroll-margin-block-start scroll-margin-block-end scroll-margin-inline-start scroll-margin-inline-end |
|
scroll-padding |
scroll-padding-top scroll-padding-right scroll-padding-bottom scroll-padding-left |
scroll-padding-block scroll-padding-inline |
scroll-padding-block-start scroll-padding-block-end scroll-padding-inline-start scroll-padding-inline-end |
|
滚动行为 (5个) | overscroll-behavior |
overscroll-behavior-x overscroll-behavior-y |
overscroll-behavior-block overscroll-behavior-inline |
分类 | 属性 | 缩写 | 说明 |
---|---|---|---|
变换(7个) | transform transform-origin transform-box transform-style (是否 3d) |
||
translate scale rotate |
可单独指定 | ||
2d/3d(3个) | perspective perspective-origin backface-visibility |
||
过渡(5个) | transition-delay transition-duration transition-property transition-timing-function |
transition |
|
动画(9个) | animation-name animation-duration animation-timing-function animation-delay animation-direction animation-iteration-count animation-fill-mode animation-play-state |
animation |
|
path(6个) | offset-position offset-path offset-distance offset-anchor offset-rotate |
offset 早期叫 motion |
math-style
MathMLforced-color-adjust
, text-size-adjust
block-overflow
margin-trim
line-height-step
, max-lines
input-security
本文简要梳理了下 CSS 属性,一共涵盖了 396 个。如下:
分类 | 内容 | |
---|---|---|
布局相关(199 个) | 盒模型 94 个 | box-sizing , width , height padding , border , margin |
布局 62 个 | 层级 + 浮动 + 绝对定位 多列布局 + Flex + Grid |
|
行内相关 43 个 | 字体 + 对齐 + 书写模式 断行 |
|
非布局类(197 个) | UI 120 个 | 表格 + 列表 + ruby 颜色 + 背景 + 混色 + 裁切 文本 + 字体 覆盖系统样式 + 其它 |
滚动 39 个 | 溢出 + 滚动行为 | |
动画 30 个 | 变换 + 过渡 + 动画 3d + path |
|
其它 8 个 |
// https://developer.mozilla.org/en-US/docs/Web/CSS/Reference
let attrArr = [];
document.querySelectorAll(".index code").forEach(item => {
let code = item.innerText;
if(/^:/.test(code)) {} // 伪类+伪元素, 62: + 15::
else if (/\<[a-z-]+\>/.test(code)) {} // 数据类型, 37
else if (/\(\)$/.test(code)) {} // 函数, 82
else if (/\#/.test(code)) {} // 单位, 30
else if (/\@/.test(code)) {} // at-rule, 69
else attrArr.push(code); // 正常属性, 401
});
console.log(attrArr.length); // 401 -6 = 395
// 4个关键字:unset, inherit, initial, revert
// 2个链接标题:'Pseudo-classes', 'Pseudo-elements'
CSS 里的绝大部分内容都是规则集,即选择器和属性:值
的集合。当然,也有一些功能是规则集覆盖不到的,比如开发者想在样式表里指定字符集、字体、列表计数器等信息,或是想导入外部样式表。要想实现上述功能,就得用到 CSS 里的另一种语句了。
CSS 语句是一个构建块,它以任何非空格字符开始,以 }
或 ;
结束。有两种类型的 CSS 语句,分别是规则集和 At-rules。任何不是规则集也不是 At-rules 的语句都是无效的,会被忽略。本文将介绍 At-rules 语句。
还有一组语句叫嵌套语句,它们可以用在部分 At-rules 里,比如条件组的规则。此外,《CSS Nesting Module》 规范也列出了 CSS 原生嵌套的功能,目前尚处于工作草案阶段,更多详情可查阅历史文章 #1。
At-rules 以 @
开始,后面跟一个标识符,然后一直持续到语句末尾,要么是 }
要么是 ;
。每种 At-rules 的类型由其标识符定义的,它们都有自己的内部语法和语义。At-rules 可以用来传达元数据信息(如@charset
, @import
)、条件信息(如@media
)和描述性信息(如@font-face
)等。
分类 | At-rules | 相关规则 | 说明 | |
---|---|---|---|---|
元数据(3个) | @charset br>`@import`<br@namespace |
字符集(均为非嵌套语句) 外部导入 定义 XML 命名空间 |
||
条件组(3个) | @media br>`@supports`<br@document (已废弃) |
媒体查询 特性查询 根据 URL |
||
动画(2个) | @keyframes @scroll-timeline |
|||
字体(8个) | @font-face |
|||
@font-feature-values |
@swash br>`@annotation`<br@ornaments br>`@stylistic`<br@styleset @character-variant |
|||
打印(5个) | @page |
@top-center br>`@bottom-center`<br@left-bottom @right-bottom |
||
其它(3个) | @counter-style |
可用在 list-style ,counter() , counters() |
||
@color-profile |
可用在 color() |
|||
@property |
CSS Houdini |
其它(3个):
@viewport
(已废弃) 配置视口@historical-forms
@layer
// https://developer.mozilla.org/en-US/docs/Web/CSS/Reference
let ruleArr = [], descriptorArr = [];
document.querySelectorAll(".index code").forEach(item => {
let code = item.innerText;
if (/^\@/.test(code)) ruleArr.push(code);
else if (/\@/.test(code)) descriptorArr.push(code);
});
console.log(ruleArr.length, descriptorArr.length); // 25, 44
目录
#id
,.class
,elementName
,[attr]
,*
A B
,A > B
,A + B
,A ~ B
:
,::
A, B