-
Notifications
You must be signed in to change notification settings - Fork 186
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
fix(ModalPage): ограничить область контента с помощью bottom-inset #5715
fix(ModalPage): ограничить область контента с помощью bottom-inset #5715
Conversation
Added new ref specially for bottom-inset to be able to get the inset value by getting height of the element. Use the bottom-inset value in content height during transition calculation to make sure we move modal up not only by the height of the content, but also by the height of the bottom-inset otherwise modal content might be hidden by the bottom-inset. Use this ref for new div element inside content-wrap. Div element we need not only to use in calculation but also to limit content scroll to make sure scroll visually ended before the bottom-inset.
This reverts commit b0a36a0266b2c5cef6dea23e10c6d6a5432cc88a.
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit 56bd22f:
|
size-limit report 📦
|
e2e tests |
👀 Docs deployed
Commit 56bd22f |
Codecov ReportPatch coverage:
Additional details and impacted files@@ Coverage Diff @@
## master #5715 +/- ##
=======================================
Coverage 81.93% 81.93%
=======================================
Files 296 296
Lines 9780 9783 +3
Branches 3102 3103 +1
=======================================
+ Hits 8013 8016 +3
Misses 1767 1767
Flags with carried forward coverage won't be shown. Click here to find out more.
☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤝
29334f5
to
56bd22f
Compare
fixes: #5604
Описание
В iOS при наличии bottom-inset скролл заходил в область bottom-inset.
Сам контент не был перекрыт bottom-inset потому что мы компенсировали и поднимали контент с помощью
::after
с высотой равной значению bottom-inset.Но скролл контента заходил в область bottom-inset потому что
::after
был частью контента.Изменения
компенсаци bottom-inset вынесена из области контента на уровень
ModalPage__content-wrap
, за счёт чего контент вместе с областью скролла поднимается на высоту bottom-inset, таким образом скролл заканчивается до bottom-inset.Для этого псевдо элемент был убран из
ModalPage__content-in
и заменён на divModalPage__bottom-inset
вунтриModalPage__content-wrap
.в
ModalState.refs
был добавлен новый refbottomInset
. Сделано это для того, что можно было получить высотуModalPage__bottom-inset
, а значит значение переменнойvar(--vkui_internal--safe_area_inset_bottom)
.Значение bottom-inset нужно для того, чтобы корректно анимировать появление
ModalPage
в режимеdynamicHeight
.Дело в том, что
ModalPage
во время анимации появления выезжает ровно на высоту контента ModalPage. То есть при наличии bottom-offset, без псевдо-элемента внутриModalPage__content-wrap
,ModalPage
появится таким образом, что bottom-offset перекроет нижнюю часть контентаModalPage
.Чтобы такого не было надо поднять
ModalPage
на высоту контента + bottom-inset.Можно было и не добавлять bottomInset ref и достучаться до нужно элемента через
contentElement
ref, но это делает код хрупким и очень не явным зависимостьModalPage
отModalPage__bottom-inset
при расчётеtranslateY
.Хотелось именно связать место расположения
ModalPage__bottom-inset
и его роль в подсчётеtranslateY
.Видео
Тут
bottom-inset = 50px
и визуализирован с помощью дива сposition: fixed;
2023-08-29.14.06.28.mov