gpt4 book ai didi

html - CSS 显示 :table breaks when first element in table-cell is not text

转载 作者:搜寻专家 更新时间:2023-10-31 23:07:42 27 4
gpt4 key购买 nike

我正在使用 display:table 创建嵌套行和列集的布局。我注意到当表格单元格中的第一个元素不是文本时,列的对齐方式似乎会中断。不可否认,我还没有测试是哪些元素导致了这个,但是这个 JSFiddle 中有一个例子:http://jsfiddle.net/ekx4v/

代码:

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#container {
width:200px;
height:200px;
display:table;
}
#column1 {
display:table-cell;
background-color:blue;
}
#column2 {
display:table-cell;
background-color:red;
}
</style>
</head>
<body>

<div id="container">
<div id="column1">
Col1
<form>
<select size="2">
<option>Options go here...</option>
</select>
</form>
</div>
<div id="column2">Col2</div>
</div>

</body>
</html>

删除“Col1”文本会导致第二列不对齐。如果这在其他浏览器上没有重现,下面是一些在 Chrome 中截取的屏幕截图:

使用“Col1”:

correct alignment

没有“Col1”:

incorrect alignment

我在 Firefox 中得到了相同的结果。这是预期的行为吗?如果是这样,是否有解决方法,这样我就不必在每个 div 的开头放置文本?

最佳答案

这都是因为vertical-align默认为 baseline,这是预期的行为,因为您的示例具有非常不同的字母基线。实际上,如果没有文本内容,div 就没有字母基线,因此根据 spec,框的底部与父级的字母基线对齐。 .

谢天谢地,解决方法很容易:

#container > div {
vertical-align:top;
}

Demo


这是一个 related answer (检查最后一节),尽管您的用例有点不同:

简单地说,当没有文本内容时,您的select 元素将与父元素的字母基线对齐。这会将父级的字母基线向下推,这样 select 仍然可以放在父级中,使其底部与父级的字母基线对齐。所有其他 div 的基线仍与此基线对齐,该基线已被 select 下推。

通过在 form 元素之前添加文本内容,您的 div 将有一个字母基线,它不会像 select 那样推父基线> 会。所有 div 的基线仍然与上例中父级的字母基线对齐,但这次父级的基线没有被下推。

这是上面两段的粗略演示(提防疯狂的 MS-Paint 技能):

enter image description here

如您所见,在第二种情况下,父元素的基线被下推,因此 select 元素仍然可以容纳在父元素中,同时其底部与父元素的基线对齐。

vertical-align:top 让浏览器不必遵守如此复杂的规则。在将其应用于 float /内联 block /表格内容时,它也可以让我们免于许多头痛。

关于html - CSS 显示 :table breaks when first element in table-cell is not text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15100394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com