<body>
<div id="all">
<div class="ff-valign-wrap">
<div class="ff-valign">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
</div>
</div>
</div>
</body>
/* This parent can be any width and height */
.block {
text-align: center;
}
/* The ghost, nudged to maintain perfect centering */
.block:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
/* The element to be centered, can
also be of any width and height */
.centered {
display: inline-block;
vertical-align: middle;
width: 300px;
}
30 回答
最简单的方法是以下 3 lines CSS:
以下是一个例子:
我刚刚写了这个CSS并了解更多信息,请通过:This article with vertical align anything with just 3 lines of CSS .
下面是我可以构建的最佳全方位解决方案,可以垂直和水平居中固定宽度的内容框 . 它已经过测试,适用于最新版本的Firefox,Opera,Chrome和Safari .
View A Working Example With Dynamic Content
我内置了一些动态内容来测试灵活性,并且很想知道是否有人发现它有任何问题 . 它也适用于中心覆盖层 - 灯箱,弹出窗口等 .
不幸的是 - 但并不奇怪 - 解决方案比人们希望的更复杂 . 还不幸的是,你需要在想要垂直居中的div周围使用额外的div .
对于符合标准的浏览器,如Mozilla,Opera,Safari等,您需要将外部div设置为表格,将内部div设置为表格单元格 - 然后可以垂直居中 . 对于Internet Explorer,您需要将内部div完全放在外部div中,然后将顶部指定为50% . 以下几页很好地解释了这种技术并提供了一些代码示例:
Vertical Centering in CSS
CSS中具有未知高度的垂直居中(兼容Internet Explorer 7)(不再存在)
Vertical Centering in CSS with Unknown Height (Internet Explorer 7 compatible)(存档文章由Wayback Machine提供)
还有一种使用JavaScript进行垂直居中的技术 . Vertical alignment of content with JavaScript & CSS演示了它 .
要将div置于页面中心,check the fiddle link .
另一个选择是使用弹性框,check the fiddle link .
另一个选择是使用CSS 3转换:
如果有人只关心Internet Explorer 10(及更高版本),请使用
flexbox
:Flexbox支持:http://caniuse.com/flexbox
我在列表中看不到一个:
跨浏览器(包括Internet Explorer 8 - 没有黑客的Internet Explorer 10!)
响应百分比和最小/最大 -
无论填充是否居中(没有盒子大小!)
必须声明
height
(参见Variable Height)推荐设置
overflow: auto
以防止内容溢出(请参阅溢出)来源:CSS中的绝对水平和垂直居中
相关:Center a Image
我发现这个最有用..它提供了最准确的'H'布局,并且非常易于理解 .
此标记的好处是您可以在一个地方定义内容大小 - > "PageContent" .
页面背景的颜色及其水平边距在其对应的div中定义 .
这里用CSS分隔:
使用
transform
的三行代码几乎适用于现代浏览器和Internet Explorer:我正在添加这个答案,因为我在此答案的先前版本中发现了一些不完整性(而Stack Overflow将不允许我简单地评论) .
'position'如果当前div在体内并且没有容器div,则相对会弄乱样式 . 但是'fixed'似乎有效,但它显然将内容修复到视口的中心
此外,我使用这种样式来对齐一些叠加div,并发现在Mozilla中,这个转换后的div中的所有元素都失去了底部边框 . 可能是一个渲染问题 . 但是只为其中一些添加最小填充正确地渲染它 . Chrome和Internet Explorer(令人惊讶地)渲染了这些框而无需填充
没有回答浏览器的兼容性,但也提到了新的Grid和不那么新的Flexbox功能 .
Grid
来自:Mozilla - Grid Documentation - Align Div Vertically
浏览器支持:Grid Browser Support
CSS:
HTML:
Flexbox
浏览器支持:Flexbox Browser Support
CSS:
Flexbox解决方案
Notes
1.父元素被赋予类名 .
2.如果supported browsers需要,请添加flex供应商前缀 .
我认为在不使用flexbox的情况下为所有浏览器提供可靠的解决方案 - “align-items:center;”是display:table和vertical-align:middle;的组合 .
CSS
HTML
‣演示:https://jsfiddle.net/6m640rpp/
就这么做:在
div
添加课程:并阅读this article作为解释 . 注意:
Height
是必要的 .以下链接提供了一种简单的方法,只需在CSS中使用3行:
Vertical align anything with just 3 lines of CSS .
我知道这个问题已经有了答案但是我在链接中看到了它的简洁性 .
仅垂直居中
如果您不关心Internet Explorer 6和7,则可以使用涉及两个容器的技术 .
外容器:
display: table;
内部容器:
应该有
display: table-cell;
应该有
vertical-align: middle;
内容框:
display: inline-block;
您可以将任何内容添加到内容框中,而无需关心其宽度或高度!
演示:
另见this Fiddle!
水平和垂直居中
如果要水平和垂直居中,还需要以下内容 .
内部容器:
text-align: center;
内容框:
text-align: left;
或text-align: right;
,除非您希望文本居中演示:
另见this Fiddle!
垂直居中元素的现代方法是使用flexbox .
您需要父母来决定身高和孩子要居中 .
下面的示例将div放在浏览器中心的中心 . 重要的是(在我的例子中)是将
height: 100%
设置为body
和html
,然后将min-height: 100%
设置为您的容器 .我这样做了(相应地改变宽度,高度,margin-top和margin-left):
如果你有一个块元素(例如),这个解决方案对我有用 . 我使用颜色使解决方案更清晰 .
HTML:
CSS:
JSFiddle Code Demo
最简单的解决方案如下:
这是我找到的最简单的方法,我一直都在使用它(jsFiddle demo here)
感谢CSS Tricks的Chris Coyier为this article .
支持从IE8开始 .
实际上你需要两个div用于垂直居中 . 包含内容的div必须具有宽度和高度 .
这是result
经过大量的研究,我终于找到了最终的解决方案 . 它甚至适用于浮动元素 . View Source
Billbad的答案仅适用于
.inner
div的固定宽度 . 通过将属性text-align: center
添加到.outer
div,此解决方案适用于动态宽度 .当我必须回到this issue时,这总是我走的路 .
对于那些不想跳跃的人:
将父容器指定为
position:relative
或position:absolute
.在子容器上指定固定高度 .
在子容器上设置
position:absolute
和top:50%
,将顶部向下移动到父级的中间位置 .设置margin-top:-yy,其中yy是子容器高度的一半,以向上偏移项目 .
代码中的一个例子:
现在,flexbox解决方案对于现代浏览器来说是一种非常简单的方法,因此我建议您使用:
我用这个 . 它适用于Internet Explorer 8及更高版本:
height:268px
- fordisplay:table
就像min-height一样 .CSS:
HTML:
以下是我的案例,并在Firefox中进行了测试 .
div的高度和父亲的身高是动态的 . 我在同一个父元素上存在高于目标元素的其他元素时使用它,其中两个元素都是水平内联的 .
特别是对于具有相对(未知)高度的父div,centering in the unknown解决方案对我来说非常有用 . 本文中有一些非常好的代码示例 .
它在Chrome,Firefox,Opera和Internet Explorer中进行了测试 .
使用flexbox可以轻松地对内容进行居中 . 以下代码显示了容器内部需要居中的CSS: