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

我有一个divdisplay:block 。 ( 90px heightwidth ),我有一些文字里面。

我需要将文本垂直和水平alignment在中心。

我已经尝试了text-align:center ,但它不做水平部分,所以我尝试了vertical-align:middle但它没有工作。

有任何想法吗?

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

 text-align: center; vertical-align: middle; line-height: 90px; /* the same as your div height */ 

而已。 如果它可以是多行,那么它更复杂一些。 但http://pmob.co.uk上有解决scheme。寻找“垂直alignment”。;

因为他们往往是黑客或添加复杂的divs …我通常使用一个单一的单元格表来做到这一点…尽可能简单。


2016/2017年更新:

它可以更常用于transform ,即使在IE10和IE11等较旧的浏览器中也可以正常运行。 它可以支持多行文字:

 position: relative; top: 50%; transform: translateY(-50%); 

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

收缩包裹宽度:

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

 position: relative; float: left; top: 50%; left: 50%; transform: translate(-50%, -50%); 

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

我试过flexbox,但是它没有得到广泛的支持,因为它会在IE10的一些老版本的IE中崩溃。

截至2014年的常用技术:


  • 方法1 – transform translateX / translateY

    示例在这里 / 全屏幕示例

    在受支持的浏览器 (大部分)中,可以使用top: 50% / left: 50%translateX(-50%) translateY(-50%)结合dynamic垂直/水平居中元素。

     .container { position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); } 

  • 方法2 – Flexbox方法:

    示例在这里 / 全屏幕示例

    在受支持的浏览器中 ,将目标元素的display设置为flex并使用align-items: center for vertical centering和justify-content: center for horizo​​ntal centering。 不要忘记添加供应商前缀以获得更多浏览器支持( 请参阅示例 )。

     html, body, .container { height: 100%; } .container { display: flex; align-items: center; justify-content: center; } 

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

    示例在这里 / 全屏幕示例

    在某些情况下,您需要确保html / body元素的高度设置为100%

    对于垂直alignment,将父元素的width / height100%并添加display: table 。 然后为子元素,将display更改为table-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; } 

  • 方法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; } 

  • 方法5 – line-height方法(最不灵活 – 不build议):

    示例在这里

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

    虽然这个解决scheme在某些情况下会起作用,但是值得注意的是,当有多行文本时,这种方法是行不通的。

     .parent { height: 200px; width: 400px; text-align: center; } .parent > .child { line-height: 200px; } 

方法4和5不是最可靠的。 去第一个3。

使用flexbox / CSS:

 <div class="box"> <p>&#x0D05;</p> </div> 

CSS:

 .box{ display: flex; justify-content: center; align-items: center; } 

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

添加行display: table-cell; 到你的css那个div。 只有表格单元格支持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 } 

我总是使用下面的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; 

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

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

  display:flex; align-items: center; justify-content:center; 
 .box{ height:90px; width:90px; background:green; display:flex; align-items: center; justify-content:center; } 
 <div class="box"> Lorem </div> 
 <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> 
 #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 } 

给这个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 */ } 
 <div class="centered">This text is centered horizontally and vertically</div> 

调整行高以获得垂直alignment。

 line-height: 90px; 

这适用于我(testing好!)

HTML:

 <div class="mydiv"> <p>Item to be Centered!</p> </div> 

CSS:

 .mydiv { height: 100%; /* or other */ position: relative; } .mydiv p { margin: 0; position: absolute; top: 50%; left: 50%; margin-right: -50%; transform: translate(-50%, -50%); /* to compensate own width and height */ } 

你可以select其他的值,然后50%fi。 25%以家长的25%为中心

 <!DOCTYPE html> <html> <head> <style> .container{ height:450px; background:#f8f8f8; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-align: center; align-items: center; -webkit-box-align: center; justify-content: center; width: 100%; } p{ font-size:24px;} </style> </head> <body> <div class="container"> <p>hello world</p> </div> </body> </html> 
 <!DOCTYPE html> <html> <head> <style> .maindiv{ height:450px; background:#f8f8f8; display: -webkit-flex; align-items: center; justify-content: center; } p{ font-size:24px;} </style> </head> <body> <div class="maindiv"> <h1>Title</h1> </div> </body> </html> 

你可以尝试下面的方法:

1.如果你有一个单词或一行句子,那么下面的代码可以做到这一点。

在div标签中有一个文本,并给它一个id。 为该ID定义以下属性。

 id-name { height: 90px; line-height: 90px; text-align: center; border: 2px dashed red; } 

注意:确保行高属性与分区的高度相同。

图片

但是,如果内容不止一个单词或一行,那么这是行不通的。 另外,有时候你不能以px或者%来指定divison的大小(当divison真的很小,并且你想要的内容恰好在中间时)

2.要解决这个问题,我们可以尝试下面的属性组合。

 id-name { display: flex; justify-content: center; align-items: center; border: 2px dashed red; } 

图片

这三行代码将内容正好设置在分区的中间(不考虑显示的大小)。 “align-items:center”有助于垂直居中,而“justify-content:center”将使其居中居中。

注意: Flex在所有浏览器中都不起作用。 确保您添加适当的供应商前缀以获得更多的浏览器支持。

应用风格:

 position: absolute; top: 50%; left: 0; right: 0; 

您的文本将被集中,无论其长度。

方法1

 div { height: 90px; line-height: 90px; text-align: center; border: 2px dashed #f69c55; } 
 <div> Hello World! </div> 
 .cell-row {display: table; width: 100%; height: 100px; background-color: lightgrey; text-align: center} .cell {display: table-cell} .cell-middle {vertical-align: middle} 
 <div class="cell-row"> <div class="cell cell-middle">Center</div> </div> 

这应该是正确的答案。 最干净最简单:

 .element { position: relative; top: 50%; transform: translateY(-50%); } 
 footer { width: 100%; height: 80px; position: absolute; bottom: 0; left: 0; }