html - 为什么 display:inline-block 对齐不符合预期
问题描述
好的,所以当我得到一个出乎意料的布局时,我试图了解该display:inline-block
属性。
如果我从第一个 div 中删除文本(即first
),则对齐会更正。
div{
display:inline-block;
height:100px;
width:100px;
}
<div style="background:grey;">first</div>
<div style="background:red;"></div>
我希望两个<div>
元素都在同一水平面上。
我知道还有其他方法可以做到这一点,但我真的很想知道这段代码哪里出了问题(或者我误解了什么)。
解决方案
发生这种情况是因为vertical-align
is的默认属性baseline
,而您没有在示例中指定它。这意味着inline-block元素将与其基线对齐:
'inline-block' 的基线是它在正常流中的最后一个行框的基线,除非它没有流入行框,或者如果它的 'overflow' 属性具有除 'visible' 之外的计算值,在在这种情况下,基线是底部边距边缘。
简而言之,这意味着如果 inline-block 元素中有文本,则该元素将与该文本的基础对齐。如果没有文本,它将与下边距对齐。因此,与没有文本的内联块元素相比,其中包含文本的内联块元素会被下推。
这可以通过设置,或更优选地的 avertical-align
来纠正:top
bottom
middle
div {
display: inline-block;
height: 100px;
width: 100px;
vertical-align: middle;
}
<div style="background:grey;">first</div>
<div style="background:red;"></div>
可以 float
将元素添加到 中left
,尽管这是可行的,因为将float
元素从流上下文中取出,并将它们视为块元素。应用float: left
基本上消除了display: inline-block
; 您不能float
使用 inline-block 元素。
div {
display: inline-block;
height: 100px;
width: 100px;
float: left;
}
<div style="background:grey;">first</div>
<div style="background:red;"></div>
产生与以下相同的效果:
div {
height: 100px;
width: 100px;
float: left;
}
<div style="background:grey;">first</div>
<div style="background:red;"></div>
推荐阅读
- ruby-on-rails - 带有新父子的表单上的 Rails 模型验证
- jquery - jQuery unbind 事件处理程序不起作用
- javascript - 如果显示是块,则使用 javascript 将其更改为无
- ios - 在自定义 UIGestureRecognizer 中保持触摸之间的状态
- python - 循环填充多维列表
- c - 它如何在 C 语言中使用 linux 处理线程、管道和中断
- swift - SWXMLHash 解析数据对象
- sql-server - 使用 CROSS APPLY 进行查询,尝试根据属性值获取字段
- wordpress - _yoast_wpseo_title/_yoast_wpseo_metadesc 用于分类
- php - 在 Symfony 中下载安全文件的有效方法