Как центрировать абсолютно позиционированный элемент в div?
мне нужно div
(С position:absolute;
) элемент в центре из моего окна. Но у меня возникли проблемы с этим, потому что ширина неизвестна.
Я попытался это. Но его нужно отрегулировать, так как ширина реагирует.
.center {
left: 50%;
bottom:5px;
}
какие идеи?
26 ответов
<body>
<div style="position: absolute; left: 50%;">
<div style="position: relative; left: -50%; border: dotted red 1px;">
I am some centered shrink-to-fit content! <br />
tum te tum
</div>
</div>
</body>
это работает для меня:
#content {
position: absolute;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
width: 100px; /* Need a specific value to work */
}
<body>
<div>
<div id="content">
I'm the content
</div>
</div>
</body>
Отзывчивый Решением
вот хорошее решение для отзывчивого дизайна или неизвестных размеров В общем если вам не нужно поддерживать IE8 и ниже.
.centered-axis-x {
position: absolute;
left: 50%;
transform: translate(-50%, 0);
}
.outer {
position: relative; /* or absolute */
/* unnecessary styling properties */
margin: 5%;
width: 80%;
height: 500px;
border: 1px solid red;
}
.inner {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
/* unnecessary styling properties */
max-width: 50%;
text-align: center;
border: 1px solid blue;
}
<div class="outer">
<div class="inner">I'm always centered<br/>doesn't matter how much text, height or width i have.<br/>The dimensions or my parent are irrelevant as well</div>
</div>
Подсказка в том, что left: 50%
относительно родителя в то время как translate
преобразование относительно ширины/высоты элементов.
таким образом, вы имейте совершенно центризованный элемент, с гибкой шириной как на ребенке, так и на родителе. Бонус: это работает, даже если ребенок больше, чем родителей.
вы также можете центрировать его по вертикали с помощью этого (и опять же, ширина и высота родителя и ребенка могут быть полностью гибкими (и / или неизвестными)):
.centered-axis-xy {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
имейте в виду, что вам может понадобиться transform
поставщик с префиксом. Например -webkit-transform: translate(-50%,-50%);
очень хороший пост.. Просто хотел добавить, если кто-то хочет сделать это с помощью одного тега div, то здесь выход:
С width
as 900px
.
#styleName {
position: absolute;
left: 50%;
width: 900px;
margin-left: -450px;
}
в этом случае надо знать width
заранее.
- Абсолютный Центр
HTML:
<div class="parent">
<div class="child">
<!-- content -->
</div>
</div>
CSS:
.parent {
position: relative;
}
.child {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
демо: http://jsbin.com/rexuk/2/
протестировано в Google Chrome, Firefox и IE8
надеюсь, что это помогает :)
эта работа для вертикального и горизонтального
#myContent{
position: absolute;
left: 0;
right: 0;
top:0;
bottom:0;
margin: auto;
}
и если вы хотите сделать центр элемента родителя, установите положение родителя относительно
#parentElement{
position:relative
}
edit:
для вертикального выравнивания по центру установите высоту элемента. благодаря @Raul
Если вы хотите сделать центр элемента родителя, установите положение родителя в относительное
поиск решения я получил ответы выше и мог бы сделать контент центрированным с Matthias Weiler ответ, но с помощью выравнивания текста.
#content{
position:absolute;
left:0;
right:0;
text-align: center;
}
работал с chrome и Firefox.
Я понимаю, что у этого вопроса уже есть несколько ответов, но я никогда не находил решения, которое работало бы почти во всех классах, что также имеет смысл и элегантно, поэтому вот мой взгляд после настройки кучу:
.container {
position: relative;
}
.container .cat-link {
position: absolute;
left: 50%;
top: 50%;
transform: translate3d(-50%,-50%,0);
z-index: 100;
text-transform: uppercase; /* Forces CSS to treat this as text, not a texture, so no more blurry bugs */
background-color: white;
}
.color-block {
height: 250px;
width: 100%;
background-color: green;
}
<div class="container">
<a class="cat-link" href="">Category</a>
<div class="color-block"></div>
</div>
то, что это делает, говорит, Дайте мне top: 50%
и left: 50%
, затем преобразуйте (создайте пространство)на обеих осях X/Y в -50%
значение, в некотором смысле "создать зеркальное пространство".
таким образом, это создает равные пространство на всех 4 точках div, которое всегда является коробкой (имеет 4 стороны).
Это:
- Работа без необходимости знать высоту / ширину родителя.
- работа над отзывчивым.
- работа на оси X или Y. Или и то и другое, как в моем примере.
- я не могу придумать ситуацию, когда она не работает.
насколько я знаю, этого невозможно достичь для неизвестной ширины.
вы можете - если это работает в вашем сценарии-абсолютно позиционировать невидимый элемент со 100% шириной и высотой и иметь элемент по центру, используя margin: auto и, возможно, вертикальное выравнивание. В противном случае вам понадобится Javascript для этого.
Я хотел бы добавить к ответу @bobince:
<body>
<div style="position: absolute; left: 50%;">
<div style="position: relative; left: -50%; border: dotted red 1px;">
I am some centered shrink-to-fit content! <br />
tum te tum
</div>
</div>
</body>
улучшено: / / / это делает горизонтальную полосу прокрутки не отображаться с большими элементами в центре div.
<body>
<div style="width:100%; position: absolute; overflow:hidden;">
<div style="position:fixed; left: 50%;">
<div style="position: relative; left: -50%; border: dotted red 1px;">
I am some centered shrink-to-fit content! <br />
tum te tum
</div>
</div>
</div>
</body>
Heres полезный плагин jQuery для этого. Найдено здесь. Я не думаю, что это возможно только с CSS
/**
* @author: Suissa
* @name: Absolute Center
* @date: 2007-10-09
*/
jQuery.fn.center = function() {
return this.each(function(){
var el = $(this);
var h = el.height();
var w = el.width();
var w_box = $(window).width();
var h_box = $(window).height();
var w_total = (w_box - w)/2; //400
var h_total = (h_box - h)/2;
var css = {"position": 'absolute', "left": w_total+"px", "top":
h_total+"px"};
el.css(css)
});
};
мой предпочтительный метод центрирования:
position: absolute;
margin: auto;
width: x%
- абсолютный располагать элемента блока
- маржа авто
- же слева / справа, сверху / снизу
JSFiddle здесь
версия Sass / compass отзывчивого решения выше:
#content {
position: absolute;
left: 50%;
top: 50%;
@include vendor(transform, translate(-50%, -50%));
}
это сработало для меня:
<div class="container><p>My text</p></div>
.container{
position: absolute;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
}
Я знаю, что я уже дал ответ, и мой предыдущий ответ, наряду с другими данными, работает просто отлично. Но я использовал это в прошлом, и он лучше работает в определенных браузерах и в определенных ситуациях. Поэтому я подумал, что дам и этот ответ. Я не "редактировал" свой предыдущий ответ и не добавлял его, потому что я чувствую, что это совершенно отдельный ответ, и два я предоставил не связаны.
HTML-код:
<div id='parent'>
<div id='child'></div>
</div>
CSS:
#parent {
display: table;
}
#child {
display: table-cell;
vertical-align: middle;
}
#container
{
position: relative;
width: 100%;
float:left
}
#container .item
{
width: 50%;
position: absolute;
margin: auto;
left: 0;
right: 0;
}
работает на любой случайной неизвестной ширине абсолютного позиционированного элемента, который вы хотите иметь в центре элемента контейнера.
<div class="container">
<div class="box">
<img src="https://picsum.photos/200/300/?random" alt="">
</div>
</div>
.container {
position: relative;
width: 100%;
}
.box {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
}
HTML-код:
<div class="wrapper">
<div class="inner">
content
</div>
</div>
CSS:
.wrapper {
position: relative;
width: 200px;
height: 200px;
background: #ddd;
}
.inner {
position: absolute;
top: 0; bottom: 0;
left: 0; right: 0;
margin: auto;
width: 100px;
height: 100px;
background: #ccc;
}
этот и другие примеры здесь
HTML-код
<div id='parent'>
<div id='centered-child'></div>
</div>
в CSS
#parent {
position: relative;
}
#centered-child {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto auto;
}
это трюк, который я понял, чтобы заставить DIV плавать точно в центре страницы. Очень некрасиво конечно, но работает во всех
точки и тире
<div style="border: 5 dashed red;position:fixed;top:0;bottom:0;left:0;right:0;padding:5">
<table style="position:fixed;" width="100%" height="100%">
<tr>
<td style="width:50%"></td>
<td style="text-align:center">
<div style="width:200;border: 5 dashed green;padding:10">
Perfectly Centered Content
</div>
</td>
<td style="width:50%"></td>
</tr>
</table>
</div>
пылесос
<div style="position:fixed;top:0px;bottom:0px;left:0px;right:0px;padding:5px">
<table style="position:fixed" width="100%" height="100%">
<tr>
<td style="width:50%"></td>
<td style="text-align:center">
<div style="padding:10px">
<img src="Happy.PM.png">
<h2>Stays in the Middle</h2>
</div>
</td>
<td style="width:50%"></td>
</tr>
</table>
это решение работает, если элемент width
и height
.wrapper {
width: 300px;
height: 200px;
background-color: tomato;
position: relative;
}
.content {
width: 100px;
height: 100px;
background-color: deepskyblue;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
<div class="wrapper">
<div class="content"></div>
</div>
вы можете поместить изображение в div и добавить идентификатор div и иметь CSS для этого div
есть text-align:center
HTML:
<div id="intro_img">
<img src="???" alt="???">
</div>
CSS:
#intro_img {
text-align:center;
}
#content { margin:0 auto; display:table; float:none;}
<body>
<div>
<div id="content">
I'm the content
</div>
</div>
</body>
простой подход, который работал для меня, чтобы горизонтально центрировать блок неизвестной ширины:
<div id="wrapper">
<div id="block"></div>
</div>
#wrapper { position: absolute; width: 100%; text-align: center; }
#block { display: inline-block; }
свойство выравнивания текста может быть добавлено в набор правил #block Для выравнивания его содержимого независимо от выравнивания блока.
это работало на последних версиях Firefox, Chrome, IE, Edge и Safari.
я использовал аналогичное решение:
#styleName {
position: absolute;
margin-left: -"X"px;
}
где " X " - половина ширины div, которую я хочу отобразить. Отлично работает для меня во всех браузерах.
старайтесь не использовать темную сторону CSS. Избегайте использования отрицательных значений для полей. Я знаю, что иногда тебя заставляют делать такие ужасные вещи, как ... --0-->, но, вероятно, вы могли бы сделать что-то вроде right: 450px
. Это просто мой способ работать.