CSS中心文本(水平和垂直)在一个div块内
我有一个div
集display:block
。 ( 90px
height
和width
),我有一些文字里面。
我需要将文本垂直和水平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 horizontal 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
/height
为100%
并添加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>അ</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; }