如何修复高度:在 Firefox 中使用 flexbox 自动修复? [复制]

Posted

技术标签:

【中文标题】如何修复高度:在 Firefox 中使用 flexbox 自动修复? [复制]【英文标题】:How to fix height: auto with flexbox in Firefox? [duplicate] 【发布时间】:2017-12-10 17:29:22 【问题描述】:

我对 flexbox 和 height: auto in Firefox 有疑问:

.portfolio 
  width: 100%;
  position: relative;
  overflow: visible;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: space-between;
  background-color: red;


.portfolio a 
  display: block;
  background-color: black;
  width: 30%;
  height: auto;
  padding-top: 30%;
  /* 1:1 Aspect Ratio */
  position: relative;
  /* If you want text inside of it */
  margin-bottom: 5%;
<div class="portfolio">
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
</div>

当 div .portfolio 有 height: auto 时,在 Firefox 中这个 div 是不可见的。 Chrome、Safari 和其他浏览器都可以正常工作...我真的不知道如何使它正常工作...有人吗?

【问题讨论】:

只是检查元素,当您将.portfolio a 设置为 height: 30% 时,.portfolio 没有高度(至少在 FF 中);它占用其父级内部空间的 30%,即 0。 是的,但即使我添加到 .portfolio height: auto 问题仍然存在。 height: auto; 与不指定高度完全相同。因此自动。请参阅下面的答案: 问题不是height: auto。问题是padding-top: 30% 【参考方案1】:

.portfolio 默认没有高度。在这种情况下,将高度设置为 auto 将不起作用。

height: 30%; 设置为.portfolio 的孩子不会做任何事情,因为其逻辑是:占据父母身高的 30%,即 0。同样,如果您设置.portfolio a 的高度到 30vh(视口高度的 30%)这样可以,或者如果你可以给它一个像素值

在下面的示例中,我将高度设置为 100 像素,但显然您可以将其更改为您想要的任何值。

.portfolio 
  width: 100%;
  height: 100px;
  position: relative;
  overflow: visible;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: space-between;
  background-color: red;


.portfolio a 
  display: block;
  background-color: black;
  width: 30%;
  height: auto;
  padding-top: 30%;
  /* 1:1 Aspect Ratio */
  position: relative;
  /* If you want text inside of it */
  margin-bottom: 5%;
<div class="portfolio">
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
  <a href="#">
    <div class="portfolio_item">
    </div>
  </a>
</div>

【讨论】:

是的,在 Firefox 中,它应该设置为 %、vh 或 px,但重点是 .portfolio 高度应该取决于其中的项目... @DamianP。将height: 30%; 设置为.portfolio 的孩子不会做任何事情,因为这样做的逻辑是:占据父母身高的30%,即0(&lt;div&gt;s 的自动值)。如果您将.portfolio a 的高度设置为30vh(视口高度的30%)那会起作用,或者如果您可以给它一个像素值 好的...但它适用于 Chrome、Safari、Opera... @DamianP。似乎height: auto; 在 Chrome、Safari 等中的工作方式略有不同。 好吧...我只是用了 display: box not flex...

以上是关于如何修复高度:在 Firefox 中使用 flexbox 自动修复? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

修复了滚动列表顶部的标题。所有列高度相同的 Flex 布局

如何修复 Firefox 扩展弹出窗口中显示的滚动条

Flex 基础 100% 在列 flexbox 中:Firefox 中的全高,而不是 Chrome

IE11 错误计算父 flex 容器的高度

Flex 高度在 Chrome 中不起作用 [重复]

高度50%没有填充Safari jsfiddle的flex父级的一半