ミニプログラムカスタムコンポーネントの非効率的なグローバルスタイルの解決策

ミニプログラムカスタムコンポーネントの非効率的なグローバルスタイルの解決策

ネイティブ フレームワークを使用してミニプログラムを開発しているときに、app.wxss で定義されたグローバル スタイルがカスタム コンポーネントでは有効にならないという問題が発生しました。その後、これはミニプログラム コンポーネント スタイルの分離の構成によって発生したことが判明しました。

長すぎて読めない

コンポーネントの json ファイルに次の構成を追加すると、グローバル スタイルが有効になります。

//コンポーネント.json
「styleIsolation」:「共有を適用」

js ファイルで設定したい場合、またはバージョン番号が 2.10.1 未満の場合は、同じ効果で js ファイルに記述することもできます。

//コンポーネント.js
成分({
  オプション:
    スタイル分離: 'apply-shared'
  }
})

バージョン番号が 2.6.5 未満の場合は、styleIsolation の代わりに次の構成を使用できます: 'apply-shared'

//コンポーネント.js
成分({
  オプション:
    グローバルクラスを追加: true
  }
})

コンポーネントスタイルの分離

コンポーネントの styleIsolation には、次の 3 つのオプション値があります。

  • 分離: デフォルト値。コンポーネントの内側と外側のスタイルは互いに影響しません。
  • apply-shared: 外部スタイル(親ページとグローバルスタイルを含む)を受け取りますが、コンポーネント内のスタイルは外部スタイルに影響を与えません。
  • shared: 外部スタイルを受け取り、コンポーネント内のスタイルがページに共有されます

デモテスト

より直感的な体験を実現するために、デモを作成し、簡単な実験を実施しました。

コンポーネント comp を定義し、ページ インデックスに導入します。

<!-- comp.wxml -->
<view class="test1 testbox">comp1</view>
<view class="test2 testbox">comp2</view>
<view class="test3 testbox">comp3</view>

<!-- index.wxml -->
<comp />
<view class="test3 testbox">インデックス3</view>

次に、test1、test2、test3 の色を、それぞれグローバル、ページ、コンポーネントの世界で赤、緑、青として定義します (testbox のスタイルは省略します)。

/* アプリ.wxss */
.テスト1 {
  背景色: ライトピンク;
}

/* コンポーネント/index.wxss */
.テスト2 {
  背景色: 薄緑;
}

/* コンポーネント/comp.wxss */
.test3 {
  背景色: 水色;
}

次に、コンポーネントの styleIsolation プロパティに異なる値が設定され、結果は次のようになります。

ご覧のとおり、デフォルトの分離モードでは、親ページもグローバル スタイルも有効ではありません。apply-shared モードでは、ページ スタイルとグローバル スタイルをコンポーネントに適用できます。共有モードでは、コンポーネント スタイルが親ページに適用されます。

優先度

さらに、テストの結果、同じセレクターの場合、スタイルの優先順位はコンポーネント スタイル > ページ スタイル > グローバル スタイルとなり、これは基本的にコンポーネントに対して直感的です。ただし、コンポーネントが共有を適用すると、そのコンポーネント内のスタイルによってページ内のスタイルも上書きされるため、少し奇妙になります。

まとめると、特別な必要がない限り、共有モードを慎重に使用し、セレクタの競合と相互上書きを最小限に抑えて、不必要な超自然的な事故を回避することをお勧めします。共有が必要なスタイルについては、状況に応じてグローバルレベルに抽出したり、CSS ファイルをインポートして実装したりできます。

ページの分離構成

ミニプログラムのページは実際にはコンポーネントであるため、styleIsolation プロパティも設定できます。カスタム コンポーネントとは異なり、ページの既定値は share であるため、デフォルトでグローバル スタイルをページに適用できます。

さらに、3 つの追加属性値がページに追加されます。ドキュメントにはそれぞれの説明があるものの、実際に試してみて非常に混乱し、それぞれの正確な機能や違いがまったくわかりませんでした。ページをisolated / page-isolatedに設定した後、ページ独自のスタイルが無効になるという謎のバグもありました。実装に問題があるのか​​もしれません。そのため、ページの styleIsolation 設定を安易に変更しないことをお勧めします。ご興味がおありの場合は、記事の最後にあるリンクをクリックして、ご自身で勉強し、実験してみてください。

比較的確実な選択肢は 1 つだけです。page-shared を設定すると、ページ (およびその中のコンポーネント) は app.wxss のグローバル スタイルをブロックし、他の側面への影響は小さくなるはずです。必要に応じて試すことができます。

参考文献

WeChat公式ドキュメント · ミニプログラム

これで、ミニプログラムのカスタム コンポーネントでグローバル スタイルが反映されない問題の解決方法についての記事は終了です。ミニプログラムのコンポーネントでグローバル スタイルが反映されない問題の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • グローバルデータ、機能の再利用、テンプレートなどの WeChat ミニプログラムの定義について詳しく紹介します。
  • WeChatミニプログラムでグローバルリロードを実装する方法
  • WeChatアプレットのグローバル変数の機能と使用法の詳細な説明
  • WeChatアプレットのグローバル変数変更監視を実装する方法
  • WeChatアプレットのグローバル変数の設定、使用、変更プロセスの分析
  • ミニプログラムの単一ページとグローバルナビゲーションバーをカスタマイズする実装コード
  • WeChatアプレットはリモートインターフェースを呼び出してグローバル配列に値を割り当てるコード例

<<:  Linuxのlocateコマンドの使い方

>>:  Linuxの貼り付けコマンドの使い方

推薦する

インタビュアーはCSSで固定アスペクト比を実現する方法を尋ねました

この質問に関連するニーズはまだないかもしれませんし、面接でこの質問をされたことがないかもしれませんが...

CSS ボックスモデル内のパディングと略語の詳細な説明

上図のように、パディング値は時計回り(右上、右下)の複合属性であり、パディングの内側の余白がボックス...

Zabbix を使用して ogg プロセスを監視する (Windows プラットフォーム)

この記事では、Windows プラットフォームで ogg プログラムを監視する方法を紹介します。 (...

MySQL内部一時テーブルの具体的な使用法

目次連合テーブルの初期化ステートメントの実行連合の結果ユニオンオールグループ化十分なメモリステートメ...

Linux ホスト上で複数の MySQL データベースを起動する方法

今日は、Linux ホスト上で 4 つの MySQL データベースを起動する方法について説明します。...

イントラネット侵入を実現するためのSSHポート転送

LAN 内のマシンは外部ネットワークにアクセスできますが、外部ネットワークは内部ネットワークにアクセ...

バックアップと削除のためにリアルタイムでステートメントを検出するMySQLトリガーの考え方の詳細な説明

問題の説明: ユーザーは、テーブルに「違反」という単語を含むフィールドが時々表示されることを要求して...

LinuxカーネルマクロContainer_Ofの詳細な説明

目次1. 構造体はメモリにどのように保存されますか? 2. container_ofマクロ3. 型4...

リストループスクロールを実現するための HTML+CSS+JavaScript サンプルコード

説明: 指定された時間内に前のノードのコンテンツを置き換えるタイマーを設定します。 1. キーコード...

npmとcnpmを混在させる際の落とし穴の詳細な説明

目次原因理由NPM の紹介: CNPM の紹介:より良い方法方法の改善npm と cnpm を一緒に...

HTML相対パスの親ディレクトリと子ディレクトリの書き方

親ディレクトリを指定する方法../ はソース ファイルの親ディレクトリを表し、../../ はソース...

CSS3 を使用してピカチュウのアニメーション壁紙を作成する例

文章さて、次はレンダリングを見せましょう。画像を見て初めて理解することに興味が湧くでしょう。そうでな...

Dockerは指定されたメモリで操作を実行します

次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...

JavaScript 配列重複排除ソリューション

目次方法1: set: データ型ではなくデータ構造であり、メンバーは一意である方法2: オブジェクト...

Vue+Vantはトップ検索バーを実装します

この記事では、参考までに、Vue+Vant のトップ検索バーを実装するための具体的なコードを紹介しま...