【问题标题】:max-width not working for table-cell最大宽度不适用于表格单元格
【发布时间】:2016-01-23 22:14:24
【问题描述】:

对我来说,预期的行为是中间单元格水平填充整个空间,只要其容器不超过 500 像素。但是,我缩放页面的大小并不重要,中间单元格总是填满 100%,忽略 max-width 属性,巧克力永远不会显示:(

div.container {
    width: 100%;
    display: table;
}
div.container > * {
    display: table-cell;
}
div.middle {
    width: 100%; max-width: 500px;
    background-color: black;
}
div.side {
    width: auto;
    background-color: chocolate;
}
<div class="container">
    <div class="side"></div>
    <div class="middle">.</div>
    <div class="side"></div>
</div>

是什么导致了问题,有什么解决方法?

【问题讨论】:

  • stackoverflow.com/questions/8465385/… 的可能重复项 - 请检查一下,可能会有所帮助!
  • 当你为你的表使用 标签时会发生什么?
  • 使用table标签代替div的结果完全一样。

标签: html css


【解决方案1】:

感谢 Aziz,现在我知道 max-width shouldn't be used for table cells

在 CSS 2.1 中,'min-width' 和 'max-width' 对表格、内联表格、表格单元格、表格列和列组的影响是未定义的。

等待解决方法...

【讨论】:

    【解决方案2】:

    我想你现在已经很清楚原因了,所以我只是建议你解决这个问题。通过使用display:block/inline-block; 而不是display:table/table-cell;

    所以解决办法是:

    div.container {
      width: 100%;
      display: block; /* Changed from display:table; */
    }
    div.container > * {
      display: inline-block; /* Changed from display:table-cell; */
      float:left; /* Added floating to avoid space between elements */
    }
    div.middle {
      width: 100%; 
      max-width: 500px;
      background-color: black;
    }
    div.side {
      width: auto;
      background-color: chocolate;
    }
    <div class="container">
      <div class="side">Left</div>
      <div class="middle">.</div>
      <div class="side">Right</div>
    </div>

    Working : Fiddle

    更新的解决方案:

    找到解决办法

    通过将table-layout:fixed; 提供给container 可以返回表格。

    Working Demo

    HTML

    <div class="container">
      <div class="side">Left</div>
      <div class="middle">.</div>
      <div class="side">Right</div>
    </div>
    

    CSS

    html, body {
        width:100%;
        height:100%;
        margin:0;
        padding:0;
    }
    .container {
        display:table;
        width:100%;
        height:10px;
        table-layout:fixed;
    }
    .side, .middle {
        display:table-cell;
        text-align:center;
        vertical-align:middle;
    }
    .middle {
        width:500px;
        background:black;
    }
    .side {
        width : calc(50% - 500px);
        overflow:hidden;
        background:chocolate;
    }
    
    @media (max-width: 500px) {
        .side
        {
            display:none;
        }
        .middle
        {
            width:100%;
        }
    }
    

    【讨论】:

    • 容器应始终水平填充其空间。如果它的宽度超过 500 像素,则其中的中间 div 应具有其最大宽度(500 像素),而侧面 div 应可见,以均匀地填充容器中的剩余空间。如果容器
    • 太棒了!很遗憾,对于这个看似很小的问题,似乎没有更简单的解决方案,并且必须使用媒体查询,但我也没有任何其他想法,你的示例完美地完成了这个技巧,所以我想我会像那样实现它,谢谢。
    • 确实是这样,但相信这对于您的情况来说是最简单的。使用 JS/JQuery 也可以实现更好、更准确的解决方案。但仅使用 CSS,这是最可能的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-12-09
    • 2015-08-11
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多