Angular Materialでmat-selectをスタイリングする
質問
mat-selectのパネルコンポーネントをどのようにスタイルするのですか。ドキュメントから、私は私がpanelClassを提供する必要があることを得るので、私はこのようにそれを作る。
<mat-form-field>
<mat-select placeholder="Search for"
[(ngModel)]="searchClassVal"
panelClass="my-select-panel-class"
(change)="onSearchClassSelect($event)">
<mat-option *ngFor="let class of searchClasses" [value]="class.value">{{class.name}}</mat-option>
</mat-select>
</mat-form-field>
このクラスがDOMのパネルにアタッチされていることをデベロッパーツールで検査したところ、アタッチされていました。だから私はこの要素に添付された私のカスタムScssクラスを持っています。今、私はcssを提供するとき、それはちょうど動作しません。例えば、私のscssは次のようになります。
.my-select-panel-class {
width:20px;
max-width:20px;
background-color: red;
font-size: 10px;
}
パネルの幅は常に
width
のselect要素の幅になります。時々オプションで 長すぎる文字列があるので、もう少し幅を広くしたいです。これを行う方法はありますか?私のコンポーネントからの私のスタイルがちょうどさえ動作しません
background-color
も機能しません。なぜこのような奇妙な動作になるのか、誰か知っていますか?
私は使用しています。 Angular 4.4.5 アンギュラー/マテリアル: 2.0.0-beta.12
どのように解決するのですか?
Angular9+の場合、以下のようになります。 この を使用することができます。
.mat-select-panel {
background: red;
....
}
Angularマテリアルは
mat-select-content
をセレクトリストコンテンツのクラス名として使用します。そのスタイリングのために、私は4つのオプションを提案します。
1. 使用方法 ::ng-deepを使用する。 :
子コンポーネントツリーを通してすべての子コンポーネントにスタイルを強制的に適用するには、/deep/ shadow-piercing descendant combinatorを使用します。 を子コンポーネントツリーを通してすべての子コンポーネント ビューに適用します。Deep/ コンビネータは、ネストされたコンポーネントのどの深さでも動作します。 また、ビューの子コンポーネントとコンテンツの子コンポーネントの両方に適用されます。 コンポーネントのビューの子とコンテンツの子の両方に適用されます。 /deep/、>>> および ::ng-deepは、エミュレートされたビュー・カプセル化でのみ使用してください。 Emulated は、デフォルトで最もよく使用されるビュー・カプセル化です。詳細は 詳細は、「ビュー・カプセル化の制御」セクションを参照してください。また シャドウ・ピアシング・ディセンダント・コンビネーターは非推奨で、主要なブラウザやツールでサポートが廃止されつつあります。 が廃止され、主要なブラウザやツールでサポートされつつあります。そのため、Angularでのサポートを停止する予定です。 のサポートを停止する予定です(/deep/, >>> と ::ng-deep の3つすべて)。それまでは ツールとのより広い互換性のために、::ng-deepを優先してください。 ツールとのより広い互換性のために、それまでは ::ng-deep を優先する必要があります。
CSSです。
::ng-deep .mat-select-content{
width:2000px;
background-color: red;
font-size: 10px;
}
2. 使用方法 ViewEncapsulation
... コンポーネントの CSS スタイルはコンポーネントのビューにカプセル化され アプリケーションの残りの部分には影響を与えません。 このカプセル化の方法をコンポーネントごとに制御するには、コンポーネントのメタデータでビューのカプセル化モードを設定します。 コンポーネントのメタデータで、ビューのカプセル化モードを設定することができます。 以下のモードの中から選んでください。 .... Noneは、Angularがビューカプセル化を行わないことを意味します。Angularはグローバルスタイルに CSSをグローバルスタイルに追加します。先ほど説明したスコープルール、分離、保護は適用されません。 保護は適用されません。これは本質的に コンポーネントのスタイルをHTMLに貼り付けるのと同じです。
None値は、カプセル化を解除し、コンポーネントからマテリアル・スタイルを設定するために必要なものです。 そのため、コンポーネントのセレクタに設定することができます。
Typscriptです。
import {ViewEncapsulation } from '@angular/core';
....
@Component({
....
encapsulation: ViewEncapsulation.None
})
CSS
.mat-select-content{
width:2000px;
background-color: red;
font-size: 10px;
}
3. style.cssでクラススタイルを設定する
今回、スタイルを「強制」するために
!important
も必要です。
style.css
.mat-select-content{
width:2000px !important;
background-color: red !important;
font-size: 10px !important;
}
4. インラインスタイルの使用
<mat-option style="width:2000px; background-color: red; font-size: 10px;" ...>
関連
-
[CSSチュートリアル】カットコーナー+ボーダー+プロジェクション+コンテンツ背景色のグラデーション効果を実現するCSS
-
[CSSチュートリアル】overflow:hiddenの役割を解説(overflow hidden、clear float、外周マージンの崩れを解決する)。
-
[CSSチュートリアル】CSSを解析して、画像のテーマカラー機能を抽出する(コツ)
-
[CSSチュートリアル]cssの位置固定コードで左右2重の位置決め
-
[CSSチュートリアル】擬似要素で実現する中空三角矢印とXアイコンの例
-
[CSSチュートリアル】空間均等性の問題を解決する2つの方法
-
[css3]スクロールバー美化効果を実現するcss3サンプルコード
-
[css3]css3によるフレックスレイアウト幅の解決方法が有効でない件
-
[CSSチュートリアル】背景画像画面の適応的な実装を実現するCSS
-
[解決済み] セレクトボックスのプレースホルダーを作成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル】CSSのトリッキーなグラデーションで高度な背景光アニメーションの感覚を実現
-
[CSSチュートリアル】overflow:hiddenの役割を解説(overflow hidden、clear float、外周マージンの崩れを解決する)。
-
[CSSチュートリアル】CSS擬似要素::マーカー解説
-
[CSSチュートリアル]cssのbackgroundとborderタグの例 詳細
-
[css3]css3はtransform-originを使用して、大きな円上のドット分布のレイアウトと回転を実現します。
-
[CSSチュートリアル】パララックススクロールの効果を完成させるCSS
-
[Div+CSSチュートリアル】divの背景を透明にする設定例
-
[CSSチュートリアル】タイトルを上部に配置するスティッキーレイアウトを実現するためのCSS
-
[CSSチュートリアル】background-positionプロパティのパーセンテージ値の使い方を探る
-
[CSSチュートリアル】CSS複合セレクタの具体的な使用方法