如何让css像js同样拥有变量保存属性值,在开发中快速复用应该已经有了多种方案,相似less,sass等预处理器。那么如今css已经支持了本身的变量。学习了一波大佬们的知识javascript
声明变量的时候,变量名前面要加两根连词线 -- 。css
:root {
--color:#000;
--Color:#001;
}复制代码
:root伪类能够看作是一个全局做用域,在里面声明的变量,他下面的全部选择器均可以拿到java
body {
color : var(--color);
color : var(--Color);
}复制代码
使用自定义属性来设置变量名,并使用特定的 var() 来访问,区分大小写 编程
var(--color); var(--Color);是不一样的两个浏览器
它们与color、font-size等正式属性没有什么不一样,只是没有默认含义。因此 CSS 变量(CSS variable)又叫作"CSS 自定义属性"(CSS custom properties)。由于变量与自定义的 CSS 属性实际上是一回事。sass
var()函数还可使用第二个参数,表示变量的默认值。若是该变量不存在,就会使用这个默认值。bash
var(--bg, #111)这种状况只存在于没有默认值less
:root {
--color:#000;
}
body {
--color:#002;
color : var(--color);
}
//这里用个大佬们的例子,下面每一个字的颜色都是按选择器的优先级现实的
<style>
:root { --color: blue; }
div { --color: green; }
#alert { --color: red; }
* { color: var(--color); }
</style>
<p>蓝色</p>
<div>绿色</div>
<div id="alert">红色</div>复制代码
须要注意的是 CSS 变量并不支持 !important 声明。ide
var()函数还能够用在变量的声明。函数
:root {
--color: red;
--bg: var(--color);
}复制代码
注意,变量值只能用做属性值,不能用做属性名。
:root { --color: color; var(--color): red; }复制代码
这样是不合法的
--one: '1px';
--border: var(--one)' solid red';复制代码
.foo {
--top: 20;
/* 无效,至关于没有设置 */
margin-top: var(--top)px;
}复制代码
.foo {
--top: "20px";
/* 无效,至关于没有设置 */
margin-top: var(--top);
}复制代码
.foo {
--top: 20;
margin-top: calc(var(--top) * 1px);
}复制代码
在传统的CSS概念里,属性的有效性(validity)对于自定义属性来说,并不适用。当自定义属性被解析,浏览器不知道哪里为调用到它们,因此几乎全部的值都是有效的。
不幸的是,这些有效值能经过var()函数操做符来调用,即便在当前上文没有意义。因此属性和自定义的值会致使无效的CSS声明。
:root {
--mainWidth:1000px;
--leftMargin:100px;
}
.main {
width: var(--mainWidth);
margin-left: var(--leftMargin);
}
@media screen and (min-width:1480px) {
:root {
--mainWidth:800px;
--leftMargin:50px;
}
}复制代码
a {
color: #7F583F;
color: var(--primary);
}
/* 用属性值得无效声明 */
@supports ( (--a: 0)) {
/* supported */
}
@supports ( not (--a: 0)) {
/* not supported */
}
/* 也可使用@support命令进行检测。 */
const isSupported =
window.CSS &&
window.CSS.supports &&
window.CSS.supports('--a', 0);
if (isSupported) {
/* supported */
} else {
/* not supported */
}
/* JavaScript 检测浏览器是否支持 CSS 变量。 */复制代码
:root{
--testMargin:75px;
}
var root = getComputedStyle(document.documentElement);
// 读取
var cssVariable = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable); // '75px'
// 写入
root.setProperty('--testMargin', '100px');
// 删除变量
root.removeProperty('--testMargin');复制代码
这意味着,JavaScript 能够将任意值存入样式表。
const btn = document.getElementById("button");
const docStyle = document.documentElement.style;
btn.onClick = function(){
docStyle.style.setProperty('--tplColor', 'yellow');
}复制代码
const docStyle = document.documentElement.style;
document.addEventListener('mousemove', (e) => {
docStyle.setProperty('--mouse-x', e.clientX);
docStyle.setProperty('--mouse-y', e.clientY);
});复制代码
其实CSS也是一个很是牛逼的东西善用他的各类属性页面也会变得很是有趣,而他也在慢慢向可编程的方向发展。