1.在display:inline-block;的a中添加文字导致下移
查阅相关资料可知,在将元素display设置为inline-block的时候,元素即同时具有行内元素和块级元素的属性,既排列在同一行又可以设置宽高。
对于行内元素,都具有vertical-align属性,那这里就牵涉到vertical-align的默认对齐方式。 它的默认方式是baseline,基线对齐。
css规范中写道:
baseline:Align the baseline of the box with the baseline of the parent box. If the box does not have a baseline, align the bottom margin edge with the parent's baseline.(将方框的基线与父方框的基线对齐。如果方框没有基线,请将底边距与父元素的基线对齐。)
举例:代码如下:
<style>
* {
margin: 0;
padding: 0;
}
/* 无文字 */
.a1 {
display: inline-block;
width: 200px;
height: 100px;
background-color: #efafaf;
}
/* 有文字,大小0px */
.a2 {
display: inline-block;
width: 200px;
height: 100px;
background-color: #efafaf;
/* 给文字设置大小 */
font-size: 0px;
}
/* 有文字,大小10px */
.a3 {
display: inline-block;
width: 200px;
height: 100px;
background-color: #efafaf;
/* 给文字设置大小 */
font-size: 10px;
}
/* 有文字,大小20px */
.a4 {
display: inline-block;
width: 200px;
height: 100px;
background-color: #efafaf;
font-size: 20px;
}
</style>
</head>
<body>
<a href="#" class="a1"></a>
<a href="#" class="a2">文字pjv</a>
<a href="#" class="a3">文字pjv</a>
<a href="#" class="a4">文字pjv</a>
</body>
</html>
代码对应结果:
第一个a内没有文字,默认的基线是margin下边缘;
第二,三,四个a里有文字,基线为文字(英文)的下边缘。
那么怎么解决这个问题,让它们并排对齐呢?
- 法一:给每个a添加vertical-align对齐方式就可以了,在这里将其均设置为top,效果如下:
- 法二: vertical-align的默认值是baseline。当a2,a3,a4设置了属性overflow:hidden后,baseline会设置在bottom margin的边缘。详情戳css规范。
翻译:'inline-block'的基线是它在标准流中的最后一个行盒的基线,除非它没有流中的行盒,或者它的'overflow'属性有一个计算值而不是'visible',在这种情况下基线是底边距。
注意:如果元素内部只有脱离标准流的行盒,如被设置了float 除了none以外的值,position为fixed和absolute,也会出现同样的情况