详解利用css3的var()实现运行时改变scss的变量值


Posted in HTML / CSS onMarch 02, 2021

var()介绍与使用

详情(MDN) IE无效,其余主流浏览器有效

var()使用

只能在{}内声明,作用范围由{}的选择器决定

<!-- 声明 -->
body{
  --name:value;//body内有效
}


<!-- 使用 -->
.test{
  attr: var(--name,defaultValue) //当--name不存在时,使用defaultValue
  
  var(--name):#369;//错误使用方式
}

CSS中原生的变量定义语法是:–*,变量使用语法是:var(–*),其中*表示我们的变量名称。

但是,不能包含$,[,^,(,%等字符,普通字符局限在只要是“数字[0-9]”“字母[a-zA-Z]”“下划线_”和“短横线-”这些组合,但是可以是中文,日文或者韩文。

运行时改变scss变量值

这个方法并不是能直接改变scsss变量的值,但是能做到一样的效果,对于需要一个变量控制多个属性的更为有效简洁
单变量控制单条属性的就没必要用了,这方法就是修改style属性而已,单对单和你之间在style写那条属性是一样的

原理(English)

简单来说就是将scss的变量交由css变量控制

$colors: (
  primary: #FFBB00,
  secondary: #0969A2
);

Selector1{
  @each $name, $color in $colors {
    --color-#{$name}: $color;
  }
}

<!-- Selector1的生成效果 -->
:root {
  --color-primary: #FFBB00;
  --color-secondary: #0969A2;
}


<!-- 使用方式一  直接使用css变量 -->
Selector{
  color:var(--color-primary);
}

<!-- 使用方式二 利用scss的函数,以符合scss语法 推荐 -->  
@function color($color-name) {
  @return var(--color-#{$color-name});
}

body { 
  color: color(primary); //使用
}

<!-- body生成效果 -->
body { 
  color: var(--color-primary); //这样就可以被js设置了
}

js设置css变量,即设置运行scss变量

domObject.style.setProperty(name,value);//name为css变量名 e.g: --color-primary

至此完成了scss的运行时改变变量值,具体运用情景我也不太清楚,只是我遇到了。

我的运用情景:

自定义组件需要暴露出一些样式属性给使用者 自由调整 ,类似主题,而我又不想用字符串拼接的方式去完成,太浪费了,每次改完一个值都得把整个style给重写一遍,而且这涉及到了频繁修改dom不符合vue的思想,而且直接用css写太繁琐了。

所以我采用scss来写样式,scss嵌套真好用,less的不支持属性再嵌套,用得很不爽,没scss简洁。
由于scss是预编译的,无法在运行时改变变量值,而我又需要去改变,所以去google了,得到一个满意的解决方案 -> 原理(English)

特别注意

在单文件组件(.vue)中若是使用了scoped 那么:root、:body等选择器的效果并不会如同你所预期的

[data-v-1374924e]:root {
  --test:100px;
}

像这种的,变量–test 根本找不到,理由是并没有这个root,vue组件scoped的特性,只在本组件有效,但组件又没有完整的document,即组件内部没有root

所以在vue文件中,仔细思考css变量声明的选择器范围,避免变量无效

到此这篇关于详解利用css3的var()实现运行时改变scss的变量值的文章就介绍到这了,更多相关css3改变scss的变量值内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
详解css3 mask遮罩实现一些特效
Oct 24 HTML / CSS
CSS3教程(4):网页边框和网页文字阴影
Apr 02 HTML / CSS
用CSS3来实现社交分享按钮
Nov 11 HTML / CSS
CSS3中Animation动画属性用法详解
Jul 04 HTML / CSS
css3进阶之less实现星空动画的示例代码
Sep 10 HTML / CSS
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
Feb 01 HTML / CSS
Html5如何唤起百度地图App的方法
Jan 27 HTML / CSS
HTML5语音识别标签写法附图
Nov 18 HTML / CSS
HTML5中drawImage用法分析
Dec 01 HTML / CSS
详解HTML5中ol标签的用法
Sep 08 HTML / CSS
浅谈Html5多线程开发之WebWorkers
May 02 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
Sep 23 HTML / CSS
从一次项目重构说起CSS3自定义变量在项目的使用方法
Mar 01 #HTML / CSS
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
Feb 24 #HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
Feb 08 #HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
Jan 27 #HTML / CSS
纯CSS3实现运行时钟的示例代码
Jan 25 #HTML / CSS
CSS3选择器新增问题的实现
Jan 21 #HTML / CSS
CSS3.0实现霓虹灯按钮动画特效的示例代码
Jan 12 #HTML / CSS
You might like
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
Python随机生成彩票号码的方法
2015/03/05 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Django组件content-type使用方法详解
2019/07/19 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
应届大学生求职的自我评价
2013/11/17 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2016年母亲节寄语
2015/12/04 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
深入理解Vue的数据响应式
2021/05/15 Vue.js
Python re.sub 反向引用的实现
2021/07/07 Python
实操Python爬取觅知网素材图片示例
2021/11/27 Python
vue 自定义组件添加原生事件
2022/04/21 Vue.js