Internet Explorer 和 box-sizing:td 中 div 内的边框框

Posted

技术标签:

【中文标题】Internet Explorer 和 box-sizing:td 中 div 内的边框框【英文标题】:Internet Explorer and box-sizing: border box within divs in td 【发布时间】:2019-09-16 18:42:34 【问题描述】:

box-sizing:border-box 和 Internet Explorer 有问题。以下示例说明了我的布局:

<div class="content">
<div class="box">
    <table>
       <tr>
        <td>Lorem ipsum</td>
        <td>Lorem ipsum</td>
        <td>Lorem ipsum</td>
       </tr>

      <tr>
        <td>Lorem ipsum</td>
        <td>Lorem ipsum</td>
        <td>
          <div class="Images">
            <div class="liner">
              <a href="https://www.example.com/image.jpg"><img src="https://www.example.com/image.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://www.example.com/image.jpg"><img src="https://www.example.com/image.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://www.example.com/image.jpg"><img src="https://www.example.com/image.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://www.example.com/image.jpg"><img src="https://www.example.com/image.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://www.example.com/image.jpg"><img src="https://www.example.com/image.jpg"></a>
           </div>
         </div>
       </td>
    </tr>
  </table>
</div>
</div>

请注意,这只是我页面的粗略草图。真实的包含多达 30 张图像。 div的css如下:

#content .box .Images  
padding:0 0 20px 0; 
box-sizing:border-box;
display:flex;
flex-wrap:wrap;
justify-content:space-around;


#content .box .Images .liner 
float:left;
padding:20px 0 0 0;
box-sizing:border-box;

这在 Chrome 和 Firefox 中运行良好,但在 IE 11 中不适用。IE 11 在一行中显示所有图像,没有空白或中断。这会导致图像溢出 td。我在 div 中的其他页面上使用相同的结构,IE 11 不会产生任何问题。

所以我猜想 IE 11 和 CSS box-sizing:border-box 属性存在问题。我试图为“图像” div 设置一个固定的最大宽度,但这没有帮助。

有人知道如何解决这个问题吗?还是 IE 11 只是弄乱了表格单元格中使用的 box-sizing?

【问题讨论】:

我用 IE 11 和其他浏览器测试你的代码。我发现所有浏览器都在 1 列中显示图像。这是我的测试结果。 imgur.com/a/eap9zuM 所以我无法用您的示例代码产生问题。其他一些 CSS 代码可能会影响 IE 11 中的输出。如果可能的话,您可以尝试发布可能产生问题的示例代码。我们将再次尝试进行测试以产生问题。它可以帮助缩小问题的范围。感谢您的理解。 【参考方案1】:

对不起,我的反应迟了,谢谢你们的回答。

我实际上希望图像并排显示在一行中,并在达到 td/table 的最大宽度时换行到下一行。

经过更多研究,我找到了这个https://github.com/philipwalton/flexbugs/issues/179,它准确地描述了我的问题。通过在表格的 CSS 中添加 table-layout:fixed,我终于设法让我的布局与 IE 11 一起使用。我检查了 IE 11、Firefox 和 Chrome,它现在可以在所有浏览器中正常运行。

【讨论】:

【参考方案2】:

我试图在 sn-p 中复制您的问题,但实际上我没有任何运气。在 IE11 中查看时似乎可以正常工作,并且图像堆叠在一列而不是一行中,就像我在 Chrome 中查看时一样。

td
  border:2px solid blue;
  width:200px;


img
  max-width:100px;
  height:auto;


#content .box .Images  
  padding:0 0 20px 0; 
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap;
  justify-content:space-around;


#content .box .Images .liner 
  float:left;
  padding:20px 0 0 0;
  box-sizing:border-box;
<div class="content">
<div class="box">
    <table>
       <tr>
        <td>Lorem ipsum</td>
        <td>Lorem ipsum</td>
        <td>Lorem ipsum</td>
       </tr>

      <tr>
        <td>Lorem ipsum</td>
        <td>Lorem ipsum</td>
        <td>
          <div class="Images">
            <div class="liner">
              <a href="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"><img src="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"><img src="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"><img src="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"><img src="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"></a>
           </div>
           <div class="liner">
             <a href="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"><img src="https://upload.wikimedia.org/wikipedia/commons/a/ad/Papaver_ori%C3%ABntale._Locatie%2C_Tuinen_Mien_Ruys_02.jpg"></a>
           </div>
         </div>
       </td>
    </tr>
  </table>
  
</div>
</div>  
<hr>
<small>
    Sample image from Wikimedia Commons:
  </small><br>
  <small>
  (Dominicus Johannes Bergsma [<a href="https://creativecommons.org/licenses/by-sa/4.0">CC BY-SA 4.0</a>], <a href="https://commons.wikimedia.org/wiki/File:Papaver_ori%C3%ABntale._Locatie,_Tuinen_Mien_Ruys_02.jpg">via Wikimedia Commons</a>)
  </small>

(另见JSFiddle)

所以我猜部分问题是您的示例代码中没有包含的问题 - 希望这可以指导您解决问题。

此外,尽管在这种情况下我无法直接看到问题,但我可以强烈猜测问题实际上更多地与您使用 flexbox 的事实有关。

用于 IE 的 Flexbox 很古怪。它在某些方面偏离了标准,并且与现代浏览器相比通常存在错误。这些 SO 答案更详细地介绍了它:

Flexbox code working on all browsers except Safari. Why?

display: flex not working on Internet Explorer

以及包含已知错误和解决方法的flexbugs project。

希望对您有所帮助。如果没有,那么我认为您需要更新示例代码以使其成为clear verifiable example。

【讨论】:

以上是关于Internet Explorer 和 box-sizing:td 中 div 内的边框框的主要内容,如果未能解决你的问题,请参考以下文章

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

对于某些情况,如 Internet Explorer 特定的 CSS 或 Internet Explorer 特定的 JavaScript 代码,如何仅针对 Internet Explorer 10?

如何从 Internet Explorer 11 降级到 Internet Explorer 10?