css变量实现换肤

css变量#

语法:var( <自定义属性名> [, <默认值 ]? )
如果我们使用的变量没有定义(注意,仅限于没有定义),则使用后面的值作为元素的属性值

  • 变量命名 不能包含$,[,^,(,%等字符,普通字符局限在只要是“数字[0-9]”“字母[a-zA-Z]”“下划线_”和“短横线-”这些组合,但是可以是中文,日文或者韩文,
  • 只能在声明块{}
  • 变量也是跟着CSS选择器走的,如果变量所在的选择器和使用变量的元素没有交集,是没有效果的。
  • 当存在多个同样名称的变量时候,变量的覆盖规则由CSS选择器的权重决定的,但并无!important这种用法,因为没有必要,!important设计初衷是干掉JS的style设置,但对于变量的定义则没有这样的需求。

使用方式#

  1. 直接在标签上绑定style
// 实现进度条
<div class="bar" style="--percent: 60;"></div>
.bar::before {
    display: block;
    counter-reset: progress var(--percent);
    content: counter(progress) '%\2002';
    width: calc(1% * var(--percent));
    color: #fff;
    background-color: #2486ff;
    text-align: right;
    white-space: nowrap;
    overflow: hidden;
}
  1. JS中设置CSS变量
<div id="box">
    <img src="mm.jpg" style="border: 10px solid var(--color);">
</div>

box.style.setProperty('--color', '#cd0000');
  1. JS中获取CSS变量
// 获取 --color CSS 变量值
var cssVarColor = getComputedStyle(box).getPropertyValue('--color'); 

// 输出cssVarColor
// 输出变量值是:#cd0000 
console.log(cssVarColor);

实现换肤#

首先定义变量skinVariablescss

body[data-theme='dark'] {
    --bgColor: #353535;

    --navFontColor: #adb7be;

    --mainFontColor: #fff;

    --mainColor: #3db96d;

    --mainHoverColor: #2aa461;

    --btnBgColor1: #3db96d;

    --btnBgColor2: #1b904e;

    --selectBgColor: #212121;

    --selectOpColor: #afafaf;

    --selectActiveColor: #fff
}

body[data-theme='light'] {

    --bgColor: #f4f5f5;

    --navFontColor: #515767;

    --mainFontColor: #212121;

    --mainColor: #1e80ff;

    --mainHoverColor: #508cf7;

    --btnBgColor1: #1d7dfa;

    --btnBgColor2: #1e80ff;

    --selectBgColor: #fff;

    --selectOpColor: #afafaf;

    --selectActiveColor: #fff
}

vue项目在app.vue根组件中为body设置自定义属性

      const body = document.body
      body.setAttribute('data-theme','dark')

body下所有元素即可使用变量

作者:whh666

出处:https://www.cnblogs.com/whh666/p/17060465.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   资深if-else侠  阅读(226)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示