css - 使用百分比填充技巧来保持纵横比会导致 CSS 网格溢出

标签 css grid-layout css-grid

我正在使用 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 网格容器。

这里是一个关于问题的工作示例的 fiddle :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>

最佳答案

问题似乎是使用 auto 来调整网格列的大小:

#content {
  display:grid;
  grid-template-columns: auto;
  grid-template-rows: auto auto auto auto;
}

填充百分比是相对于包含 block ( spec ) 的宽度计算的。

无论出于何种原因,浏览器都会忽略 auto 值。

如果您从 auto 切换到 fr 单位,布局将按预期工作。

#content {
  display:grid;
  grid-template-columns: 1fr;
  grid-template-rows:auto auto auto auto;
}

* {
  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-columns: 1fr;
  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>

https://jsfiddle.net/uo63yyer/31/


此外,请注意,在网格项上使用基于百分比的填充可能会在不同浏览器中呈现不同的效果。 Percentage padding on grid item being ignored in Firefox

关于css - 使用百分比填充技巧来保持纵横比会导致 CSS 网格溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44014004/

相关文章:

jquery - 我的伪元素动画不工作

html - 强制一个元素低于另一个元素?

css - 可用框架以外的开源网格布局

java - 调整 GridLayout 中面板的大小

html - 什么定义了显式网格?

php - 服务器未检测到 CSS 样式表路径 404 not found 错误?

html - 如何将图像放置在半透明层下方?

matlab - 将 ismember() 与包含向量的元胞数组一起使用

html - CSS网格布局问题

css - 使用网格项宽度缩放网格项高度