详解利用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 相关文章推荐
css图标制作教程制作云图标
Jan 19 HTML / CSS
css3实例教程 一款纯css3实现的发光屏幕旋转特效
Dec 07 HTML / CSS
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
Sep 15 HTML / CSS
使用CSS3实现字体颜色渐变的实现
Aug 10 HTML / CSS
HTML5是否真的可以取代Flash
Feb 10 HTML / CSS
html5 兼容IE6结构的实现代码
May 14 HTML / CSS
HTML5 Canvas入门学习教程
Mar 17 HTML / CSS
Html5 web本地存储实例详解
Jul 28 HTML / CSS
关于iframe跨域使用postMessage的实现
Oct 29 HTML / CSS
关于html字符串正则判断和匹配的具体使用
Dec 12 HTML / CSS
HTML5超文本标记语言的实现方法
Sep 24 HTML / CSS
企业开发CSS命名BEM代码规范实践
Feb 12 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
很实用的一个完整email发送程序
2006/10/09 PHP
在IIS上安装PHP4.0正式版
2006/10/09 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
newxtree.js代码
2007/03/13 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
JS实现小星星特效
2019/12/24 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python字符串,数值计算
2016/10/05 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
大学秋游活动方案
2014/02/11 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python