【问题标题】:How to vertical align this span element?如何垂直对齐这个 span 元素?
【发布时间】:2016-12-13 22:52:15
【问题描述】:

这应该很简单,如果重复,请见谅。我无法在跨度中获得一些文本以在图标旁边垂直对齐。

例子:

.box {
  width: 100px;
  text-align: center;
  background-color: #f0f0f0;
  margin: 50px auto;
  padding: 20px;
  font-family: sans-serif;
  cursor: pointer;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<div class="box">
  <a>
    <span>Search</span>
    <i class="fa fa-search fa-2x" aria-hidden="true"></i>
  </a>
</div>

我试过的 CSS:

将跨度设置为display: inline-block 并分配填充和边距。这也会向上移动图标。

将链接设置为position: relative 并定位跨度。这会导致图标移动,因为跨度现在已从流中取出。

调整跨度的line-height。同样,这会影响图标。

浮动跨度。这行不通。

我有什么遗漏吗?我对flex不是很熟悉,这会是一个解决方案吗? (注意我必须支持非常旧的浏览器...)

非常感谢您的建议!

【问题讨论】:

    标签: css


    【解决方案1】:

    添加以下css:

    .box a i,
    .box a span {
      display: inline-block;
      vertical-align: middle;
    }
    

    .box {
      width: 100px;
      text-align: center;
      background-color: #f0f0f0;
      margin: 50px auto;
      padding: 20px;
      font-family: sans-serif;
      cursor: pointer;
    }
    
    .box a i,
    .box a span {
      display: inline-block;
      vertical-align: middle;
    }
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
    <div class="box">
      <a>
        <span>Search</span>
        <i class="fa fa-search fa-2x" aria-hidden="true"></i>
      </a>
    </div>

    【讨论】:

      【解决方案2】:

      &lt;i&gt; 一个id(或类,我将它命名为#k),然后添加这个规则集:

        #k { vertical-align: middle; }
      

      .box {
        width: 100px;
        text-align: center;
        background-color: #f0f0f0;
        margin: 50px auto;
        padding: 20px;
        font-family: sans-serif;
        cursor: pointer;
      }
      #k {
        vertical-align: middle;
      }
      <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
      <div class="box">
        <a href='#/'>
          <span>Search</span>
          <i id='k' class="fa fa-search fa-2x" aria-hidden="true"></i>
      
        </a>
      </div>

      【讨论】:

      • 这完全符合我的需要。我希望有一个针对跨度的解决方案,但如果那不可能,我会选择这个。谢谢!
      • 糟糕的解决方案:stackoverflow.com/questions/18854800/… 使用跨度是有原因的。
      • @ovokuro 不客气。如果这个答案是最好的解决方案,请点击此帖子的绿色✔。
      【解决方案3】:

      使用 CSS 弹性盒。将display: flex 属性应用于.box a 并使用align-items: center(这将使您的项目垂直居中对齐)。

      看看下面的sn-p:

      .box {
        width: 30%;
        text-align: center;
        background-color: #f0f0f0;
        margin: 50px auto;
        padding: 20px;
        font-family: sans-serif;
        cursor: pointer;
      }
      
      .box a {
        display: flex;
        align-items: center;
        justify-content: center;
      }
      
      .box a span {
        padding-right: 10px;
      }
      <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
      <div class="box">
        <a>
          <span>Search</span>
          <i class="fa fa-search fa-2x" aria-hidden="true"></i>
        </a>
      </div>

      希望这会有所帮助!

      【讨论】:

      • 感谢 flex 的回答。这似乎不适用于容器(在本例中为 .box)是动态的情况。示例:codepen.io/sol_b/pen/xRyVbo
      • @ovokuro 你想让它们粘在一起吗(搜索文本和图标)?
      • @ovokuro 更新了我的答案。还更新了 codepen - codepen.io/anon/pen/QGZEoj 希望这是你想要的。
      • 非常感谢更新的解决方案!我认为在这种情况下,其他解决方案在不需要 flex 的情况下也可以正常工作,我担心它会支持旧浏览器。再次感谢
      【解决方案4】:

      如果您首先将其设置为块元素,然后应用浮动元素,则可以轻松调整 span 中文本的位置。完成后,您可以像最初提到的那样应用line-height,但不会影响图标。

      这里有一个 JSFiddle 来展示要做什么。难以置信的简单,而且你不必碰你原来的 CSS:https://jsfiddle.net/pgkjaa8c/

      使用浮点数的解决方案

      .box span {
        display: block;
        float: left;
        line-height: 40px;
      }
      

      如果你想要右边的文本,你可以从左到右改变浮动。此外,如果您愿意,可以应用左右填充将文本推离图标:https://jsfiddle.net/rz4y4696/

      .box span {
        padding-left: 15px;
        display: block;
        float: right;
        line-height: 40px;
      }
      

      另外,我建议不要使用 flex。人们一直在推动 flex 作为一种解决方案,但它消除了许多旧版浏览器的支持。这将是一种更传统的实现方式,具有完全跨浏览器和旧版浏览器支持。


      不使用浮点数的解决方案

      如果您想要一个不需要浮动且适用于不同宽度的解决方案,那么您必须删除&lt;i&gt; 标记并将FontAwesome 图标添加到您的CSS。你可以在这里看到解决方案:https://jsfiddle.net/rwkypte8/2/

      您可以在此处获取 FontAwesome 搜索图标的值:http://fontawesome.io/icon/search/

      HTML 和 CSS 如下:

      HTML

      <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
      <div class="box">
        <a>
          <span>Search</span>
        </a>
      </div>
      

      CSS

      .box {
        width: 50%;
        text-align: center;
        background-color: #f0f0f0;
        margin: 50px auto;
        padding: 20px;
        font-family: sans-serif;
        cursor: pointer;
      }
      .box span {
        display: block;
        line-height: 40px;
        text-align: center;
      }
      .box span:after {
        padding-left: 20px;
        font-family: 'FontAwesome';
        font-size: 30px;
        content: '\f002';
      }
      

      【讨论】:

      • 这很有趣。唯一的问题是,如果框的宽度是动态的,例如使用百分比值,那么跨度将移动位置。并且在跨度的左侧和右侧添加填充不会纠正这个问题。见这里:jsfiddle.net/rwkypte8
      • 你是对的,但在你的帖子中没有提到你的块元素有固定的宽度。但这是一个按钮,通常会向左或向右浮动。在这些情况下,我的解决方案仍然适用。但是,如果您在评论中提到了动态宽度,那么您将不得不使用不同的解决方案。我可以提供这样的解决方案,但同样,这超出了您的问题范围。
      • 我将为您准备一个不同的解决方案,该解决方案仍然适用于我的解决方案,但会忽略 &lt;i&gt; 的使用给我 15 分钟。我必须回复一些电子邮件。
      • 已添加解决方案,删除 &lt;i&gt; 标记并通过 CSS 添加图标。祝你的项目好运。
      • 非常感谢您提供更新的解决方案。虽然我很欣赏使用这样的图标的想法,但我认为它的代码比必要的要多一些,所以我将使用其他解决方案之一。再次感谢!
      猜你喜欢
      • 2015-05-24
      • 2011-06-22
      • 2016-12-22
      • 2018-04-22
      • 2015-07-15
      • 2014-04-02
      • 2015-07-15
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多