如何在vue.js中动态应用CSS?

时间:2019-03-21 23:36:50

标签: css vue.js

这是我的情况:

我有一个网络应用程序,允许用户更改UI大小。 (即小,中或大按钮)

用户可以在运行时动态更改外观。所有文本和表单输入框将被调整大小。

我的项目在Vue.js中。

解决此问题的最佳方法是什么?用户单击时加载不同的CSS?

3 个答案:

答案 0 :(得分:2)

在用户单击与此类似的按钮时,加载不同的CSS。 Codepen:https://codepen.io/anon/pen/NJEoVM

HTML

    <div id="app" :class="size">
  <div class="text">Text</div>
  <input class="ipt"/><br/><br/> 
  <button class="btn" @click="change('small')">Small</button>
  <button class="btn"  @click="change('medium')">Medium</button>
  <button class="btn"  @click="change('large')">Large</button>
</div>

CSS

    .small .ipt{
  width: 100px;
  height:30px;
}
.small .text{
  font-size: 18px;
}

.medium .ipt{
  width: 300px;
  height:50px;
}
.medium .text{
  font-size: 32px;
}

.large .ipt{
  width: 600px;
  height:100px;
}
.large .text{
  font-size: 64px;
}

JavaScript

    new Vue({
  el: '#app',
  data:()=>({
  size:'small'
}),
methods:{
  change(val){
    this.size = val
  }
}
});

答案 1 :(得分:1)

实际上,您可以使用Custom Properties aka CSS variables

首先,定义按钮CSS样式

   /* button.css */
   #buttonRef {
     --fontSize: 16px;
     font-size: var(--fontSize)
    }

整个流程类似于以下示例

methods: {
  changeButtonSize: function(size, event) {
    event.preventDefault();

    /* size might be either of 's', 'm', 'l' */

    /* let the button ref is stored in refs */

    const buttonRef = this.$refs[“buttonRef”];

    let fontSize = 16;

    switch(size) {
      case 's':
        fontSize = 12;
      case 'm':
        fontSize = 18;
      case 'l':
        fontSize = 22;
    }

    /* dynamically change the value for custom property */
    buttonRef.style.setProperty("--fontSize", fontSize);

  }
}

答案 2 :(得分:0)

您可以设置3个课程:

.small {font-size:12px}
.medium {font-size:18px}
.large {font-size:24px}

然后将其添加或删除到您的主父div onClick。

如果您谨慎地设置了元素的字体大小,则必须将这些元素作为目标:

.small .description { font-size:12px }
.small .title{ font-size:16px }