ng-bootstrap模态大小

时间:2017-10-27 14:27:34

标签: angular ng-bootstrap

设置/覆盖模态的自定义宽度的最佳方法是什么?

似乎ng-bootstrap目前支持

  

尺寸:'sm'| 'LG'

但Bootstrap 4支持sm,md和lg。

理想情况下,我希望模式能够响应并调整类似于容器大小。在移动设备上,它可以全屏显示。

编辑: Bootstrap 4 _variables.scss似乎有$ modal-md设置,但似乎未使用。

$modal-lg:                    800px !default;
$modal-md:                    500px !default;
$modal-sm:                    300px !default;

9 个答案:

答案 0 :(得分:26)

我能找到的最干净的解决方案是使用windowClass属性。

即:

this.modalService.open(MyModalComponent,  { windowClass : "myCustomModalClass"});

然后将以下内容添加到全局CSS样式中。这很重要,因为样式不会从组件CSS中获取。

.myCustomModalClass .modal-dialog {
  max-width: 565px;
}

答案 1 :(得分:19)

试试这样:

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' });
    }

}

答案 2 :(得分:5)

我发现这是一个很好的解决方案。

this.modalService.open(MyComponent, { windowClass: 'my-class'});

ng-deep “阴影刺穿”后代组合器可用于将样式向下强制通过子组件树进入所有子组件视图。在这种情况下,是 modal-dialog 类。

::ng-deep .my-class .modal-dialog { 
     max-width: 80%;
     width: 80%;
}

答案 3 :(得分:2)

在style.css文件中添加以下css。

.xlModal > .modal-dialog {
    max-width: 1490px !important;
    min-width: 971px !important;   
    width: 95% !important;
}

注意:我们可以用任何名称替换.xlModal

使用新创建的样式打开模态。

this.modalService.open(content,{windowClass:"xlModal"});

答案 4 :(得分:0)

除了djpalme和Kapil Thakkar答案外,您还需要将组件的“封装”设置为None,如here

@Component({
    selector: 'app-generic-view',
    templateUrl: './generic-view.component.html',
    styleUrls: ['./generic-view.component.scss'],
    encapsulation: ViewEncapsulation.None
})

答案 5 :(得分:0)

在接口NgbModalOptions上添加大小xl。

export interface NgbModalOptions {
   size?: 'sm' | 'lg' | 'xl';
}

现在在打开模式时使用它 this.modalService.open(content, { size: 'xl' });

答案 6 :(得分:0)

您可以将其包装为类似的功能

component.ts

// 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

::ng-deep .md-class .modal-dialog { 
    max-width: 80%;
    width: 80%;
}

并称呼它,

openModal(); //argument 'md'
openModal('sm'); //argument 'sm'
openModal('md'); //argument 'md'
openModal('lg'); //argument 'lg'

答案 7 :(得分:0)

添加参数class: 'modal-lg'

open() {
        const modalRef = this.modalService.open(ModelComponent, { class: 'modal-lg', backdrop: 'static' });
    }

}

答案 8 :(得分:-2)

如果您未指定size,则默认值使用$modal-md(500px)。

所有3个模态sm,md和lg都是响应式的,并且会在移动设备上以全宽(带边框)显示。

如果您真的想要新尺寸,可以使用自定义尺寸:

this.modalService.open(MyModalComponent, { size: <any>'xl' });

使用此课程的CSS:

.modal-xl {
  max-width: 1000px;
}

编辑:xl大小现在是标准大小,因此CSS。