css自定义变量 variables

css中variables:css变量

平时没少用sass、less、stylus预编译语言,里面的变量很常见,但都需要前把变量都以静态的方式定义好才能使用,然后编译完后生效,无法和js交互。

variables提供了css与js交互的机会!

一、css变量的定义及使用方式:

复制代码
/* 
    定义:--开头  有作用域
    */
:root{
    --color1:red;
    --color2:green;
}
.box{
    width:100px;
    height:100px;
}
/* 
    使用:var(css变量)
*/
.box1{
    background-color: var(--color1);
}
.box2{
    background-color: var(--color2);
}
<div class="box1 box"></div>
<div class="box2 box"></div>
复制代码

效果:

 

 响应式:

复制代码
div {
  --color: #7F583F;
  --bg: #F7EFD2;
}

.mediabox {
  color: var(--color);
  background: var(--bg);
}

@media screen and (min-width: 768px) {
  .mediabox {
    --color:  #F7EFD2;
    --bg: #7F583F;
  }
}
复制代码

默认值:

var(变量,默认值)

background-color: var(--color1,blue);

设置变量数值:

这样是错误的:

--size: 30;   
font-size: var(--size)px;//不生效

正确方式:

--size: 30px;   
font-size: var(--size);//生效

可以用calc计算:

--size: 30;   
font-size: calc(var(--size) * 1px);//生效

如果变量值带有单位,就不能写成字符串:

复制代码
/* 无效 */
.divbox {
    --size: '30px';
    font-size: var(--size);
}

/* 有效 */
.divbox {
    --size: 30px;
    font-size: var(--size);
}
复制代码

图片地址,如url(var(--image-url)) ,不会生效

兼容性处理:

css:

复制代码
/*css*/

@supports ( (--a: 0)) {
    /* supported */
  .box{xxx:xxx}
} @supports ( not (--a: 0)) { /* not supported */ }
复制代码

js:

// Js

if (window.CSS && window.CSS.supports && window.CSS.supports('--a', 0)) {
    console.log('CSS properties are supported');
} else {
    console.log('CSS properties are NOT supported');
}

js操作变量:

//读取
let computedStyle = getComputedStyle(document.getElementById("box"));
console.log(computedStyle.getPropertyValue('--bg'));//red
// 写入
document.getElementById("box").style.setProperty('--color1','blue');
// 删除
document.getElementById("box").style.removeProperty('--color1');

 

 

 

posted @   古墩古墩  Views(326)  Comments(0Edit  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2020-08-06 element-ui的时间选择器 弹窗跑到左上角 解决方法
2020-08-06 jquery动态删除标签
2019-08-06 javascript监听浏览器前进后退
点击右上角即可分享
微信分享提示