Technicalarticles
<style> /* 在 body 选择器中声明了两个变量 */ body { --primary-color: red; /* 变量名大小写敏感,--primary-color 和 --PRIMARY-COLOR 是两个不同变量 */ --PRIMARY-COLOR: initial; } /** 同一个 css 变量,可以在多个选择器内声明。优先级高的会替换优先级低的 */ main { --primary-color: blue; } /** 使用 css 变量 */ .text-primary { /* var() 函数用于读取变量。*/ color: var(--primary-color) }<style><!-- 呈现红色字体,body 选择器的颜色 --><div>red</div><!-- 呈现蓝色字体,main 选择器定义的颜色 --><main>blue</main><!-- 呈现紫色字体,当前内联样式表的定义 --><div>purple</main>:root { --primary-color: #06c;}<style> /* ...和上面 CSS 一致 */</style><!-- 呈现黄色字体 --><div>red</div><!-- 呈现蓝色字体,main 选择器定义的颜色 --><main id='primary'>blue</main><!-- 呈现紫色字体,当前内联样式表的定义 --><div id="secondary" style='--primary-color: purple">purple</main><script>// 设置变量document.body.style.setProperty('--primary-color', 'yellow');// 设置变量,js DOM 元素 ID 就是全局变量,所以直接设置 main 即可// 变为 红色primary.style.setProperty('--primary-color', 'red');// 变为 黄色,因为当前样式被移除了,使用 body 上面样式secondary.style.removeProperty('--primary-color');// 通过动态计算获取变量值getComputedStyle(document.body).getPropertyValue('--primary-color')</script>:root { --border-radius: 5px; --box-shadow: 2px 2px 10px; --color: #118bee; --color-accent: #118bee0b; --color-bg: #fff; --color-bg-secondary: #e9e9e9; --color-secondary: #920de9; --color-secondary-accent: #920de90b; --color-shadow: #f4f4f4; --color-text: #000; --color-text-secondary: #999; --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; --hover-brightness: 1.2; --justify-important: center; --justify-normal: left; --line-height: 150%; --width-card: 285px; --width-card-medium: 460px; --width-card-wide: 800px; --width-content: 1080px;}
/* 没有设置过 --primary-color,颜色默认使用 #7F583F */color: var(--primary-color, #7F583F);
/* 对于不支持 CSS 变量的浏览器,可以采用下面的写法。*/a { /* 颜色默认值 */ color: #7F583F; /* 不支持则不识别该条规则 */ color: var(--primary);}// 先导入所有 Less 变量@import (reference) './var.less';// 利用正则去替换 Less 变量 为 CSS 变量.theme(@property, @imp) { @{property}: e(replace(@imp, '@([^() ]+)', '@{$1}', 'ig')); @{property}: e(replace(@imp, '@([^() ]+)', 'var(--$1, @{$1})', 'ig'));}@import '../common/style/theme.less';.van-button { // ... 其他省略 .theme(height, '@button-default-height'); .theme(line-height, '@button-line-height'); .theme(font-size, '@button-default-font-size');}// => less 编译之后生成.van-button{ // ... 其他省略 height:44px; height:var(--button-default-height,44px); line-height:20px; line-height:var(--button-line-height,20px); font-size:16px; font-size:var(--button-default-font-size,16px);}
<style> .red-box { --toggler: ; --red-if-toggler: var(--toggler) red; background: var(--red-if-toggler, green); /* will be red! */ } .green-box { --toggler: initial; --red-if-toggler: var(--toggler) red; background: var(--red-if-toggler, green); /* will be green! */ }</style><!-- 宽度高度为 100px 的 红色盒子 --><div style="height: 100px; width: 100px" class="red-box"></div><!-- 宽度高度为 100px 的 绿色盒子 --><div style="height: 100px; width: 100px" class="green-box"></div>
.red-box { /* 当前为空值 */ --toggler: ; /* 因为 var(--toggler) 得到了空,所以得到结果 为 --red-if-toggler: red */ --red-if-toggler: var(--toggler) red; /** 变量是 red, 不会使用 green */ background: var(--red-if-toggler, green); /* will be red! */}.green-box { /** 当前为无效值 */ --toggler: initial; /** 仍旧无效数据,因为 var 只会在参数不是 initial 时候进行替换 */ --red-if-toggler: var(--toggler) red; /** 最终无效值没用,得到绿色 */ background: var(--red-if-toggler, green); /* will be green! */ /* 根据当前的功能,我们甚至可以做到 and 和 or 的逻辑 * --tog1 --tog2 --tog3 同时为 空值时是 红色 */ --red-if-togglersalltrue: var(--tog1) var(--tog2) var(--tog3) red; /* * --tog1 --tog2 --tog3 任意为 空值时是 红色 */ --red-if-anytogglertrue: var(--tog1, var(--tog2, var(--tog3))) red;}
.breakpoints-demo > * { width: 100%; background: red;}@media (min-width: 37.5em) and (max-width: 56.249em) { .breakpoints-demo > * { width: 49%; }}@media (min-width: 56.25em) and (max-width: 74.99em) { .breakpoints-demo > * { width: 32%; }}@media (min-width: 56.25em) { .breakpoints-demo > * { background: green; }}@media (min-width: 75em) { .breakpoints-demo > * { width: 24%; }}/** 移动优先的样式规则 */.breakpoints-demo > * { /** 小于 37.5em, 宽度 100% */ --xs-width: var(--media-xs) 100%; /** 小于 56.249em, 宽度 49% */ --sm-width: var(--media-sm) 49%; --md-width: var(--media-md) 32%; --lg-width: var(--media-gte-lg) 24%; width: var(--xs-width, var(--sm-width, var(--md-width, var(--lg-width)))); --sm-and-down-bg: var(--media-lte-sm) red; --md-and-up-bg: var(--media-gte-md) green; background: var(--sm-and-down-bg, var(--md-and-up-bg));}/** * css-media-vars * BSD 2-Clause License * Copyright (c) James0x57, PropJockey, 2020 */html { --media-print: initial; --media-screen: initial; --media-speech: initial; --media-xs: initial; --media-sm: initial; --media-md: initial; --media-lg: initial; --media-xl: initial; /* ... */ --media-pointer-fine: initial; --media-pointer-none: initial;}/* 把当前变量变为空值 */@media print { html { --media-print: ; }}@media screen { html { --media-screen: ; }}@media speech { html { --media-speech: ; }}/* 把当前变量变为空值 */@media (max-width: 37.499em) { html { --media-xs: ; --media-lte-sm: ; --media-lte-md: ; --media-lte-lg: ; }}
DO U LIKE?