【发布时间】:2018-12-17 03:02:34
【问题描述】:
我正在查看material design specs,我看到他们有行高为 20 像素、字体大小为 14 像素的文本,但文本仍与底部对齐。
我尝试复制它,但它比我想象的要复杂得多。让我给你看看。
.a {
background-color: rgba(0,0,0,0.1);
line-height: 40px;
font-size: 24px;
}
.b {
margin-top: 16px;
position: relative;
overflow: hidden;
}
.b > p {
background-color: rgba(0, 0, 0, 0.2);
display: block;
padding: 0;
margin: 0;
font-size: 24px;
line-height: 56px;
transform: translateY(16px);
}
<div class="a">
This text is vertically centered.
</div>
<div class="b">
<p>This text is also translated down to counter-act line-height. This text is also translated down to counter-act line-height. This text is also translated down to counter-act line-height. This text is also translated down to counter-act line-height. </p>
</div>
<div class="b">
<p>This text is translated down to counter-act line-height</p>
</div>
正如您在此处看到的,line-height 自然地垂直居中文本。有什么方法可以在不进行所有这些 hacky 计算的情况下将其对齐到 line-height 的底部?
我不想将内容与 div 的底部对齐,此文本可以一直位于 div 的顶部。它在 div 中的位置不是重点。我试图有一个多行段落,其中每行的高度为 40px,但文本基线对齐到底部(本身?)而不是中心。
在我的示例段落中,我使用的字体大小为 24 像素,行高为 40 像素。我希望多行段落有 40px 行,其中包含 16px 的空间,然后是 24px 的文本。现在,它从 8px 的空间开始,24px 的文本,然后又是 8px 的空间。即使我将它与父 div 的底部对齐,由于 40px 行高和 24px 字体大小,底部仍然会有 8px 填充。它不是this question 的副本。真的很抱歉我无法解释。
感谢CBroe,找到了一个我认为更好一点的解决方案:https://jsfiddle.net/fpyjx56o/38/
【问题讨论】:
-
将文本放入(附加的)内联元素中,并为其应用 padding-top,如果您希望文本上方有“更多空间”...?
-
@CBroe 这是一个多行段落,行高为 40 像素,字体大小为 24 像素(因此空间为 16 像素),我需要所有这些空间都位于每个在线文本的上方。除非我误解了你的意思,否则只有当这是单行时,使用 padding-top 才有效。
-
@Mr.Roshan:我试图在主帖中澄清这不是同一个问题。我不是试图将文本与父容器对齐,而是试图将文本与自身底部对齐。我希望这是有道理的。我还想澄清一下,我在帖子中的示例“解决了我的问题”,但我希望找到一个更好、更简单的解决方案。
-
我的意思是这样,jsfiddle.net/fpyjx56o - inline 是这里的重要关键字,内联 span 的 padding-top 应用于每一行,而不仅仅是顶部它会使用块容器。
-
@CBroe:我不知道内联的事情,谢谢。不幸的是,虽然这看起来是正确的,但文本实际上并没有与它的行高底部对齐。我做了一些更改并在之后添加了一个单行段落,以使文本没有重新对齐更加明显。我认为稍微调整一下,它仍然是比我更好的解决方案。发布您的答案,以便我标记它。 jsfiddle.net/fpyjx56o/19/
标签: css