具有父级最大高度的响应式图像

Posted

技术标签:

【中文标题】具有父级最大高度的响应式图像【英文标题】:responsive image with max height of parent 【发布时间】:2019-05-04 04:12:04 【问题描述】:

我目前正在创建一个网站来练习一些 CSS。不过,我的要求似乎不太好相处。我整天都在努力解决它,但我不断地通过解决其他问题来制造新问题。 这就是我试图让它看起来像主要部分内部的方式:

______________________________________
|             |                      | 
|section with |                      |
|fixed size   |  responsive figure   |
|_____________|  (image + caption,   |
|             |  max height =        |
|section with |  combined hight of   |
|fixed size   |  sections)           |
|             |                      |
|_____________|______________________|

我需要 figcaption 留在图像下方。 图像必须保持其比例,使用其宽度的所有可用空间(粘在左右边缘)。 调整大小时,我希望图形始终居中。

唯一还没有工作的是设置图像的最大高度。这是一件如此简单的事情,但不知何故我无法让它工作。 有趣的是,在这个过程中,这部分甚至在某些时候工作得很好,但是在将图形的位置调整到中心后就停止了工作。

这是我的代码:

<!DOCTYPE html>
<html lang="de">

<head>
  <link rel="stylesheet" href="style.css" type="text/css" />
  <title>Detailseite zu einem Raum</title>
  <meta charset="utf-8">
  <link rel="icon" href="Koala.jpg">
  <style>
    main 
      display: grid;
      grid-template-columns: auto 1fr;
      margin-bottom: 2em;
    
    
    #figdiv 
      grid-area: 1/2/3/3;
      display: flex;
      align-items: center;
      /* Bild mittig zwischen zwei Rows*/
      max-height: 100%;
    
    
    figure 
      margin: 0;
    
    
    img 
      max-width: 100%;
    
  </style>
</head>

<body>
  <header><img id="logo" src="Koala.jpg"   >Detailseite zu einem Raum</header>
  <nav>
    <ul>
      <li>
        <a href="listeVerfuegbareRaeume.html">Verfügbare Räume</a>
      </li>
      <li>
        <a href="detailseiteBuchung.html">Detailseite zur Buchung</a>
      </li>
      <li>
        <a href="raumBuchen.html">Raumbuchung anlegen</a>
      </li>
    </ul>
  </nav>
  <main>
    <section>
      <h4>Informationen zum Raum</h4>
      <div>
        <!-- Ursprünglich: id="raumInfo" -->
        <ul id="raumInfoListe">
          <li>Nummer: A.E.01</li>
          <li>Bezeichnung: Hörsaal</li>
          <li>Gebäude: EF42</li>
          <li>Kapazität: XY</li>
          <li>Ausstattungsmerkmale:
            <ul>
              <li>1 Beamer</li>
              <li>2 Whiteboards</li>
            </ul>
          </li>
        </ul>
        <!-- <figure> semantische Auszeichnung der Abbildung
                    <img src="Office.jpg" >
                    <figcaption>Abbildung: Foto des Raumes</figcaption>
                </figure> -->
      </div>
    </section>
    <section id="tabellenContainer">
      <h4>Tabelle der Buchungen zum Raum</h4>
      <table id="tabelleRaumBuchungen">
        <thead>
          <tr>
            <th>Datum</th>
            <th>Zeitraum</th>
            <th>Bezeichnung</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>12.10.2018</td>
            <td>12:00-20:00 Uhr</td>
            <td><a href="detailseiteBuchung.html">Kolloquium</a></td>
          </tr>
          <tr>
            <td>13.10.2018</td>
            <td>14:00-20:00 Uhr</td>
            <td><a href="detailseiteBuchung.html">Kolloquium</a></td>
          </tr>
          <tr>
            <td>14.10.2018</td>
            <td>15:00-20:00 Uhr</td>
            <td><a href="detailseiteBuchung.html">Kolloquium</a></td>
          </tr>
          <tr>
            <td>test</td>
            <td>test</td>
            <td>test</td>
          </tr>
          <tr>
            <td>test</td>
            <td>test</td>
            <td>test</td>
          </tr>
          <tr>
            <td>test</td>
            <td>test</td>
            <td>test</td>
          </tr>
          <tr>
            <td>test</td>
            <td>test</td>
            <td>test</td>
          </tr>
        </tbody>
      </table>
    </section>
    <div id="figdiv">
      <figure>
        <img src="Office.jpg" >
        <figcaption>Abbildung: Foto des Raumes</figcaption>
      </figure>
    </div>
  </main>
  <aside>
    <label>Aktuelle Meldungen:</label>
    <ul>
      <li>11.10.2018, eine aktuelle Meldung</li>
      <li>12.10.2018, noch eine aktuelle Meldung</li>
    </ul>
  </aside>
  <footer>
    <label>© Copyright 2018</label>
  </footer>
</body>

</html>

我在这里所做的可能会被简化,也请随时告诉我:D

(顺便说一句,我正在使用谷歌浏览器)

【问题讨论】:

【参考方案1】:

将三个部分添加到 div 元素并根据需要固定高度,然后在父 div 下的 div 中设置固定大小的部分,并将图像 div 也添加到父 div 下的 div 并定义样式响应式设计的百分比定义。

image for understanding

【讨论】:

是否也可以不为部分设置特定大小?目前,部分的高度是自动设置的,并且非常完美,但是当我将窗口扩展到图像高度高于固定部分的高度时,它会被拉伸。 您必须以百分比设置图像的高度,它会根据保存该图像的 div 来调整图像的大小 是的,我同意。但我不想硬编码 div 的大小。 div 应该尽可能小以使部分的内容适合。因此,高度可能会有所不同,具体取决于您使用的浏览器/设备。 在样式表中使用 maxwidth 函数,您可以控制不同布局的高度,在大多数网站中,高度始终是硬编码的,宽度是从屏幕捕获的,因为可以巨大的页面意味着网站的高度可能很长,如果没有给出图像将使用其默认高度,这可能会破坏从不同设备查看时的外观。这个网站可能会帮助你:websitedimensions.com

以上是关于具有父级最大高度的响应式图像的主要内容,如果未能解决你的问题,请参考以下文章

响应式网页设计和调整图像大小

如何在具有固定高度的 flex 容器中缩小响应式图像

Flutter:响应式定位在堆栈中

响应式网站;在减小宽度的同时保持图像高度?

如何处理具有垂直节奏的响应式图像?

具有 1x1 像素 PNG 的更好的响应式图像?