我有一个需要水平和垂直居中的 div
。
水平居中没有问题,但是垂直对齐存在问题。
我尝试了以下代码:
#parent {
display: table;
}
#child {
display: table-row;
vertical-align: middle;
}
但是这个方法不起作用。
我有一个需要水平和垂直居中的 div
。
水平居中没有问题,但是垂直对齐存在问题。
我尝试了以下代码:
#parent {
display: table;
}
#child {
display: table-row;
vertical-align: middle;
}
但是这个方法不起作用。
如果你只需要支持那些支持transform
(或其供应商前缀版本)的浏览器,可以使用这个神奇的古老技巧来垂直对齐元素。
#child {
position: relative;
top: 50%;
transform: translateY(-50%);
}
如果你需要支持旧浏览器,那么可以使用这些方法的组合,但由于呈现 block
与 table
的差异,可能会有些麻烦。#parent {
display: table;
}
#child {
display: table-cell;
vertical-align: middle;
}
如果您的高度固定且需要支持那些非常老旧、讨厌的浏览器...#parent {
position: relative;
}
#child {
height: 100px;
position: absolute;
top: 50%;
margin-top: -50px;
}
如果您的高度不是固定的,那么有一个解决方法。请参考此处。flexbox
将子元素 div
在父元素 div
中水平或垂直居中:
这应该是你的 html 代码:
<div id="parent">
<div id="child">
info
</div>
</div>
css
。#parent{
display: flex;
align-items: center;
justify-content: center;
position: relative;
width: 100%;
height: 100vh;
background: lightgray;
}
#child{
position: relative;
background: black;
padding: 2rem;
color: white;
box-shadow: 5px 5px 20px rgba(0,0,0,.4);
border-radius: 5px;
}
这里是 CodePen: https://codepen.io/bongardabo/pen/YzZQgaJ
display:table
,子元素属性为display:table-cell
和vertical-align:middle
,这对我很有效。#parent { display:table-cell; vertical-align:middle; }
#child { /* nothing necessary, assuming it's a DIV it's already display:block */ }
在编程中,使用table-cell而没有包围的table-row和table也是可以的,浏览器会自动为您推断所需的表格包装元素。
当你不知道内部div大小或其他信息时,还有另一种方法可以使用百分比来修复“居中”问题...
思路是将顶部值设置为子元素高度的一半,以创建居中效果。
以下是代码:
<div id="parent">
<div id="child">
hello
</div>
</div>
关于样式方面:
#parent {
position: relative;
height: 300px;
width:200px;
background-color:green;
}
#child {
height: 50%;
width: 50%;
position:relative;
top:25%;
left:25%;
background-color:red;
}
在这里你可以看到它的实际效果http://jsfiddle.net/Wabxv/