深色模式适配
html
<html>
<!-- 省略一些标签 -->
<body>
<!-- 深色模式切换开关 -->
<button id="themeToggle">
<span id="themeIcon">🌙</span>
</button>
<!-- 省略一些元素 -->
</body>
</html>
css
/** 匹配文档树的根元素 */
:root {
--bg-color: #f0f8ff;
--text-color: #333;
}
/** 给要适配深色模式的元素动态添加上这个`class`,因为`css`的就近选择原理,所以这里面的属性生效 */
.dark-mode {
--bg-color: #121212;
--text-color: #f0f0f0;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.5s ease, color 0.5s ease;
}
javascript
/** 深色模式切换 */
const themeToggle = document.getElementById('themeToggle');
const themeIcon = document.getElementById('themeIcon');
const body = document.body;
// 检查系统主题
const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');
// 检查本地存储中的主题设置
const currentTheme = localStorage.getItem('theme');
// 根据系统偏好或本地存储设置初始主题
if (currentTheme === 'dark' || (!currentTheme && prefersDarkScheme.matches)) {
body.classList.add('dark-mode');
themeIcon.textContent = '☀️';
} else {
body.classList.remove('dark-mode');
themeIcon.textContent = '🌙';
}
// 切换主题
themeToggle.addEventListener('click', () => {
if (body.classList.contains('dark-mode')) {
body.classList.remove('dark-mode');
localStorage.setItem('theme', 'light');
themeIcon.textContent = '🌙';
} else {
body.classList.add('dark-mode');
localStorage.setItem('theme', 'dark');
themeIcon.textContent = '☀️';
}
});
transition
在 CSS 的transition属性中,各个过渡的属性值顺序是有意义的,但只需要确保每组值(属性名、持续时间、延迟时间等)的内部顺序正确即可。具体规则如下:
1. 每组过渡值的内部顺序固定
每组过渡效果需要按照以下顺序指定(必要值用粗体标出):
- 过渡属性名(如
transform、background-color) - 持续时间(如
2s、500ms) - 延迟时间(可选,默认
0s) - 缓动函数(可选,默认
ease)
例如:
/* 正确写法:持续时间在前,延迟时间在后 */
transition: transform 2s 0.5s ease-in-out;
/* 错误写法:持续时间和延迟时间顺序颠倒 */
transition: transform 0.5s 2s ease-in-out; /* 会导致延迟2秒,持续0.5秒 */
2. 多组过渡值之间用逗号分隔
当为多个属性指定过渡时,每组值之间用逗号分隔,各组值的顺序可以任意排列。例如:
/* 正确:transform组在前,background-color组在后 */
transition: transform 2s ease-in-out, background-color 1s linear;
/* 等效:交换两组的顺序 */
transition: background-color 1s linear, transform 2s ease-in-out;
但每组内部的值仍需遵循 属性名 → 持续时间 → 延迟时间 → 缓动函数 的顺序。
3. 简写语法的限制
如果使用简写语法(如 transition: all 2s),所有属性将共用相同的持续时间、延迟时间和缓动函数。此时无法为不同属性指定不同的参数。
例如:
/* 所有属性共用2秒持续时间和ease缓动 */
transition: all 2s;
/* 等价于 */
transition:
width 2s ease,
height 2s ease,
background-color 2s ease,
transform 2s ease;
示例对比
以下两个写法完全等效(各组值顺序不同,但内部结构正确):
/* 写法1:transform组在前 */
transition:
transform 2s ease-in-out,
background-color 1s linear,
opacity 0.5s 0.2s cubic-bezier(0.1, 0.7, 1.0, 0.1);
/* 写法2:opacity组在前 */
transition:
opacity 0.5s 0.2s cubic-bezier(0.1, 0.7, 1.0, 0.1),
background-color 1s linear,
transform 2s ease-in-out;
总结
- 每组内部的参数顺序必须固定(属性名 → 持续时间 → 延迟时间 → 缓动函数)。
- 多组之间的顺序可以任意调整,但建议按属性的重要性或执行顺序排列,提高可读性。
animation
在 CSS 中,animation 是一个简写属性,用于一次性设置动画的多个参数。以下是其完整的参数顺序、可用值及详细说明:
参数顺序与含义
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
name(必选)
动画名称,对应@keyframes定义的动画序列名称。duration(必选)
动画周期时长,单位为秒(s)或毫秒(ms),如2s或500ms。timing-function(可选,默认ease)
缓动函数,控制动画速度曲线,与transition相同:/* 常见值 */ linear | ease | ease-in | ease-out | ease-in-out cubic-bezier(0.1, 0.7, 1.0, 0.1) /* 自定义贝塞尔曲线 */ steps(5, start) /* 阶梯函数 */delay(可选,默认0s)
动画延迟启动时间,单位为秒(s)或毫秒(ms)。iteration-count(可选,默认1)
动画循环次数,可指定数字或infinite(无限循环):1 | 3 | infinitedirection(可选,默认normal)
动画播放方向:normal | reverse | alternate | alternate-reverse - `normal`:正向播放(默认)。 - `reverse`:反向播放。 - `alternate`:奇数次正向,偶数次反向(如 `1→2→1→2`)。 - `alternate-reverse`:奇数次反向,偶数次正向(如 `2→1→2→1`)。fill-mode(可选,默认none)
动画执行前后的状态保持:none | forwards | backwards | both - `none`:动画前后不应用关键帧样式。 - `forwards`:动画结束后保持最后一帧状态。 - `backwards`:动画开始前应用第一帧状态(受 `delay` 影响)。 - `both`:同时生效 `forwards` 和 `backwards`。play-state(可选,默认running)
动画播放状态:running | paused /* 常用于通过 JS 动态控制动画 */ .box:hover { animation-play-state: paused; /* 鼠标悬停时暂停 */ }
展开形式与简写对比
animation 简写等价于以下展开属性:
animation-name: slide;
animation-duration: 2s;
animation-timing-function: ease-in-out;
animation-delay: 0.5s;
animation-iteration-count: 3;
animation-direction: alternate;
animation-fill-mode: forwards;
animation-play-state: running;
关键帧定义(@keyframes)
使用 @keyframes 定义动画序列,其中可包含多个时间点(from/to 或百分比):
@keyframes slide {
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
/* 等价于 */
@keyframes slide {
0% { transform: translateX(0); }
100% { transform: translateX(100px); }
}
示例
.box {
animation:
pulse 2s ease-in-out 0.5s infinite alternate, /* 主动画 */
fadeIn 1s forwards; /* 辅助动画 */
}
@keyframes pulse {
0% { transform: scale(1); background: red; }
50% { transform: scale(1.1); }
100% { transform: scale(1); background: blue; }
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
注意事项
必选参数
animation-name和animation-duration是必需的,否则动画不会生效。多动画支持
可通过逗号分隔多个动画,每个动画按顺序对应参数:animation: slide 2s, /* 第一个动画 */ fade 1s 0.5s; /* 第二个动画(延迟0.5秒) */继承性
动画属性不会被继承,需为每个元素单独设置。
完整示例
/* 定义一个旋转并变色的动画 */
@keyframes spinAndChangeColor {
0% { transform: rotate(0deg); background-color: red; }
50% { transform: rotate(180deg); background-color: green; }
100% { transform: rotate(360deg); background-color: blue; }
}
/* 应用动画 */
.element {
animation:
spinAndChangeColor /* 名称 */
3s /* 时长 */
linear /* 匀速 */
1s /* 延迟1秒 */
infinite /* 无限循环 */
alternate /* 交替方向 */
forwards /* 保持最终状态 */;
}
@keyframes
在 CSS 中,@keyframes 规则用于定义 CSS 动画的关键帧(关键状态),是创建复杂动画的核心语法。以下是其完整介绍:
基础语法
@keyframes 动画名称 {
时间点 {
CSS属性: 值;
/* 其他属性... */
}
时间点 {
CSS属性: 值;
/* 其他属性... */
}
}
- 动画名称:自定义标识符(如
slide、fadeIn)。 - 时间点:支持
from(等价于0%)、to(等价于100%)或百分比(如25%、75%)。
关键帧定义方式
- 使用百分比
@keyframes slide {
0% { transform: translateX(0); opacity: 0; }
50% { transform: translateX(50px); opacity: 0.8; }
100% { transform: translateX(100px); opacity: 1; }
}
- 使用
from/to
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
- 省略中间状态
若仅定义首尾状态,浏览器会自动补间(插值计算):
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.2); }
}
可在 @keyframes 中使用的属性
几乎所有 CSS 属性都可以在关键帧中过渡,但需满足:
- 属性值是数值或颜色(如
width: 100px、color: red)。 - 属性值可被插值(如
display: none不可过渡,opacity: 0可过渡)。
常见可动画属性:
transform、opacity、color、background-colorwidth、height、margin、paddingfont-size、box-shadow、filter
关键帧中的特殊规则
- 多属性动画
可同时对多个属性设置动画:
@keyframes moveAndChange {
0% {
transform: translate(0, 0);
background-color: red;
}
100% {
transform: translate(100px, 50px);
background-color: blue;
}
}
- 覆盖属性
后定义的关键帧可覆盖前面的属性:
@keyframes complex {
0% { transform: scale(1); opacity: 0; }
50% { opacity: 0.5; } /* 保持scale(1),仅修改opacity */
100% { transform: scale(2); opacity: 1; }
}
- !important 无效
关键帧中使用 !important 会被忽略:
@keyframes invalid {
0% { color: red !important; } /* 无效 */
}
与 animation 属性配合使用
定义关键帧后,需通过 animation 属性应用到元素:
.element {
animation:
slide /* 对应@keyframes名称 */
3s /* 持续时间 */
ease-in-out /* 缓动函数 */
infinite /* 无限循环 */
alternate; /* 交替播放 */
}
高级技巧
- 动画延迟与持续时间
不同关键帧可设置不同的延迟或持续时间:
.element1 {
animation: slide 2s; /* 2秒完成动画 */
}
.element2 {
animation: slide 4s 1s; /* 4秒完成,延迟1秒 */
}
- 多动画组合
通过逗号分隔应用多个动画:
.element {
animation:
fadeIn 1s,
slide 2s 0.5s; /* 第二个动画延迟0.5秒 */
}
- 反向动画
使用 animation-direction: reverse 反转关键帧顺序:
.element {
animation: slide 2s reverse;
/* 实际执行: 100% → 0% */
}
示例:弹跳动画
/* 定义弹跳动画 */
@keyframes bounce {
0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
40% { transform: translateY(-30px); }
60% { transform: translateY(-15px); }
}
/* 应用到元素 */
.ball {
animation: bounce 2s infinite;
}
浏览器兼容性
所有现代浏览器(Chrome、Firefox、Safari、Edge)均支持 @keyframes,IE10+ 也支持。
为兼容旧版浏览器,可添加浏览器前缀:
@-webkit-keyframes slide { /* Safari 4+ */
from { -webkit-transform: translateX(0); }
to { -webkit-transform: translateX(100px); }
}
@keyframes slide { /* 标准语法 */
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
总结
@keyframes 是 CSS 动画的基础,通过定义关键状态和时间点,配合 animation 属性可创建复杂的动画效果。合理使用百分比、多属性组合和高级参数,能实现流畅的交互动画。
滚动条
选择器
::-webkit-scrollbar // 滚动条整体部分,可以设置宽度啥的
::-webkit-scrollbar-button // 滚动条两端的按钮
::-webkit-scrollbar-track // 外层轨道
::-webkit-scrollbar-track-piece // 内层滚动槽
::-webkit-scrollbar-thumb // 滚动的滑块
::-webkit-scrollbar-corner // 边角
::-webkit-resizer // 定义右下角拖动块的样式
美化
/* Firefox */
* {
/* 滚动条宽度(可选值:thin/auto/none)*/
scrollbar-width: thin;
/* 滚动条颜色(滑块、轨道) */
scrollbar-color: #888 #f1f1f1;
}
/* WebKit 浏览器 */
/* 整体滚动条宽度 */
::-webkit-scrollbar {
width: 8px; /* 垂直滚动条宽度 */
height: 8px; /* 水平滚动条高度 */
display: none; /* 隐藏 */
}
/* 轨道(背景)样式 */
::-webkit-scrollbar-track {
background: #f1f1f1; /* 轨道颜色 */
border-radius: 4px;
}
/* 滑块(拖动块)样式 */
::-webkit-scrollbar-thumb {
background: #888; /* 滑块颜色 */
border-radius: 4px;
}
/* 悬停效果 */
::-webkit-scrollbar-thumb:hover {
background: #555; /* 悬停颜色 */
}
禁用文本选中
button {
user-select: none;
}
英文色值
CSS常用颜色
| 黑色 | 银色 | 灰色 | 白色 | 茶色 | 红色 | 紫色 | 紫红 |
|---|---|---|---|---|---|---|---|
| black | silver | gray | white | maroon | red | purple | fuchsia |
| #000000 | #C0C0C0 | #808080 | #FFFFFF | #800000 | #FF0000 | #800080 | #FF00FF |
| - | - | - | - | - | - | - | - |
| 绿色 | 亮绿 | 橄榄 | 黄色 | 深蓝 | 蓝色 | 青色 | 浅绿 |
| green | lime | olive | yellow | navy | blue | teal | aqua |
| #008000 | #00FF00 | #808000 | #FFFF00 | #000080 | #0000FF | #008080 | #00FFFF |
CSS颜色代码大全
| #FFFFFF | #DDDDDD | #AAAAAA | #888888 | #666666 | #444444 | #000000 |
|---|---|---|---|---|---|---|
| #FFB7DD | #FF88C2 | #FF44AA | #FF0088 | #C10066 | #A20055 | #8C0044 |
| #FFCCCC | #FF8888 | #FF3333 | #FF0000 | #CC0000 | #AA0000 | #880000 |
| #FFC8B4 | #FFA488 | #FF7744 | #FF5511 | #E63F00 | #C63300 | #A42D00 |
| #FFDDAA | #FFBB66 | #FFAA33 | #FF8800 | #EE7700 | #CC6600 | #BB5500 |
| #FFEE99 | #FFDD55 | #FFCC22 | #FFBB00 | #DDAA00 | #AA7700 | #886600 |
| #FFFFBB | #FFFF77 | #FFFF33 | #FFFF00 | #EEEE00 | #BBBB00 | #888800 |
| #EEFFBB | #DDFF77 | #CCFF33 | #BBFF00 | #99DD00 | #88AA00 | #668800 |
| #CCFF99 | #BBFF66 | #99FF33 | #77FF00 | #66DD00 | #55AA00 | #227700 |
| #99FF99 | #66FF66 | #33FF33 | #00FF00 | #00DD00 | #00AA00 | #008800 |
| #BBFFEE | #77FFCC | #33FFAA | #00FF99 | #00DD77 | #00AA55 | #008844 |
| #AAFFEE | #77FFEE | #33FFDD | #00FFCC | #00DDAA | #00AA88 | #008866 |
| #99FFFF | #66FFFF | #33FFFF | #00FFFF | #00DDDD | #00AAAA | #008888 |
| #CCEEFF | #77DDFF | #33CCFF | #00BBFF | #009FCC | #0088A8 | #007799 |
| #CCDDFF | #99BBFF | #5599FF | #0066FF | #0044BB | #003C9D | #003377 |
| #CCCCFF | #9999FF | #5555FF | #0000FF | #0000CC | #0000AA | #000088 |
| #CCBBFF | #9F88FF | #7744FF | #5500FF | #4400CC | #2200AA | #220088 |
| #D1BBFF | #B088FF | #9955FF | #7700FF | #5500DD | #4400B3 | #3A0088 |
| #E8CCFF | #D28EFF | #B94FFF | #9900FF | #7700BB | #66009D | #550088 |
| #F0BBFF | #E38EFF | #E93EFF | #CC00FF | #A500CC | #7A0099 | #660077 |
| #FFB3FF | #FF77FF | #FF3EFF | #FF00FF | #CC00CC | #990099 | #770077 |
红色
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| maroon | #800000 | ■ |
| darkred | #8B0000 | ■ |
| brown | #A52A2A | ■ |
| firebrick | #B22222 | ■ |
| crimson | #DC143C | ■ |
| red | #FF0000 | ■ |
桃红~粉红
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| mediumvioletred | #C71585 | ■ |
| palevioletred | #D87093 | ■ |
| deeppink | #FF1493 | ■ |
| fuchsia(magenta) | #FF00FF | ■ |
| hotpink | #FF69B4 | ■ |
| pink | #FFC0CB | ■ |
| lightpink | #FFB6C1 | ■ |
| mistyrose | #FFE4E1 | ■ |
| lavenderblush | #FFF0F5 | ■ |
紫
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| indigo | #4B0082 | ■ |
| purple | #800080 | ■ |
| darkmagenta | #8B008B | ■ |
| darkorchid | #9932CC | ■ |
| blueviolet | #8A2BE2 | ■ |
| darkviolet | #9400D3 | ■ |
| slateblue | #6A5ACD | ■ |
| mediumpurple | #9370DB | ■ |
| mediumslateblue | #7B68EE | ■ |
| mediumorchid | #BA55D3 | ■ |
| violet | #EE82EE | ■ |
| plum | #DDA0DD | ■ |
| thistle | #D8BFD8 | ■ |
| lavender | #E6E6FA | ■ |
褐~橘~米白
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| saddlebrown | #8B4513 | ■ |
| sienna | #A0522D | ■ |
| chocolate | #D2691E | ■ |
| indianred | #CD5C5C | ■ |
| rosybrown | #BC8F8F | ■ |
| lightcorol | #F08080 | ■ |
| salmon | #FA8072 | ■ |
| lightsalmon | #FFA07A | ■ |
| orangered | #FF4500 | ■ |
| tomato | #FF6347 | ■ |
| coral | #FF7F50 | ■ |
| darkorange | #FF8C00 | ■ |
| sandybrown | #F4A460 | ■ |
| peru | #CD853F | ■ |
| tan | #D2B48C | ■ |
| burlywood | #DEB887 | ■ |
| wheat | #F5DEB3 | ■ |
| moccasin | #FFE4B5 | ■ |
| navajowhite | #FFDEAD | ■ |
| peachpuff | #FFDAB9 | ■ |
| bisque | #FFE4C4 | ■ |
| antuquewhite | #FAEBD7 | ■ |
| papayawhip | #FFEFD5 | ■ |
| cornsilk | #FFF8DC | ■ |
| oldlace | #FDF5E6 | ■ |
| linen | #FAF0E6 | ■ |
| seashell | #FFF5EE | ■ |
| snow | #FFFAFA | ■ |
| floralwhite | #FFFAF0 | ■ |
| ivory | #FFFFF0 | ■ |
| mintcream | #F5FFFA | ■ |
金~黄
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| darkgoldenrod | #B8860B | ■ |
| goldenrod | #DAA520 | ■ |
| gold | #FFD700 | ■ |
| yellow | #FFFF00 | ■ |
| darkkhaki | #BDB76B | ■ |
| khaki | #F0E68C | ■ |
| palegoldenrod | #EEE8AA | ■ |
| beige | #F5F5DC | ■ |
| lemonchiffon | #FFFACD | ■ |
| lightgoldenrodyellow | #FAFAD2 | ■ |
| lightyellow | #FFFFE0 | ■ |
~黄绿
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| darkslategray | #2F4F4F | ■ |
| darkolivegreen | #556B2F | ■ |
| olive | #808000 | ■ |
| darkgreen | #006400 | ■ |
| forestgreen | #228B22 | ■ |
| seagreen | #2E8B57 | ■ |
| green(teal) | #008080 | ■ |
| lightseagreen | #20B2AA | ■ |
| madiumaquamarine | #66CDAA | ■ |
| mediumseagreen | #3CB371 | ■ |
| darkseagreen | #8FBC8F | ■ |
| yellowgreen | #9ACD32 | ■ |
| limegreen | #32CD32 | ■ |
| lime | #00FF00 | ■ |
| chartreuse | #7FFF00 | ■ |
| lawngreen | #7CFC00 | ■ |
| greenyellow | #ADFF2F | ■ |
| mediumspringgreen | #00FA9A | ■ |
| springgreen | #00FF7F | ■ |
| lightgreen | #90EE90 | ■ |
| palegreen | #98F898 | ■ |
| aquamarine | #7FFFD4 | ■ |
| honeydew | #F0FFF0 | ■ |
蓝
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| midnightblue | #191970 | ■ |
| navy | #000080 | ■ |
| darkblue | #00008B | ■ |
| darkslateblue | #483D8B | ■ |
| mediumblue | #0000CD | ■ |
| royalblue | #4169E1 | ■ |
| dodgerblue | #1E90FF | ■ |
| cornflowerblue | #6495ED | ■ |
| deepskyblue | #00BFFF | ■ |
| lightskyblue | #87CEFA | ■ |
| lightsteelblue | #B0C4DE | ■ |
| lightblue | #ADD8E6 | ■ |
| steelblue | #4682B4 | ■ |
| darkcyan | #008B8B | ■ |
| cadetblue | #5F9EA0 | ■ |
| darkturquoise | #00CED1 | ■ |
| mediumturquoise | #48D1CC | ■ |
| turquoise | #40E0D0 | ■ |
| skyblue | #87CECB | ■ |
| powderblue | #B0E0E6 | ■ |
| paleturquoise | #AFEEEE | ■ |
| lightcyan | #E0FFFF | ■ |
| azure | #F0FFFF | ■ |
| aliceblue | #F0F8FF | ■ |
| aqua(cyan) | #00FFFF | ■ |
黑~灰~白
| 颜色名称 | 代码 | 颜色 |
|---|---|---|
| black | #000000 | ■ |
| dimgray | #696969 | ■ |
| gray | #808080 | ■ |
| slategray | #708090 | ■ |
| lightslategray | #778899 | ■ |
| dakgray | #A9A9A9 | ■ |
| silver | #C0C0C0 | ■ |
| lightgray | #D3D3D3 | ■ |
| gainsboro | #DCDCDC | ■ |
| whitesmoke | #F5F5F5 | ■ |
| ghostwhite | #F8F8FF | ■ |
| white | #FFFFFF | ■ |
