如何在 Angular Material 的对话框中放置图像?

Posted

技术标签:

【中文标题】如何在 Angular Material 的对话框中放置图像?【英文标题】:How do I fit an image inside of a dialog box in Angular Material? 【发布时间】:2021-07-27 06:42:27 【问题描述】:

我正在尝试将图像完全放入对话框窗口中,而不会溢出屏幕或在每一侧都出现滚轮。我希望对话框窗口永远不会填满整个屏幕,而是填满大部分屏幕(比如任一轴的 80%)。但我被困在永远不会自动调整大小以适合该框的图像上。

目前,如果图像的高度太大,我尝试的所有内容都会在右侧显示一个条形。

理想情况下,我希望有一个自动调整大小以适应屏幕的图像。

这是我的对话框 css

.full-width-dialog .mat-dialog-container 
  // max-width: 80vw !important;
  max-height: 80vh !important;
  padding: 0;
  display: flex;
  flex-direction: column;

还有我的图片容器 css


.image-cont 
  display: flex;
  flex: 1 1 0;

  img 
    max-width: 100%;
    max-height: 100%;
  

以及对话框的html模板。

<div class="image-cont">
  <img
    id=" data.id "
    src="...SOME_IMAGE_LIBRARY___/id/ data.id / data.width / data.height" 
  />
</div>

请注意,src 始终是比屏幕大得多的图像。

【问题讨论】:

您可以通过developer.mozilla.org/en-US/docs/Web/CSS/background-size 实现background-size: cover; 抱歉,我不太确定如何使用它?只是将background-size: cover; 添加到 img 或 image-cont 容器并没有真正做任何事情。 您必须将图像设置为 .image-cont 包装器的背景图像。 【参考方案1】:

如果您不想像 Dominik 提到的那样将其设置为覆盖的背景图像,可以将对话框上的溢出设置为隐藏。这将隐藏滚动条。

.full-width-dialog .mat-dialog-container 
  // max-width: 80vw !important;
  max-height: 80vh !important;
  padding: 0;
  display: flex;
  flex-direction: column;
  overflow:hidden;



【讨论】:

不幸的是,这将切断高度大于宽度的图像。在高度较大的情况下,我希望它最大化屏幕高度并减小宽度以适应。 我明白了,我被你问题中的滚动条抓住了。你有你正在处理的代码的一个活生生的例子吗? 我没有将它托管在任何地方,但我只是将代码上传到github1s,唯一会改变事情的css文件是底部.full-width-dialog .mat-dialog-container下的theme.scss因为它是在打开对话框时添加到 gallery-dash.component.ts 中的,并且 dialog-view.component.scss. 它与前面显示的有点不同,但我仍然有同样的问题。 你试过把父div的高度和宽度设置为100%吗? 我试过了,它似乎没有任何作用。【参考方案2】:

我可以通过稍微强迫它来解决这个问题。

<div fxLayout="row" fxLayoutAlign="center center" fxLayoutGap="3vw" class="dialog">
  <div class="image-cont">
    <img
      id=" data.id "
      src="https://picsum.photos/id/ data.id / data.original_width /
        data.original_height
      "
    />
  </div>
</div>

然后是 CSS

.image-cont 
  position: relative;
  height: 100%;
  width: 80%;
  img 
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    margin: auto;
    display: block;
    max-width: 100%;
    max-height: 100%;
  


.dialog 
  height: 80vh;
  width: 80vw;
  display: flex;
  flex-direction: row;


.full-width-dialog .mat-dialog-container 
  padding: 0;
  background: none;
  box-shadow: none;

完全应用于对话框。

【讨论】:

以上是关于如何在 Angular Material 的对话框中放置图像?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 5 / Material,如何在 Mat Dialog 中删除垂直滚动?

如何扩展/覆盖 Angular Material $mdDialog.show 中的默认选项?

Angular Material:弹出窗口:允许窗口在前后之间移动

Angular 6 Material - 等待 Mat 对话框关闭

Angular2 Material Dialog css,对话框大小

Angular Material 2 对话框显得更暗