我正在尝试制作一个小的用户名和密码输入框。
我想问一下,你如何垂直对齐div?
我拥有的是:
<div id="Login" class="BlackStrip floatright">
<div id="Username" class="floatleft">Username<br>Password</div>
<div id="Form" class="floatleft">
<form action="" method="post">
<input type="text" border="0"><br>
<input type="password" border="0">
</form>
</div>
</div>
如何使用id用户名和表单将div垂直对齐到中心?我试着说:
vertical-align: middle;
在CSS中用于id为登录的div,但它似乎不起作用。任何帮助将不胜感激。
答案 0 :(得分:201)
现代浏览器中最好的方法是使用flexbox:
#Login {
display: flex;
align-items: center;
}
某些浏览器需要供应商前缀。对于没有Flexbox支持的旧版浏览器(例如IE 9及更低版本),您需要使用older methods之一实现回退解决方案。
推荐阅读
答案 1 :(得分:86)
这可以通过3行CSS完成,并且可以兼容(包括)IE9:
.element {
position: relative;
top: 50%;
transform: translateY(-50%);
}
答案 2 :(得分:76)
您可以在另一个div中垂直对齐div。请参阅this example on JSFiddle或考虑以下示例。
<强> HTML 强>
<div class="outerDiv">
<div class="innerDiv"> My Vertical Div </div>
</div>
<强> CSS 强>
.outerDiv {
display: inline-flex; // <-- This is responsible for vertical alignment
height: 400px;
background-color: red;
color: white;
}
.innerDiv {
margin: auto 5px; // <-- This is responsible for vertical alignment
background-color: green;
}
.innerDiv
的保证金必须采用以下格式:margin: auto *px;
[其中,*
是您想要的值。]
display: inline-flex
。
在Internet Explorer中可能无效:P:)
始终尝试为任何垂直对齐的div(即innerDiv)定义高度,以抵消兼容性问题。
答案 3 :(得分:13)
我参加派对的时间已经很晚了,但我自己想出了这个,这是我最喜欢的垂直对齐快速黑客之一。这很简单,也很容易理解发生了什么。
使用:before
css属性将div插入父div的开头,给它display:inline-block
和vertical-align:middle
,然后将这些属性赋予子div。由于vertical-align
用于沿线对齐,因此这些内联div将被视为一条线。
制作:before
div height:100%
,子div会自动跟随并在非常高的“线”中间对齐。
.parent:before, .child {
display:inline-block;
vertical-align:middle;
}
.parent:before {
content:""; // so that it shows up
height:100%; // so it takes up the full height
}
Here's a fiddle来证明我在说什么。子div可以是任何高度,您永远不必修改其边距/填充 并here's a more explanatory fiddle。
如果您不喜欢:before
,您可以随时手动输入div。
<div class="parent">
<div class="before"></div>
<div class="child">
content
</div>
</div>
然后只需将.parent:before
重新分配给.parent .before
答案 4 :(得分:12)
如果你知道高度,你可以使用绝对定位和负margin-top
,如下所示:
#Login {
width:400px;
height:400px;
position:absolute;
top:50%;
left:50%;
margin-left:-200px; /* width / -2 */
margin-top:-200px; /* height / -2 */
}
否则,没有真正的方法可以使用CSS
垂直居中div答案 5 :(得分:4)
在我的firefox和chrome中工作:
CSS:
display: flex;
justify-content: center; // vertical align
align-items: center; // horizontal align
答案 6 :(得分:3)
我发现此网站很有用:http://www.vanseodesign.com/css/vertical-centering/ 这对我有用:
HTML
<div id="parent">
<div id="child">Content here</div>
</div>
CSS
#parent {
padding: 5% 0;
}
#child {
padding: 10% 0;
}
答案 7 :(得分:3)
@GáborNagy对another post的评论是我能找到的最简单的解决方案,对我来说就像是一个魅力,因为他带来了一个jsfiddle,我在这里复制了一小部分:
CSS:
#wrapper {
display: table;
height: 150px;
width: 800px;
border: 1px solid red;
}
#cell {
display: table-cell;
vertical-align: middle;
}
HTML:
<div id="wrapper">
<div id="cell">
<div class="content">
Content goes here
</div>
</div>
</div>
如果你想同时将它水平对齐,你必须在“cell”div中添加另一个div“inner-cell”,并给它这种风格:
#inner-cell{
width: 250px;
display: block;
margin: 0 auto;
}
答案 8 :(得分:1)
垂直对齐一直很棘手。
这里我介绍了一些垂直对齐div的方法。
<div style="display:flex;">
<div class="container table">
<div class="tableCell">
<div class="content"><em>Table</em> method</div>
</div>
</div>
<div class="container flex">
<div class="content new"><em>Flex</em> method<br></div>
</div>
<div class="container relative">
<div class="content"><em>Position</em> method</div>
</div>
<div class="container margin">
<div class="content"><em>Margin</em> method</div>
</div>
</div>
em{font-style: normal;font-weight: bold;}
.container {
width:200px;height:200px;background:#ccc;
margin: 5px; text-align: center;
}
.content{
width:100px; height: 100px;background:#37a;margin:auto;color: #fff;
}
.table{display: table;}
.table > div{display: table-cell;height: 100%;width: 100%;vertical-align: middle;}
.flex{display: flex;}
.relative{position: relative;}
.relative > div {position: absolute;top: 0;left: 0;right: 0;bottom: 0;}
.margin > div {position:relative; margin-top: 50%;top: -50px;}
答案 9 :(得分:1)
除非对齐的div具有固定的高度,否则请尝试将以下CSS用于对齐的div:
{
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: table;
}
答案 10 :(得分:1)
我需要指定min-height
#login
display: flex
align-items: center
justify-content: center
min-height: 16em
答案 11 :(得分:0)
如果您使用的是修复高度div,则可以根据您的设计需要使用padding-top。 或者你可以使用top:50%。如果我们使用div而不是垂直对齐不起作用,那么我们根据需要使用填充顶部或位置。
答案 12 :(得分:0)
我发现了一种对我有用的方法。下一个脚本插入一个不可见的图像(与bgcolor或transparant gif相同),其高度等于屏幕上白色空间大小的一半。效果是完美的垂直对齐。
假设您有一个标题div(高度= 100)和一个页脚div(高度= 50),并且您要对齐的主div中的内容高度为300:
<script type="text/javascript" charset="utf-8">
var screen = window.innerHeight;
var content = 150 + 300;
var imgheight = ( screen - content) / 2 ;
document.write("<img src='empty.jpg' height='" + imgheight + "'>");
</script>
您将脚本放在要对齐的内容之前!
在我的情况下,我喜欢对齐的内容是图像(宽度= 95%),宽高比为100:85(宽度:高度)。图像高度的85%是它的高度。宽度。宽度为屏幕宽度的95%。
因此我使用了:
var content = 150 + ( 0.85 * ( 0.95 * window.innerWidth ));
将此脚本与
结合使用<body onResize="window.location.href = window.location.href;">
你有一个平滑的垂直对齐。
希望这也适合你!
答案 13 :(得分:0)
将子元素居中于div中。它适用于所有屏幕尺寸
#parent {
padding: 5% 0;
}
#child {
padding: 10% 0;
}
<div id="parent">
<div id="child">Content here</div>
</div>
有关详细信息,您可以访问此link
答案 14 :(得分:0)
将div元素居中的最简单方法是使用具有以下属性的此类。
.light {
margin: auto;
width: 50%;
border: 3px solid green;
padding: 10px;
}
答案 15 :(得分:-7)
div不能以这种方式垂直对齐,但是你可以使用边距或位置:相对来修改它的位置。