【问题标题】:IE doesn't drop css multi-columns when nested in display:table-cellIE 在 display:table-cell 中嵌套时不会删除 css 多列
【发布时间】:2015-12-04 05:32:32
【问题描述】:

在我的项目中,我有一个 display:table-cell 包含一个 css 多列列表。在调整容器大小时,我希望表格调整到其父级宽度,并且表格单元格在调整父级大小时扩大和缩小以适应父级容器。我希望多列列表随着容器宽度的缩小而删除列。这适用于 Firefox、Chrome 和 Safari,但不适用于 IE10+。

给定以下 HTML:

<div class="outer-container">
  <div class="inner-container">
    <div class="left-cell"></div>
    <div class="list-container">
      <ul class="columnized-list">
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Four</li>
        <li>Five</li>
        <li>Six</li>
      </ul>
    </div>
  </div>
</div>

还有下面的css:

* {
  box-sizing: border-box;
}

ul {
  list-style-type: none;
}

.outer-container {
  border: 1px solid green;
  width: 100%;
}

.inner-container {
  display: table;
  border: 1px solid black;
}

.left-cell {
  display: table-cell;
  border: 1px dashed blue;
  min-width: 5rem;
  max-width: 5rem;
}

.list-container {
  display: table-cell;
  border: 1px dashed red;
}

.columnized-list {
  -webkit-columns: 3 10rem;
  -moz-columns: 3 10rem;
  columns: 3 10rem;
  -webkit-column-rule: 1px solid black;
  -moz-column-rule: 1px solid black;
  column-rule: 1px solid black;
}

我希望当窗口缩小时列表列从 3 下降到 2 到 1。 Firefox、Safari 和 Chrome 的行为都符合我的预期。但是,IE 10+ 不会删除列。

我知道我不是唯一遇到这种情况的人。 CSS-Tricks 的评论者 Todd 描述了the same issue

我想我可以理解为什么表格单元格正在扩展以填充内容,而 IE 不知道它是否应该缩小列表列或展开表格单元格。

什么是正确的行为? IE 正确吗?还是所有其他浏览器? CSS 规范是否指定了这种情况下的行为?

更重要的是,如何让表格和/或单元格适合表格的容器?

JSFiddle http://jsfiddle.net/kentho_98/y5bdLsgo/9/

更新增加了一些要求。

【问题讨论】:

  • 我可以问为什么在没有“display:table”的情况下使用它吗?
  • "display:table" 是由于其他要求。但也许这不是满足其他要求的最佳解决方案,所以我将在另一个问题中询问这个问题。但为了在这里讨论,我们假设它是必需的。
  • 好的,我的回答能解决你的问题吗?
  • 大声笑,我正在更新问题... :) 请参阅我的 cmets 来回答您的问题。
  • 仅供参考,您想要的解决方案需要设置最小/最大宽度,并且由于表格单元格有问题,如果没有设置最大宽度,IE 中会出现一些奇怪的行为,不换行,因此需要使用视口单位而不是百分比。这里有一些关于这个问题的阅读:stackoverflow.com/questions/6426779/…

标签: css multiple-columns internet-explorer-11 internet-explorer-10 css-tables


【解决方案1】:

如果你给display: table-cell 一个min-width IE11 中的列/边缘中断。

这里是a fiddle demo

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

ul {
  list-style-type: none;
}

.outer-container {
  border: 1px solid green;
  width: 100%;
}

.inner-container {
  display: table;
  border: 1px solid black;
  width: 100%;
}

.left-cell {
  display: table-cell;
  border: 1px dashed blue;
  min-width: 5rem;
  max-width: 5rem;
}

.list-container {
  display: table-cell;
  border: 1px dashed red;
  max-width: calc(100vw - 5rem);
}

.columnized-list {
  -webkit-columns: 3 10rem;
  -moz-columns: 3 10rem;
  columns: 3 10rem;
  -webkit-column-rule: 1px solid black;
  -moz-column-rule: 1px solid black;
  column-rule: 1px solid black;
}
<div class="outer-container">
  <div class="inner-container">
    <div class="left-cell"></div>
    <div class="list-container">
      <ul class="columnized-list">
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Four</li>
        <li>Five</li>
        <li>Six</li>
      </ul>
    </div>
  </div>
</div>

【讨论】:

  • 这非常接近我的需要。我更新了描述以添加一个额外的要求,即表格需要适合它的父宽度。
  • 如果这是我能找到的唯一解决方案,我想我可以使用 javascript 内联表格的样式以适应父宽度。
  • 这个解决方案有点小问题。当我缩小窗口时,似乎桌子延伸到它的容器之外一点点。我仍然希望让桌子完全适合它的容器。看到这个小提琴:jsfiddle.net/kentho_98/y5bdLsgo/8
  • @arch-imp 我更新了我的答案。这对你有用吗?
  • 如果我把它改成 99vw 就可以了。我需要研究大众单位以了解原因。我以前没用过。
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2010-10-10
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多