vueでelementUIスタイルが変更できない問題
4772 ワード
最近開発中にelementUIスタイルを修正しているのを見つけたときにscopedのコンポーネントでは修正できないスタイルを追加してscopedを外せばいいのです.ここではまずscopedという属性の役割と原理を見てみましょう.
一:scopedの役割と原理 scopedの役割: という を します.
scopedの : のコードから、コンパイル にカスタム data-XXXXXXXXXXXXが し、これはランダムに された であることがわかります.
2: ここでは、なぜスタイルを できないのかを てみましょう.elementUIのスタイルはグローバルに されています.scopedを すると、ローカルスタイルがグローバルスタイルで きされます(vueデフォルトのグローバルスタイルはローカルスタイルを きします).では、1:スタイルをグローバルに すると、1つのコンポーネントでアクティブドメインと アクティブドメインのスタイルを に できます(または、ホームフェースでスタイルを します):
ここでは、スタイルオーバーライドの を するために みを します.この 、 にクラス またはIdを して、コンポーネントスタイルに を えない でネーミングスペースを できます.
2:デプス セレクタscopedスタイルのセレクタを して、サブコンポーネントに を えるなど、より く させたい は、>>>オペレータを します. CSS役割ドメインはclassの代わりに使用できません.ブラウザが様々なCSSセレクタをレンダリングする方法を考慮すると、p{color:red}が役割ドメインを設定した場合(すなわち、プロパティセレクタと組み合わせて使用する場合)は、何倍も遅くなります.classやidを使って取って代わると、例えば.Excample{color:red}では、パフォーマンスの影響は解消されます.この試験田中でそれらの違いをテストすることができます. 再帰コンポーネントでは、子孫セレクタの使用に注意してください.セレクタを合わせるa .bのCSSルールでは、一致する場合.aの要素は再帰的なサブアセンブリを含む、すべてのサブアセンブリの中にある.bはすべてこの規則に一致する.
一:scopedの役割と原理
ラベルにscopedプロパティがある 、そのCSSは のコンポーネントの にのみ します.これはShadow DOMのスタイルパッケージに ています.いくつかの がありますが、polyfillは ありません.PostCSSを することで、<style scoped>
.example {
color: red;
}
style>
<template>
<div class="example">hidiv>
template>
<style>
.example[data-v-f3f3eg9] {
color: red;
}
style>
<template>
<div class="example" data-v-f3f3eg9>hidiv>
template>
2: ここでは、なぜスタイルを できないのかを てみましょう.elementUIのスタイルはグローバルに されています.scopedを すると、ローカルスタイルがグローバルスタイルで きされます(vueデフォルトのグローバルスタイルはローカルスタイルを きします).では、1:スタイルをグローバルに すると、1つのコンポーネントでアクティブドメインと アクティブドメインのスタイルを に できます(または、ホームフェースでスタイルを します):
<style>
/* */
style>
<style scoped>
/* */
style>
ここでは、スタイルオーバーライドの を するために みを します.この 、 にクラス またはIdを して、コンポーネントスタイルに を えない でネーミングスペースを できます.
.aritle-page{ //
.el-tag { //element-ui
margin-right: 0px;
}
}
2:デプス セレクタscopedスタイルのセレクタを して、サブコンポーネントに を えるなど、より く させたい は、>>>オペレータを します.
上述代码将会编译成:
.a[data-v-f3f3eg9] .b { /* ... */ }
Sassのようなプリプロセッサでは正しく解析できないものもあります>>>>.この場合、/deep/オペレータを使用して代わりに使用できます.これは>>>の別名で、同じように正常に動作します.親コンポーネントcssName+/deep/+サードパーティライブラリで変更が必要なcssName、たとえば.parentCssName /deep/ .libCssName{}
#table-role /deep/ .el-table__empty-block{
height: 570px;
overflow: auto;
}
四:動的に生成されたコンテンツv-htmlで作成されたDOMコンテンツは、役割ドメイン内のスタイルの影響を受けませんが、深度作用セレクタでスタイルを設定することができます.
五:注意事項