Хром полоса прокрутки исчезает (не переполнение-у)



Страница (live-версия) состоит (грубо говоря) из трех частей:




  • левая боковая панель

  • центрированное содержание

  • правая боковая панель


Правая боковая панель должна быть прокручиваемой, поэтому я установил overflow-y: scroll; right: -17px;, чтобы просто скрыть полосу прокрутки. Body, html Есть overflow-y: auto;. Таким образом, мне не нужно иметь две полосы прокрутки (для страницы и для правой боковой панели).

Выпуск:
(только в CHROME, протестировано на версиях 62 и 63)



Почему-то на разных машинах хром дает два разных стиля для полосы прокрутки: Case 1 иCase 2 .



Таким образом, в основном, для случая 1 правая боковая панель прокрутки "абсолютно расположена", и страница скрывает 17px себя из-за этого, в то время как для случая 2 полоса прокрутки "относительно расположена", и страница скрывает 17px, который занимает полоса прокрутки.



Вопрос



1) Почему полосы прокрутки различны в одной и той же версии ОС и браузера, но различны машины ?



2) Есть ли способ исправить это без каких-либо плагинов ? Принимая во внимание, что пользователи Windows имеют случай 2 и пользователи MacOS либо случай 1, либо 2 ?

555   3  

3 ответов:

1) Почему полосы прокрутки отличаются на одной и той же ОС и версии браузера, но на разных машинах ?

Это, вероятно, связано с системными настройками на macOS.

параметры macOS scroll bar OS

Если вы выбрали Always, я почти уверен, что полоса прокрутки отодвигает содержимое страницы в сторону. То же самое, если у вас подключена мышь. В противном случае, у него есть "абсолютно позиционированное" поведение, о котором вы упомянули. Имейте в виду, что пользователи Windows, вероятно, увидят поведение, подобное Always.

2) Есть ли способ исправить это без каких-либо плагинов ? Принимая во внимание, что пользователи Windows имеют случай 2 и пользователи MacOS либо случай 1 или 2 ?

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

Поскольку это то, что нужно выполнить только один раз, и предполагая, что мы хотим предсказуемую функциональность в браузерах и ОС, вы можете использовать некоторые JS здесь. В системах, сохраняющих боковую панель, свойства элемента боковой панели offsetWidth и scrollWidth будут отличаться. По умолчанию ваш элемент может иметь следующие стили:

$child-h-padding: 15px;
$max-scrollbar-width: 35px;

.r-sidebar {
  overflow-y: scroll;
  padding: 12px $child-h-padding;
  ...rest
}

.r-sidebar--r-padded {
  padding-right: $child-h-padding + $max-scrollbar-width;
  right: -$max-scrollbar-width;
}

Вы можете добавить/удалить класс .r-sidebar--r-padded на основе значений offsetWidth и scrollWidth.

Это должно работать везде, независимо от браузера / ОС. Я уже тестировал на macOS / Chrome с обоими настройками боковой панели.

Перемещение полосы прокрутки из поля зрения пользователей не так хорошо, как при скрытии полосы прокрутки в целом.

Есть ли способ исправить это без каких-либо плагинов ?

Это то, что вы ищете?

.r-sidebar::-webkit-scrollbar { display: none; } 

Это скроет вашу полосу прокрутки во всех браузерах chrome. Поскольку его специфика для webkit, он должен работать в разных операционных системах, предполагая, что версии браузера актуальны.

Подробнее здесь

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

У меня нет немедленного ответа на этот вопрос, но, пожалуйста, предоставьте более подробную информацию о машинах / версиях ОС / версиях браузера, и я постараюсь сделать все возможное, чтобы предоставить дополнительный ответ

Левая боковая панель:

Добавьте это к свитку div:

direction: rtl;
left: -17px;

И это дивам внутри:

.nav{   
 direction: ltr;
}

Это полностью скроет полосу прокрутки. Но div все еще прокручивается.

Comments

    Ничего не найдено.