私はAngular Material Selectを使用してこのhtmlの構造を持っています
<mat-form-field class="year-drpdwn-vacay-stock">
<mat-select placeholder="Year">
<mat-option>None</mat-option>
<mat-option *ngFor="let yr of year" [value]="yr">{{yr}}</mat-option>
</mat-select>
</mat-form-field>
他のコンポーネントでもSelectを使用しているため、クラスを配置しました。追加してみた
::ng-deep .mat-select-panel {
margin-top: 20%;
}
cSSでカスタマイズするが、問題は、別の選択ボックスを含む他のコンポーネントも影響を受ける(マージン上部のCSSを継承する)
現在私はこのCSSを持っています
.year-drpdwn-vacay-stock mat-select.mat-select :Host ::ng-deep .mat-select-panel {
margin-top: 20%;
}
しかし、それでも機能しません。
更新
目標:選択ボックスを開いたときにオプションパネルを少し下に移動させたいので、.mat-select-panel
上マージンを20%にする
ベースとしてcdk-overlay-container
を使用して、このようなオプションペインに移動します。mat-selectは、子を含まない絶対位置を使用します。あなたのスタイルをcdk-overlay-container
に適用する必要があります
.cdk-overlay-container .cdk-overlay-pane{
margin-top: 7%;
}
これが demo です
編集:
追加できる他の要素との競合問題があります
panelClass="testClass"
そして
<mat-select placeholder="Favorite food" panelClass="testClass">
<mat-option *ngFor="let food of foods" [value]="food.value">
{{food.viewValue}}
</mat-option>
</mat-select>
そして、あなたのクラスをこのように変えてください
.cdk-overlay-container .cdk-overlay-pane .testClass{
margin-top: 7%;
}
Deprecatingの問題があるため、実際にはVanilla JavaScriptを使用してクラスを追加/削除しようとすることができますが、domを直接操作することは悪い習慣です。
概要:非推奨の構文の使用は不適切です。ルートレベルでスタイルを適用するとカプセル化の問題が発生します。domを直接操作することは不適切なため、angularが提供するツールを使用して解決するためにdomを操作できます上記の問題については、angular https://blog.angularindepth.com/exploring-angular-domでdomを操作するためのベストプラクティスについては、以下のリンクを参照してください。 -abstractions-80b3ebcfc02
選択ボックスを開いたときにオプションパネルを少し下に移動するには、以下のように 'disableOptionCentering'属性を使用します。
<mat-select placeholder="Favorite food" disableOptionCentering>
<mat-option *ngFor="let food of foods" [value]="food.value">
{{food.viewValue}}
</mat-option>
</mat-select>