・v-bind:classの基本的な使い方
はじめに
今回はCSSに対するデータバインディングの基本的な使い方の紹介です。
v-bind:classの使い方が主となります。
環境情報
名前 | 詳細 |
---|---|
Vue.js | 開発バージョン(https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js) |
エディタ | JSFiddle(https://jsfiddle.net/) |
CSSデータバインディングの書き方
HTMLファイル、CSSのファイル、jsファイル(Vue.js)を用意します。
書き方①(単一クラス)
.large {
font-size: 36px;
}
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<div id="app">
<p>
Hello <span v-bind:class="{large: isLarge}">Vue.js!</span>
</p>
</div>
var app = new Vue({
el: '#app',
data: {
isLarge: true
}
})
注意すべきところは、HTMLファイル側の4行目です。
「v-bind:class=”{large: isLarge}”」にて、CSSのlargeクラスを適用するか判定しています。
isLargeはVue.js側でtrueになっているのでlargeクラスが適用され大きな文字サイズとなります。
書き方②(複数クラス)
.large {
font-size: 36px;
}
.text-danger {
color: red;
}
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<div id="app">
<p>
Hello <span v-bind:class="{large: isLarge, 'text-danger': hasError}">Vue.js!</span>
</p>
</div>
var app = new Vue({
el: '#app',
data: {
isLarge: true,
hasError: true
}
})
CSSデータバインディングはカンマ区切りによって複数のクラスにも適用できます。
CSSクラス名にハイフンがある場合は、シングルクォーテーションなどで括る必要があります。
書き方③(dataプロパティで直接CSSクラス名を設定)
.large {
font-size: 36px;
}
.text-danger {
color: red;
}
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<div id="app">
<p>
Hello <span v-bind:class='[largeClass, dangerClass]'>Vue.js!</span>
</p>
</div>
var app = new Vue({
el: '#app',
data: {
largeClass: 'large',
dangerClass: 'text-danger'
}
})
条件式によってCSSクラスを適用するか判定する場合は①・②の書き方でも良いと思いますが、特定のCSSクラスを適用する場合は不向きです。
変数の値にCSSクラス名を直接設定することで特定のCSSクラスを適用することも出来ます。
複数のクラス名を呼ぶ場合は②と違い、配列で呼ぶ必要があるため大カッコで括ります([])
CSSクラスの共存と競合について
「v-bind:class」と「class」が共存する場合があります。
「v-bind:class」もDOM生成時には「class」化されるので基本的には共存というか「1つのclass」として両方とも適用されます。
また、上記によってCSS側で類似デザイン(文字色を変える2つのクラスとか)が適用される場合もあります。
そのような場合、CSSは上から下に処理されるため、下にある方が画面上に適用されます。
参考記事
クラスとスタイルのバインディング
https://jp.vuejs.org/v2/guide/class-and-style.html