【问题标题】:Table-cell breaks on window resize in Safari在 Safari 中调整窗口大小时表格单元格中断
【发布时间】:2014-02-25 21:30:00
【问题描述】:

我有一个由div 元素构建的表格。默认情况下,元素显示为表格单元格。 在@media screen and (max-width: 769px) 上的元素需要变成table-row

除 Safari 外,所有浏览器都可以正常工作。 在 safari 中它显示得很好,直到我将窗口重新调整为非常窄然后返回全宽。那时桌子坏了。如果我刷新页面或禁用并重新启用table-cell 样式表会自行修复。

示例: http://jsfiddle.net/sergejpopov/TvEWf/

这是 Safari 的错误吗?如何解决?

【问题讨论】:

  • 我在 Chrome 中遇到过类似的问题。我认为这是一个 webkit 渲染错误。从来没有找到解决办法
  • 我在 ajax 页面上遇到了类似的问题。更改具有 display:table-cell 的 div 的内容不会调整表格单元格的大小。所以我必须使用 jQuery $('.col').css('display', table-cell); 重置它

标签: css safari responsive-design media-queries css-tables


【解决方案1】:

听起来您没有遵循正确的结构-您不应该将table-cell 换成table-row,它们有两个截然不同的目的,在解释布局方面并不等同,表格结构应该永远跟随:

table (display-table)
 row (display-row) <- important to denote a row of elements
  cell (display-cell) <- important to denote (column based) content within a row
  /cell
 /row
/table

您的方法遗漏了行或单元格级别,因此尽管在大多数情况下似乎一切都正确解释了,但您的 css 实际上是错误的。

我建议您考虑使用浮动或内联 div,请参阅

FIDDLE

HTML

<div class="t">
    <div>1</div><div>2</div><div>3</div><div>4</div>
</div>

CSS

*{
    box-sizing:border-box;
}
.t
{
    width:100%;
}

.t>div
{
    border:1px solid red;
    display:inline-block;
    width:25%;
    margin:0;
    padding:0;
    zoom:1;
}


@media screen and (max-width: 769px) {
.t
{
    width:100%;
    display:table;
}

.t>div
{
    border:1px solid red;        
    display: block;
        width:100%;
    zoom:1;
}

}

【讨论】:

  • 感谢您指出表结构问题。我最终在窄屏幕上没有使用表格,但我仍然在大屏幕上留下表格,因为需要元素跨越整个屏幕宽度。 (列的数量不是恒定的 - 所以使用浮动/内联 div 不是一个选项)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
相关资源
最近更新 更多