我正在使用padding-top将 div 的纵横比强制为 16:9。div 的内容是绝对定位并扩展以填充 div。
HTML:
<div class = "ratio-16-9">
  <p>This p element is in a div with an aspect ratio of 16:9.</p>
</div>
CSS:
.ratio-16-9 {
  padding-top:56.25% /* Yields 16:9 aspect ratio. */;
  position:relative;
}
.ratio-16-9 > p {
  position:absolute;
  left:0;
  top:0;
  width:100%;
  height:100%;
}
它可以很好地实现纵横比,但是由于某种原因,div 溢出了我的 CSS Grid 容器。
这是一个解决问题的工作示例:https ://jsfiddle.net/uo63yyer/30/
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
html {
  height: 100%;
  width: 100%;
}
body {
  background-color: #404040;
  min-height: 100%;
  width: 100%;
}
p {
  color: #f0f0f0;
  text-align: center;
}
#content {
  display: grid;
  grid-template-columns: auto;
  grid-template-rows: auto auto auto auto;
}
.topic {
  background-color: #808080;
  min-height: 100px;
  margin: 8px;
  padding: 8px;
}
.ratio-16-9 {
  background-color: #0080f0;
  padding-top: 56.25%;
  /* If you comment out the line above and uncomment the line below, things work propperly, but the aspect ratio is not maintained. */
  /*height:300px;*/
  position: relative;
}
.ratio-16-9>p {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
}
<div id="content">
  <div class="topic">
    <div class="ratio-16-9">
      <p>This p element is in a div with an aspect ratio of 16:9.</p>
    </div>
  </div>
  <div class="topic">
  </div>
  <div class="topic">
  </div>
  <div class="topic">
    <div>
      <!-- Uncomment the line below and things work propperly. -->
      <!--<p>This p element is in a propperly sized div and it works as one might expect it to.</p>-->
    </div>
  </div>
</div>