IE: «overflow: scroll» для родителя и «margin: 0 auto» для потомка не работают должным образом

0

У меня есть следующая проблема в Internet Explorer 9+, которая действительно странная. Код создает странные результаты в этих браузерах и отлично работает в Chrome/Safari, Firefox и Opera.

HTML:

<div class="outer">
    <div class="inner"></div>
</div>

<div class="absolute"></div>

И CSS:

.outer {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    overflow: scroll;
    background: #ECD078;
}

.inner {
    width: 200px;
    height: 2000px;
    margin: 0 auto;
    background: #D95B43;
    border-bottom: 20px solid #53777A;
}

.absolute {
    width: 10px;
    height: 50px;
    background: #53777A;
    position: absolute;
    top: 0;
    left: 50%;
    margin: 0 0 0 -110px;
}

Внешний контейнер имеет переполнение: авто и положение: фиксировано. Внутренний контейнер имеет заданную ширину и марку: 0 auto, чтобы поддерживать ее в центре. Все работает отлично во всех браузерах, кроме IE (все версии). В IE внутренний контейнер не центрируется правильно и перемещает несколько пикселей влево.

Пример скрипта имеет абсолютный контейнер, который расположен так, что он сидит рядом с внутренним контейнером, чтобы проиллюстрировать проблему в IE. Когда я удаляю переполнение: автоматически из внешнего контейнера, он отлично работает, но мне нужно, поскольку он должен быть прокручиваемым. Любые предложения, почему это происходит и как это исправить? Заранее спасибо!

http://jsfiddle.net/g7TpK/2/

  • 0
    Я только что попробовал вашу скрипку в Chrome на Windows 7, и результат выглядит точно так же, как IE9. Вы случайно не тестировали Chrome для OSX?
Теги:
centering
overflow
absolute

1 ответ

0

Он считает, что это происходит из-за полос прокрутки, которые появляются в браузерах Windows, но не в браузерах OSX. Блок .inner центрирован по внутренней ширине .outer, что составляет всю ширину окна минус полосы прокрутки. В то время как .absolute центрируется по всей ширине окна.

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

::-webkit-scrollbar {
    -webkit-appearance: none;
}

::-webkit-scrollbar:vertical {
    width: 11px;
    background-color: red;
}

Вы получите тот же результат, что и в Windows. Блок .inner всегда правильно центрирован, с полосами прокрутки или без.

.absolute способом выравнивания блоков является перемещение блока .outer блоке .outer. Таким образом, как .inner и .absolute расположены относительно одного и того же родителя.

  • 0
    Ух ты! Вы правы - это решение работает. К сожалению, оно весьма ограничено, поскольку оно касается только браузеров webkit ... поэтому Firefox в OSX по-прежнему имеет неправильное центрирование. Кроме того, как мы узнаем, что все полосы прокрутки имеют размер 11px? Я только что узнал, что Windows 8 один 16px .. Это похоже на тупик.
  • 0
    @YavorPunchev - это абсолютно позиционированный div в вашем примере только для демонстрации центрирования, или вы действительно хотите позиционировать элемент таким образом? Если проблема находится в центре .outer , то, как я сказал, она всегда правильно центрирована.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню