【问题标题】:Why is the text in a button always centered vertically?为什么按钮中的文本总是垂直居中?
【发布时间】:2020-11-27 19:16:02
【问题描述】:

我想将 div 设置为与按钮完全一样的样式。我注意到当我给按钮一个特定的高度时,文本总是垂直居中。

到目前为止,我尝试挖掘 Chromium 用户代理样式表,但没有成功。 -webkit-appereance: button 也没有成功。

这是该问题的演示:https://codepen.io/franzskuffka/pen/QzqKQx。请注意,inline-block 样式可确保文本垂直对齐 - 边界框仍然很奇怪。

哪个属性使文本垂直居中而不需要任何额外的包装?这是怎么回事?

【问题讨论】:

  • 称为浏览器默认样式。像正文边距、<p /> 边距等。您可以使文本居中,例如通过 line-height、flex 属性 align-items: centerpadding、...
  • 有人可以解释一下否决票吗?这不是“修复我的代码问题”,而是一个研究问题。我试图弄清楚为什么没有显示为 flex 的元素仍然垂直居中其文本 - 没有任何填充样式。知道这会很有趣,因为这可以大大简化任何网页中垂直居中文本的样式。
  • @Narek-T 我知道这一点。如果您阅读我的问题,它会说 So far i tried digging through the Chromium user agent stylesheets but was not successful. -webkit-appereance: button also did not do the trick. 这意味着我查看了 Chromium 默认样式。
  • @Narek-T 关键是没有使用 既没有 填充 也没有 flex 并且文本仍然垂直居中。知道为什么它实际上垂直居中以便使用这种精确的方法会很有趣。

标签: html css layout typography


【解决方案1】:

TL;DR:不可能使用 CSS 重新创建由 <button> 元素创建的布局。或者至少它隐藏得很好。

我通过将 <button> 上的显示值更改为 flex 来测试这一点,它影响了垂直对齐。 display:block 等其他值没有效果。似乎没有css值,这只是默认行为,没有办法为div做。

和你一样,我也在寻找这个问题的答案。我试图找到在按钮中垂直居中内容的 css 属性。当我几乎放弃时,我决定浏览 html 规范,这就是我发现的:

如果元素是输入元素,或者如果它是按钮元素并且 'display' 的计算值不是 'inline-grid', 'grid', 'inline-flex' 或 'flex',则元素的盒子有一个子匿名 具有以下行为的按钮内容框:

  1. 盒子是一个块级的块容器,它建立一个新的 块格式化上下文(即“显示”是“流根”)。
  2. 如果框在水平轴上没有溢出,那么它是 水平居中。
  3. 如果盒子在垂直轴上没有溢出,那么它是 垂直居中。否则,没有匿名按钮内容框。

https://html.spec.whatwg.org/multipage/rendering.html#button-layout

【讨论】:

  • 有趣。你有codepen或小提琴吗?如果我看到它有效,我可以确认它是正确的答案。
  • 我通过将显示值更改为按钮的 flex 进行了测试,它影响了垂直对齐。显示块等其他值不影响。我只是想告诉你,这没有 css 值,它只是默认行为,没有办法为 div 做到这一点。
【解决方案2】:

如果您的按钮没有固定高度,您可以向 div 添加填充以使文本垂直居中。添加text-align: center; 使您的文本水平居中。

.btn {
  background-color: #000;
  color: #fff;
  padding: 10px;
  text-align: center;
}
<div class="btn">Hello!</div>

对于具有固定高度的按钮,您可能必须有一个子元素。

.parent {
  background-color: #000;
  color: #fff;
  height: 100px;
  text-align: center;
  width: 100px;
}

.child {
  top: 50%;
  transform: translateY(-50%);
}
<div class="parent">
  <div class="child">Hello!</div>
</div>

还有其他几种方法,但这些是我常用的方法。如果您想尝试更多方法,CSS-Tricks 有一个完整的 CSS 居中指南:https://css-tricks.com/centering-css-complete-guide/

【讨论】:

  • 抱歉,如果我不清楚这一点 - 我知道将文本居中的方法。有几个。我很好奇为什么按钮中的文本相对于灵活的高度居中 - 不使用 display flex 和 padding。
猜你喜欢
  • 2012-01-05
  • 2013-06-04
  • 1970-01-01
  • 2011-12-16
  • 2013-07-31
  • 2021-10-06
  • 2023-03-05
  • 2020-02-16
  • 1970-01-01
相关资源
最近更新 更多