【问题标题】:Flexbox max-height issue with IE11IE11 的 Flexbox 最大高度问题
【发布时间】:2017-11-21 23:34:39
【问题描述】:

我正在尝试编写一个分成三部分的搜索菜单。如果没有足够的垂直空间来显示结果,每个部分都会有一个滚动条。

在 Chrome 和 Firefox 中,每个菜单都显示其滚动条,但在 IE11 上,菜单与包装器重叠。

我编写了一个适用于 Chrome 和 Firefox 的示例(Firefox 很棘手,我需要在菜单的多个级别上添加 overflow: hidden)。

.flex-wrapper {
  display: flex;
  margin: 20px auto;
  width: 1184px;
  max-height: 80vh;
  border: 2px solid red;
  min-height: 150px;
}

.flex-wrapper .flex-wrapper-inner {
  display: flex;
  width: 100%;
  flex-direction: column;
}

.flex-wrapper .flex-wrapper-inner .header {
  display: flex;
  flex-shrink: 0;
  width: 100%;
}

.flex-wrapper .flex-wrapper-inner .header H4 {
  flex: 1;
}

.flex-wrapper .flex-wrapper-inner .column-wrapper {
  flex-grow: 1;
  display: flex;
}

.flex-wrapper .flex-wrapper-inner .column {
  flex: 1;
  overflow-y: auto;
}

.flex-wrapper .flex-wrapper-inner .column H4 {
  text-align: center;
}

.box-results-users .list-group-item {
  margin: 0;
}

.box-results-users .list-group-item IMG {
  height: 60px;
  width: 60px;
}

.box-results {
  position: relative;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="flex-wrapper">
  <div class="flex-wrapper-inner">
    <div class="header">
      <h4>Box 1</h4>
      <h4>Box 2</h4>
      <h4>Box 3</h4>

    </div>
    <div class="column-wrapper">
      <div class="column">
        <div class="box-results list-group">
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>


        </div>

      </div>
      <div class="column">
        <div class="box-results">
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
          <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>

        </div>
      </div>
      <div class="column">
        <div class="box-results box-results-users">
          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>
          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>
          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>
          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>

          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>
          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>
          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>
          <div class="media list-group-item">
            <div class="media-left">
              <a href="#">
                <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
              </a>
            </div>
            <div class="media-body">
              <h4 class="media-heading">User Test</h4>
              ...
            </div>
          </div>





        </div>
      </div>
    </div>
  </div>

我在 IE 11 上遗漏了什么吗?

【问题讨论】:

    标签: css internet-explorer flexbox internet-explorer-11


    【解决方案1】:

    您需要在此布局中解决两个问题,以便它在 Chrome、Safari、Firefox 和 IE11 中工作。

    弹性项目的最小尺寸算法。

    默认情况下,弹性项目不能小于其内容的大小。最小尺寸在规范中定义为min-width: automin-height: auto

    某些浏览器会自行调整此设置(这就是您的布局在 Chrome 中有效的原因)。其他浏览器要求您覆盖默认设置(这是 FF 和 IE11 中需要的)。

    您可以使用min-width: 0 / min-height: 0overflow 覆盖除visible 以外的任何值。

    将此添加到您的代码中:

    .flex-wrapper .flex-wrapper-inner .column-wrapper {
        flex-grow: 1;
        display: flex;
        overflow: hidden;; /* IE11 & Firefox fix */
    }
    

    这里有一个更完整的解释:


    IE11 忽略了 flex 容器上的 `max-height` 和 `min-height`。

    在您的布局中,IE11 似乎只是忽略了您的 max-heightmin-height 规则。但是,这些规则似乎在弹性项目上运行良好。所以让你的容器也成为一个弹性项目。

    将此添加到您的代码中:

    body {
      display: flex; /* IE11 fix */
    }
    

    更多信息:


    body {
      display: flex; /* IE11 fix */
    }
    
    .flex-wrapper {
      display: flex;
      margin: 20px auto;
      width: 1184px;
      max-height: 80vh;
      border: 2px solid red;
      smin-height: 150px;
      flex-shrink: 0; /* override default `flex-shrink: 1` */
    }
    
    .flex-wrapper .flex-wrapper-inner {
      display: flex;
      width: 100%;
      flex-direction: column;
    }
    
    .flex-wrapper .flex-wrapper-inner .header {
      display: flex;
      flex-shrink: 0;
      width: 100%;
    }
    
    .flex-wrapper .flex-wrapper-inner .header H4 {
      flex: 1;
    }
    
    .flex-wrapper .flex-wrapper-inner .column-wrapper {
      flex-grow: 1;
      display: flex;
      overflow: hidden;; /* IE11 & Firefox fix */
    }
    
    .flex-wrapper .flex-wrapper-inner .column {
      flex: 1;
      overflow-y: auto;
    }
    
    .flex-wrapper .flex-wrapper-inner .column H4 {
      text-align: center;
    }
    
    .box-results-users .list-group-item {
      margin: 0;
    }
    
    .box-results-users .list-group-item IMG {
      height: 60px;
      width: 60px;
    }
    
    .box-results {
      position: relative;
    }
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
    <div class="flex-wrapper">
      <div class="flex-wrapper-inner">
        <div class="header">
          <h4>Box 1</h4>
          <h4>Box 2</h4>
          <h4>Box 3</h4>
        </div>
        <div class="column-wrapper">
          <div class="column">
            <div class="box-results list-group">
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
    
    
            </div>
    
          </div>
          <div class="column">
            <div class="box-results">
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
              <a class="list-group-item" href="#">Quisque coeptis possedit radiis. Ardentior et contraria et quinta feras</a>
    
            </div>
          </div>
          <div class="column">
            <div class="box-results box-results-users">
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
    
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
              <div class="media list-group-item">
                <div class="media-left">
                  <a href="#">
                    <img class="media-object" src="https://randomuser.me/api/portraits/men/38.jpg" alt="...">
                  </a>
                </div>
                <div class="media-body">
                  <h4 class="media-heading">User Test</h4> ...
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>

    jsFiddle demo

    【讨论】:

    • 感谢您的回答!在我的情况下,我不能在 body 上使用 display: flex,因为这个组件是更大网站的一部分,并且在 body 上使用 flexbox 可能会导致其他问题。我将尝试在 IE 11 上使用 javascript 计算高度。我将在我的测试中保持这个主题。
    • 我在演示中只使用了body,因为在这种情况下它是父级。在您的实际代码中,您需要将 display: flex 应用于具有 min / max / height 的 flex 容器的父级,无论可能是什么元素。
    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2017-10-19
    • 2017-07-06
    • 2018-04-10
    相关资源
    最近更新 更多