请收下这炫技的CSS技巧

2,534 阅读3分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

前言

  • 在线音乐戳我呀!
  • 音乐博客源码上线啦!
  • 前几篇讲了Docker的安装部署,操作算是比较简单的。(入门级)
  • 最近项目中封装组件的时候,通过JavaScript传参给CSS,CSS拿到变量之后,动态赋值改变样式。
  • 接下来将分享JavaScript如何传参到Css,去控制CSS样式,一五一十盘出。
  • Are you ready ?

有幸领会到李白所所言的“飞流直下三千尺” ~

1.jpg

一、存在问题

想要通过JS去控制CSS的样式。

下面我们分析为什么会存在该想法。

二、还原场景

一个百分比组件,根据传入的大小,组件的宽高显示不同。

三、进行分析

因为宽高都是写在css中,但我想通过传入的数据参数控制宽高,那就要JS去控制CSS。

那我们有两种方案:

  • 我可以通过计算属性computed去根据参数,对变量进行赋值,然后绑定在:style上, 在style中使用var()获取我们在行内设置的数据即可。

  • 还可以通过传入的参数,获取元素,有个setProperty方法去用于设置一个新的 CSS 属性,同时也可以修改 CSS 声明块中已存在的属性。

四、解决方案

有两种方案,使用var()setProperty()

如下:

4.1 用var()

<template>
  <div class="box" :style="styleVar">
  </div>
</template>
<script>
export default {
  props: {
    height: {
      type: Number,
      default: 54,
    },
  },
  computed: {
    styleVar() {
      return {
        '--box-height': this.height + 'px'
      }
    }
  },
}
</script>
<style scoped>
.box {
  height: var(--box-height);
}
</style>

4.2 setProperty()

<template>
  <div class="box" ref="box">
      <span></span>
  </div>
</template>
<script>
export default {
  props: {
    height: {
      type: Number,
      default: 54,
    },
  },
  mounted() {
    this.$refs.box.style.setProperty('--box-height', this.heigt / 200 + 'rem')
  },
}
</script>
<style scoped lang="less">
@height: var(--box-height)	// 定义变量
.box {
  height: @height;
}
</style>

五、盲区

5.1 一个JS变量不能在less被两个变量定义

3.png

@height: var(--height);
@height2: var(--height);

// 一个JS变量不能在less被两个变量定义

5.2 var()函数不能进行运算

着重看cmd的报错信息。

4.png

5.png

@height: var(--height) / 2;

// var()函数不能进行运算

六、Tips

style中使用var不能使用运算,比如height:-var(--heigh),这里使用了减法

七、小知识

setProperty()  方法接口为一个声明了CSS样式的对象设置一个新的值。

7.1 语法

style.setProperty(propertyName, value, priority);

7.2 参数

  • propertyName :是一个 DOMString ,代表被更改的CSS属性。

  • value可选 :是一个 DOMString ,含有新的属性值。如果没有指定, 则当作空字符串。

    • 注意: value 不能包含 "!important" 那个应该使用 priority 参数。
  • priority:可选 是一个 DOMString 允许设置 "important" CSS 优先级。如果没有指定, 则当作空字符串。

7.3 返回值

undefined

7.4 异常

DOMException (NoModificationAllowedError): 如果属性或装饰块为只读的,抛出此异常。

八、知识点

var()setProperty()JS修改CSS样式

后记

用JavaScript计算值,CSS通过-var来接收参数,便捷的修改我们的样式,建议在项目中使用起来吧。

结果SCSS、Less真香 ~

👍 如果对您有帮助,您的点赞是我前进的润滑剂。

相关文献

分享一个一分钟就学会的vue小技巧

在VUE style中使用data中的变量的方法

以往推荐

前端仔,快把dist部署到Nginx上

多图详解,一次性啃懂原型链(上万字)

老湿说的万物皆对象,你也信?

Vue-Cli3搭建组件库

Vue实现动态路由(和面试官吹项目亮点)

项目中你不知道的Axios骚操作(手写核心原理、兼容性)

VuePress搭建项目组件文档

vue-typescript-admin-template后台管理系统

原文链接

juejin.cn/post/703583…