我想将一个div添加到另一个div中 .
<div id="outerDiv">
<div id="innerDiv">
</div>
</div>
这是我目前使用的CSS .
#outerDiv{
width: 500px;
height: 500px;
position:relative;
}
#innerDiv{
width: 284px;
height: 290px;
position:absolute;
top: 50%;
left:50%;
margin-top: -147px;
margin-left: -144px;
}
正如您所看到的,我现在使用的方法取决于 innerDiv
的宽度和高度值 . 如果宽度/高度发生变化,我将不得不修改 margin-top
和 margin-left
值 . 是否有任何通用的解决方案,我可以使用它来居中 innerDiv
总是与它的大小无关?
我发现使用 margin:auto
可以将innerDiv水平对齐到中间 . 但是垂直中间的那个呢?
23 回答
对于没有指定它的高度值的innerdiv,没有纯css解决方案使其垂直居中 . 一个javascript解决方案可以获取innerdiv的offsetHeight,然后计算style.marginTop .
tl;dr
垂直对齐中间作品,但您必须在父元素上使用
table-cell
并在子元素上使用inline-block
.这个解决方案在IE6和7中不起作用 .
你的是更安全的方式 .
但是,由于您使用CSS3和HTML5标记了您的问题,我认为您不介意使用现代解决方案 .
The classic solution (table layout)
这是我原来的答案 . 它仍然可以正常工作,是最广泛支持的解决方案 . 表布局将impact your rendering performance所以我建议你使用一个更现代的解决方案 .
Here is an example
Tested in:
FF3.5
FF4
Safari 5
Chrome 11
IE9
HTML
CSS
Modern solution (transform)
由于变换是fairly well supported now,因此有一种更简单的方法 .
CSS
Demo
♥ my favourite modern solution (flexbox)
我开始越来越多地使用flexbox its also well supported now这是迄今为止最简单的方法 .
CSS
Demo
更多示例和可能性:Compare all the methods on one pages
实现这种水平和垂直居中的另一种方法是:
(Reference)
另一种方法是使用Transform Translate
外部Div必须将
position
设置为relative
或fixed
,并且内部Div必须将其position
设置为absolute
,top
和left
至50%
并应用transform: translate(-50%, -50%)
.测试中:
Opera 24.0 (最低12.1)
Safari 5.1.7 (带-webkit-前缀的最小值为4)
Firefox 31.0 (最小3.6使用-moz-前缀,16不带前缀)
Chrome 36 (最少11个带-webkit-前缀,36个没有前缀)
IE 11, 10 (最少9个带-ms-前缀,10个没有前缀)
More browsers, Can I Use?
Vertical Align Anything with just 3 lines of CSS
HTML
简单
CSS
根据shouldiprefix,这是您需要的唯一前缀
您也可以使用%作为.parent-of-element的'height'属性的值,只要element的父元素具有高度或某些内容可以扩展其垂直大小 .
而不是把自己绑在一个难以编写和难以维护的CSS的结(这也需要仔细的跨浏览器验证!)我发现放弃CSS并使用非常简单的HTML 1.0更好:
这可以完成原始海报所需的一切,并且功能强大且易于维护 .
你可以用一个简单的javascript(jQuery)块来做到这一点 .
CSS :
Javascript :
尝试对齐内部元素,如下所示:
而且当然:
我个人更喜欢使用隐藏的伪元素来跨越外部容器的整个高度,并将其与其他内容垂直对齐 . 克里斯科伊尔有一篇关于这项技术的好文章 . http://css-tricks.com/centering-in-the-unknown/这样做的巨大优势是可扩展性 . 您不必知道内容的高度或担心内容的增长/缩小 . 这个解决方案缩放:) .
这里's a fiddle with all the CSS you' ll需要和一个工作实例 . http://jsfiddle.net/m5sLze0d/
you can do it by simply adding css style mentioned above. All the best. for query write comment
未设置
height
时(自动);你可以给内部div一些填充(顶部和底部)使其垂直居中:将div项目垂直居中于另一个div中
只需将容器设置为
display:table
,然后将内部项设置为display:table-cell
. 在容器上设置height
,然后在内部项目上设置vertical-align:middle
. 就IE9的时代而言,它具有广泛的兼容性 .请注意,垂直对齐将取决于父容器的高度 .
I have been using the following solution since over a year, it works with IE 7 and 8 as well.
这对我有用 . 可以定义外部div的宽度和高度 .
Here the code:
小提琴链接<http://jsfiddle.net/dGHFV/2515/>
Try this
如果您在阅读上面给出的奇妙答案后仍然不明白 .
以下是两个如何实现它的简单示例 .
注意:在使用上述实现之前,请检查display:table-cell和flex的浏览器兼容性 .
enter image description here 100% it works
https://jsfiddle.net/Mangesh1556/btn1mozd/4/
您可以使用flex在CSS中垂直和水平居中div;
第二个是如下;
结果HTML:
This will work way back to IE6!
IE6也需要
<!DOCTYPE html>
! [将强制IE6默认严格模式] .(当然,盒子着色仅用于演示目的)
父元素上的文本对齐中心,在子元素上显示内联块 . 这将集中所有任何东西 . 我相信它的称呼是“块浮动” .
这也是浮动的好选择,祝你好运!
将div垂直居中于另一个div内
要垂直和水平对齐:
我知道这个问题是在一年前创建的...无论如何,感谢CSS3你可以很容易地在div中垂直对齐div(例如那里http://jsfiddle.net/mcSfe/98/)