Вирівнювання по центру на абсолютно розташованому розд


93
div#thing {
  position: absolute;
  top: 0px;
  z-index: 2;
  margin: 0 auto;
}

<div id="thing">
   <p>text text text with no fixed size, variable font</p>
</div>

Діл знаходиться вгорі, але я не можу його за допомогою <center>або margin: 0 auto;

Відповіді:


152

Ваша проблема може бути вирішена, якщо ви надаєте divфіксовану ширину таким чином:

div#thing {
    position: absolute;
    top: 0px;
    z-index: 2;
    width:400px;
    margin-left:-200px;
    left:50%;
}

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

1
а якщо користувач вертикально прокрутив вниз, div відображається вгорі сторінки, тоді як він повинен з’являтися на видимій ділянці
PUG

Я показую ескізи динамічно змінених зображень у своєму роздільному наборі, тому не знаю ширини.
PUG

4
це лише тимчасове рішення, stackoverflow.com/questions/1776915 / ... , як видається , рішення
МОПС

1
Це неправильна відповідь. Інший тип носія не підтримує цей фрагмент.
Сушан

97
div#thing
{
    position: absolute;
    width:400px;
    right: 0;
    left: 0;
    margin: auto;
}

3
Як це працює? Чи можете ви повідомити, чому ваша відповідь дійсна?
afuzzyllama

1
Мені дуже подобається цей метод в інших 99% випадків, вам не доводиться мати справу з заповненням, кордонами тощо. Я ніколи не бачив, щоб ця помилка виникла, наступного разу наведіть приклад, якщо вона не вдасться вам.
Ден,

1
Класна річ цього рішення - це те, що воно працює і з відсотками, просто не впевнений, чи сумісне воно з переглядачами
maljukan 02

1
Ого. Я не очікував, що це спрацює, але це спрацювало для мене як шарм
Awais Umar

4
Я погоджуюсь, що це повинна бути правильна відповідь, поріг -200px кричить мені.
Mani5556

36

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

Спробуйте це:

// Horizontal example.
div#thing {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

Той самий прийом можна також застосувати, коли вам може знадобитися вертикальне вирівнювання, просто відрегулювавши властивості так:

// Vertical example.
div#thing {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

1
Whaaat. Це круто! Не могли б ви пояснити, як це працює? Редагувати: Виконували полювання, і здається лівим: 50% переміщує ліве місце div у центр, який насправді не є центром. Але translateX зміщує його назад на 50% від ширини вмісту
Азіз Джавед

2
Абсолютне позиціонування розміщуватиметься у верхньому лівому куті елемента. Використання перекладу змістить його до суми щодо його розміру.
Майкл Джованні Пумо

3
Майкл, просто хотів, щоб ти знав, що ти не спізнився до партійного бутону ... а для тих, хто цього не знаєш: transform: translate (-50%, -50%); робить як вертикальне, так і горизонтальне центрування за допомогою однієї лінії
Marvel Moe,

4

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

div#thing {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
}

0

Якщо вам потрібно мати відносну ширину (у відсотках), ви можете обернути свій div в абсолютно позиціонований:

div#wrapper {
    position: absolute;
    width: 100%;
    text-align: center;
}

Пам'ятайте, що для того, щоб позиціонувати елемент абсолютно, батьківський елемент повинен розташовуватися відносно.


0

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

div#thing 
{ 
  position: absolute; 
  top: 0px; 
  z-index: 2; 
  left:0;
  right:0;
 }

div#thing-body
{
  text-align:center;
}

потім змініть свій html, щоб виглядати так

<div id="thing">
 <div id="thing-child">
  <p>text text text with no fixed size, variable font</p>
 </div>
</div>

0

Або ви можете використовувати відносні одиниці виміру, наприклад

#thing {
    position: absolute;
    width: 50vw;
    right: 25vw;
}


-22

Так:

div#thing { text-align:center; }

5
Це вирівняє вміст у div. Це не буде вирівнювати div у центрі сторінки. Він також не буде вирівнювати абсолютно позиціонований div будь-яким способом, крім вмісту всередині нього, що є частиною потоку документів.
CarterMan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.