слева: 50% элемента не появляется в середине страницы - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть всплывающее окно с абсолютным позиционированием (наведите курсор на «ледяное белое» изображение, чтобы увидеть всплывающее окно), у которого css left: 50% Теперь это должно появиться в середине страницы, но это не так. Любые предложения, пожалуйста? Заранее спасибо.

Ответы [ 5 ]

9 голосов
/ 26 сентября 2011

Вы также должны добавить margin-left с отрицательным значением половины видимой ширины элемента.Так, например:

width: 400px;
padding: 10px;
border-width: 2px;
/* -(400 + 10 + 2)/2 = -206 */
margin-left: -206px;
left: 50%;

Обратите внимание, что margin: auto, предложенный другими, не будет работать, потому что вы позиционировали элемент абсолютно.

1 голос
/ 26 сентября 2011

лол, нет. левая сторона изображения отображается на 50% ширины страницы. Следовательно, осталось: 50% .

Чтобы центрировать изображение, установите margin: auto .

0 голосов
/ 26 сентября 2011

Мне кажется, что где-то между изображением "Ледяной Белый" и телом находится какой-то сдерживающий элемент (в частности, Firebug обнаруживает, что это <a class="popup1" ... >), который относительно позиционирован, поэтому ваши 50% относительно это , а не вся страница.

Я знаю, что это кажется немного нелогичным: почему он должен быть относительно по отношению к родительскому элементу, если всплывающее окно использует absolute позиционирование?Это в основном потому, что относительное позиционирование относительно того, где элемент находится в нормальном потоке документа, тогда как абсолютное позиционирование возвращает элемент из этого потока.См. Разделы 9.4.3 и 9.6 объяснения W3C модели визуального форматирования для получения дополнительной информации.

Изучите учебник или два, если это доставляет вам проблемы.Мне нравится Изучение позиционирования CSS за десять шагов и css-tricks.com «Абсолютное позиционирование внутри относительного позиционирования» (на который я бы дал ссылку, если бы не спам-фильтр; впервые отвечающий здесь;)).

Что касается того, что с этим делать, вы, возможно, сможете перемещать всплывающие окна из относительно позиционированного родителя, как предполагает mblaze75, но выглядит (и я предполагаю здесь) вот так <a> это то, что вызывает ваше событие JavaScript, поэтому вы, вероятно, не можете этого сделать.Вместо этого я бы попытался удалить относительное позиционирование и использовать вместо этого поля.

Кроме того, имейте в виду то, что сказал Грег Агнью: даже после решения этой проблемы вы по-прежнему центрируете левый край, а не центрваше всплывающее окноЯ думаю, что ответ Дури позаботится об этом.

0 голосов
/ 26 сентября 2011

вы можете попытаться изменить стиль CSS следующим образом

#displayDiv {
    background-color: white;
    font-weight: bold;
    height: 460px;
    left: 50%;
    margin: auto auto auto -475px;/* change done here */
    overflow: hidden;
    position: absolute;
    text-align: center;
    top: 80px;
    width: 950px;
    z-index: 1;
}
0 голосов
/ 26 сентября 2011

Ваш код работает правильно.Всплывающее окно располагается слева от 50% ... тега TD, внутри которого оно вложено.

Попробуйте либо вынуть всплывающее окно из таблицы, либо вместо этого установить 50% ширины документа.(Ваш javascript минимизирован и нечитабелен для меня, или я помогу в дальнейшем.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...