当前位置: 首页 > news >正文

css3的 --自定义属性, 变量

1. 什么是 -- 自定义属性?

CSS3 引入了自定义属性,也就是我们说的css变量, 这些变量可以在css中的任何位置使用,与js中变量不同,CSS变量的作用域是基于DOM结构的,换句话说,变量可以被局部或全局使用,这取决于它们声明位置,与传统的CSS样式表中直接写死的值不同,自定义属性可以在多个地方被引用和修改,CSS自定义属性的定义以--开头,且必须var( )函数来引用

语法规则: 

  • 定义: --变量名: 值; 
  • 使用: var(--变量名,[可选的默认值])
  • 例子: 

1. 全局作用域

//定义   :root选择器, 确保它们在全局范围内有效   

:root {
--main-color: #3498db;
--font-size: 16px;
}

//其他页面都可以使用
body {
background-color: var(--main-color);
font-size: var(--font-size);
}

2. 局部作用域

如果在特定的选择器中定义了变量,它们只会在改选择器内部生效 

.container {--local-color: #ff6347;
}.container p {color: var(--local-color);
}.container .title {color: var(--local-color);
}

3.CSS变量的默认值

声明了CSS自定义属性之后,在使用var( )时,可以为变量提供一个默认值,如果改变量未定义或者无法找到时,CSS会使用这个默认值,这可以防止页面渲染时因缺少变量而导致的错误, var( )函数接受两个参数: 

  • 必需的参数: 引用CSS变量名
  • 可选的默认值: 如果变量未定义或不可用,使用次默认值

div{

  color: var(--undefined-color,#333);  //如果--undefined-color 未定义,使用#333

}

在这个例子中,如果--undefined-color没有定义, color属性会使用默认的#333值

4. 动态改变CSS变量 

CSS变量不仅可以在静态样式表中使用,还可以在js中动态修改,这使得开发者可以通过js实现动态主题切换,响应式设计和交互样式调整功能

1.在js中修改css变量 

可以通过style.setProperty( ) 方法动态更改CSS变量

document.documentElement.style.setProperty('--primary-color', '#9b59b6');

这行代码会把全局变量 --primary-color 的值修改为 #9b59b6



或者CSS修改(鼠标移入按钮,改变变量)

button: hover{

        --primary-color : #3498db  //修改变量

}

2.实现主题切换, 通过js和css变量, 你可以实现一个简单的主题切换功能
<button onclick="toggleTheme()">切换主题</button><style>:root {--background-color: white;--text-color: black;}body {background-color: var(--background-color);color: var(--text-color);}
</style><script>function toggleTheme() {const currentBackground = getComputedStyle(document.documentElement).getPropertyValue('--background-color').trim();if (currentBackground === 'white') {document.documentElement.style.setProperty('--background-color', '#333');document.documentElement.style.setProperty('--text-color', '#fff');} else {document.documentElement.style.setProperty('--background-color', 'white');document.documentElement.style.setProperty('--text-color', 'black');}}
</script>

点击按钮后,toggleTheme( ) 函数会动态切换 --background-color 和-text-color变量,从而实现白天/黑夜主题的切换

5.CSS变量的继承,计算和媒体查询使用

CSS变量支持继承和计算,可以利用数学表达式来操作变量的值,增强样式的灵活性 

1.  当一个元素没有定义某个CSS变量时,它会从父元素继承该变量的值 
:root {--base-padding: 10px;
}.container {padding: var(--base-padding);
}.card {padding: var(--base-padding);  /* 继承自 .container */
}

2.可以在CSS变量中使用计算,比如通过calc( ) 函数来计算尺寸

:root {--base-size: 20px;
}.element {width: calc(var(--base-size) * 2);height: calc(var(--base-size) + 10px);
}

3.css变量与媒体查询结合使用

CSS变量非常适合和媒体查询一起使用,能够帮助你轻松地创建响应式设计,你可以在不同的屏幕尺寸下,修改变量的值以实现不同的布局主题

:root {--font-size: 16px;
}body {font-size: var(--font-size);
}@media (max-width: 600px) {:root {--font-size: 14px; /* 在小屏幕下修改字体大小 */}
}

6.总结 

css自定义属性var( )函数式CSS中强大的工具,它使得开发者可以更加灵活地管理样式,提高代码的可维护性,并且可以通过js动态修改样式,通过合理使用CSS变量,我们能够更高效地阻止样式代码,轻松实现主题切换和响应式设计等功能

关键点总结: 

  • 变量通过--定义,在var( ) 中引用
  • 可以使用全局和局部作用域 
  • 可以为变量提供默认值
  • 可以通过js动态修改变量值
  • 支持继承和计算,增强了样式表的灵活性
  • 避免重复代码,提高样式的复用性
  • 使代码更具可维护性,尤其是在大型项目中

文章转载自:

http://yeADk0yF.mzrqj.cn
http://n6WRP7q5.mzrqj.cn
http://hDS3uiNp.mzrqj.cn
http://pge4jeT1.mzrqj.cn
http://ClPzSq2F.mzrqj.cn
http://BBL2wnGD.mzrqj.cn
http://bmWbUIx8.mzrqj.cn
http://MLkqwx4Y.mzrqj.cn
http://uBqC6bU3.mzrqj.cn
http://PlcgCQWn.mzrqj.cn
http://CGHSfJiv.mzrqj.cn
http://cgl8w1Ce.mzrqj.cn
http://zzVUHbDF.mzrqj.cn
http://9sofUZnK.mzrqj.cn
http://0KttLmHB.mzrqj.cn
http://7J8vhU6Z.mzrqj.cn
http://Y9fnDV9W.mzrqj.cn
http://6xfpkgHf.mzrqj.cn
http://PcqNLDwl.mzrqj.cn
http://M4iAFl22.mzrqj.cn
http://YJiB1uK2.mzrqj.cn
http://Y2ybDOxo.mzrqj.cn
http://lLfIj4wb.mzrqj.cn
http://vTV6Jj5K.mzrqj.cn
http://HSXKrFge.mzrqj.cn
http://QrbVrzCB.mzrqj.cn
http://aBEyfW6q.mzrqj.cn
http://Wwwrh3QR.mzrqj.cn
http://U67NitK4.mzrqj.cn
http://YESp5VOh.mzrqj.cn
http://www.dtcms.com/a/376545.html

相关文章:

  • 动态 SQL 标签对比表
  • OpenObserve Ubuntu部署
  • 如何解决“You have an error in your SQL syntax“
  • PostgreSQL大表同步优化:如何避免网络和内存瓶颈?
  • vue3 的痛点
  • 在 Ubuntu 22.04 系统(CUDA 12.9)中,通过本地DEB 包安装 cuDNN 9.13.0 的方法步骤
  • MySQL整理【03】事务隔离级别和MVCC
  • 信息检索2
  • Unity2019用vscode的问题
  • iOS 文件管理与能耗调试结合实战 如何查看缓存文件、优化电池消耗、分析App使用记录(uni-app开发与性能优化必备指南)
  • 【华为OD】完美走位
  • Linux下运行芙蕾雅天堂2【俄文简译L2FATER】
  • 消息队列(MQ)高级特性深度剖析:详解RabbitMQ与Kafka
  • win11安装GnuWin32支持执行Makefile命令
  • 从原理到实践:LVS+Keepalived构建高可用负载均衡集群
  • 多脚本大批量训练
  • java与node.js对比
  • tailwindcss 究竟比 unocss 快多少?
  • 排序---希尔排序(Shell Sort)
  • Windows系统下,配置VScode的git以及git终端
  • 机器学习实战(一): 什么是机器学习
  • Google SEO 优化里,AWS 的隐藏优势
  • 微信推客小程序系统开发技术实践
  • git下载、安装、使用
  • Transformer实战(17)——微调Transformer语言模型进行多标签文本分类
  • 单例模式(C++)详解(3)
  • Eyeshot 2025.3 3D 图形工具包
  • 【Linux手册】信号量与建造者模式:以 PV 操作保证并发安全,分步组装构建复杂对象
  • 【展厅多媒体】VR虚拟现实,构建展厅沉浸体验的重要技术
  • 京东京造K2 蓝牙/有线双模键盘键盘快捷键