【Amazon】人気の商品が日替わりで登場!
毎日お得なタイムセール!商品をみる

【Vue.js】v-htmlにスコープのスタイルを当てる方法

こちらの記事では、Vue.jsのv-htmlで生成されたコンテンツに対してスコープのスタイルを当てる方法について解説しています。

v-htmlで生成されたコンテンツに対して、スタイルを当てる場合は普段通りのやり方とは異なり少し工夫する必要があります。

Vue.jsの学習におすすめ書籍
Vue.js入門 基礎から実践アプリケーション開発まで
総合評価
( 5 )
メリット
  • Vue.jsを初歩から実践まで徹底的に解説
  • Javascript初心者でも分かりやすい
先輩くん

Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!

後輩ちゃん

初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!

全プログラマー必見!
変数名/関数名にもう悩まない!
リーダブルコード
総合評価
( 5 )
メリット
  • 美しいコードが書けるが自然と書けるようになる
  • 他の開発者が理解しやすいコードになる
著:Dustin Boswell, 著:Trevor Foucher, 解説:須藤 功平, 翻訳:角 征典
¥2,640 (2023/07/23 02:48時点 | Amazon調べ)
目次

v-htmlにはスコープのスタイルが反映されない

v-htmlを使って描画されたデータに対して、グローバルなスタイルは適用することができますが、スコープで設定されているスタイル適用されません。

Vue.jsを始めて多くの人が躓くポイントだと思います。では、何故スコープで設定されているスタイルが適用されないのか見ていきましょう。

先輩くん

v-htmlについて知りたい方は下記の記事をご覧ください!

v-htmlでスコープのスタイルが反映されない理由

<style>にscopedを付けることによって、Vue.js側でHTMLのコンポーネント毎にカスタムデータを付与させます。CSSに対してもHTMLで付与させたカスタムデータを付与させることで、コンポーネント毎によるスタイルの管理をしています。

このカスタムデータがv-htmlで生成された動的コンテンツには付与されないため、スコープで設定されているスタイルが適用されない原因です。

<style>
span {
  color: red;
}
</style>

<style scoped>
span[data-v-7ba5bd90] {
    color: red;
}
</style>

deepを使って解決

v-htmlで生成されたコンテンツはscopedに書かれているスタイルを当てることは不可能なの?と思うかも知れませんが、deep(ディープセレクタ)を使うことで解決できます。

deepとは

親コンポーネントで使っているスタイルを子コンポーネントにも適用させたい場合にdeppを使うことで、子コンポーネントにもスタイルを適用させることができるようになります。

deepの書き方は「>>>」「/deep/」の2通りあるので、自分が使いやす方を選びましょう。

<style scoped>
/deep/ .c-red {
  color: red;
}

>>> .c-red {
  color: red;
}
</style>

まとめ

今回はVue.jsのv-htmlにスコープのスタイルを当てる方法についてご紹介しました。最後にポイントを軽くおさらいしましょう。

ポイント
  • scopedで指定しているスタイルが適用されない
  • deepでスタイルを適用させることができる

ブログランキング・にほんブログ村へ PVアクセスランキング にほんブログ村 FC2 Blog Ranking

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次