2017-08-28 12 views

答えて

1

があなたのスタイルで、デフォルトのスタイルを上書きするViewEncapsulationを使用してください。ダイアログが開きコンポーネントで

は、以下の変更を実行します。

import {ViewEncapsulation} from '@angular/core'; 

@Component({ 
    ....., 
    encapsulation: ViewEncapsulation.None 
}) 

とそのコンポーネントのCSSファイルで、次のクラスを追加します。ここでは

.mat-dialog-container { 
    padding: 0px !important; 
} 

Plunker Demoへのリンクです。

+2

これは、すべてのマテリアルダイアログのパディングと同じように、非常に強力なアプローチです!代わりに、 'app-full-bleed-dialog'のようなクラスをダイアログの' panelClass'設定に追加してください。次に、あなたの*グローバルスタイル*で、 '.app-full-bleed-dialog .mat-dialog-container'セレクタでオーバーライドを追加します。 –

+0

@WillHowell、これは 'ViewEncapsulation.Native'または' ViewEncapsulation.Emulated'を使うことで回避できます。ここでのアイデアは、OPに指示を与え、同時に問題を解決することです。だからこそ私の答えにはViewEncapsulationのドキュメントへのリンクが含まれています。私はよく説明されたコメントのためにあなたのdownvoteを取るでしょう。しかし、私はセレクタのアプローチに同意しません。 – Faisal

6

私は選択した回答にコメントしましたが、完全な回答で明確にしたいと思います。コンポーネントにダイアログスタイルを追加し、ViewEncapsulationをNoneに設定すると、それらのスタイルはアプリケーション全体に全体的に影響し、将来のダイアログはパディングなしで開きます。

が代わりにダイアログのpanelClass性質を利用するために選ぶ:

component.ts

this.dialog.open(MyDialogComponent, { 
    panelClass: 'app-full-bleed-dialog', 
    data: ... 
}); 

グローバルスタイルシート

.app-full-bleed-dialog .mat-dialog-container { 
    padding: 0; 
} 

そのように、あなたはまだ上のカプセル化を維持することができますダイアログコンポーネントスタイル、および選択可能な必要に応じてapp-full-bleed-dialogクラスを再利用してください。

Materialコンポーネントのカスタマイズについては、check out this guideを参照してください。

+0

なぜ、コンポーネントのスタイルでthayを定義できるときに、グローバルスタイルファイルでオーバーライドされたスタイルを維持したいのですか? ViewEncapsulationは、理由により角度で提供されます。 – Faisal

+1

ViewEncapsulationは、コンポーネントのスタイルを自身のスコープにのみ適用するために用意されています。 OPは、(言い換えれば)_different_コンポーネントをどのようにスタイルするかを尋ねました。ダイアログにロードするコンポーネントは '.mat-dialog-container'の子であるため、グローバルスタイルを使用せずにそのセレクタをターゲットにする方法はありません。それはちょうど 'None'がとにかく何をするのかということです。それがその理由です。あなたのアプローチはうまくいきますが、可能な方法はありません**その1つのダイアログだけが影響を受けていることを保証することです** 2つのダイアログ、パディングなし、そしてpanelClass_を使わないで、認めます。 –

+0

確かに私はあなたの懸念を否定していない、後で見てみましょう、まずそれを自分でテストする必要があります。 – Faisal