Vue 3单文件驱动的CSS变量(新版语法)是怎么回事

html-css020

Vue 3单文件驱动的CSS变量(新版语法)是怎么回事,第1张

本文已经假设你熟悉CSS变量,如果不熟悉,可以看我写的CSS变量基础知识: https://www.jianshu.com/p/a0f6233cf335

在研究Vue 3的“单文件驱动的CSS变量”之前,我们先看看Vue 2怎么使用CSS变量。

:style是行内样式,行内样式的缺点至少有三个:1. 字符多,写起来麻烦;2. 行内意味着无法复用,class可以复用;3. :style无法定义伪元素的样式。

CSS变量优势其实很明显,上面案例中, <div class="a-container">A元素</div>并没有写style,而且, a-container 是可以复用的,可以用在无数个元素上。最后,在<style>标签里可以定义伪元素的样式。

Vue 3加入了“单文件驱动的CSS变量”,它也是一种语法糖,到今天有2个版本,旧版简称“style vars”版本,因为被人诟病“创造了方言”而改成了新版,旧版我就不说了,新版用法举例:

也就是说,凡是<style>中使用了v-bind函数,都将传值视为CSS变量表达式,而且缺省 -- 符号。变量会自动去<script setup>里查找同名顶层变量。

拼接字符串要遵循CSS变量规范,CSS变量规范并没有直接拼接字符串的办法,而是采用calc乘法。

写起来是对象的点运算符,但是要用引号包裹起来,而且为了跟CSS常用的双引号区分,最好使用单引号。

Vue 2的写法在3里依然可用,而且更贴近原生,可以说是标准写法,而Vue 3实际上是2的语法糖。

方便程度上说,Vue 3的肯定更方便。

由于使用CSS变量,所以IE全不支持,老内核Edge全不支持。

vue2.0 + webpack做移动端项目,如果在项目中使用了CSS3 animation动画属性,会发现在ios上完全没问题,但是在安卓手机上依然失效,尽管把animation在五大浏览器各种兼容都写了还是不行,原因其实很简答。其实在 vue-cli脚手架package.json配置文件里面就有对浏览器的版本做css的前缀处理"browserslist": [">1%","last 2 versions","not ie <= 8"]意思是 只兼容主流浏览器的最新两个版本。如果我们要兼容所有的就必须把这改成"browserslist": [">1%","last 5 versions","Android >= 4.0","not ie <= 8"]就可以了。CSS部分我们也需要做好兼容写法,优雅降级和渐进增强都可以。.audio-play-show {-webkit-animation: say 12s linear infinite-moz-animation: say 12s linear infinite-ms-animation: say 12s linear infinite-o-animation: say 12s linear infiniteanimation: say 12s linear infinite}@-webkit-keyframes say {0% {}100% {-webkit-transform: rotateZ(360deg)}}@-moz-keyframes say {0% {}100% {-moz-transform: rotateZ(360deg)}}@-ms-keyframes say {0% {}100% {-ms-transform: rotateZ(360deg)}}@-o-transforms say {0% {}100% {-o-transform: rotateZ(360deg)}}@keyframes say {0% {}100% {transform: rotateZ(360deg)}}

html部分

两行,可能会前后对齐有些问题,看了下淘宝是每列2个icon, 根据总数分成n列

len : icon的个数; list :icon对应的列表; 奇数时,考虑最后一个没有的处理,这里不说明了

金刚区样式部分这里就不具体介绍了,滚动条部分可以如下:

下面直接写金刚区滚动事件改变滚动条(进度条)的样式

用 left ,也可以用 transform: translate(?)