我是新学HTML,现在我有一些像
这样的代码<div id="container" style="height:300px;width:500px;font-size:0">
<div id="leftBox" style="display: inline-block; background: pink; width: 50%; height: 100%;">
<div id="wrapper" style="height:10%;">
<div style="display: inline-block; background: red; width: 50%; height: 100%;"></div>
<div style="display: inline-block; background: blue; width: 50%; height: 100%;"></div>
</div>
</div>
<div id="rightBox" style="display: inline-block; background: green; width: 50%; height: 100%;"></div>
</div>
(我将其发布在http://jsfiddle.net/Simon_Chan/Z3WyA/)
您可以看到leftBox
有一个很大的offsetTop,但如果没有wrapper
或 wrapper
的身高是100%或没有rightBox
或 wrapper
中没有元素,在所有这些条件下leftBox
都没有offsetTop。
为什么这样?以及如何删除它?
谢谢!
答案 0 :(得分:5)
要解决此问题,您需要将vertical-align:top
添加到#leftBox
或 #rightBox
原因是默认vertical-align
值为baseline
将框的基线与父框的基线对齐
父框的基线是框的底部。
Baseline定义为
大多数字母“坐”的线和下方延伸的线
您在问题中描述的所有案例都会导致基线被更改,从而根据需要对齐元素。
baseline 的一个很好的例子是以下代码,其中包装器<div>
中没有元素,而是非常大的字体大小的文本。您可以看到绿色 <div>
的底部如何与父级的基线对齐(红色虚线边框<div>
)以及如何粉红色 <div>
的文字使其移动到位于父基线上的文本的位置。
<div style="height:300px;width:500px;font-size:0;border:1px dotted red">
<div style="display: inline-block; background: pink; width: 50%; height: 100%;">
<div style="height:100%;font-size:150px">foo</div>
</div>
<div style="display: inline-block; background: green; width: 50%; height: 100%;"></div>
</div>
答案 1 :(得分:4)
这是因为各种方框坐在基线上的方式。解决问题的最简单方法是以不同方式垂直对齐它们。例如使用div {vertical-align:top }
要查看默认情况下内联块框如何位于基线上,请参阅http://jsfiddle.net/veCEf/。特别注意没有任何内容的内联块div框如何使其底部位于基线上,而一旦它们有内容,其内容的底部就位于基线上。