Центрировать позицию: фиксированный элемент

Я хотел бы создать всплывающее окно position: fixed;, центрированное на экране с динамической шириной и высотой. Для этого я использовал margin: 5% auto;. Без position: fixed; он центрируется по горизонтали, но не по вертикали. После добавления position: fixed; он даже не центрируется по горизонтали.

Здесь полный комплект:

.jqbox_innerhtml {
    position: fixed;
    width: 500px;
    height: 200px;
    margin: 5% auto;
    padding: 10px;
    border: 5px solid #ccc;
    background-color: #fff;
}
<div class="jqbox_innerhtml">
    This should be inside a horizontally
    and vertically centered box.
</div>

Ответы

Ответ 1

В основном вам нужно установить top и left в 50%, чтобы центрировать левый верхний угол div. Вам также необходимо установить margin-top и margin-left на отрицательную половину высоты и ширины div, чтобы сдвинуть центр в середину div.

Таким образом, при условии <!DOCTYPE html> (режим стандартов) это должно выполняться:

position: fixed;
width: 500px;
height: 200px;
top: 50%;
left: 50%;
margin-top: -100px; /* Negative half of height. */
margin-left: -250px; /* Negative half of width. */

Или, если вы не заботитесь о центрировании вертикальных и старых браузеров, таких как IE6/7, вы можете вместо этого добавить left: 0 и right: 0 к элементу, имеющему margin-left и margin-right of auto, так что фиксированный позиционированный элемент, имеющий фиксированную ширину, знает, где начинаются его левые и правые смещения. В вашем случае:

position: fixed;
width: 500px;
height: 200px;
margin: 5% auto; /* Will not center vertically and won't work in IE6/7. */
left: 0;
right: 0;

Опять же, это работает только в IE8 +, если вы заботитесь об IE, и это центрируется только по горизонтали, а не по вертикали.

Ответ 2

Я хочу создать всплывающее окно, центрированное на экране с динамической шириной и высотой.

Вот современный подход для горизонтального центрирования элемента с динамической шириной - он работает во всех современных браузерах; можно увидеть здесь.

Обновленный пример

.jqbox_innerhtml {
    position: fixed;
    left: 50%;
    transform: translateX(-50%);
}

Для вертикального и горизонтального центрирования вы можете использовать следующее:

Обновленный пример

.jqbox_innerhtml {
    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}

Возможно, вы захотите добавить и дополнительные свойства префиксов поставщика (см. примеры).

Ответ 3

Или просто добавьте left: 0 и right: 0 к исходному CSS, что заставляет его вести себя аналогично регулярному нефиксированному элементу и работает обычная автоматическая маргинальная техника:

.jqbox_innerhtml
{
  position: fixed;
  width:500px;
  height:200px;
  background-color:#FFF;
  padding:10px;
  border:5px solid #CCC;
  z-index:200;
  margin: 5% auto;
  left: 0;
  right: 0;
}

Обратите внимание, что вам нужно использовать допустимый (X) HTML DOCTYPE, чтобы он корректно вел себя в IE (что вы, конечно же, должны иметь...!)

Ответ 4

Добавьте контейнер, например:

div {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  text-align: center;
}

Затем поместите свою коробку в этот div, чтобы выполнить работу.

Ответ 5

.hypersource {
  position: fixed;
  top: 50%;
  left: 50%;
  /* bring your own prefixes */
  transform: translate(-50%, -50%);
}

Ответ 6

Для новых браузеров его работа, если

 left: 0;
 right: 0;
 top: (you can place any value, its work);
 margin: 0 auto;

Ответ 7

Просто добавьте:

left: calc(-50vw + 50%);
right: calc(-50vw + 50%);
margin-left: auto;
margin-right: auto;

Ответ 8

Это решение не требует от вас определения ширины и высоты для вашего всплывающего div.

http://jsfiddle.net/4Ly4B/33/

И вместо того, чтобы вычислять размер всплывающего окна и минус половину вверх, javascript изменяет размер popupContainer, чтобы заполнить весь экран...

(высота 100% не работает при использовании дисплея: table-cell; (требуется, чтобы центрировать что-то вертикально))...

В любом случае он работает:)

Ответ 9

left: 0;
right: 0;

Не работал в IE7.

Изменено на

left:auto;
right:auto;

Начинал работать, но в остальных браузерах он перестает работать! Таким образом, этот метод используется для IE7 ниже

if ($.browser.msie && parseInt($.browser.version, 10) <= 7) {                                
  strAlertWrapper.css({position:'fixed', bottom:'0', height:'auto', left:'auto', right:'auto'});
}

Ответ 10

Вы можете просто обернуть его в другой div и установить его position fixed.

.bg {
  position: fixed;
  width: 100%;
}

.jqbox_innerhtml {
  width: 500px;
  height: 200px;
  margin: 5% auto;
  padding: 10px;
  border: 5px solid #ccc;
  background-color: #fff;
}
<div class="bg">
  <div class="jqbox_innerhtml">
    This should be inside a horizontally and vertically centered box.
  </div>
</div>

Ответ 11

Чтобы исправить положение используйте это: -

div {
    position: fixed;
    left: 68%;
    transform: translateX(-8%);
}

Ответ 12

Один возможный answer:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>CSS Center Background Demo</title>
    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
        }

        div.centred_background_stage_1 {
            position: fixed;
            z-index:(-1 );
            top: 45%;
            left: 50%;
        }

        div.centred_background_stage_2 {
            position: relative;
            left: -50%;

            top: -208px;
            /* % does not work.
               According to the
               http://reeddesign.co.uk/test/points-pixels.html
               6pt is about 8px

               In the case of this demo the background
               text consists of three lines with
               font size 80pt.

               3 lines (with space between the lines)
               times 80pt is about
               ~3*(1.3)*80pt*(8px/6pt)~ 416px

               50% from the 416px = 208px
             */

            text-align: left;
            vertical-align: top;
        }

        #bells_and_wistles_for_the_demo {
            font-family: monospace;
            font-size: 80pt;
            font-weight: bold;
            color: #E0E0E0;
        }

        div.centred_background_foreground {
            z-index: 1;
            position: relative;
        }
    </style>
</head>
<body>
<div class="centred_background_stage_1">
    <div class="centred_background_stage_2">
        <div id="bells_and_wistles_for_the_demo">
            World<br/>
            Wide<br/>
            Web
        </div>
    </div>
</div>
<div class="centred_background_foreground">
    This is a demo for <br/>
    <a href="http://stackoverflow.com/questions/2005954/center-element-with-positionfixed">
        http://stackoverflow.com/questions/2005954/center-element-with-positionfixed
    </a>
    <br/><br/>
    <a href="http://www.starwreck.com/" style="border: 0px;">
        <img src="./star_wreck_in_the_perkinnintg.jpg"
             style="opacity:0.1;"/>
    </a>
    <br/>
</div>
</body>
</html>

Ответ 13

Попробуйте использовать это для горизонтальных элементов, которые не будут центрировать правильно.

width: calc (ширина: 100% - ширина независимо от того, что еще не центрирует его)

Например, если ваша боковая панель навигации 200px:

width: calc(100% - 200px);

Ответ 14

Я использовал vw (ширина области просмотра) и vh (высота области просмотра). окно просмотра - это весь ваш экран. 100vw - общая ширина ваших экранов, а 100vh - общая высота.

.class_name{
    width: 50vw;
    height: 50vh;
    border: 1px solid red;
    position: fixed;
    left: 25vw;top: 25vh;   
}

Ответ 15

Единственное надежное решение - использовать таблицу align = center, как в:

<table align=center><tr><td>
<div>
...
</div>
</td></tr></table>

Я не могу поверить, что люди во всем мире тратят эти обильные суммы на глупые времена, чтобы решить такую ​​фундаментальную проблему, как центрирование div. Решение css не работает для всех браузеров, jquery-решение является программным вычислительным решением и не является вариантом для других причин.

Я потратил слишком много времени, чтобы избежать использования таблицы, но опыт подсказывает мне прекратить борьбу с ней. Используйте таблицу для центрирования div. Работает постоянно во всех браузерах! Больше не беспокойтесь.