vue动态绑定class, style + scss


vue中动态绑定class style + scss

动态绑定class

一般用法

<div :class="{active: isActive}"></div>

data() {
	return {
		isActive: true
    }
}
// isActive 为true, 有active这个类, 否则没有

多个类

<div
  class="static"
  v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>

data() {
    return {
        isActive: true,
  		hasError: false
    }
}

// 多个类可以采用对象的形式
// static 一定会有, active 和 text-danger 受data里面值的影响
// 如果类里面有 - 或特殊字符 , 用""

变种写法

<div v-bind:class="classObject"></div>

data: {
  isActive: true,
  error: null
},
computed: {
  classObject: function () {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
    }
  }
}

// 用的少, 至少我没用过

使用数组

<div v-bind:class="[activeClass, errorClass]"></div>

data: {
  activeClass: 'active',
  errorClass: 'text-danger'
}
// 这个实例没啥用, 就是给下面的做铺垫

数组里面使用三元表达式

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
同
<div class="errorClass" :class={activeClass: isActive}></div>
同
<div v-bind:class="[{ active: isActive }, errorClass]"></div>

使用场景, elementui中button里面的例子

:class="[
      type ? 'el-button--' + type : '',
      buttonSize ? 'el-button--' + buttonSize : '',
      {
        'is-disabled': buttonDisabled,
        'is-loading': loading,
        'is-plain': plain,
        'is-round': round,
        'is-circle': circle
      }
    ]"

动态style

一般用法

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

data(){
  return {
	activeColor: 'red',
 	fontSize: 30
  }
}

对象语法

<div v-bind:style="styleObject"></div>

data: {
  styleObject: {
    color: 'red',
    fontSize: '13px'
  }
}

数组语法

<div v-bind:style="[baseStyles, overridingStyles]"></div>

data() {
    return {
        baseStyles {
        fontSize: 20px
    	}
    }
}

实际用法

<div :style="{backgroundImage: `url($(image))`}" class="pam-thu"></div>

data() {
    return {
		image: '../image/1.png'
    }
}
<div :style="activeStyle(item)" item in list :key="item"></div>

methods: {
	activeStyle(item) {
        return {
            'font-size': 13px
        }
    }
}

// 动态设置width
<div v-for="item in list"
:style="{'width': (item.width ? (item.width + 'px') : '200px')}">
 </div>
v-for="(item i) in list"
:style="{background: color[i]}"

data: {
	color: ['#111', '#222']
}

style 绑定scss

使用场景: el-menu里面有改变主题的方法, 这里是改变el-menu-item的背景色

<el-menu
	:default-active="activeMenu"
	"collapse="isCollapse"
	:background-color="settings.sideTheme==='theme-dark'?variables.menuBg:variables.menuLightBg"
	:text-color="settings.sideTheme==='theme-dark'?variables.menuText:'rgba(0,0,0,.65)'"
...
	>
</el-menu>
    
import variables from '@/assets/styles/variables.scss'

computed() {
    variables() {
        reutrn variables
    }
}

在variables.scss里面, 定义并输出一堆变量

$green: #30B08F;
$tiffany: #4AB7BD;
$yellow:#FEC171;
$panGreen: #30B08F;


:export {
  menuText: $menuText;
  menuActiveText: $menuActiveText;
  subMenuActiveText: $subMenuActiveText;
  menuBg: $menuBg;
  menuHover: $menuHover;
  subMenuBg: $subMenuBg;
}



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM