最近需要做一个png和webp格式兼容的功能,对于img标签的使用公用组件方式处理,但是对于每个vue文件中的background: url()也需要做到根据浏览器是否兼容来展示png或是webp的图片。
初步的想法是使用sass的@if功能,判断浏览器是否支持webp,类似这样
判断浏览器是否支持webp的参数在组件渲染前存储到了sessionstorage中,目前想问一下sass中如何使用vue的变量来作为判断的依据?或者有没有其他的好方法。
最近需要做一个png和webp格式兼容的功能,对于img标签的使用公用组件方式处理,但是对于每个vue文件中的background: url()也需要做到根据浏览器是否兼容来展示png或是webp的图片。
初步的想法是使用sass的@if功能,判断浏览器是否支持webp,类似这样
判断浏览器是否支持webp的参数在组件渲染前存储到了sessionstorage中,目前想问一下sass中如何使用vue的变量来作为判断的依据?或者有没有其他的好方法。
使用 CSS variable 就行。
SCSS是属于CSS样式预处理器的,是在项目编译前构建成静态的CSS文件的,并不是说你项目打包之后SCSS还是存在于项目中的。类似的 Less
、Stylus
也是同理的。
你是在浏览器端使用sass动态渲染样式?
$webp
的变量拼接到你需要动态渲染的sass代码前面SCSS也是生成静态的CSS文件啊,怎么可以用到vue里面的变量了...
建议使用直接操作dome,在div判断一下就好了,如果CSS用到的地方多就使用 CSS variable 全局setProperty,之后在引用var(--xxx)
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
之前的没考虑到编译时无法访问运行时的 CSS 变量,看下这个应该可以了吧,你把背景图片的 URL 直接设置为 CSS 变量:
再把 background-image 属性的值设置为 CSS 变量: