【问题标题】:How to center text vertically and horizontally in between floated button elements?如何在浮动按钮元素之间垂直和水平居中文本?
【发布时间】:2014-08-07 02:10:23
【问题描述】:

我在工具栏中有几个按钮。它们左右浮动,为中间文本提供 100% 的剩余宽度。文本可以是一两行...

我的问题是我需要将文本居中并垂直放置在中间。

标记

<div class="toolbar">
<div class="button left">&nbsp;</div>
<div class="button left">&nbsp;</div>
<div class="button left">&nbsp;</div>
<div class="button right">&nbsp;</div>
<div class="button right">&nbsp;</div>
<span class="title">Start page title</span>
</div>

CSS

.left{
    float: left;
}
.right{
    float: right;
}
.toolbar{
    height: 70px;
    width: 500px;
    border: 1px solid red;
}
.button{
    width: 68px;
    height: 68px;
    border: 1px solid #fff;
    background: #666666;
}
.title{
    font-size: 12px;   
    line-height: 8px;
    vertical-align: middle;
    text-align: center;
}

我也有一个小提琴(单击灰色按钮以尝试使用双行文本): http://jsfiddle.net/U7LhL/6/

有什么想法吗?设置行高不起作用(除非使用 JS),因为文本的高度是未知的,我需要适合 2 行。如果可能的话,我认为使用绝对定位文本来实现这一点会变得非常混乱。

【问题讨论】:

  • float 元素是不可能的,因为它们没有机会进行垂直对齐。对于旧版浏览器,您必须使用带有回退到 table-cell 显示的 flex 布局。
  • 用于垂直对齐:line-height: 68px;关于标题类
  • 你试过行高属性和垂直对齐到中间吗?
  • @NicolòMonili 如果文本是 2 行,那将不起作用......

标签: html css vertical-alignment centering text-align


【解决方案1】:

可以让文本容器显示:table-cell。

body {
    background: pink;
}
.toolbar {
    display: table;
    height: 70px;
    width: 500px;
    border: 1px solid red;
}
.button {
    border: 1px solid #fff;
    width: 68px;
    height: 68px;
    background: #4679bd url(../img/logo.png) no-repeat -6% 50%;
}
.toolbar > div {
    display: table-cell;
}
.title {
    font-size: 12px;
    line-height: 8px;
    vertical-align: middle;
    text-align: center;
}
.center {
    vertical-align: middle;
    text-align: center;
}

Working Fiddle

【讨论】:

  • @Era 如果他无法更改标记,那么他也可以仅使用 css 解决。
  • @Era 是的,如果 OP 不更改标记,我认为它不会那么完美。我会收回我的话:)
  • 它在我的代码中工作得很好,在我的情况下,这个标记更改完全没问题!太棒了……谢谢!
  • @JesperWilfing np.. :)。如果我的帖子解决了您的问题,请将其标记为答案。
【解决方案2】:

使用 flex,您可以通过设置元素的顺序(顺序:1、2、3)直观地重新排列元素,并拉伸标题以填充剩余的所有空间(flex:1 1 100%;)。

属性 align-items:center;做到这一点并将所有项目对齐到中心。

.toolbar{
  display:flex;
  flex-flow:row nowrap;
  align-items:center;
  border:1px solid red;
}
.button{
  padding:1rem;
  border:1px solid #ccc;
}
.left{
  order:1;
}
.right{
  order:3;
}
.title{
  text-align:center;
  padding:1rem;
  order:2;
  flex:1 1 100%;
  background:beige;
}
<div class="toolbar">
  <div class="button left">Button</div>
  <div class="button left">Button</div>
  <div class="button left">Button</div>
  <div class="button right">Button</div>
  <div class="button right">Button</div>
  <span class="title">Start page title</span>
</div>

【讨论】:

    【解决方案3】:

    请尝试如下。为标题扭曲添加类。

    HTML 代码

        <div class="toolbar">
    <div class="button left">&nbsp;</div>
    <div class="button left">&nbsp;</div>
    <div class="button left">&nbsp;</div>
    <div class="button right">&nbsp;</div>
    <div class="button right">&nbsp;</div> <div class="titleWarp"> <span class="title">Start page title</span></div>
    </div>
    

    CSS

     body{
        background: pink;
    }
    .left{
        float: left;
    }
    .right{
        float: right;
    }
    .toolbar{
        display: inline-block;
        height: 70px;
        width: 500px;
        border: 1px solid red;
    }
    .button{
        width: 68px;
        height: 68px;
        border: 1px solid #fff;
        background: #4679bd url(../img/logo.png) no-repeat -6% 50%;
    }
    #title{
    width: 75%;
    margin:0px auto;
    }
    .titleWarp{
        font-size: 12px;   
        line-height: 8px;
        vertical-align: middle;
        text-align: center;
    }
    

    【讨论】:

    • 我将其复制粘贴到我的小提琴中(替换标题上的 ID 标签)。没有看到它如何工作。此外,标题在此处具有固定宽度,如果添加或删除按钮,则不可取...
    猜你喜欢
    • 1970-01-01
    • 2014-09-18
    • 2016-08-15
    • 1970-01-01
    • 2017-02-28
    • 2013-10-27
    • 2017-06-12
    • 2017-06-12
    相关资源
    最近更新 更多