使用 jQuery 在屏幕上居中一个 DIV

IT技术 javascript jquery html css layout
2021-02-04 06:27:50

如何<div>使用 jQuery 在屏幕中央设置 a

6个回答

我喜欢向 jQuery 添加函数,所以这个函数会有所帮助:

jQuery.fn.center = function () {
    this.css("position","absolute");
    this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) + 
                                                $(window).scrollTop()) + "px");
    this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 2) + 
                                                $(window).scrollLeft()) + "px");
    return this;
}

现在我们可以写:

$(element).center();

演示:小提琴(添加参数)

如果我不想在包含<div>而不是 中居中<body>怎么办?也许您应该更改windowthis.parent()或为其添加参数。
2021-03-10 06:27:50
我建议的一项更改:您应该使用 this.outerHeight() 和 this.outerWidth() 而不仅仅是 this.height() 和 this.width()。否则,如果对象有边框或内边距,它最终会稍微偏离中心。
2021-03-16 06:27:50
我还建议添加支持,以便在调整窗口大小时调整页面上的元素。目前它保持原始尺寸。
2021-03-31 06:27:50
为什么这不是 jQuery 功能的本机部分?
2021-04-01 06:27:50
答案中的代码应使用“位置:固定”,因为“绝对”是从第一个相对父级计算的,并且代码使用窗口来计算中心。
2021-04-04 06:27:50

在这里放了一个jquery 插件

非常简短的版本

$('#myDiv').css({top:'50%',left:'50%',margin:'-'+($('#myDiv').height() / 2)+'px 0 0 -'+($('#myDiv').width() / 2)+'px'});

精简版

(function($){
    $.fn.extend({
        center: function () {
            return this.each(function() {
                var top = ($(window).height() - $(this).outerHeight()) / 2;
                var left = ($(window).width() - $(this).outerWidth()) / 2;
                $(this).css({position:'absolute', margin:0, top: (top > 0 ? top : 0)+'px', left: (left > 0 ? left : 0)+'px'});
            });
        }
    }); 
})(jQuery);

由此代码激活:

$('#mainDiv').center();

插件版本

(function($){
     $.fn.extend({
          center: function (options) {
               var options =  $.extend({ // Default values
                    inside:window, // element, center into window
                    transition: 0, // millisecond, transition time
                    minX:0, // pixel, minimum left element value
                    minY:0, // pixel, minimum top element value
                    withScrolling:true, // booleen, take care of the scrollbar (scrollTop)
                    vertical:true, // booleen, center vertical
                    horizontal:true // booleen, center horizontal
               }, options);
               return this.each(function() {
                    var props = {position:'absolute'};
                    if (options.vertical) {
                         var top = ($(options.inside).height() - $(this).outerHeight()) / 2;
                         if (options.withScrolling) top += $(options.inside).scrollTop() || 0;
                         top = (top > options.minY ? top : options.minY);
                         $.extend(props, {top: top+'px'});
                    }
                    if (options.horizontal) {
                          var left = ($(options.inside).width() - $(this).outerWidth()) / 2;
                          if (options.withScrolling) left += $(options.inside).scrollLeft() || 0;
                          left = (left > options.minX ? left : options.minX);
                          $.extend(props, {left: left+'px'});
                    }
                    if (options.transition > 0) $(this).animate(props, options.transition);
                    else $(this).css(props);
                    return $(this);
               });
          }
     });
})(jQuery);

由此代码激活:

$(document).ready(function(){
    $('#mainDiv').center();
    $(window).bind('resize', function() {
        $('#mainDiv').center({transition:300});
    });
);

那正确吗 ?

更新 :

来自CSS 技巧

.center {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%); /* Yep! */
  width: 48%;
  height: 59%;
}
您的功能对于垂直中心非常有效。它似乎不适用于水平中心。
2021-03-14 06:27:50
CSS 假设您知道居中 div 的大小(至少是百分比),而 jQuery 则可以正常工作。
2021-03-27 06:27:50
我的投票是 CSS - 更直接,不需要任何花哨的 Java 脚本。如果您使用固定而不是绝对,即使用户滚动浏览器窗口,它也会留在页面中心
2021-04-05 06:27:50

我会推荐jQueryUI Position 实用程序

$('your-selector').position({
    of: $(window)
});

这为您提供了更多的可能性,而不仅仅是居中......

@Michelangelo:您需要 jqueryUI 库才能使用 .position() 作为函数。查看:api.jqueryui.com/position/
2021-03-10 06:27:50
那个片段是最好的:D。但要注意元素必须是“可见的”。
2021-03-14 06:27:50
@Timwi - 您确定以窗口与文档为中心吗?
2021-03-15 06:27:50
类型错误:$(...).position 不是函数
2021-03-30 06:27:50

这是我的做法。我最终将它用于我的 Lightbox 克隆。这种解决方案的主要优点是即使窗口被调整大小,元素也会自动保持居中,使其成为此类使用的理想选择。

$.fn.center = function() {
    this.css({
        'position': 'fixed',
        'left': '50%',
        'top': '50%'
    });
    this.css({
        'margin-left': -this.outerWidth() / 2 + 'px',
        'margin-top': -this.outerHeight() / 2 + 'px'
    });

    return this;
}
我认为这很有效......在我的情况下由于使用响应式设计而出错:我的 div 宽度随着屏幕宽度的变化而变化。Tony L 的回答是完美的,然后添加:$(window).resize(function(){$('#mydiv').center()}); (mydiv 是一个模式对话框,所以当它关闭时,我删除了调整大小事件处理程序。)
2021-03-24 06:27:50
有时您可能想要使用outerWidth()outerHeight()考虑填充和边框宽度。
2021-04-09 06:27:50
这对我来说非常适合文档类型为 5 的遗留项目,其中$(window).height()给出 0。但我已将位置更改为“绝对”。
2021-04-09 06:27:50

您可以单独使用 CSS 来居中,如下所示:

工作示例

.center{
    position: absolute;
    height: 50px;
    width: 50px;
    background:red;
    top:calc(50% - 50px/2); /* height divided by 2*/
    left:calc(50% - 50px/2); /* width divided by 2*/
}
<div class="center"></div>

calc() 允许您在 css 中进行基本计算。

calc()浏览器支持表的MDN 文档

请记住,如果您需要使用 jquery 中心策略支持该浏览器,则 IE8 不支持 calc()。
2021-04-02 06:27:50