【发布时间】:2015-01-24 12:26:28
【问题描述】:
我正在尝试通过保留旧浏览器(特别是 IE8、IE9 和 Opera 10+)的表格,将基于表格和 JS 的旧布局转换为具有向后兼容性的新 Flexbox。
问题是没有display:flex-item来覆盖旧样式display:table-cell。
我尝试了各种定义,例如display:inherit、display:initial,但没有一个能够将显示定义重置为作为弹性项目正常工作。
<!-- HTML user list -->
<div class="userDetails layout">
<div class="picture"><img src="..."></div>
<div class="details">username, email, etc.</div>
</div>
/* CSS Table Layout */
.layout { display: table; width: 100%; }
.layout > .picture { display: table-cell; width: 30%; }
.layout > .details { display: table-cell; width: auto; }
/* CSS Flexbox - ignored by browsers that does not support it */
/* just an example - should use all versions for best compatibility */
.layout { display: flex; }
.layout > .picture { display: ???; flex: 0 1 30%; }
.layout > .details { display: ???; flex: 1 1 auto; }
无论我为 .details 在显示中设置什么,它都不能作为弹性项目工作,也不会增长以填充剩余空间。
知道如何在不使用 JS 检测浏览器版本和切换样式的情况下覆盖它吗?
我已经尝试在谷歌上搜索解决方案,但大多数结果只是关于 Flexbox 的一般文章;唯一类似的是this test,它根本没有解决向后兼容性问题。
更新 1: 这是一个JSFiddle demo 的纯 Flexbox 和 Flexbox 结合表格布局。如果调整结果窗口的大小,纯布局的缩小方式与底部结合表格和 Flexbox 的布局不同。 注意:在 Chrome 中可以正常工作,在 Firefox、IE、Safari 等中尝试。
更新 2: Safari 使用前缀定义正常工作...updated JSFiddle demo
【问题讨论】:
标签: css tablelayout flexbox