vertical-align:基线外部元素奇怪的高度

时间:2015-05-04 11:11:52

标签: html css

这是下面的html代码:

<div class="container">
   no Text
   <span class="base">baseline align</span>
</div>

css代码:

div {
    font-size: 20px;
    line-height: 100px;
    outline: 1px solid red;
}
span {
    font-size: 40px;
    display: inline-block;
    background: wheat;
}

我的问题是为什么容器元素的高度是107px,而不是110px。

containerHeight = lineHeight + (spanFont - divFont)/2 = 100px + 10px = 110px

1 个答案:

答案 0 :(得分:0)

考虑下面转载的代码段,然后查看黄色的右手元素,其中包含font-size: 50pxline-height: 36px。请注意,即使字体大小为50px,字符(字形)占用的垂直空间也小于50px,更像是36px。字体的设计使得有一个包含字符的框,字形/字符位于该框内。

计算出的整体框高度实际上是行高(100px)加上差异是字形框的高度,这比字体大小的尺寸略小。

请注意,如果您将垂直对齐值设置为top(或bottom):

<span class="top">baseline span Text</span>

然后计算出的高度为100px,即指定的行高。

有关其原理的详细信息,请参阅CCS2规范:

http://www.w3.org/TR/CSS21/visudet.html#line-height

具体来说,关于领先和半领先的部分。

&#13;
&#13;
$(document).ready(function() {
  var $container = $('.container');
  var divHeight = $container.height();
  $('.info').html('container is ' + divHeight + 'px');
})
&#13;
div {
  font-size: 20px;
  line-height: 100px;
  outline: 1px solid red;
  position: relative; /* for demo only */
}
span {
  font-size: 40px;
  line-height: 100px; /* this value is inherited, I show it explicitly */
  display: inline-block;
  background: wheat;
}

/* the following for demo purposes... */
.info {
  font-size: 20px;
  line-height: 1;
  background-color: yellow;
}
.top {
  vertical-align: top;
}
.base {
  vertical-align: baseline;
}
.line-50 {
  position: absolute;
  border-top: 1px dashed blue;
  outline: none;
  top: 50%;
  left: 0;
  width: 100%;
}
.box-50 {
  position: absolute;
  outline: none;
  bottom: 50%;
  right: 0;
  width: 100px;
  background-color: yellow;
  font-size: 50px;
  line-height: 36px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="info">x</span>
<br>
<br>
<div class="container">
  test text
  <span class="base">baseline span Text</span>
  <div class="line-50"></div>
  <div class="box-50">Xey</div>
</div>
&#13;
&#13;
&#13;