Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BREAKING CHANGE][CustomScrollView]: перейти на CSS-way решение для стилизации ползунка #7699

Closed
inomdzhon opened this issue Oct 2, 2024 · 3 comments · Fixed by #7703

Comments

@inomdzhon
Copy link
Contributor

inomdzhon commented Oct 2, 2024

Так как дизайн никак не документирует поведение полосы прокрутки и его ползунка, необходимо перейти на использование системного поведения, тем самым облегчить компонент CustomScrollView застилизовав его через CSS (https://caniuse.com/css-scrollbar).

Из BREAKING CHANGE это удаление параметров TrackerOptionsProps.

Преимущества

  1. удалим DOM-элемет(-ы);

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

  2. удалим обработчики событий onwheel, onmousedown, onmouseleave, ondragstart, ondragstop;

  3. удалим использование тяжёлого useResizeObserver(), что в целом улучшит производительность страницы, где используется CustomScrollView;

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

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

  5. Удалим кучу лишнего кода, компонент станет максимально простым

Нюансы

  1. Останется проблема, что в Firefox < 64 будет обычный скролл, а не застилизованный

.hasPointerTrue .box {
/**
* Для удаление скролла в Firefox.
* В версии ниже 64 будет виден скролл, но это не ломает функциональность.
*/
scrollbar-width: none;
}

  1. Есть два способа кастомизации:
  • используя относительно новые свойства scrollbar-color и scrollbar-width у этих свойств поддержка в браузерах такая себе, в основном хорошо поддерживается в firefox, но например абсолютно не поддерживается в Safari
  • использую нестандартные свойства с префиксом -webkit-.. такие как -webkit-scrollbar у этих свойств ситуация противоположная. Поддержка говорит, что поддерживается хорошо везде, кроме Firefox(там вообще нет)
    Исходя из этого надо использовать оба подхода сразу, чтобы покрыть все браузеры. НО, если браузер поддерживает оба способа кастомизации скролла(например последние версии Chrome) то первый способ будет полностью перебивать второй. Возможно не так критично, но все же не всегда очевидно
  1. Есть проблема с кастомизацией. Через scrollbar-color, scrollbar-width особо не кастомизировать ничего кроме цвета и ширины(причем только 2 варианта размера есть). А также если кастомизировать через webkit псевдоклассы, то там возможностей побольше, но все равно не идеально. Например плавное изменение размера или смена фону при наведении на thumb реализовать невозможно. Будет меняться довольно резко. И кстати смену размера можно сделать только через небольшой костыль с бордерами.

  2. Также при кастомизации через ::webkit у thumb нельзя задать opacity, но можно задать сразу цвет с прозрачностью. В таком случае надо добавлять такой токен, или искать более менее подходящий для этого из имеющихся. Сейчас используется токен без прозрачности и добавляется прозрачность через opacity

  3. Нельзя сделать реально прозрачным пространство под thumb, то есть scrollbar-track. Даже если задать цвет transparent, он все равно будет сполшным белым и будет наезжать на контент

Ссылки

@inomdzhon inomdzhon changed the title [BREAKING CHANGE] HorizontalCell [BREAKING CHANGE][CustomScrollView]: перейти на CSS-way решение для стилизации ползунка Oct 2, 2024
@inomdzhon inomdzhon added this to VKUI Oct 2, 2024
@github-project-automation github-project-automation bot moved this to 🗃 Backlog in VKUI Oct 2, 2024
@inomdzhon inomdzhon added this to the v7.0.0-beta.1 milestone Oct 2, 2024
@inomdzhon inomdzhon moved this from 🗃 Backlog to 🔧 In progress in VKUI Oct 2, 2024
@qurle
Copy link
Contributor

qurle commented Oct 4, 2024

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

@vkcom-publisher
Copy link
Contributor

v7.0.0-beta.1 🎉

@vkcom-publisher
Copy link
Contributor

v7.0.0 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

4 participants