Використовуйте jQuery для центру DIV на екрані


760

Як мені вирішити налаштування a <div>в центрі екрана за допомогою jQuery?


20
Це більше питання CSS, ніж питання jQuery. Ви можете скористатися методами jQuery, щоб допомогти вам знайти крос-браузерне позиціонування та застосувати належні стилі CSS до елемента, але суть питання полягає в тому, як центрувати поділ на екрані за допомогою CSS.
Кріс Макдональд


2
Якщо ви центрируєте поділ на екрані, можливо, ви використовуєте ФІКСОВАНЕ позиціонування. Чому б просто не зробити це: stackoverflow.com/questions/2005954 / ... . Рішення - чистий CSS, не вимагає JavaScript.
Арді Арам

Погодьтеся, метод JavaScript зовсім не такий приємний. Особливо крос-браузер.
Саймон Хейтер

Відповіді:


1070

Мені подобається додавати функції до 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();

Демонстрація: Fiddle (із доданим параметром)


78
Я б запропонував зміни: ви повинні використовувати this.outerHeight () та this.outerWidth (), а не тільки this.height () та this.width (). В іншому випадку, якщо на об'єкті є бордюр або прокладка, він закінчиться трохи не в центрі.
Тревор Бернхем,

82
Чому це не є рідною частиною функціональності jQuery?
Сет Карнегі

14
Що робити, якщо я не хочу зосередитись на вмісті <div>замість <body>? Може бути , ви повинні змінити , windowщоб this.parent()додати або параметр для нього.
Дерек 朕 會 功夫

13
Код у відповіді повинен використовувати "позицію: фіксовану", оскільки "абсолютний" обчислюється від першого відносного батька, і код використовує вікно для обчислення центру.
Дієго

2
Я б також запропонував додати підтримку, так що коли розмір вікна буде змінено елемент на сторінці. В даний час він залишається з вихідними розмірами.
Webnet

143

Я ставлю сюди плагін 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%;
}

Ваша функція спрацювала ідеально для вертикального центру. Схоже, він не працює для горизонтального центру.
Халсафар

CSS припускає, що ви знаєте розмір (принаймні відсотків) відцентрованого div, тоді як jQuery працює будь-який.
Данк

Моє голосування - CSS - набагато простіший і не потребує жодного вигадливого сценарію Java. Якщо ви використовуєте фіксований замість абсолютного, він залишатиметься в центрі сторінки, навіть коли користувач прокручує вікно браузера
user1616338

60

Я рекомендую утиліту jQueryUI Position

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

що дає вам набагато більше можливостей, ніж лише центрування ...


1
@Timwi - Ви впевнені, що орієнтуєтесь на вікно та документ?
Кітхакбарт

1
TypeError: $ (...). Позиція не є функцією
Мікеланджело

3
@Michelangelo: Вам потрібна бібліотека jqueryUI, щоб використовувати .position () як функцію. Перевір: api.jqueryui.com/position/
Джейк

Цей фрагмент найкращий: D. Але будьте попереджені, елемент повинен бути "видимим". "
Cԃ ա ԃ

39

Ось мій погляд на це. Я в кінцевому рахунку використовував його для мого клона 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;
}

3
Я думаю, що це працює добре ... в моєму випадку воно пішло не так через використання чуйного дизайну: ширина мого діва змінюється у міру зміни ширини екрана. Що ідеально працює, це відповідь Тоні $(window).resize(function(){$('#mydiv').center()}); Л, а потім додає це: (mydiv - це модальний діалог, тому коли він закритий, я видаляю обробник події зміни розміру.)
Даррен Кук

1
Іноді ви можете скористатись outerWidth()і outerHeight()врахувати ширину прокладки та облямівку.
Філіп Гербер

Для мене це ідеально підходить для застарілого проекту з doc type 5, де $(window).height()дає 0. Але я змінив позицію на "абсолютну".
Михайло Адамович

26

Ви можете використовувати 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.

Документація MDN для calc()
таблиці підтримки браузера


Майте на увазі, що calc () не підтримується в IE8, якщо вам потрібно підтримувати, щоб браузер використовував стратегію центру jquery.
mbokil

14

Я розкриваю чудову відповідь, яку дав @TonyL. Я додаю Math.abs () для завершення значень, а також враховую, що jQuery може перебувати в режимі "без конфлікту", як, наприклад, у WordPress.

Я рекомендую обернути верхнє та ліве значення за допомогою Math.abs (), як я це зробив нижче. Якщо вікно занадто мале, а у вашому модальному діалоговому вікні вгорі закривається вікно, це запобіжить проблему не бачити закритого вікна. Функція Тоні мала б потенційно негативні значення. Хороший приклад того, як у вас з’являються негативні значення, - якщо у вас діалог із великим центром, але кінцевий користувач встановив кілька панелей інструментів та / або збільшив шрифт за замовчуванням - у такому випадку закрийте вікно модального діалогу (якщо вгорі) може бути не видимим і клікальним.

Інше, що я роблю, це трохи прискорити це, кешуючи об’єкт $ (window), щоб зменшити додаткові обходи DOM, і я використовую кластер CSS.

jQuery.fn.center = function ($) {
  var w = $(window);
  this.css({
    'position':'absolute',
    'top':Math.abs(((w.height() - this.outerHeight()) / 2) + w.scrollTop()),
    'left':Math.abs(((w.width() - this.outerWidth()) / 2) + w.scrollLeft())
  });
  return this;
}

Для використання ви зробите щось на кшталт:

jQuery(document).ready(function($){
  $('#myelem').center();
});

Мені подобаються ваші вдосконалення; однак, все ж є одне питання, яке я знайшов залежно від точної поведінки, яку ви шукаєте. Abs буде чудово працювати, лише якщо користувач повністю прокручується вгору та вліво, інакше користувачеві доведеться прокручувати вікно браузера, щоб дістатися до заголовка. Щоб вирішити цю проблему, я вирішив зробити просте, якщо таке твердження: if (top < w.scrollTop()) top = w.scrollTop();разом із еквівалентом ліворуч. Знову ж таки, це забезпечує різну поведінку, яка може бути, а може і не бути бажаною.
Алекс Йоргенсон

11

Я б використовував функцію інтерфейсу jQuery position .

Дивіться робочу демонстрацію .

<div id="test" style="position:absolute;background-color:blue;color:white">
    test div to center in window
</div>

Якщо у мене є div з id "test" для центру, наступний сценарій буде центром div у вікні готового документа. (значення за замовчуванням для "my" і "at" у параметрах позиції є "center")

<script type="text/javascript">
$(function(){
  $("#test").position({
     of: $(window)
  });
};
</script>

8

Я хотів би виправити одне питання.

this.css("top", ( $(window).height() - this.height() ) / 2+$(window).scrollTop() + "px");

Наведений вище код не працюватиме у випадках, коли this.height(припустимо, що користувач змінює розмір екрана та вміст є динамічним) та scrollTop() = 0, наприклад:

window.heightє 600
this.heightє650

600 - 650 = -50  

-50 / 2 = -25

Тепер вікно зосереджено на -25екрані.


6

Це неперевірено, але щось подібне повинно працювати.

var myElement = $('#myElement');
myElement.css({
    position: 'absolute',
    left: '50%',
    'margin-left': 0 - (myElement.width() / 2)
});

6

Я не думаю, що абсолютна позиція буде найкращою, якщо ви хочете, щоб елемент завжди був зосереджений посередині сторінки. Ви, мабуть, хочете фіксованого елемента. Я знайшов ще один плагін для центрування jquery, який використовував фіксоване позиціонування. Його називають нерухомим центром .


4

Перехідний компонент цієї функції працював для мене дуже погано (не тестував в іншому місці). Я змінив би розмір вікна купу, і мій елемент би почав повільно коситись, намагаючись наздогнати.

Отже, наступна функція коментує цю частину. Крім того, я додав параметри для передачі в необов'язкові булеві x & y, якщо ви хочете централізувати вертикально, але не горизонтально, наприклад:

// Center an element on the screen
(function($){
  $.fn.extend({
    center: function (x,y) {
      // var options =  $.extend({transition:300, minX:0, minY:0}, options);
      return this.each(function() {
                if (x == undefined) {
                    x = true;
                }
                if (y == undefined) {
                    y = true;
                }
                var $this = $(this);
                var $window = $(window);
                $this.css({
                    position: "absolute",
                });
                if (x) {
                    var left = ($window.width() - $this.outerWidth())/2+$window.scrollLeft();
                    $this.css('left',left)
                }
                if (!y == false) {
            var top = ($window.height() - $this.outerHeight())/2+$window.scrollTop();   
                    $this.css('top',top);
                }
        // $(this).animate({
        //   top: (top > options.minY ? top : options.minY)+'px',
        //   left: (left > options.minX ? left : options.minX)+'px'
        // }, options.transition);
        return $(this);
      });
    }
  });
})(jQuery);

4

Щоб центрувати елемент відносно вікна перегляду (вікна) браузера, не використовуйте position: absolute, правильне значення позиції повинно бути fixed(абсолютне значення: "Елемент розміщений відносно першого позиціонованого (не статичного) елемента предка").

Ця альтернативна версія запропонованого центрального плагіна використовує "%" замість "px", тому при зміні розміру вікна вміст залишається в центрі:

$.fn.center = function () {
    var heightRatio = ($(window).height() != 0) 
            ? this.outerHeight() / $(window).height() : 1;
    var widthRatio = ($(window).width() != 0) 
            ? this.outerWidth() / $(window).width() : 1;

    this.css({
        position: 'fixed',
        margin: 0,
        top: (50*(1-heightRatio)) + "%",
        left: (50*(1-widthRatio))  + "%"
    });

    return this;
}

Вам потрібно поставити, margin: 0щоб виключити поля вмісту з ширини / висоти (оскільки ми використовуємо позицію фіксовану, а поля не мають сенсу). Відповідно до документа jQuery використання .outerWidth(true)повинно містити поля, але це не спрацювало так, як очікувалося, коли я спробував у Chrome.

50*(1-ratio)Приходить від:

Ширина вікна: W = 100%

Ширина елемента (у%): w = 100 * elementWidthInPixels/windowWidthInPixels

Вони для обчислення ліворуч по центру:

 left = W/2 - w/2 = 50 - 50 * elementWidthInPixels/windowWidthInPixels =
 = 50 * (1-elementWidthInPixels/windowWidthInPixels)

4

Це чудово. Я додав функцію зворотного дзвінка

center: function (options, callback) {


if (options.transition > 0) {
   $(this).animate(props, options.transition, callback);
} else { 
    $(this).css(props);
   if (typeof callback == 'function') { // make sure the callback is a function
       callback.call(this); // brings the scope to the callback
   }
}

4

Редагувати:

Якщо питання мене чомусь навчив, це так: не змінюйте щось, що вже працює :)

Я надаю (майже) дослівну копію того, як це оброблялося на http://www.jakpsatweb.cz/css/css-vertical-center-solution.html - він сильно зламаний для IE, але забезпечує чистий CSS спосіб відповівши на питання:

.container {display:table; height:100%; position:absolute; overflow:hidden; width:100%;}
.helper    {#position:absolute; #top:50%;
            display:table-cell; vertical-align:middle;}
.content   {#position:relative; #top:-50%;
            margin:0 auto; width:200px; border:1px solid orange;}

Fiddle: http://jsfiddle.net/S9upd/4/

Я запускав це через браузерні знімки, і це здається прекрасним; якщо ні для чого іншого, я збережу оригінал нижче, щоб відсоткове оброблення відсотків, яке диктує специфікація CSS, побачило світло дня.

Оригінал:

Схоже, я спізнююсь на вечірку!

Наведені вище зауваження, які дозволяють припустити, що це питання CSS - розділення проблем та всього. Дозвольте мені передмовити це, сказавши, що CSS справді вистрілив у ногу на цьому. Я маю на увазі, як легко було б це зробити:

.container {
    position:absolute;
    left: 50%;
    top: 50%;
    overflow:visible;
}
.content {
    position:relative;
    margin:-50% 50% 50% -50%;
}

Правильно? Верхній лівий кут контейнера знаходитиметься в центрі екрана, і при негативних полях вміст магічно з’явиться в абсолютному центрі сторінки! http://jsfiddle.net/rJPPc/

Неправильно! Горизонтальне розташування гаразд, але вертикально ... О, бачу. Мабуть у css, при встановленні верхньої межі у% значення розраховується у відсотках завжди відносно ширини блоку, що містить . Як яблука та апельсини! Якщо ви не довіряєте мені чи Mozilla doco, пограйте із загадкою вище, відрегулювавши ширину вмісту та вражте.


Тепер, коли CSS був моїм хлібом та маслом, я не збирався здаватися. У той же час я віддаю перевагу легким речам, тому я запозичив висновки чеського гуру CSS і перетворив його на робочу загадку. Якщо коротко розповісти, ми створюємо таблицю, у якій вертикальне вирівнювання встановлено посередині:

<table class="super-centered"><tr><td>
    <div class="content">
        <p>I am centered like a boss!</p>
    </div>
</td></tr></table>

І чим позиція контенту чітко налаштована зі старим хорошим запасом: 0 авто; :

.super-centered {position:absolute; width:100%;height:100%;vertical-align:middle;}
.content {margin:0 auto;width:200px;}​

Робоча загадка, як обіцяли: http://jsfiddle.net/teDQ2/


1
Проблема в тому, що не в центрі.
Конрад Боровський

@GlitchMr: Я хотів би завтра перевірити робочу скриньку, але друга скрипка спрацювала чудово на Chrome / Safari Mac
ов

Правильно, я перевірив у Chrome, Firefox та Internet Explorer 8+ (IE7 не працює), і він працює. Але в Opera це не працює ... і це дуже дивно, враховуючи, що це простий CSS і він працює в інших браузерах.
Конрад Боровський

@GlitchMr: дякую, що стежили за таким старим питанням. Я оновив вищезазначене посилання на скрипку, щоб показати "правильну" відповідь - повідомте мені, чи спрацьовує вона для вас (або вниз у непритомність. У мене був шанс! :)
ов

Хе, все, що я зроблю, - це не оскарження, якщо не з’явиться належна відповідь (наразі це все ще не працює в Opera, але я думаю, що це помилка браузера) ... о, зачекайте ... це працює, якщо я зміню розмір вікна, а не якщо я зміню розміри вікон у самій JSFiddle. Отже, працює :). Пробачте за це. Але все-таки слід попередити, що він не працює в IE7. +1. О, і я думаю, що це працює в IE6 ...
Конрад Боровський,

3

Я маю тут метод "центр", який гарантує, що елемент, який ви намагаєтеся центрирувати, є не лише "фіксованим" або "абсолютним" позиціонуванням, але також гарантує, що елемент, який ви центруєте, буде меншим за його батьківський, це центри а елемент відносно є батьківським; якщо батьківський елемент менший, ніж сам елемент, він розграбує DOM до наступного батька та відцентрує його відносно цього.

$.fn.center = function () {
        /// <summary>Centers a Fixed or Absolute positioned element relative to its parent</summary>

        var element = $(this),
            elementPos = element.css('position'),
            elementParent = $(element.parent()),
            elementWidth = element.outerWidth(),
            parentWidth = elementParent.width();

        if (parentWidth <= elementWidth) {
            elementParent = $(elementParent.parent());
            parentWidth = elementParent.width();
        }

        if (elementPos === "absolute" || elementPos === "fixed") {
            element.css('right', (parentWidth / 2) - elementWidth / 2 + 'px');
        }
    };

2

я використовую це:

$(function() {
   $('#divId').css({
    'left' : '50%',
    'top' : '50%',
    'position' : 'absolute',
    'margin-left' : -$('#divId').outerWidth()/2,
    'margin-top' : -$('#divId').outerHeight()/2
  });
});

2

Будь ласка, використовуйте це:

$(window).resize(function(){
    $('.className').css({
        position:'absolute',
        left: ($(window).width() - $('.className').outerWidth())/2,
        top: ($(window).height() - $('.className').outerHeight())/2
    });
});

// To initially run the function:
$(window).resize();

0

ви отримуєте такий поганий перехід, оскільки ви регулюєте положення елемента кожного разу, коли документ прокручується. Те, що ви хочете, - це використання фіксованого позиціонування. Я спробував цей плагін з фіксованим центром, перерахований вище, і, здається, вирішує проблему непогано. Фіксоване позиціонування дозволяє вам один раз центрирувати елемент, а властивість CSS буде дбати про збереження цієї позиції для вас кожного разу, коли ви прокручуєте.


0

Ось моя версія. Я можу змінити це після перегляду цих прикладів.

$.fn.pixels = function(property){
    return parseInt(this.css(property));
};

$.fn.center = function(){
    var w = $($w);
    return this.each(function(){
        $(this).css("position","absolute");
        $(this).css("top",((w.height() - $(this).height()) / 2) - (($(this).pixels('padding-top') + $(this).pixels('padding-bottom')) / 2) + w.scrollTop() + "px");
        $(this).css("left",((w.width() - $(this).width()) / 2) - (($(this).pixels('padding-left') + $(this).pixels('padding-right')) / 2) + w.scrollLeft() + "px");
    });
};

0

Для цього не потрібен jquery

Я використовував це для центру Div-елемента. Стиль Css,

.black_overlay{
    display: none;
    position: absolute;
    top: 0%;
    left: 0%;
    width: 100%;
    height: 100%;
    background-color: black;
    z-index:1001;
    -moz-opacity: 0.8;
    opacity:.80;
    filter: alpha(opacity=80);
}

.white_content {
    display: none;
    position: absolute;
    top: 25%;
    left: 25%;
    width: 50%;
    height: 50%;
    padding: 16px;
    border: 16px solid orange;
    background-color: white;
    z-index:1002;
    overflow: auto;
}

Відкритий елемент

$(document).ready(function(){
    $(".open").click(function(e){
      $(".black_overlay").fadeIn(200);
    });

});

Ви забули включити html до своєї відповіді?
Бен

0

МОЕ ОНОВЛЕННЯ ДО ВІДПОВІДУ ТОНІ Це мій варіант його відповіді, який я зараз релігійно використовую. Я думав, що поділюсь цим, оскільки це додає йому трохи більше функціональності для різних ситуацій, наприклад, для різних типів positionабо бажаючих лише горизонтального / вертикального центрування, а не для обох.

center.js:

// We add a pos parameter so we can specify which position type we want

// Center it both horizontally and vertically (dead center)
jQuery.fn.center = function (pos) {
    this.css("position", pos);
    this.css("top", ($(window).height() / 2) - (this.outerHeight() / 2));
    this.css("left", ($(window).width() / 2) - (this.outerWidth() / 2));
    return this;
}

// Center it horizontally only
jQuery.fn.centerHor = function (pos) {
    this.css("position", pos);
    this.css("left", ($(window).width() / 2) - (this.outerWidth() / 2));
    return this;
}

// Center it vertically only
jQuery.fn.centerVer = function (pos) {
    this.css("position", pos);
    this.css("top", ($(window).height() / 2) - (this.outerHeight() / 2));
    return this;
}

По-моєму <head>:

<script src="scripts/center.js"></script>

Приклади використання:

$("#example1").centerHor("absolute")
$("#example2").centerHor("fixed")

$("#example3").centerVer("absolute")
$("#example4").centerVer("fixed")

$("#example5").center("absolute")
$("#example6").center("fixed")

Він працює з будь-яким типом позиціонування і може легко використовуватися на всьому веб-сайті, а також легко переноситися на будь-який інший створений вами сайт. Немає більше дратівливих шляхів вирішення проблем щодо правильного центрування чогось.

Сподіваюся, це корисно для когось там! Насолоджуйтесь.


0

Багато способів зробити це. Мій об’єкт зберігається прихованим із відображенням: жоден не знаходиться просто всередині тегу BODY, щоб позиціонування було відносно BODY. Після використання $ ("# object_id"). Show () , я викликаю $ ("# object_id") центр центру ()

Я використовую позицію: абсолютна, тому що можливо, особливо на невеликому мобільному пристрої, модальне вікно більше, ніж вікно пристрою, і в цьому випадку частина модального вмісту може бути недоступною, якби позиціонування було встановлено.

Ось мій смак на основі відповідей інших та моїх конкретних потреб:

$.fn.center = function () {
        this.css("position","absolute");

        //use % so that modal window will adjust with browser resizing
        this.css("top","50%");
        this.css("left","50%");

        //use negative margin to center
        this.css("margin-left",(-1*this.outerWidth()/2)+($(window).scrollLeft())+"px");
        this.css("margin-top",(-1*this.outerHeight()/2)+($(window).scrollTop())+"px");

        //catch cases where object would be offscreen
        if(this.offset().top<0)this.css({"top":"5px","margin-top":"0"});
        if(this.offset().left<0)this.css({"left":"5px","margin-left":"0"});

        return this;
    };

0

Ви можете використовувати translateвластивість CSS :

position: absolute;
transform: translate(-50%, -50%);

Прочитайте цю публікацію для отримання більш детальної інформації.


1
Для чогось подібного ви хочете встановити своє, left: 50%а top: 50%потім можете використовувати переклад перетворення, щоб правильно перемістити його центральну точку. Однак за допомогою цього методу веб-переглядачі, такі як Chrome, спотворюватимуть / розмиватимуть ваш текст після цього, що зазвичай не бажано. Краще схопити ширину / висоту вікна, а потім розташувати ліворуч / верх на основі цього, а не возитися з перетворенням. Запобігає викривлення і працює в кожному браузері, на який я його перевіряв.
Fata1Err0r

0

Як правило, я б робив це лише за допомогою CSS ... але, оскільки ви попросили способу зробити це за допомогою jQuery ...

Наступний код центрирует діву як горизонтально, так і вертикально всередині його контейнера:

$("#target").addClass("centered-content")
            .wrap("<div class='center-outer-container'></div>")
            .wrap("<div class='center-inner-container'></div>");
body {
    margin : 0;
    background: #ccc;
}

.center-outer-container {
    position : absolute;
    display: table;
    width: 100%;
    height: 100%;
}

.center-inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding : 20px;
    border : 1px solid #000;
}
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.1.min.js"></script>
<div id="target">Center this!</div>

(див. також цей Fiddle )


0

CSS-рішення Тільки у двох рядках

Він централізує ваш внутрішній поділ по горизонталі та вертикалі.

#outer{
  display: flex;
}
#inner{
margin: auto;

}

лише горизонтальне вирівнювання, зміна

margin: 0 auto;

а для вертикальної - зміна

margin: auto 0;

0

Просто скажіть: $ ("# divID"). Html ($ (''). Html ($ ("# divID"). Html ()));


-6

Чому ви не використовуєте CSS для центрування діва?

#timer_wrap{  
  position: fixed;
  left: 50%;
  top: 50%;
} 

2
У вашому прикладі вгорі / зліва дива буде місце, де повинен бути центр.
Крісті Міхай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.