我将 div
设置为 display:block
(90px
height
和 width
),并且里面有一些文本。
我需要将文本垂直和水平对齐在中心。
我试过 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/ 上有解决方案。寻找“垂直对齐”。
由于它们往往是黑客或添加复杂的 div... 我通常使用一个带有单个单元格的表格来完成它... 使其尽可能简单。
2020 年更新:
除非您需要让它在 Internet Explorer 10 等早期浏览器上运行,否则您可以使用 flexbox。它是 widely supported by all current major browsers。基本上,需要将容器指定为 flex 容器,并沿其主轴和交叉轴居中:
#container {
display: flex;
justify-content: center;
align-items: center;
}
为孩子指定一个固定的宽度,称为“弹性项目”:
#content {
flex: 0 0 120px;
}
示例:http://jsfiddle.net/2woqsef1/1/
要收缩包装内容,它更简单:只需从弹性项目中删除 flex: ...
行,它就会自动收缩包装。
示例:http://jsfiddle.net/2woqsef1/2/
上面的示例已经在包括 MS Edge 和 Internet Explorer 11 在内的主要浏览器上进行了测试。
如果您需要对其进行自定义,请提供一个技术说明:在 flex 项目内部,因为此 flex 项目本身不是 flex 容器,所以旧的非 flexbox 方式的 CSS 可以按预期工作。然而,如果你在当前的 flex 容器中添加一个额外的 flex 项,这两个 flex 项将被水平放置。要使它们垂直放置,请将 flex-direction: column;
添加到 flex 容器中。这就是 flex 容器和它的 immediate 子元素之间的工作方式。
还有另一种进行居中的方法:不为 flex 容器的主轴和交叉轴上的分布指定 center
,而是在 flex 项目上指定 margin: auto
以占用所有四个方向上的所有额外空间,并且均匀分布的边距将使弹性项目在所有方向上居中。这有效,除非有多个弹性项目。此外,此技术适用于 MS Edge,但不适用于 Internet Explorer 11。
2016 / 2017 年更新:
它可以更常见地使用 transform
完成,即使在 Internet Explorer 10 和 Internet Explorer 11 等旧版浏览器中也能正常工作。它可以支持多行文本:
position: relative;
top: 50%;
transform: translateY(-50%);
示例:https://jsfiddle.net/wb8u02kL/1/
要收缩包装宽度:
上面的解决方案对内容区域使用了固定宽度。要使用收缩包装的宽度,请使用
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
示例:https://jsfiddle.net/wb8u02kL/2/
如果需要对 Internet Explorer 10 的支持,则 flexbox 将不起作用,而上面的方法和 line-height
方法将起作用。否则,flexbox 会完成这项工作。
截至 2014 年的常用技术:
方法 1 - 转换 translateX/translateY:此处示例 / 全屏示例 在支持的浏览器(大多数)中,您可以使用 top: 50%/left: 50% 与 translateX(-50%) translateY(-50%)动态垂直/水平居中元素。 .container { 位置:绝对;最高:50%;左:50%;变换:translateX(-50%) translateY(-50%); }
方法 2 - Flexbox 方法:此处示例 / 全屏示例 在支持的浏览器中,将目标元素的显示设置为 flex 并使用 align-items: center 垂直居中和 justify-content: center 水平居中。只是不要忘记添加供应商前缀以获得额外的浏览器支持(参见示例)。 html, body, .container { 高度: 100%; } .container { 显示:弹性;对齐项目:居中;证明内容:中心; }
方法 3 - table-cell/vertical-align: middle: Example Here / Full Screen Example 在某些情况下,您需要确保将 html/body 元素的高度设置为 100%。对于垂直对齐,将父元素的宽度/高度设置为 100% 并添加 display: table.然后对于子元素,将显示更改为表格单元格并添加垂直对齐:中间。对于水平居中,您可以添加 text-align: center 以使文本和任何其他内联子元素居中。或者,您可以使用 margin: 0 auto 假设元素是块级的。 html, 身体 { 高度:100%; } .parent { 宽度:100%;高度:100%;显示:表格;文本对齐:居中; } .parent > .child { 显示:表格单元格;垂直对齐:中间; }
方法 4 - 从顶部绝对定位 50% 并有位移:此处示例/全屏示例 此方法假定文本具有已知高度 - 在本例中为 18 像素。相对于父元素,将元素从顶部绝对定位 50%。使用元素已知高度的一半的负边距顶部值,在本例中为 -9px。 html, body, .container { 高度: 100%; } .container { 位置:相对;文本对齐:居中; } .container > p { 位置:绝对;最高:50%;左:0;右:0;边距顶部:-9px; }
方法 5 - line-height 方法(最不灵活 - 不建议): 此处示例 在某些情况下,父元素将具有固定高度。对于垂直居中,您所要做的就是在子元素上设置一个等于父元素的固定高度的 line-height 值。尽管此解决方案在某些情况下会起作用,但值得注意的是,当有多行文本时它不会起作用 - 像这样。 .parent { 高度:200px;宽度:400px;文本对齐:居中; } .parent > .child { line-height: 200px; }
方法 4 和 5 不是最可靠的。选择前 3 个中的一个。
使用弹性盒/CSS:
<div class="box">
<p>അ</p>
</div>
CSS:
.box{
display: flex;
justify-content: center;
align-items: center;
}
取自 Quick Tip: The Simplest Way To Center Elements Vertically And Horizontally
display: -ms-flexbox; -ms-flex-align: center; -ms-flex-pack: center
。
inline-
元素添加 text-align:center
.. 例如文本。
将行 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
}
position
是绝对的或固定的,这不起作用。请参阅:jsfiddle.net/tH2cc/1636
将此 CSS 类赋予目标
.centered { 宽度:150px;高度:150px;显示:弯曲;对齐项目:居中;证明内容:中心;文本对齐:居中;背景:红色; /* 不需要只是为了看清楚结果 */ }
您可以为此尝试非常简单的代码:
display: flex;
align-items: center;
justify-content: center;
.box{ 高度:90px;宽度:90px;背景:绿色;显示:弯曲;对齐项目:居中;证明内容:中心; }
Codepen 链接:http://codepen.io/santoshkhalse/pen/xRmZwr
我总是使用以下 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/
您可以在 parent 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;
}
您可以在此处查看 flex
的更多选项:https://css-tricks.com/snippets/css/a-guide-to-flexbox/
2020年的方式
.parent{
display: grid;
place-items: center;
}
方法一
div {高度:90px;行高:90px;文本对齐:居中;边框:2px 虚线 #f69c55; }
方法二
div {高度:200px;行高:200px;文本对齐:居中;边框:2px 虚线 #f69c55; } 跨度 { 显示:内联块;垂直对齐:中间;行高:正常; }
方法 3
div {显示:表;高度:100px;宽度:100%;文本对齐:居中;边框:2px 虚线 #f69c55; } 跨度 { 显示:表格单元格;垂直对齐:中间; }
# 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
}
在父div中添加以下代码
display: grid;
place-items: center;
<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>
div {高度:90px;行高:90px;文本对齐:居中;边框:2px 虚线 #f69c55; }
网格
.center {
display: grid;
justify-items: center;
align-items: center;
}
.center { 显示:网格;对齐项目:中心;对齐项目:居中; } .box { 宽度:200px;高度:100px;背景:红色; }
调整行高以获得垂直对齐。
line-height: 90px;
.cell-row {显示:表格;宽度:100%;高度:100px;背景颜色:浅灰色; text-align: center} .cell {display: table-cell} .cell-middle {vertical-align: middle}
这对我有用(测试OK!):
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 */
}
您可以选择 50% 以外的其他值。例如,25% 以父母的 25% 为中心。
您可以尝试以下方法:
如果您只有一个单词或一行句子,那么下面的代码就可以解决问题。在 div 标签内有一个文本并给它一个 id。为该 ID 定义以下属性。 id-name { 高度:90px;行高:90px;文本对齐:居中;边框:2px 红色虚线;注意:确保 line-height 属性与分割的高度相同。 Image 但是,如果内容超过一个单词或一行,那么这是行不通的。此外,有时您无法以 px 或 % 为单位指定分区的大小(当分区非常小并且您希望内容正好在中间时)。为了解决这个问题,我们可以尝试下面的属性组合。 id-name { 显示:弹性;证明内容:中心;对齐项目:居中;边框:2px 红色虚线; } 图片 这 3 行代码将内容设置在一个分区的中间(与显示的大小无关)。 “align-items:center”有助于垂直居中,而“justify-content:center”将使其水平居中。注意:Flex 并非适用于所有浏览器。确保添加适当的供应商前缀以获得额外的浏览器支持。
对我有用的非常简单的代码!只需一行,您的文本将水平居中。
.center-horizontally{
justify-content: center;
}
<Card.Footer className="card-body-padding center-horizontally">
<label className="support-expand-text-light">Call or email Customer Support to change</label>
</Card.Footer>
输出如下所示:
https://i.stack.imgur.com/kImDi.png
<!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>
对我来说,这是最好的解决方案:
HTML:
<div id="outer">
<img src="logo.png">
</div>
CSS:
#outer {
position: fixed;
top: 50%;
left: 50%;
/* bring your own prefixes */
transform: translate(-50%, -50%);
}
应用风格:
position: absolute;
top: 50%;
left: 0;
right: 0;
无论其长度如何,您的文本都会居中。
这对我有用:
.center-stuff{
text-align: center;
vertical-align: middle;
line-height: 230px; /* This should be the div height */
}
这应该是正确的答案。最干净和最简单的:
.element {
position: relative;
top: 50%;
transform: translateY(-50%);
}
transform: translateY(-50%);
会发生什么
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div style ="text-align: center;">Center horizontal text</div>
<div style ="position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%);">Center vertical text</div>
</body>
</html>
试试下面的例子。我为每个类别添加了示例:水平和垂直
<!DOCTYPE html>
<html>
<head>
<style>
#horizontal
{
text-align: center;
}
#vertical
{
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
</style>
</head>
<body>
<div id ="horizontal">Center horizontal text</div>
<div id ="vertical">Center vertical text</div>
</body>
</html>
不定期副业成功案例分享
display: table-cell
属性,仅供参考。使用它使元素表现得像一个表格单元格并允许vertical-align: middle;
font:
与这些一起使用,请确保将其放在line-
height 之前。元素时,这可能无法按预期工作。