Angular2 Material Dialog css, размер диалога
Angular2 material team недавно выпустила MDDialog https://github.com/angular/material2/blob/master/src/lib/dialog/README.md
Я хотел бы изменить внешний вид и почувствовать диалог материала angular2. Например, чтобы изменить фиксированный размер всплывающего контейнера и сделать его прокручиваемым, измените цвет фона и т. д. Как это лучше всего сделать? Есть ли css, с которым я могу играть?
7 ответов
вы можете проверить элемент диалога с помощью инструментов dev и посмотреть, какие классы применяются в mdDialog.
например, .md-dialog-container
является основным классом MDDialog и имеет заполнение: 24px
вы можете создать пользовательский CSS, чтобы перезаписать все, что вы хотите
.md-dialog-container {
background-color: #000;
width: 250px;
height: 250px
}
на мой взгляд, это не очень хороший вариант и, вероятно, идет против материального руководства, но поскольку он не имеет всех функций, которые он имеет в предыдущей версии, вы должны делать то, что вы думай, так будет лучше для тебя.
контент md-dialog-content
автоматически прокручивать.
вы можете вручную установить размер в вызове MdDialog.open
let dialogRef = dialog.open(MyComponent, {
height: '400px',
width: '600px',
});
дополнительная документация / примеры для прокрутки и калибровки: https://material.angular.io/components/dialog/overview
некоторые цвета должны определяться вашей темой. См. здесь для theming docs: https://material.angular.io/guide/theming
если вы хотите изменить цвета и такие, используйте технику Элмера, просто добавив соответствующий css.
обратите внимание, что вы должны иметь HTML 5 <!DOCTYPE html>
на Вашей странице для размера вашего диалога, чтобы соответствовать содержимому правильно ( https://github.com/angular/material2/issues/2351)
есть два способа, которые мы можем использовать для изменения размера вашего компонента MdDialog в угловом материале
1) Из Внешнего Компонента, Который Вызывает Компонент Диалога
import { MdDialog, MdDialogConfig, MdDialogRef } from '@angular/material';
dialogRef: MdDialogRef <any> ;
constructor(public dialog: MdDialog) { }
openDialog() {
this.dialogRef = this.dialog.open(TestTemplateComponent, {
height: '40%',
width: '60%'
});
this.dialogRef.afterClosed().subscribe(result => {
this.dialogRef = null;
});
}
2) Изнутри Диалогового Компонента. динамически изменять его размер
import { MdDialog, MdDialogConfig, MdDialogRef } from '@angular/material';
constructor(public dialogRef: MdDialogRef<any>) { }
ngOnInit() {
this.dialogRef.updateSize('80%', '80%');
}
используйте updateSize () в любой функции диалогового компонента. он автоматически изменит размер диалогового окна.
для получения дополнительной информации, проверьте эту ссылку https://material.angular.io/components/component/dialog
Я думаю, вам нужно использовать /deep/
, потому что ваш CSS может не видеть ваш модальный класс. Например, если вы хотите настроить .modal-dialog
/deep/.modal-dialog {
width: 75% !important;
}
но этот код изменит все ваши модальные окна, лучшим решением будет
:host {
/deep/.modal-dialog {
width: 75% !important;
}
}
для последней версии Angular с этого поста, кажется, вы должны сначала создать объект MatDialogConfig и передать его в качестве второго параметра в dialog.open (), поскольку Typescript ожидает, что второй параметр будет иметь тип MatDialogConfig.
const matDialogConfig = new MatDialogConfig();
matDialogConfig.width = "600px";
matDialogConfig.height = "480px";
this.dialog.open(MyDialogComponent, matDialogConfig);
совместное использование последней на mat-диалог два способа достичь этого... 1) либо вы устанавливаете ширину и высоту во время открытия например,
let dialogRef = dialog.open(NwasNtdSelectorComponent, { data: { title: "NWAS NTD" }, width: '600px', height: '600px', panelClass: 'epsSelectorPanel' });
или 2) Используйте panelClass и стиль его соответственно.
1) проще всего, но 2) лучше и более настраивается.
С текущей версией углового материала (6.4.7) вы можете использовать пользовательский класс:
let dialogRef = dialog.open(UserProfileComponent, {
panelClass: 'my-class'
});
Теперь поместите свой класс где-нибудь в глобальном масштабе (не смогли сделать эту работу в другом месте), например, в styles.css
:
.my-class .mat-dialog-container{
height: 400px;
width: 600px;
border-radius: 10px;
background: lightcyan;
color: #039be5;
}
готово!