Центрировать позицию: фиксированный элемент
Я хотел бы создать всплывающее окно 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. Работает постоянно во всех браузерах! Больше не беспокойтесь.