HTML
<div class="element">
<p>I want to center this element vertically and horizontally.</p>
</div>
CSS
.element
{
background: #eee;
border: 1px solid #ccc;
font-size: 24px;
margin: 10px;
padding: 20px;
position: absolute;
}
的jQuery
jQuery(document).ready(function($) {
var $element = $('.element');
center();
$(window).on('resize', function() {
center();
});
function center() {
var width = $element.outerWidth(true);
var height = $element.outerHeight(true);
console.log(width);
console.log(height);
$element
.stop(true)
.animate({
top: Math.max(0, ($(window).height() - height) / 2),
left: Math.max(0, ($(window).width() - width) / 2)
});
}
});
问题
如果我调整窗口大小,则元素不居中,因为outerWidth()和outerHeight()是错误的。
刷新后问题消失。
在Firefox上测试结果
默认值:元素大小 - 670x134(好)
768x1024:元素大小 - 198x254(错误) - 670x134(刷新后很好)
360x640:元素大小 - 198x254(错误) - 360x182(刷新后很好)
问题
知道为什么会出现这个问题以及如何解决它?
备注
我不希望元素具有固定的宽度或高度。
答案 0 :(得分:2)
您的调整大小仅在页面加载时调用,请尝试使用以下代码:
jQuery(document).ready(function() {
center();
});
jQuery(window).resize(function(){
center();
});
function center() {
var $element = $('.element');
var width = $element.outerWidth(true);
var height = $element.outerHeight(true);
console.log(width);
console.log(height);
$element
.stop(true)
.animate({
top: Math.max(0, ($(window).height() - height) / 2),
left: Math.max(0, ($(window).width() - width) / 2)
});
}
这将调用页面加载时的调整大小以及调整大小时。
当从较大的窗口调整为较小的窗口时,似乎存在延迟使元素水平居中,这很可能与动画有关。
也许您可能想要考虑使用非动画方法来集中您的元素,例如Abdulla Chozhimadathil提到的元素。
答案 1 :(得分:0)
请检查小提琴
<div class="container">
<div class="content">
content content content
<br/>
moooooooooooooooore content
<br/>
another content
</div>
</div>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
display: table;
}
.container {
display: table-cell;
text-align: center;
vertical-align: middle;
}
.content {
background-color: red;
display: inline-block;
text-align: left;
}
答案 2 :(得分:0)
这是因为你正在使用jQuery动画。因此,在调整窗口大小时,每次都会触发每个重新调整大小。但是在短暂的时间内,动画还没有完成。因此盒子不会到达中心。但是在调整大小后,它有足够的时间来执行动画。
因此,将动画更改为直接css,您可以在每次调整大小时更新。请查看此Fiddle
答案 3 :(得分:0)
outerWidth
不能保证文档中所述的准确性。只需编写outerWidth(true)
,您将获得与.resize()
函数相同的确切值。
http://api.jquery.com/outerWidth/