【问题标题】:Bootstrap3 - vertically align label within h2Bootstrap3 - 在 h2 内垂直对齐标签
【发布时间】:2017-02-10 20:10:43
【问题描述】:

我在使用 Bootstrap3 时遇到了一个有趣的问题,其中标签(“名称”)似乎与 <h2> 标记的底部对齐(参见图片中的蓝色框(由 Chrome 开发工具突出显示)。

(来自 Bootstrap 3 documentation 在标题中放置标签似乎是一种建议的方式)

我不知道如何在<h2> 的中心垂直对齐标签。垂直对齐似乎不适用于 h2。 This 对另一个 SO 帖子的回答建议更改 line-height 但这似乎不是一种直观的方法,因为它增加了 h2 两侧的填充(基本上增加了 h2 块的大小)。

这个标签在一个表格单元格内,代码如下:

<td class="text-right"><h2><span class="label label-default vcenter">Name</span></h2></td>

(vcenter 是我试图用来垂直对齐的类)

【问题讨论】:

  • 添加 js fiddle 之类的演示

标签: html css twitter-bootstrap twitter-bootstrap-3


【解决方案1】:

看起来所有解决方案都教您如何在&lt;td&gt; 中垂直居中您的.label。但是,它们都没有考虑到 topbottom margins 之间的区别在h2 元素上。

基本上,您正在尝试垂直居中的东西不是垂直居中的。解决这个问题的唯一方法是提高标签的边距差异的一半,应该是.5rem。所以这很可能是这份工作:

h2 > .label { 
   position: relative;
   top: -.5rem;
}

如果没有,您有更强大的CSS 规则适用,我需要看看它们。随意将 -.5rem 更改为适合您的任何内容(rempx)。


另一种方法是使用任何垂直居中技术并使td&gt;h2 元素的顶部和底部边距相等:

td>h2 {  margin-top: 1rem; margin-bottom: 1rem; }

在此之后,大多数其他答案都会起作用。

【讨论】:

  • 谢谢@andrei!推理是有道理的,这对我有用。
  • @AnupamJain 欢迎您(SO)。乐意效劳。不要忘记对帮助您理解并解决问题的答案进行投票。通过告诉未来的用户哪种解决方案更有可能帮助解决类似问题,这是您帮助 SO 社区回馈的方式。如果可能,请花时间阅读所有答案,并为对您有任何帮助的每个答案投票。
  • 当然。另外,仅供参考,在玩了几次之后,top: -.7rem; 对我来说效果很好
【解决方案2】:

您可以将display: flex 添加到标题标签,然后将其子元素垂直居中:

h2 {
  display: flex;
  align-items: center;
  
  /* Just for presentation */
  background: #ececec;
  height: 100px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<td class="text-right">
  <h2><span class="label label-default vcenter">Name</span></h2>
</td>

【讨论】:

  • 完全没有必要改变所有h2 元素在整个应用程序中的行为方式。通常应该包含多行并具有label 的标题会发生什么情况?你认为人们为什么使用 Bootstrap?因为它在所有设备上看起来都不错。不要打破那个。拥有inline 标签有很好的目的。 OP 想要的是将标签放在当前行的中心,即使他们没有把它放在这些确切的词中。
  • @AndreiGheorghiu 这只是一个示例,OP 可以移动这些样式以使其适用于表格行中的这一标题。另外,OP说他正在使用Bootstrap 3,所以我也使用了它,只是为了演示......
  • 这正是问题所在。这是一个例子,它作为一个例子。不够了解CSS的人会复制并使用它,就像你提供的一样。它会破坏 Bootstrap 在所有网站/应用程序中显示 h2s 的方式,因为您想在一个特定页面上垂直居中 .label。如果h2 包含在多行上,这甚至不会按预期工作。因为在这种情况下,.label 应该与最后一行垂直居中。
  • @AndreiGheorghiu 好的,我知道了,下次我会更具体,谢谢。
  • @AnupamJain 我的回答是错误的,不应该在这种情况下使用。
【解决方案3】:

td添加valignmiddle

<td valign="middle" class="text-right"><h2><span class="label label-default vcenter">Name</span></h2></td>

添加这个css

.table tbody>tr>td.vert-align
{
    vertical-align: middle;
}

<td  class="text-right vert-align"><h2><span class="label label-default vcenter">Name</span></h2></td>

【讨论】:

  • 谢谢 - 但这不起作用,因为我想将标签垂直对齐到 h2 的中心而不是 td。
猜你喜欢
  • 2013-05-02
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多