Выравнивание по центру на абсолютно позиционированном элементе Div

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>

Div находится наверху, но я не могу центрировать его с помощью <center> или margin: 0 auto;

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
96
0
122 107
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Ваша проблема может быть решена, если вы зададите div фиксированную ширину, а именно:

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

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

Aayush 31.08.2010 14:19

что, если пользователь вертикально прокрутил вниз, div появляется вверху страницы, а он должен отображаться в видимой области

PUG 26.08.2012 21:45

Я показываю эскизы изображений с динамическим изменением размера в моем наложенном div, поэтому я не знаю ширины.

PUG 01.09.2012 08:13

это только обходной путь, stackoverflow.com/questions/1776915/… кажется решением

PUG 01.09.2012 09:00

Это неправильный ответ. Этот фрагмент не поддерживается другим типом мультимедиа.

Sushan 28.10.2014 10:59

Установите ширину и левое поле в процентах, чтобы сделать его отзывчивым. width: 80%; margin-left: -40%

Mihir 13.05.2016 13:07

Обратите внимание, что это работает, потому что вы перемещаете div в «начало» из центра с помощью 'Left: 50%;' а затем вы отрегулируете влево, используя margin-left, который составляет половину вашей фактической ширины. Я бы сказал, гений.

iWillGetBetter 30.09.2016 13:31

если вы используете фиксированную ширину, это лучшее решение.

Shafeeque Shaz 04.02.2019 13:27

Да:

div#thing { text-align:center; }

Это выровняет содержимое внутри div. Он не будет выравнивать div по центру страницы. Он также не будет выравнивать абсолютно позиционированный div каким-либо образом, кроме его содержимого, которое является частью потока документов.

CarterMan 12.04.2013 23:58
div#thing
{
    position: absolute;
    width:400px;
    right: 0;
    left: 0;
    margin: auto;
}

Как это работает? Не могли бы вы объяснить, почему ваш ответ верен?

afuzzyllama 10.12.2012 22:08

Мне очень нравится этот метод в 99% случаев, вам не нужно иметь дело с отступами, границами и т. д. Я никогда не видел, чтобы это терпело неудачу, в следующий раз приведите пример, если он не удастся для вас.

Dan 11.11.2013 22:47

В этом решении здорово то, что оно работает и с процентами, только не уверен, что оно кроссбраузерно.

maljukan 02.02.2014 20:47

Вау. Я не ожидал, что это сработает, но у меня это сработало как шарм

Awais Umar 25.07.2014 16:06

Добавьте bottom:0;, и вы сможете центрировать нижний колонтитул страницы ... именно то, что я искал, спасибо.

zaxvo 22.08.2014 01:16

если вы удалите свойство position, right и left, элемент div будет в основном по центру. Дело в том, что вы не можете использовать margin: auto, если начинаете корректировать положение элемента. Но, читая вопрос, я не понимаю, зачем ему позиционировать элемент как абсолютный.

Janzell Jurilla 27.01.2015 09:03

@dav: "[установка значения для левого / правого] ​​определяет, насколько край поля (…) блока смещен до края (…) содержащего его блока». w3.org/TR/CSS2/visuren.html#position-props

Herr_Schwabullek 08.04.2015 14:55

Прелесть этого в том, что вам не нужно знать ширину.

MarcGuay 30.06.2015 00:31

Я согласен с тем, что это должен быть правильный ответ, маржа -200 пикселей кричит мне как взломать.

Mani5556 28.07.2015 21:48

Это работает лучше, чем выбранный ответ, так как он гораздо более универсален.

BarryMode 07.12.2015 23:20

Согласитесь, это намного лучше, но я использовал маржу: 0 auto 0 auto; хотя. Но хороший сол.

joy 15.07.2016 01:21

Это (лучший ответ)

Mahdi Jazini 07.11.2016 16:45

Хитрость заключается в установке якорей left: 0; и right: 0;, тогда это может выглядеть как выравнивание horizontal-center (я искал что-то подобное для react-native и использовал компонент top: 0; bottom: 0;', I was able to stretch`, и сделал его похожим на выравнивание vertical-center с помощью justifyContent: 'center')

Top-Master 09.06.2019 08:25

Если вам необходимо иметь относительную ширину (в процентах), вы можете обернуть свой div в абсолютное позиционирование:

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

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

У меня была такая же проблема, и мое ограничение заключалось в том, что у меня не может быть предопределенной ширины. Если ваш элемент не имеет фиксированной ширины, попробуйте это

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>

Я знаю, что опаздываю на вечеринку, но я подумал, что дам ответ здесь для людей, которым нужно горизонтально расположить абсолютный элемент, когда вы не знаете его точную ширину.

Попробуй это:

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

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

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

Вааат. Это круто! Не могли бы вы объяснить, как это работает? Обновлено: немного поохотился, и похоже, что слева: 50% перемещает левое местоположение div в центр, который на самом деле не центр. Но translateX сдвигает его назад на 50% от ширина содержимого

azizj1 10.11.2016 15:20

Абсолютное позиционирование будет располагаться от верхнего левого угла элемента. Использование translate сдвинет его на сумму относительно его размера.

Michael Giovanni Pumo 15.11.2016 16:19

Майкл, просто хотел, чтобы вы знали, вы не опоздали на вечеринку ... и для тех, кто не знает: transform: translate (-50%, -50%); выполняет как вертикальное, так и горизонтальное центрирование с помощью 1 линии

Marvel Moe 09.01.2017 10:22

Чтобы центрировать его как по вертикали, так и по горизонтали, сделайте следующее:

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

Или вы можете использовать относительные единицы, например

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

.contentBlock {
    width: {define width}
    width: 400px;
    position: absolute;
    left: 0;
    right: 0;
    margin-left: auto;
    margin-right: auto;
 
}

Другие вопросы по теме