Scrollbar сдвигает содержимое

У меня: У меня есть несколько веб-страниц с этим контуром:

<body>
<div id="container">
CONTENT
</div>
</body>

с CSS:

body{
color:#000000;
background-color:#FFFFFF;
background-image: url(background.jpg);
background-repeat: repeat-x;
font-family: verdana;
letter-spacing: 1px;
}
#container{
margin-left:auto;
margin-right:auto;
margin-top:5px;
width: 700px;
}

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

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

Вопрос: Есть ли способ избежать перемещения контейнера при его центрировании без появления полосы прокрутки на всех страницах?

Ответ 1

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

BTW: IMO: Правильный способ справиться с этим: Оставить его как есть.. Это поведение по умолчанию, и я не думаю, что пользователи беспокоятся об этом так же, как и ты. Это мое мнение, и у кого-то может быть другое, но добавление полосы прокрутки на каждую страницу (для решения этой проблемы) - это эпический провал.:)

Ответ 2

Люди с большими мониторами никогда не будут видеть полосу прокрутки на любой странице.

Люди с маленькими мониторами всегда будут видеть полосы прокрутки на всех страницах.

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

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

Это так, как есть, и никакое статическое решение не обойдет это. Изменение поля на одной странице не является решением по причинам, перечисленным выше.

Если вы настаиваете на фиксации чего-то, чему научились люди, это должно быть "динамическое" решение для JavaScript, в котором вы вычисляете левое поле и добавляете ширину полосы прокрутки. Для разных браузеров полосы имеют разную ширину, поэтому вам также придется вычислить это.

Изменить: Как кто-то сказал в другом ответе, это поведение браузера по умолчанию и должно быть оставлено в покое.

Edit2: Как поясняет пользователь dampe в комментариях, вам также придется запускать JavaScript после каждого изменения размера окна пользователем.

Это будет эпическая трата вашего времени. Обычно поведение браузера по умолчанию остается в браузере. Слишком много переменных для учета, и вы можете что-то пропустить, если у вас нет всех сценариев, скинов, ОС, версии браузера, бренда браузера, надстройки панели инструментов, типа монитора, размера и т.д., Как только вы начнете получать эту работу, вы обнаружите, что вам нужно делать исключения и исправления для Explorer. Прежде чем вы это узнаете, вы получите массивный кусочек раздувания... и для чего? Какая ценность этого?

Начальная точка: 100% гарантированное ожидаемое поведение во всех браузерах и ситуациях.

Конечная точка: гарантированно выглядит великолепно в вашем мониторе/системе... вы рискуете, что она будет выглядеть как мусор в системе/сценарии, о которой вы даже не думали.

Сначала найдите готовое решение JavaScript или плагин jQuery... если вы не можете его найти, спросите себя, почему?

  • не практично
  • невозможно
  • не стоит проблем (низкий спрос)

Edit3: Я искал, чтобы удовлетворить свое любопытство. Я нашел поток с решением jQuery, а также ссылки на методы расчета ширины полосы прокрутки.

ИМХО, это пустая трата времени и ресурсов, но здесь ссылка для всех, кого это интересует...

http://expressionengine.com/archived_forums/viewthread/158703/

Edit4: Вот решение CSS, которое я нашел. Я не тестировал это, но если он будет работать, он будет милым.

html {
    overflow-y: scroll;
}

http://haslayout.net/css-tuts/Fixing-Page-Shift-Problem

Редактирование 5:. Решение CSS работает, но не по душе. Он создает полосы прокрутки для каждой страницы, но когда они не нужны, они выделены серым или пустым... не элегантным.

Ответ 3

Вы также можете добавить с помощью php добавление значения левой позиции, когда вы находитесь на длинной странице, но полоса прокрутки будет разной ширины в разных браузерах/платформах, поэтому javascript будет единственным идеальным решением для пикселей.

Ответ 4

Если вы хотите использовать чистую опцию css, я считаю, что абсолютный позиционированный div внутри тела с шириной и высотой 100%, автоматическое переполнение и правое заполнение больше ширины полосы прокрутки заменят обычную полосу прокрутки, не меняя содержимое слева на длинных страницах.

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