【问题标题】:How to use line-height without knowing the height?如何在不知道高度的情况下使用 line-height?
【发布时间】:2015-03-11 12:27:49
【问题描述】:

我一直在查看 SO 和 google 上的几个线程,它们说我可以在设置 div 的高度后使用 line-height 使文本垂直对齐。然而,这需要您设置 div 的高度,这对于响应式网页设计来说不是很好吗?我正在尝试对齐导航栏中的单行文本。

一些示例代码:

<nav>
  <section class="logo">
    <span>logo text</span>
  </section>
  <section>
    <ul>
      <li>link</li>
      <li>link</li>
      <li>link</li>
      <li>link</li>
    </ul>
  </section>
  <section class="dropdown">
    <span>dropdown</span>
  </section>
</nav>

.logo {
  display: inline-block;
}

.dropdown {
  display: inline-block
}

我需要在 span 元素内对齐徽标和下拉文本,但我没有在任何地方设置任何高度,因为我希望设计更容易适应屏幕分辨率。

跨度在导航元素内,所以我认为如果我将跨度设置为内联块元素,我可以在跨度上执行“高度:100%”,但这不起作用。

有什么方法可以让 line-height 与 height 一起工作,而无需手动指定跨度的高度(以像素为单位),这样我就可以获得尽可能响应的垂直对齐文本?

我也一直在研究将垂直对齐属性与 css 表一起使用,但看起来我在这种情况下也必须以像素为单位指定容器元素的高度。

【问题讨论】:

  • 你可以设置相对单位的高度和行高(例如em)?
  • 你也可以用数字来设置(line-height:1.2;),它是相对于元素的font-size => developer.mozilla.org/en-US/docs/Web/CSS/line-height
  • 我希望浏览器计算元素的高度并据此调整行高,而不是对其进行硬编码。我确实看到 w3c (w3.org/Style/Examples/007/center.en.html#text) 也在手动设置高度,所以我想可能没有办法做到这一点..但手动设置高度似乎不是很好的编码,我认为有例如,如果您调整屏幕分辨率或浏览器的大小,可以通过某种方式自动调整此高度/行高。
  • 请指定您所指的问题和答案(“主题”)。 line-height 属性用于设置行高,从而设置基线之间的间距;使用它进行垂直对齐是不可靠的诡计。考虑描述(在标题和问题本身中)你的原始问题和你解决它的最佳尝试,而不是在你的示例中甚至没有使用的假设解决方案。
  • @Jukka:我几乎在任何地方都能看到人们使用 line-height 进行垂直对齐。以css-tricks.com/vertically-center-multi-lined-text 为例,但也以stackoverflow.com/questions/4785871/css-vertical-align 等SO 上的线程为例。我认为我的问题很清楚,因为我基本上要求如何垂直对齐 div 中的文本,但不必手动设置行高似乎取决于的高度

标签: html css


【解决方案1】:

这对你有用吗?

注意:我给父元素指定了 30vh 的高度,但它适用于任何/没有定义的高度。只是为了让您可以看到它是居中的。

.parent {
  position: relative;
  background-color:blue;
  width:100%;
  height:30vh;
}
.child {
  position: absolute;
  top: 50%; width:100%;
  transform: translateY(-50%);
  background-color:red;
}
<div class="parent"> 
    <div class="child">Your random text..... Your random text.....</div>
</div>

【讨论】:

  • 我认为这是我见过的最好的方式(这似乎也是 w3c 建议的方式)..当设置孩子的高度时,我认为你正在锁定它父级的高度,所以对于响应式设计来说应该不会太糟糕..我会尽快尝试一下,因为我现在不能这样做..
  • 如果您现在可以接受我的回答,那就太好了。我现在什至不能在任何地方发表评论;)
  • 抱歉延迟,我一直在阅读转换属性以及您使用的视口高度,我不知道并且没有机会回复您。除非您将 min-height: 30vh 而不是 height: 30vh 放入,否则我似乎确实内容溢出了,除此之外,我会尽快对其进行测试。
  • 我不明白为什么在没有变换的情况下它不居中,因为您绝对将孩子定位在具有定义高度的父代中..它几乎位于中心但它有一点偏移,你知道为什么吗?无论如何,您的回答解决了垂直居中问题,谢谢。
  • 想我现在明白了 :) joshbroton.com/… 似乎回答了这个问题。
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 2012-05-04
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多