当前位置: 首页 > 知识库问答 >
问题:

Firefox v36及更高版本中的CSS Flexbox问题[重复]

壤驷建德
2023-03-14

我试图使用CSS Flexbox(display:flex)占据窗口的剩余高度。我还想滚动可用。。。也许我在这件事上做得不对,但我已经找了这么久,以至于我找不到其他的选择。

这个想法是有一个固定的容器。在那个固定的容器内是一个柔性盒子,占据了100%的高度。我将项目添加到堆叠在列中的灵活框中。我添加的最后一个项目(容器包装器)里面有动态内容,它将通过AJAX调用替换超文本标记语言(否则我只会将操作栏移到包装器外面,然后完成它)。这个内容包装器也是一个灵活容器(以及一个灵活项目),并设置为随着窗口的高度而增长和收缩。这个flex容器的最后一项应该允许在窗口缩小时滚动。

在这里演示。

<!-- The fixed container -->
<div class="fixed">
    <!-- The first flex container - direction: column -->
    <div class="outer">
        <div class="some-flex-item"></div>
        <div class="some-flex-item"></div>
        <!-- Grow and shrink with 100% of height -->
        <div class="container-wrapper">
            <!-- inner HTML is dynamic -->
            <!-- flex: 0 0 auto -->
            <div class="action-bar"></div>

            <!-- Want this div to take up remaining height of window
                 and have overflow-y scrolling -->
            <div class="container">
                ...
            </div>
        </div>
    </div>
</div>

Chrome在IE10中似乎可以工作,但是火狐没有添加滚动条,因为容器包装器的高度会因为里面的内容而无限增长。我应该提到旧版本的火狐显示正确(我想是33),但是更新版本没有。

我找到了一个解决方法,在这里我设置了内部容器的位置:相对,然后将其内部内容包装在一个div中,绝对位置设置为0表示顶部、左侧、底部和右侧。这里举个例子。我不喜欢这样,因为它似乎违背了flexbox布局的目的。有没有什么方法可以让这个概念在浏览器中很好地发挥作用,而不必进行标记攻击?

共有1个答案

易风华
2023-03-14

添加以下内容:

.container-wrapper {
    min-height: 0;
}
html {
  box-sizing: border-box;
}
*, *:before, *:after {
  box-sizing: inherit;
}
html, body {
  margin: 0;
  height: 100%;
}
.fixed {
  position: fixed;
  top: 60px;
  right: 0;
  bottom: 0;
  width: 100%;
  max-width: 400px;
}
.outer {
  border: 1px solid black;
  height: 100%;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-direction: column;
  flex-direction: column;
}
.outer > * {
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
.container-wrapper {
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-direction: column;
  flex-direction: column;
  min-height: 0;
}
.action-bar {
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  border-top: 1px solid silver;
  border-bottom: 1px solid silver;
  padding: 20px;
  text-align: right;
}
.container {
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  overflow-y: auto;
}
.list {
  display: -ms-flexbox;
  display: flex;
  padding-top: 10px;
  padding-bottom: 10px;
  border: 1px solid aqua;
}
.display-name {
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  padding-right: 8px;
}
.display-date {
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
<div class="fixed">
  <div class="outer">
    <div>
      <p>Title</p>
    </div>
    <!-- The inner contents of container-wrapper is dynamic so I cannot
simply move the action-bar item outside -->
    <div class="container-wrapper">
      <div class="action-bar">
        <button>I don't do anything but occupy space</button>
      </div>
      <!-- Firefox allows this element to grow beyond the remaining space of the container-wrapper
thus expanding the height of the container-wrapper and not allowing scroll -->
      <div class="container">
        <div class="list">
          <div class="display-name">
            Display Name
          </div>
          <div class="display-date">
            Mar 31, 2015
          </div>
        </div>
        <div class="list">
          <div class="display-name">
            Really long name that should be truncated. I don't know
          </div>
          <div class="display-date">
            Mar 31, 2015
          </div>
        </div>
        <div class="list">
          <div class="display-name">
            Display Name
          </div>
          <div class="display-date">
            Mar 31, 2015
          </div>
        </div>
        <div class="list">
          <div class="display-name">
            Display Name
          </div>
          <div class="display-date">
            Mar 31, 2015
          </div>
        </div>
        <div class="list">
          <div class="display-name">
            Display Name
          </div>
          <div class="display-date">
            Mar 31, 2015
          </div>
        </div>
      </div>  
    </div>
  </div>
</div>
 类似资料:
  • 我正在使用pullToRefresh库: 但是如果android版本大于4.0,列表无法移动。 LogCat显示模拟器警告,但它们不相关。 如何解决移动列表的问题?

  • 我在intellij IDEA中更改了jdk版本后遇到了一个问题。 在我的pom文件中,我有下一个属性: 并且当maven在控制台启动build Project-at显示JDK-1.8的正确版本时: 但当我尝试启动project时,控制台显示JDK:的早期版本 有谁能帮我解决这个问题吗?

  • 我正在更新我的firebase id 依赖失败:com。谷歌。firebase:firebase消息:17.0.0- 同时给出以下错误: 以下依赖关系是项目依赖关系,它们是直接的或具有传递性的依赖关系,从而导致与问题相关的art ifact。-项目“mifosng”依赖于依赖于com的项目“debugCompileClasspath”。谷歌。firebase:firebase分析s@17.0.0-

  • 问题内容: 我对Java Web Start的状态感到困惑。在Oracle的支持路线图中,我们可以阅读以下内容: 部署技术支持 由Java插件和Web Start技术组成的Web部署技术具有较短的支持生命周期。对于通过Java SE 8进行的主要发行,Oracle为这些技术提供了五(5)年的高级支持。扩展支持不适用于部署堆栈,并且不适用于Java SE 9以外的支持。有关详细信息,请参见Oracl

  • 问题内容: 网页中Java Applets的一个众所周知的问题是,浏览器会忽略applet标记的z-index而不是页面中的其他组件。无论您如何在页面中定位元素和z- index元素,小程序都将在所有内容之上吸引自己。 有一种解决方法,称为iframe垫片,如此处所述:http : //www.oratransplant.nl/2007/10/26/using-iframe-shim-to-par

  • 问题内容: 我了解字典在Python 3.6+中是按插入顺序排序的在3.6中是实现的细节,在3.7+中是官方的。 给定它们的顺序,似乎不存在通过插入顺序来检索字典的第 i 个项目的方法,这很奇怪。可用的唯一解决方案似乎具有O( n )复杂度,或者: 通过O( n )进程转换为列表,然后使用。 循环字典字典项,并在达到所需索引时返回值。同样,时间复杂度为O( n )。 由于从a获取项目的复杂度为O(