У меня есть веб-сайт с выравниванием по центру DIV. Теперь некоторые страницы нуждаются в прокрутке, некоторые нет. Когда я перемещаюсь от одного типа к другому, появление полосы прокрутки перемещает страницу на несколько пикселей в сторону. Есть ли способ избежать этого без явного отображения полос прокрутки на каждой странице?
218
overflow-y: overlay
в этой теме?overflow-y: overlay
Ответы:
overflow-y: scroll - это правильно, но вы должны использовать его с тегом html, а не с body, иначе вы получите двойную полосу прокрутки в IE 7.
Поэтому правильный css будет:
источник
Оберните содержимое вашего прокручиваемого элемента в div и примените
padding-left: calc(100vw - 100%);
.Хитрость в том, что
100vw
представляет 100% области просмотра, включая полосу прокрутки. Если вы вычтите100%
, что является доступным пространством без полосы прокрутки, вы получите ширину полосы прокрутки или0
ее нет. Создание отступа такой ширины слева будет имитировать вторую полосу прокрутки, смещая центрированное содержимое назад вправо.Обратите внимание, что это будет работать только в том случае, если прокручиваемый элемент использует всю ширину страницы, но в большинстве случаев это не должно быть проблемой, потому что есть только несколько других случаев, когда вы центрируете прокручиваемый контент.
источник
100vw
и100%
измерял разные вещи, поэтому я узнал кое-что полезное из этого!@media screen and (min-width: 800px) {...}
. В случаях, когда содержание будет соответствовать ширине страницы. Например, в небольших разрешениях будет ненужный пробел, сдвигая контент вправоДумаю, нет. Но укладка
body
сoverflow: scroll
должны делать. Вы, кажется, знаете это, хотя.источник
overflow-y: scroll
:)С прокруткой всегда отображается, может быть, не очень хорошо для макета.
Попробуйте ограничить ширину тела с помощью css3
vw
является шириной области просмотра (см. эту ссылку для некоторых объяснений),calc
рассчитанной в css334px
для двойной ширины полосы прокрутки (см. это для фиксированных значений или для расчета, если вы не доверяете фиксированным размерам)источник
padding-left: 34px;
чтобы равномерно центрировать мою страницу.Пример . Нажмите кнопку «Изменить минимальную высоту».
С помощью
calc(100vw - 100%)
мы можем вычислить ширину полосы прокрутки (и если она не отображается, она будет 0). Идея: используя отрицательное поле справа, мы можем увеличить ширину<html>
до этой ширины. Вы увидите горизонтальную полосу прокрутки - ее следует скрыть, используяoverflow-x: hidden
.источник
calc(100% - 100vw)
вместо умножения на-1
?Я не знаю, старый ли это пост, но у меня была та же проблема, и если вы хотите прокручивать только по вертикали, попробуйте
overflow-y:scroll
источник
Если при изменении размера или после загрузки некоторых данных добавляется полоса прокрутки, вы можете попробовать выполнить следующее, создать класс и применить этот класс.
источник
Я решил проблему на одном из своих сайтов, явно установив ширину тела в javascript размером окна просмотра за вычетом ширины полосы прокрутки. Я использую описанную здесь функцию на основе jQuery для определения ширины полосы прокрутки.
источник
Расширяя ответ, используя это:
Один комментатор предложил также добавить левый отступ, чтобы сохранить центрирование:
Но тогда все выглядит не правильно, если ваш контент шире, чем область просмотра. Чтобы это исправить, вы можете использовать медиа-запросы, например:
Где 1058px = ширина содержимого + 17 * 2
Это позволяет горизонтальной полосе прокрутки обрабатывать переполнение x и сохранять центрированное содержимое по центру, когда область просмотра достаточно широка, чтобы содержать содержимое с фиксированной шириной.
источник
Расширение ответа Rapti , это должно работать точно так же, но оно добавляет больше поля к правой стороне
body
и скрывает его с отрицательнымhtml
полем вместо добавления дополнительного отступа, который потенциально может повлиять на макет страницы. Таким образом, на реальной странице ничего не меняется (в большинстве случаев), и код все еще функционирует.источник
overflow-x: hidden
и это исправило.Решение @ kashesandr помогло мне, но чтобы скрыть горизонтальную полосу прокрутки, я добавил еще один стиль для тела. вот полное решение:
CSS
JS
Решение JS Only (когда 2-й модал открывается из 1-го модала):
источник
Я пытался исправить, вероятно, ту же проблему, которая была вызвана
.modal-open
классом начальной загрузки Twitterbody
. Решениеhtml {overflow-y: scroll}
не помогает. Одно из возможных решений я нашел , чтобы добавить{width: 100%; width: 100vw}
кhtml
элементу.источник
html { width: 100vw; }
работал на меняЯ использую, чтобы иметь эту проблему, но самый простой способ исправить это (это работает для меня):
на тип файла CSS:
как это просто! :)
источник
Решения, опубликованные с использованием calc (100vw - 100%), находятся на правильном пути, но есть проблема с этим: у вас навсегда останется поле слева от размера полосы прокрутки, даже если вы измените размер окна так, чтобы содержимое заполняет весь видовой экран.
Если вы попытаетесь обойти это с помощью медиа-запроса, у вас будет неловкий момент щелчка, потому что поле не будет постепенно уменьшаться при изменении размера окна.
Вот решение, которое обходит это, и у AFAIK нет недостатков:
Вместо того чтобы использовать margin: auto для центрирования вашего контента, используйте это:
Замените 500 пикселей на половину максимальной ширины вашего контента (поэтому в этом примере максимальная ширина контента составляет 1000 пикселей). Контент теперь будет оставаться в центре, а поле будет постепенно уменьшаться до тех пор, пока контент не заполнит область просмотра.
Чтобы препятствовать тому, чтобы отступ становился отрицательным, когда область просмотра меньше, чем max-width, просто добавьте медиа-запрос следующим образом:
И вуаля!
источник
Если ширина таблицы не изменится, вы можете установить ширину элемента (такого как tbody), который содержит полосу прокрутки> 100% (оставляя дополнительное пространство для полосы прокрутки), и установить для overflow-y значение «overlay» (так что полоса прокрутки остается фиксированной и не будет сдвигать таблицу влево, когда она появится). Также установите фиксированную высоту для элемента с полосой прокрутки, чтобы полоса прокрутки появлялась при превышении высоты. Вот так:
Примечание: вам придется вручную отрегулировать ширину%, так как% пространства, занимаемого полосой прокрутки, будет зависеть от ширины вашей таблицы (то есть: меньшая ширина таблицы, больше% требуется для размещения полосы прокрутки, так как ее размер в пикселях постоянен )
Пример динамической таблицы:
источник
Просто установив ширину вашего элемента контейнера, как это сделает свое дело
Это заставит этот элемент игнорировать полосу прокрутки, и он будет работать с цветом фона или изображений.
источник
Я использовал JQuery, чтобы решить эту проблему
источник
источник
Вопреки принятому ответу, который предлагает постоянную полосу прокрутки в окне браузера, даже если содержимое не выходит за пределы экрана , я бы предпочел использовать:
Это связано с тем, что появление полосы прокрутки имеет больше смысла, если содержимое фактически переполняется .
Это имеет больше смысла, чем это .
источник