我正在尝试将基于表格和JS的旧布局转换为新的Flexbox,并通过在旧浏览器(特别是IE8、IE9和Opera 10+)中保留表格实现向后兼容性。
问题是没有 display:flex-item
来覆盖旧样式的 display:table-cell
。
我已经尝试了各种定义,如 display:inherit
、display:initial
,但都无法重新设置显示定义以正确地工作为flex-item。
<!-- 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
中设置什么显示方式,它都不能作为flex项目工作,并且不会增长以填充剩余空间。
有什么办法可以在不使用JS检测浏览器版本并切换样式的情况下覆盖此设置吗?
我已经尝试过搜索解决方案,但大多数结果只是关于Flexbox的一般文章;唯一相似的是这个测试,但它并没有解决向后兼容性。
更新1:
这是一个纯Flexbox和结合表格布局的JSFiddle演示。如果你调整结果窗口的大小,纯布局会与组合表格和Flexbox的底部不同程度地缩小。
注意:在Chrome中,这个工作是正确的,在Firefox、IE、Safari等中尝试一下。
更新2:
Safari使用前缀定义可以正常工作...更新的JSFiddle演示。