如何垂直居中<;部门>;在CSS的父元素内部?

如何垂直居中<;部门>;在CSS的父元素内部?,css,alignment,centering,Css,Alignment,Centering,我正在尝试制作一个小的用户名和密码输入框 我想问一下,如何垂直对齐div 我得到的是: <div id="Login" class="BlackStrip floatright"> <div id="Username" class="floatleft">Username<br>Password</div> <div id="Form" class="floatleft"> <form action="" met

我正在尝试制作一个小的用户名和密码输入框

我想问一下,如何垂直对齐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>

在CSS中使用id登录的div,但它似乎不起作用。任何帮助都将不胜感激。

现代浏览器中的最佳方法是使用flexbox:

#Login {
    display: flex;
    align-items: center;
}
有些浏览器需要厂商前缀。对于不支持flexbox的旧浏览器(例如IE 9和更低版本),您需要使用以下选项之一实现回退解决方案

推荐阅读


div不能以这种方式垂直对齐,但是您可以使用边距或位置:相对来修改其位置。

如果您知道高度,您可以使用带有负数
边距顶部的绝对定位,如下所示:

#Login {
    width:400px;
    height:400px;
    position:absolute;
    top:50%;
    left:50%;
    margin-left:-200px; /* width / -2 */
    margin-top:-200px; /* height / -2 */
}

否则,如果您使用的是固定高度的div,那么就没有真正的方法仅使用CSS将div垂直居中,而不能根据您的设计需要使用padding top。 或者你可以使用top:50%。如果我们使用div,那么垂直对齐不起作用,因此我们根据需要使用padding top或position。

我发现这个站点很有用: 这对我很有用:

HTML


<>你可以在另一个div中垂直对齐div。参见或考虑下面的例子。

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;   
}
.outerDiv{

显示:内联flex;//垂直对齐一直都很棘手

这里我已经介绍了一些垂直对齐div的方法

HTML:

除非对齐的div具有固定的高度,否则请尝试对对齐的div使用以下CSS:

{
  margin: auto;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  display: table;
}

我找到了一个对我来说非常有用的方法。下一个脚本插入一个不可见的图像(与bgcolor或透明gif相同),其高度等于屏幕上空白大小的一半。效果是完美的垂直对齐

假设您有一个页眉div(height=100)和一个页脚div(height=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>   
将此脚本与


你有一个平滑的垂直对齐


希望这也能对您起作用!

这可以用3行CSS完成,并且兼容IE9(包括IE9):

例如:

@GáborNagy的评论是我能找到的最简单的解决方案,对我来说很有吸引力,因为他带来了一个JSFIDLE,我在这里复制它,并添加了一个小补充:

CSS:

HTML:


我参加派对已经很晚了,但我自己想出了这个,这是我最喜欢的垂直对齐快速方法之一。它非常简单,而且很容易理解发生了什么

您可以使用
:before
css属性将div插入父div的开头,给它
display:inline block
垂直对齐:middle
,然后给子div赋予相同的属性。由于
垂直对齐
用于沿一条线对齐,这些内联div将被视为一条线

使<代码>: div >代码>高度:100% < /代码>,子div将自动跟随并对齐在一个非常高的“线”的中间。

来演示我所说的。子div可以是任何高度,并且您永远不必修改其边距/填充。

如果您不喜欢
:在
之前,您可以手动输入div

<div class="parent">
    <div class="before"></div>
    <div class="child">
        content
    </div>
</div>

内容
然后重新分配
.parent:before
.parent。before

你试过这个吗

.parentdiv {
 margin: auto;
 position: absolute;
 top: 0; left: 0; bottom: 0; right: 0;
 height: 300px; // at least you have to specify height
}

希望这对我的firefox和chrome工作有所帮助:

CSS:


我需要指定最小高度

#login
    display: flex
    align-items: center
    justify-content: center
    min-height: 16em

将子元素居中放置在div中。它适用于所有屏幕大小

#parent {
    padding: 5% 0;
}

#child {
    padding: 10% 0;
}

<div id="parent">
    <div id="child">Content here</div>
</div>
#父级{
填充:5%0;
}
#孩子{
填充:10%0;
}
满足于此

有关更多详细信息,您可以访问此

,使div元素居中的最简单方法是使用具有以下属性的此类

.light {
    margin: auto;
    width: 50%;
    border: 3px solid green;
    padding: 10px;
}

请看一看。我不太擅长CSS,但在我遇到的这么多解决方案中,这一个对我来说最有效。这在IE浏览器中不起作用。@SteveBreese停止使用IE。与IE9不兼容此解决方案仅在添加负责垂直对齐的零件以及外部的高度时有效。没有高度t、 它不工作。正在工作JSFIDLE为什么上面的“我的链接”不工作?所有框(HTML、JavaScript、CSS)都是空的。在Firefox中不工作(在版本40上测试),虽然可以使用
img
标记代替
div
。这太棒了,只有3行代码,效果很好。这是我个人的最爱,尤其是当我可以将其用作LESS或SASS混搭时。Breaks responsive design你能举一个例子说明它如何以及为什么会打破“responsive design”吗总的来说?在我看来,它是否破坏了响应性设计是你项目结构的问题。哇..谢谢,伙计,我不得不从滑块上移除flexbox,因为它在flex父级和子级之间插入了额外的div,这是一个完美的解决方案。为了水平对齐,我还添加了
justify content:center
。(不过情况并不完全相同。)如果希望父元素保持不变,还有
display:inline flex
,嗯,inline:)要将div一个堆叠在另一个之上,使用
flex-direction:column
flex是我见过的最糟糕的方法,引导过程非常痛苦,我更愿意使用Javascript来解决这个问题……注意:如果您试图使用“display:inline-box”将任何内容居中放置,请小心。内容的行高可能会导致I下方出现额外的空间我不确定html规范的哪一部分导致了这种情况,但我发现它不明显,花了一段时间才找出
var content = 150 + ( 0.85 * ( 0.95 * window.innerWidth ));
.element {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}
#wrapper {
    display: table;
    height: 150px;
    width: 800px;
    border: 1px solid red;
}

#cell {
    display: table-cell;
    vertical-align: middle;
}
<div id="wrapper">
    <div id="cell">
        <div class="content">
            Content goes here
        </div>
    </div>
</div>
#inner-cell{
      width: 250px;
      display: block;
      margin: 0 auto;
}
.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
}
<div class="parent">
    <div class="before"></div>
    <div class="child">
        content
    </div>
</div>
.parentdiv {
 margin: auto;
 position: absolute;
 top: 0; left: 0; bottom: 0; right: 0;
 height: 300px; // at least you have to specify height
}
display: flex;
justify-content: center;     // vertical align
align-items: center;         // horizontal align
#login
    display: flex
    align-items: center
    justify-content: center
    min-height: 16em
#parent {
    padding: 5% 0;
}

#child {
    padding: 10% 0;
}

<div id="parent">
    <div id="child">Content here</div>
</div>
.light {
    margin: auto;
    width: 50%;
    border: 3px solid green;
    padding: 10px;
}