前置き
Nuxt.js Vue.js を使う上で必須の知識です!
これができるとコンポーネントを活かして
表現の幅を広げることができます🌟
例えば!
親によってクラスの有無を切り替えて
色分けをする、といったことができます💕
基本的な使い方
v-bind:{ 属性名 }="{ 変数 }"
タグの属性を変数にしたい時に使います。
aタグのhref属性をv-bindしてみます。
リンク先
http://localhost:3000/
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  | 
						<template>   <div class="page">     <a v-bind:href="url">リンク</a>   </div> </template> <script> export default {   data () {     return {       url: '/',     }   }, } </script>  | 
					
クラスバインディング(オブジェクト構文)
定番のclass属性を変数にしてみましょう!
グローバル属性で、
どのタグにもつけられる属性ですね🌟
簡単な使い方

解説
v-bind:class="{ オブジェクト構文 }"
通常のプレーンなclass属性と共存OK👬
オブジェクト構文
{ クラス名: 真偽値 } なので
{ active: isActive } だと
isActiveがtrueの時のみ
activeクラスが付与されます💡
コード
) pages
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24  | 
						<template>   <div class="page" :class="{ active: isActive }">   </div> </template> <script> export default {   data () {     return {       isActive: true,     }   }, } </script> <style lang="scss" scoped>   .page {     padding: 20px 0;     &.active {       background-color: pink;     }   } </style>  | 
					
複数のclassを付与したい場合

クラスバインディングで
active, text-danger クラスを付与します🌟
dataにobjectを書く
コード
オブジェクトを
インラインで書かなくてもOKです⭕️
) pages
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35  | 
						<template>   <div     class="page"     :class="classObject"   >     <p>テキスト</p>   </div> </template> <script> export default {   data () {     return {       classObject: {         active: true,         'text-danger': true,       },     }   }, } </script> <style lang="scss" scoped>   .page {     padding: 20px;     &.active {       background-color: pink;     }     &.text-danger {       color: red;     }   } </style>  | 
					
算出プロパティcomputedに書く
この記事で実際に使用しているので
興味がある方はチャレンジしてください🔥💪
親によってクラスの有無を変えて、
色分けしています✨😯
【Nuxt.js】props実践編:switchボタンを作ろう!
コード
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35  | 
						<template>   <div     class="page"     :class="classObject"   >     <p>テキスト</p>   </div> </template> <script> export default {   computed: {     classObject () {       return {         active: true,         'text-danger': true,       }     },   }, } </script> <style lang="scss" scoped>   .page {     padding: 20px;     &.active {       background-color: pink;     }     &.text-danger {       color: red;     }   } </style>  | 
					
クラスバインディング(配列構文)
簡単な使い方

解説
v-bind:class="[ 変数, 変数 ]"
[]はなくても大丈夫です🙆♀️
ただ分かりやすく配列にしています!
変数: 変数名
変数名には付与したい
クラス名を割り当てます。
activeClass: 'active', 
errorClass: 'text-danger',
コード
) pages
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  | 
						<template>   <div     class="page"     v-bind:class="[activeClass, errorClass]"   >     <p>テキスト</p>   </div> </template> <script> export default {   data () {     return {       activeClass: 'active',       errorClass: 'text-danger',     }   }, } </script> <style lang="scss" scoped>   .page {     padding: 20px;     &.active {       background-color: pink;     }     &.text-danger {       color: red;     }   } </style>  | 
					
三項演算を使った書き方

三項演算とは
式1 ? 式2 : 式3
式1が
trueなら式2
falseなら式3
if文で考えてみよう!
if文に置き換えて
考えると分かりやすいです🌟
if(式1){
 式2
} else {
 式3
}
解説
v-bind:class="[isActive ? activeClass : errorClass]" 
isActiveがtrueならactiveClass, 
isActiveがfalseならerrorClass
が適応されます🌟 
今回はtrueのためactiveClassでつけた
activeクラスが適応されて
背景がピンクになっていますね🎀
テキストの色は赤になりません💡
コード
) pages
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34  | 
						<template>   <div     class="page"     v-bind:class="[isActive ? activeClass : errorClass]"   >     <p>テキスト</p>   </div> </template> <script> export default {   data () {     return {       isActive: true,       activeClass: 'active',       errorClass: 'text-danger',     }   }, } </script> <style lang="scss" scoped>   .page {     padding: 20px;     &.active {       background-color: pink;     }     &.text-danger {       color: red;     }   } </style>  | 
					
三項演算にはこんな書き方も!
v-bind:class="[ isActive ? activeClass : 'abc', errorClass ]"
この場合はカンマ( , )の前で
一旦区切りましょう!
v-bind:class="[ ( isActive ? activeClass : 'abc' ), errorClass ]"
isActiveがtrueならactiveClassを
isActiveがfalseならabcを付与します。
errorClassは常に付与されています。
isActiveの真偽値に影響を受けません。
そのためプレーンなclassに書いてもOK⭕️
class="errorClass"
v-bind:class="[ isActive ? activeClass : 'abc']"
クラスバインディング(オブジェクト+配列)
errorClassはプレーンなclassに書くので
あんまり使わないと思いますが、一応🔰
書き換え前
) pages
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34  | 
						<template>   <div     class="page"     v-bind:class="[isActive ? activeClass : '', errorClass]"   >     <p>テキスト</p>   </div> </template> <script> export default {   data () {     return {       isActive: false,       activeClass: 'active',       errorClass: 'text-danger',     }   }, } </script> <style lang="scss" scoped>   .page {     padding: 20px;     &.active {       background-color: pink;     }     &.text-danger {       color: red;     }   } </style>  | 
					
先ほどの三項演算で分かる通り、
''は不要なクラスですね!
isActiveがtrueの時のみ、
activeクラスが付きさえすれば良いです😯
書き換え後
<div v-bind:class="[{ active: isActive }, errorClass]"></div>
activeクラスの有無を
isActiveの真偽値で決めるだけですね🌸
インラインスタイルのクラスバインディング
今度はclassを付与するのではなく
直接cssを当てていきます💡
v-bind:style="プロパティ: 色や数値"
オブジェクト構文

コード
) pages
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  | 
						<template>   <div     class="page"     v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"   >     <p>テキスト</p>   </div> </template> <script> export default {   data () {     return {       activeColor: 'red',       fontSize: '16',     }   }, } </script>  | 
					
オブジェクトにまとめてもOKです⭕️
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21  | 
						<template>   <div     class="page"     v-bind:style="styleObject"   >     <p>テキスト</p>   </div> </template> <script> export default {   data () {     return {       styleObject: {         color: 'red',         fontSize: '13px'       },     }   }, } </script>  | 
					
配列構文
複数のスタイルオブジェクトを
適応することができます✨

コード
) pages
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25  | 
						<template>   <div     class="page"     v-bind:style="[baseStyles, overridingStyles]"   >     <p>テキスト</p>   </div> </template> <script> export default {   data () {     return {       baseStyles: {         color: 'red',         fontSize: '13px'       },       overridingStyles: {         height: '100px',         backgroundColor: 'pink',       },     }   }, } </script>  | 
					
オブジェクト+配列
プロパティに複数の値を
つけたい時に便利です💡
プロパティはdisplayのみですが、
値が複数あるため[]で囲っています。
<div v-bind:style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
実践編はこちら
タイトルがprops実践編になっていますが、
propsを活かして親によって
classバインディングを切り替えます🌟
ぜひチャレンジしてみてください✨💪