CSS中心文本(水平和垂直)在div块内

Sat*_*000 776 html css

div有一套display:block.(90px heightwidth)我里面有一些文字.

我需要文本在垂直和水平方向上对齐.

我试过了text-align:center,但它不做水平部分,所以我试过vertical-align:middle但它没有用.

有任何想法吗?

nop*_*ole 1234

如果它是一行文本和/或图像,那么很容易做到.只是用

text-align: center;
vertical-align: middle;
line-height: 90px;       /* The same as your div height */
Run Code Online (Sandbox Code Playgroud)

而已.如果它可以是多行,那么它会更复杂一些.但是http://pmob.co.uk上有解决方案. 寻找"垂直对齐".

因为它们往往是黑客攻击或添加复杂的div ...我通常使用带有单个单元格的表格来做...尽可能简单.


2016/2017年更新:

它可以更常用transform,并且即使在IE10和IE11等旧版浏览器中也能很好地工作.它可以支持多行文本:

position: relative;
top: 50%;
transform: translateY(-50%);
Run Code Online (Sandbox Code Playgroud)

示例:https://jsfiddle.net/wb8u02kL/1/

收缩包装宽度:

上面的解决方案使用固定宽度的内容区域.要使用收缩包装宽度,请使用

position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Run Code Online (Sandbox Code Playgroud)

示例:https://jsfiddle.net/wb8u02kL/2/

我尝试过flexbox,但它没有得到广泛的支持,因为它会破坏一些旧版本的IE,如IE10.

  • 现在有一个`display:table-cell`属性,仅供参考.使用它使元素表现得像表格单元格,并允许`vertical-align:middle;` (58认同)
  • 如果我的身高在%以下怎么办? (7认同)
  • 当div包含<br/>元素时,这可能无法正常工作. (4认同)

Jos*_*ier 436

截至2014年的常用技术:




  • 方法3 - table-cell/ vertical-align: middle:

    示例此处 /全屏示例

    在某些情况下,您需要确保将html/ bodyelement的高度设置为100%.

    对于垂直对齐,请将父元素的width/设置height100%并添加display: table.然后对于子元素,更改displaytable-cell并添加vertical-align: middle.

    对于水平居中,您可以添加text-align: center文本和任何其他inline子元素的居中.或者,您可以使用margin: 0 auto假设元素是block水平的.

    html, body {
        height: 100%;
    }
    .parent {
        width: 100%;
        height: 100%;
        display: table;
        text-align: center;
    }
    .parent > .child {
        display: table-cell;
        vertical-align: middle;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 方法4 - 50%从顶部绝对定位位移:

    示例此处 /全屏示例

    此方法假定文本具有已知高度 - 在本例中为18px.只需50%从顶部相对于父元素绝对定位元素.使用负值margin-top,该负值是元素已知高度的一半,在这种情况下 - -9px.

    html, body, .container {
        height: 100%;
    }
    .container {
        position: relative;
        text-align: center;
    }
    .container > p {
        position: absolute;
        top: 50%;
        left: 0;
        right: 0;
        margin-top: -9px;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 方法5 - line-height方法(最不灵活 - 未建议):

    这里的例子

    在某些情况下,父元素将具有固定的高度.对于垂直居中,您所要做的就是line-height在子元素上设置一个等于父元素固定高度的值.

    虽然这种解决方案在某些情况下会起作用,但值得注意的是,当存在多行文本时它将不起作用 - 就像这样.

    .parent {
        height: 200px;
        width: 400px;
        text-align: center;
    }
    .parent > .child {
        line-height: 200px;
    }
    
    Run Code Online (Sandbox Code Playgroud)

方法4和5不是最可靠的.选择前3个中的一个.

  • +1为全面的答案.我个人更喜欢第一种方法,因为方法2的支持较少,我希望尽可能避免使用"table-cell". (8认同)
  • Flexbox方法是最好的. (7认同)
  • 2.如果.containers parent是绝对的,那么Flexbox方法是唯一有效的方法.1.方法使父级缩小因为绝对.container和3.方法根本没有工作,而.parent有绝对位置. (3认同)

Vin*_*nod 76

使用flexbox/CSS:

<div class="box">
    <p>&#x0D05;</p>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.box{
    display: flex;
    justify-content: center;
    align-items: center;
}
Run Code Online (Sandbox Code Playgroud)

取自快速提示:垂直和水平居中元素的最简单方法

  • 小心:不会在IE中工作.你需要添加`display:-ms-flexbox; -ms-flex-align:center; -ms-flex-pack:center`. (4认同)

Fat*_*orm 27

将该行添加 display: table-cell;到该div的css中.只有表格单元支持vertical-align:middle; 但你可以将[table-cell]定义赋予div ..

这里的实例:http://jsfiddle.net/tH2cc/

div{
    height: 90px;
    width: 90px;
    text-align: center;
    border: 1px solid silver;
    display: table-cell; // This says treat this element like a table cell
    vertical-align:middle; // Now we can center vertically like in a TD
}
Run Code Online (Sandbox Code Playgroud)

  • 截至2016年1月,这在Chrome中有效. (2认同)
  • 如果 `position` 是绝对的或固定的,这将不起作用。见:http://jsfiddle.net/tH2cc/1636/ (2认同)

Ken*_*sen 16

我总是使用以下CSS作为容器,水平和垂直地居中它的内容.

display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;

-webkit-box-align: center;
-moz-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;

-webkit-box-pack: center;
-moz-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
Run Code Online (Sandbox Code Playgroud)

在这里看到它:https://jsfiddle.net/yp1gusn7/

  • ^为什么标准很重要 (3认同)

San*_*lse 16

你可以尝试非常简单的代码

  display: flex;
  align-items: center;
  justify-content: center;
Run Code Online (Sandbox Code Playgroud)

.box{
  height: 90px;
  width: 90px;
  background: green;
  display: flex;
  align-items: center;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">
  Lorem
</div>
Run Code Online (Sandbox Code Playgroud)

codpen link http://codepen.io/santoshkhalse/pen/xRmZwr


Ami*_*ano 14

将此css类提供给目标

.centered {
  width: 150px;
  height: 150px;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: red; /* Not necessary just to see the result clearly */
}
Run Code Online (Sandbox Code Playgroud)
<div class="centered">This text is centered horizontally and vertically</div>
Run Code Online (Sandbox Code Playgroud)

  • 您确实必须这样做,并且* css网格也是如此:)我建议使用[本课程](https://learn.freecodecamp.org/sensitive-web-design/css-flexbox)。 (2认同)

Cod*_*ker 10

在父div中添加以下代码

display: grid;
place-items: center;
Run Code Online (Sandbox Code Playgroud)


小智 9

最佳方法之一是在父div处使用flex属性并将margin:auto属性添加到元素标记

.parent {
    display: flex;
    /* You can change this to `row` if you want the items side by side instead of stacked */
    flex-direction: column;
}

/* Change the `p` tag to what your items child items are */
.parent p {
    margin: auto;
}
Run Code Online (Sandbox Code Playgroud)


shu*_*wal 8

方法1

div {
  height: 90px;
  line-height: 90px;
  text-align: center;
  border: 2px dashed #f69c55;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  Hello, World!!
</div>
Run Code Online (Sandbox Code Playgroud)

方法2

div {
  height: 200px;
  line-height: 200px;
  text-align: center;
  border: 2px dashed #f69c55;
}
span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Haec et tu ita posuisti, et verba vestra sunt. Non enim iam stirpis bonum quaeret, sed animalis. </span>
</div>
Run Code Online (Sandbox Code Playgroud)

方法3

div {
  display: table;
  height: 100px;
  width: 100%;
  text-align: center;
  border: 2px dashed #f69c55;
}
span {
  display: table-cell;
  vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
</div>
Run Code Online (Sandbox Code Playgroud)


Nar*_*ewe 6

# Parent
{
  display:table;
}

# Child
{
  display: table-cell;
  width: 100%; // As large as its parent to center the text horizontally
  text-align: center;
  vertical-align: middle; // Vertically align this element on its parent
}
Run Code Online (Sandbox Code Playgroud)

  • 这与发布的其他答案究竟有何不同? (6认同)

小智 6

2020年之路

.parent{ 
  display: grid;
  place-items: center;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

<div class="small-container">
    <span>Text centered</span>
</div>

<style>
.small-container {
    width:250px;
    height:250px;
    border:1px green solid;
    text-align:center;
    position: absolute;
    top: 50%;
    left: 50%;
    -moz-transform: translateX(-50%) translateY(-50%);
    -webkit-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
}
.small-container span{
    position: absolute;
    top: 50%;
    left: 50%;
    -moz-transform: translateX(-50%) translateY(-50%);
    -webkit-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
}
</style>
Run Code Online (Sandbox Code Playgroud)


小智 5

div {
  height: 90px;
  line-height: 90px;
  text-align: center;
  border: 2px dashed #f69c55;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  Hello, World!!
</div>
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可以解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。 (3认同)