我的 Web GUI 布局部分由 CSS 表驱动。这主要是因为我希望“单元格”在所有情况下都具有相同的高度,而不会在对齐方面造成任何巨大的麻烦。总的来说,这种方法非常成功。
但是,我确实有一个问题,即表格中的右侧单元格有时可能需要一些时间来呈现,导致左侧单元格短暂地具有 100% 的页面宽度。这会导致明显的“闪烁”效果,虽然很小,但有点烦人。我决定修复它。
这是我的页面如何工作的模糊表示:
#tbl { display: table; width: 200px; border: 1px solid black; }
#tbl-row { display: table-row; }
#tbl-col1,
#tbl-col2 { display: table-cell; }
#tbl-col1 { width: 50px; background-color: red; }
#tbl-col2 { background-color: blue; }
<div id="tbl">
<div id="tbl-row">
<div id="tbl-col1">LHS</div>
<div id="tbl-col2">RHS</div>
</div>
</div>
一切都很好,直到你使用你的开发工具给出#tbl-col2
一个display: none
指令,[我希望准确地]模拟浏览器渲染引擎在#tbl-col1
被渲染和#tbl-col2
被渲染之间的状态。
请注意#tbl-col1
,尽管我给了它宽度,但它立即占据了表格宽度的 100%。我有点理解为什么会发生这种情况:毕竟,我已经要求浏览器让div
s 表现得像表格一样。不过,这里还是不受欢迎的。
我试图通过插入一个“垫片”来解决这个问题,希望没有width
它它会扩展以填充右侧的所有空间,直到右侧被渲染:
#tbl { display: table; width: 200px; border: 1px solid black; }
#tbl-row { display: table-row; }
#tbl-col1,
#tbl-spc,
#tbl-col2 { display: table-cell; }
#tbl-col1 { width: 50px; background-color: red; }
#tbl-col2 { width: 150px; background-color: blue; }
<div id="tbl">
<div id="tbl-row">
<div id="tbl-col1">LHS</div>
<div id="tbl-spc"></div>
<div id="tbl-col2">RHS</div>
</div>
</div>
正如您再次 hide 所看到的那样#tbl-col2
,它并没有产生任何盲目的区别:#tbl-col1
仍然占据了表格的整个宽度,而不是我允许的 50px。
假设我宁愿解决这个问题也不愿完全放弃 CSS 表格布局,我该怎么办?
还是我将不得不更换布局,或者更糟糕的是,采用 JavaScript 方法来解决 FoUC?