0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Vue3】 deep セレクターを使用してcssを子コンポーネントに反映する

Last updated at Posted at 2025-02-22

deep セレクターを使用する

<style scoped>
:deep(.child) {
  width: 1000px;
}
</style>

style scoped で定義したcssは当該ファイルの全てのタグにdata-v-xxxxxx属性が設定される。

子コンポーネントのルートノードは親のスコープ付き CSS と子のスコープ付き CSS の両方の影響を受ける

つまり子コンポーネントのトップレベルのタグには両方のdata-v-xxxxxx属性が設定される。

※なぜかルートノードなのに親タグの属性が付与されない場合がある。
その場合は更にルートとしてdiv等を追加してやると解決する。

レンダリング後のCS

  • deepを使用しない場合(scopedなのでファイル内の要素が対象)
.child[data-v-2e51c661]
  • deepを使用した場合
[data-v-2e51c661] .child

コンポーネント構成によるスタイルの適用パターン

Pages内のコンポーネントに使いたい場合、かつルートノードにスタイルを適用したい場合

.child,
:deep(.child) {
  width: 1000px;
}

Pages内のvueファイルでdeepをつけても、
page内に置かれたタグ、コンポーネントのルートノードには適用されない。
cssクラスが設定されたタグの親に[data-v-2e51c661]の属性がつかないため。

コンポーネント内の子コンポーネントに使いたい場合

:deep(.child) {
  width: 1000px;
}

コンポーネント内であればそのタグ、子コンポーネントのルートノードには適用される。

ルートノードにスタイルを適用しない場合(Pages内、コンポーネント内問わず)

:deep(.child) {
  width: 1000px;
}

ルートノードに適用対象がなければdeepをつけておけば全て適用される

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?