网站首页 > 技术文章 正文
1. 基础概念与语法
CSS变量也称为CSS自定义属性,使用--前缀定义:
:root {
--main-color: #3498db;
--padding: 15px;
}
.element {
background-color: var(--main-color);
padding: var(--padding);
}
特性:
- o 以--开头命名(如--main-color)
- o 大小写敏感
- o 使用var()函数调用变量
- o 可以设置默认值:var(--color, red)
2. 作用域与优先级
CSS变量遵循CSS层叠规则:
:root {
--size: 16px;
}
.container {
--size: 14px; /* 局部覆盖 */
}
.text {
font-size: var(--size); /* 在.container内是14px,外部是16px */
}
3. JavaScript动态交互
JavaScript可以实时读取和修改CSS变量:
// 获取变量
const root = document.documentElement;
const color = getComputedStyle(root).getPropertyValue('--main-color');
// 修改变量
root.style.setProperty('--main-color', 'red');
// 动态响应式示例
window.addEventListener('resize', () => {
const fontSize = window.innerWidth < 600 ? '14px' : '16px';
root.style.setProperty('--base-size', fontSize);
});
4. 实战应用案例
案例1:主题切换
:root {
--bg-primary: #ffffff;
--text-primary: #333333;
}
.dark-mode {
--bg-primary: #222222;
--text-primary: #f0f0f0;
}
body {
background: var(--bg-primary);
color: var(--text-primary);
transition: all 0.3s;
}
案例2:响应式间距系统
:root {
--spacing: 8px;
}
@media (min-width: 768px) {
:root {
--spacing: 16px;
}
}
.card {
margin: var(--spacing);
padding: calc(var(--spacing) * 2);
}
5. 性能优化建议
- 1. 避免过度嵌套:深层次的变量引用会增加解析时间
- 2. 合理作用域:将变量定义在尽可能接近使用的地方
- 3. 动态变量慎用:频繁通过JS更新的变量可能引起重排
- 4. 预处理器对比:比LESS/SASS变量具有运行时可变的优势
- 5. 兼容性处理:提供fallback值
/* 推荐写法 */
.element {
color: var(--primary-color, blue); /* 添加默认值 */
font-size: var(--text-size, 16px);
}
猜你喜欢
- 2025-09-21 提升档次的CSS伪元素技巧!原来::before和::after还能这么玩
- 2025-09-21 PLC 数据采集 + MySQL 存储 + Flask+ECharts 可视化系统
- 2025-09-21 使用deepSeek生成一个贪吃蛇游戏_canvas 贪吃蛇
- 2025-09-21 CSS 电梯:纯 CSS 实现的状态机与楼层导航
- 2025-09-21 操作系统应用开发(四)压缩软件开发demo——东方仙盟筑基期
- 2025-09-21 前端学习核心_黑马程序员vue全套视频教程从vue2 0到vue3 0一套全覆盖前端学习核心框架教程
- 2025-09-21 操作系统应用开发(七)mac苹果模拟器——东方仙盟练气期
- 2025-09-21 uniapp里小程序自定义tabbar,实现中间item凸起效果
- 2025-09-21 档案系统(一)学员管理系统开发——东方仙盟筑基期
- 2024-08-05 用多了各种组件库的你还会用原生JS写轮播图吗?
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)