ng-bootstrap Modal size
设置/覆盖模态的自定义宽度的最佳方法是什么?
似乎ng-bootstrap当前支持
size: 'sm' | 'lg'
但是Bootstrap 4支持sm,md和lg。
理想情况下,我希望模式能够响应并根据容器大小进行调整。 并在手机上全屏显示。
编辑:Bootstrap 4 _variables.scss似乎具有$ modal-md设置,但似乎未使用。
1 2 3 | $modal-lg: 800px !default; $modal-md: 500px !default; $modal-sm: 300px !default; |
我能找到的最干净的解决方案是使用windowClass属性。
即:
1 | this.modalService.open(MyModalComponent, { windowClass :"myCustomModalClass"}); |
然后将以下内容添加到您的全局CSS样式中。这很重要,因为样式不会从组件CSS中获取。
1 2 3 | .myCustomModalClass .modal-dialog { max-width: 565px; } |
尝试这样:
1 2 3 4 5 6 7 8 9 10 11 12 | import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { ModelComponent } from './model.component'; export class Component { constructor(private modalService: NgbModal) {} open() { const modalRef = this.modalService.open(ModelComponent, { size: 'lg', backdrop: 'static' }); } } |
我发现这是一个很好的解决方案。
1 | this.modalService.open(MyComponent, { windowClass: 'my-class'}); |
可以使用ng-deep" shadow-piercing"后代组合器将样式向下强制通过子组件树进入所有子组件视图。在这种情况下,模态对话类。
1 2 3 4 | ::ng-deep .my-class .modal-dialog { max-width: 80%; width: 80%; } |
当您不指定
这三个模态sm,md和lg都具有响应性,并将在移动设备上以全角显示(带有边框)。
如果您确实需要新的尺寸,则可以使用自定义尺寸:
1 | this.modalService.open(MyModalComponent, { size: 'xl' }); |
使用此类的CSS:
1 2 3 | .modal-xl { max-width: 1000px; } |
编辑:xl大小现在是标准大小,因此是CSS。
在style.css文件中添加以下CSS。
1 2 3 4 5 | .xlModal > .modal-dialog { max-width: 1490px !important; min-width: 971px !important; width: 95% !important; } |
注意:我们可以用任何名称替换
以新创建的样式打开模式。
1 | this.modalService.open(content,{windowClass:"xlModal"}); |
在接口
1 2 3 | export interface NgbModalOptions { size?: 'sm' | 'lg' | 'xl'; } |
现在在打开模态时使用它
除了djpalme和Kapil Thakkar答案外,您还需要将组件的"封装"设置为
1 2 3 4 5 6 | @Component({ selector: 'app-generic-view', templateUrl: './generic-view.component.html', styleUrls: ['./generic-view.component.scss'], encapsulation: ViewEncapsulation.None }) |
您可以将其包装成类似
component.ts
1 2 3 4 5 6 7 8 9 10 11 | // accepts 'sm', 'md' or 'lg' as argument. // default argument 'md' public openModal( dialogSize: 'sm' | 'md' | 'lg' = 'md'): void { let modalOptions = {}; if (dialogSize === 'sm' || dialogSize === 'lg') { modalOptions = { size: dialogSize }; } else { modalOptions = { windowClass: 'md-class' }; } this.modalService.open(ConfirmationDialogComponent, modalOptions); } |
component.css
1 2 3 4 | ::ng-deep .md-class .modal-dialog { max-width: 80%; width: 80%; } |
并这样称呼它,
1 2 3 4 | openModal(); //argument 'md' openModal('sm'); //argument 'sm' openModal('md'); //argument 'md' openModal('lg'); //argument 'lg' |