【问题标题】:line-height ignored when image is in the text当图像在文本中时忽略行高
【发布时间】:2014-03-21 21:57:24
【问题描述】:

我正在尝试在 div 中显示文本

<div style='line-height: 16px;'>$text</div>

在我将一些图像放入 $text 之前,16px 的行高是可以的(基本上我用 15px 高的笑脸图像替换了笑脸标志)。在这种情况下,行高变为 19px。 无论是否有图像,如何强制线条保持 16px 高度? (边距、内边距、边框:每个元素为 0px)

这里的例子:

<style type="text/css">
div {
  color: black;
  font-family: Verdana;
  font-size: 12px;
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  border: none;
  position: absolute;
  -webkit-box-sizing: border-box;
  -o-box-sizing: border-box;
  -moz-box-sizing: border-box;}

div.comment_text {
  left: 10px;
  right: 10px;
  line-height: 16px;
  overflow: auto;}
</style>

<div class='comment_text' style='top: 20px;'>
  the measured line height here 16px which is OK
  <br/><a href="mailto:myaddress@gmail.com" target='_blank'>myaddress@gmail.com</a>
  <br/><a href="http://www.facebook.com" target='_blank'>http://www.facebook.com</a>
  <br/>this
  <br/>lines
  <br/>are
  <br/>for
  <br/>example
  <br/>to
  <br/>demonstrate
  <br/>my
  <br/>problem
</div>    

<div class='comment_text' style='top: 300px;'>
  <img class='relative' style='top: 0px; max-height: 16px;' src='../images/smileys/tongue_out.png'/> the measured line-height here 17px which is wrong
  <br/>i'm a 15px high image: <img class='relative' style='top: 0px; max-height:16px;' src='../images/smileys/grinning.png'/>
  <br/>me too: <img class='relative' style='top: 0px; max-height: 16px;' src='../images/smileys/winking.png'/>
</div>

【问题讨论】:

  • 它不会被忽略...只是图像(如果比字体高)会根据需要将其分开。
  • 它们并不高。行高:16px,图片高度:15px
  • 它们比你的 font-size 高,它是 12pt。 12pt 类型设置为 16pt 行高将在类型上方和下方添加 2pt 空间(16-12 = 4. 4/2 = 上方和下方 2px)。混合了 15 像素的图像,您现在最终会在其上方和下方 2 像素,总共 19 像素 (15 + 2 + 2)。
  • 好的,谢谢。那么如果我想保持 12px 字体大小并使用我的图像,有什么解决方案呢?
  • 见下面我的回答。我为您发布了一些示例标记。

标签: css


【解决方案1】:

它不会忽略你的行高。

问题是您的内嵌图片比您的字体大。

行高是通过获取行高来计算的,如果它高于字体大小,则减去字体大小,然后将其分成两半以增加上下空间。

所以,你有:

(16px line-height) - (12px font-size) = 4px

这意味着每行文本将有 2px 上方和 2px 下方。

您遇到的问题是您在该行中添加了一个 15 像素的图像。 15px + 2px 上方 + 2px 下方 = 19px。所以这将把那条线推得更远。

解决方法是确保您的内联元素不高于您的字体大小。如果您仍然想使用更大的图标,那么您必须制作一个空的内联元素,并将溢出设置为可见,然后将您的图像放在其中。

示例:http://jsbin.com/yijuyepi/2/

【讨论】:

  • 识别领先是正确的想法,但没有正确应用。上半部分前导不适用于 img 元素,仅适用于文本。高度来自基线上方 img 的 15px + 2px 用于文本基线下方的下降器 + 2px 用于文本前导的下半部分。因此,可以通过使图像脱离基线来解决该问题。即img { vertical-align:bottom; }
  • @Alohci 是的,该解决方案适用于这种特殊情况。但它的可扩展性不如高度限制更小。
  • @DA。感谢您的解决方案和详细解释。还有一件事:两个像素高的间距是恒定值吗?
  • @tcxbalage 不确定您所说的“恒定值”是什么意思。 2px 来自于获取行高,减去字体大小,然后除以 2(将其拆分为文本上方和下方)。
  • 对不起,我太累了,显然你已经在你的回答中解释了,我只是没有给予足够的重视:)谢谢!
【解决方案2】:

尝试将max-height: 16px 设置为图像,以避免在它们较高时将它们分开。

【讨论】:

  • 不走运,如果两行都有图片,两行之间还有 18px 的距离
  • @tcxbalage 你能发布一个演示吗?
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多