CSS变量语法—主题色变更

关于样式变更有很多种方案,然而,js去直接控制元素样式变更,不适合主题色变更,可先参考naive UI

native UI 库主题色参考

  1. import { cloneDeep, kebabCase } from 'lodash-es';
  2. /** 添加css vars至html */
  3. export function addThemeCssVarsToHtml(themeVars: ThemeVars) {
  4. const keys = Object.keys(themeVars) as ThemeVarsKeys[];
  5. const style: string[] = [];
  6. keys.forEach(key => {
  7. style.push(`--${kebabCase(key)}: ${themeVars[key]}`); /
  8. });
  9. const styleStr = style.join(';');
  10. document.documentElement.style.cssText += styleStr;
  11. }

在源码中,我们可以看到申明的n-naive的样式变量

  1. vars:
  2. --n-bezier
  3. --n-font-size
  4. --n-padding
  5. --n-border-radius
  6. --n-option-height
  7. --n-option-prefix-width
  8. --n-option-icon-prefix-width
  9. --n-option-suffix-width
  10. --n-option-icon-suffix-width
  11. --n-color
  12. --n-option-color-hover
  13. --n-option-color-active
  14. --n-divider-color
  15. --n-option-text-color
  16. --n-option-text-color-hover
  17. --n-option-text-color-active
  18. --n-option-text-color-child-active
  19. --n-prefix-color
  20. --n-suffix-color
  21. --n-option-icon-size
  22. --n-option-opacity-disabled

vars变量

:root 这个 CSS 伪类匹配文档树的根元素。对于 HTML 来说,:root 表示 元素,除了 优先级更高之外,与 html 选择器相同

https://developer.mozilla.org/zh-CN/docs/Web/CSS/:root

CSS 变量-浏览器兼容性

自定义属性 (—*):CSS 变量

带有前缀—的属性名,比如—example—name,表示的是带有值的自定义属性,其可以通过 var 函数在全文档范围内复用的。
CSS 自定义属性是可以级联的:每一个自定义属性可以多次出现,并且变量的值将会借助级联算法和自定义属性值运算出来。
image.png

结合root伪类 + vars做到主题色变更

https://codepen.io/web-kubor/pen/zYWbKyB
image.png

Scss预编译

  1. $primary: #409eff;
  2. :root {
  3. --fill-color-primary: $primary;
  4. }
  5. // 编译后 css,变量没有成功应用
  6. :root {
  7. --fill-color-primary: $primary;
  8. }

Css变量语法

https://sass-lang.com/documentation/breaking-changes/css-vars 为了提供与普通CSS的最大兼容性,较新版本的Sass要求在插值中写入自定义属性值中的SassScript表达式

  1. $primary: #409eff;
  2. :root {
  3. --fill-color-primary: #{$primary};
  4. }
  5. // 编译后 css
  6. :root {
  7. --fill-color-primary: #409eff;
  8. }

主题色变更解决方案

  1. .light_theme {
  2. --defipay-text-primary: #333333;
  3. }
  4. .dark_theme {
  5. --defipay-text-primary: #ffffff;
  6. }
  7. body {
  8. color: var(--defipay-text-primary);
  9. }
  1. function swtichTheme() {
  2. if (document.body.classList.contains("dark_theme")) {
  3. document.body.classList.remove("dark_theme");
  4. document.body.classList.add("light_theme");
  5. } else {
  6. document.body.classList.remove("light_theme");
  7. document.body.classList.add("dark_theme");
  8. }
  9. }
  10. function initTheme() {
  11. document.body.classList.add("light_theme");
  12. }

若有收获,就点个赞吧

0 人点赞

  • 书签
  • 添加书签 移除书签
  • Vite构建工具
    • You are running the esm-bundler build of vue-i18n
    • 找不到模块“XXX”或其相应的类型声明
    • 配置JSX
    • vite-预编译
    • vite.config.js配置说明
    • 基于vite + flyio的反向代理
    • Failed to fetch dynamically imported module
    • global/ Buffer is not defined in vite
    • 反向代理请求
    • vite-issues/117解决方法
    • polyfillDynamicImport 懒加载异常解决方案
    • i18n国际化支持+ vscode插件提示
    • 路径快速访问
    • vite打包优化- 超出默认500kiB警告
    • 处理文件模块化【图片模块】
    • Vite概述
  • git
    • Githooks + standard代码风格统一配置
    • 移除文件忽略
    • fork 后同步源上游仓库地址
    • Husky: 一个让 Git 钩子变得更简单的工具
    • 团队规范化-git hooks
    • git本地配置
    • gitflow工作流
    • key无效或者过期操作
    • gitignore新加忽略文件失效问题
    • 线下脚本自动化配置
  • 交互动画/布局适配
    • 关于移动端横屏问题适配
    • v-ripple -水波纹
    • svg.js 构建自定义折线表
    • Sass @mixin 与 @include
    • 可视化-echarts解决方案实例
    • 可视化框架-总览( Front-end visualization)
    • CSS3-动画
    • CSS变量语法—主题色变更
    • 关于echarts响应式重绘的问题
    • 一行代码处理chrome密码自动填充
    • calc 用于处理移动端大框架
    • 关于滚动条的自定义样式
    • 重排与重绘(Reflow %26 Repaint)
    • css基础回顾
    • css业务场景技巧
    • 屏幕适配-自适应/响应方案总结
  • 桌面端App开发
    • 简介
    • tauri
      • 定制化webview
      • tauri,小团队项目的福音
    • electron
      • electron进程介绍
      • 每日一课-新建子界面
      • 每日一课-读取本地文件并且写入内容
      • 每日一课-electron是什么
      • 处理electron依赖无法下载的问题
      • 每日一课-首页展示webview
      • 高级集成electron + vue/react
      • electron-forge | 多平台打包器
      • electron-builder 打包器
      • 每日一课-在浏览器中打开链接
  • sever-服务
    • node库
      • nodemon
      • localtunnel
      • Puppeteer无头浏览器-web中的应用讲解
      • live-server- 搭建本地小型开发服务
    • node工具包
      • node中OS模块实战巧用
      • xlsx表的解析与读写
      • node fs模块实战
    • Nginx
      • niginx配置下hash模式和history模式
      • 安装
      • 配置路径
      • 常用命令
      • root路径下部署多项目
    • 使用js编写更便捷shell脚本-ZX
    • fixed -Updating Homebrew...
    • Docker入门实操-前端本地镜像部署
    • mongodb-指导(手摸手)
    • egg企业级resful接口协定
    • vim编辑器
    • web-Server
  • 微信小程序
    • weapp-image业务解决方案
    • 关于2018-2020小程序框架演变
    • 基于vue的uni-app实操体验
    • 小程序本地储存速记脑图
  • react
    • UMI
      • ts + antd + umi + egg= Client
    • react-hooks
      • hooks概览
    • 第六课- props深入
    • 第五课-组件通讯
    • 第四课-受控组件的双向绑定
    • 第三课-react组件化使用
    • 第二课-JSX特色语法
    • 第一课-react概述
  • vue
    • vue3
      • 基于vue3 的UI库分享
      • vue3 + ts 如何定义一个全局属性
      • 图标库-vue3
      • typescript in composition
      • 动态组件 %26 异步组件-keep-alive
      • 组合hook+ tabs 持久化方案
      • 关于set up语法糖=>如何获取props\emit
      • props外的爷孙通信(provide/inject)
      • vue3概览
      • vue3 实战方案
      • 异步组件(Suspense)
      • 实现动态storage
      • useHooks代替vuex具体方案
      • directives-自定义指定详解
    • vue2
      • 技术解密
      • 生命周期调用顺序
      • 处理xuex刷新数据消息情况解决方案
      • vuex-persistedstate
      • vuex的最佳实践
      • vue业务中较佳细节处理方案
      • 监听子组件的生命周期
      • @cli3升级到@cli4
      • 自定义用户拖拽
      • vue响应式数据原理解析
      • vue打包后依赖大小浏览
      • webpck工程化
      • vue在构建项目时除了webpack还用了rollup
      • filter全局设置(vue2.0,3.0-已弃用)
    • h函数
    • 基于vue3的ui库使用体验
    • 关于前端团队代码协作这件事
    • 定时器清除的优化
    • vue-router路由模式分析
  • 业务解决方案
    • 交互体验
      • canvas绘制
      • 全局弹窗【谷歌验证码绑定】
      • video处理chrome66随机噪音问题
      • h5视频背景-自动播放%26铺满背景
      • 动态配置交互
    • 原生工具包
      • 绕过授权方式获取用户地址信息
      • 原生时间格式处理解决方案
      • 获取URL中的携带参数
      • 不要在用字典了,Map用起来
      • 22个Javascript常用工具函数
      • 关于数字的格式化解决方案
      • 生成临时图片预览
      • 纯前端渲染导出
      • 简化处理结构Map-例:多层级联菜单
      • 图片一键下载
      • 克隆解决方案
      • 关于复制到粘贴板
    • npm包
      • Ni, 比yarn更好的工具
      • npm包维护
      • Naive UI实战开发体验
      • nrm,管理npm的源
      • npm%26yarn
      • 如何在npm库发布自己的库/框架
    • API
      • quantcast站点浏览追踪
      • 在 Analytics中添加自定义事件
      • echarts重绘问题-vue3
      • 自动获取定位
      • 下载文件
      • [微信支付]JSAPI企业解决方案
      • [订阅通知]浏览器解决方案
      • sentry-代码监控解决方案
      • 阿里云滑块样式-(宽度自动可配置,多语言切换)
      • Google Analytics
      • Chrome插件开发
      • chrome版本更新导致开发黄色预警
      • 基于auth2.0验证-第三方社交帐号登录[微博,微信]
      • 基于auth2.0的谷歌第三方登录(2023年将弃用!)
      • 基于Google的Web 应用的 OAuth 2.0 隐式和授权代码流
    • sentry的线上代码监控
    • 动态集成html
    • 跳转外链方式
    • base64编码
    • 国家国旗-映射关系
    • 阿里云oss图片下载跨域问题
    • 前端数据埋点解决方案
    • 前端团队代码评审 CheckList 清单
    • 静态部署网站解决方案
  • 面试
    • symbol使用
    • 网站性能优化
    • 防抖与节流
    • 2021-3月份面试总结
    • 作用域-回顾篇(一)
    • 关于闭包-回顾篇(二)
      • JS内存回收 %26 垃圾回收机制
    • 原型链-回顾篇(三)
    • 构造-回顾篇(四)
    • ECMAScript 6-回顾篇(五)
      • ES6-新增类详解
    • 谈谈模块化-回顾篇(六)
    • 跨域-回顾篇(七)
    • 事件循环(回顾七)
    • 异步方案-回顾篇(八)
暂无相关搜索结果!
    展开/收起文章目录

    深圳SEO优化公司大芬百度竞价包年推广同乐设计公司网站丹竹头百姓网标王推广深圳模板推广福田网站设计松岗模板制作盐田网站建设福永设计网站深圳网站优化按天扣费广州建设网站平湖网站优化推广同乐百度爱采购平湖营销型网站建设南联网站优化按天收费双龙优化光明模板制作爱联企业网站改版东莞标王坂田网站制作龙华网站优化按天扣费观澜企业网站设计大浪标王塘坑模板制作木棉湾优化丹竹头关键词按天计费坑梓百度竞价包年推广南联优化沙井SEO按效果付费松岗营销型网站建设龙华设计公司网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化