«Активируемая» тень на липких элементах
TL; DR результат
Представьте, что у вас есть два вертикально перекрывающихся элемента, где верхний элемент прилипает, а единственный нижний элемент прокручивается.
С CSS3 единственный код, который нам нужен для достижения вышеуказанного эффекта, - это 2 строки CSS:
position: sticky; top: 0;
Все, что делает sticky
позиционирование, это переключение между relative
и fixed
позиционированием для достижения эффекта «прилипания» элемента к смещению, которое вы указываете с помощью top
, bottom
, left
и right
.
Но в определенных ситуациях с этой функцией возникает одна вопиющая проблема. Это особенно заметно, когда цвета фона двух перекрывающихся элементов совпадают:
- Когда они начинают прокрутку, отсутствие видимого разделителя затрудняет определение, где перекрывающееся содержимое встречается с перекрывающимся содержимым.
Конечно, это выглядит намного лучше с простой падающей тенью:
Выглядит неплохо, правда?
Тень выглядит хорошо, когда контент на самом деле перекрывается, но она выглядит неудобно в исходном состоянии покоя, когда на самом деле ничего не перекрывается.
В идеале мы не должны показывать тень в исходном состоянии, а показывать ее только тогда, когда пользователь начал прокрутку. К сожалению, нет события или псевдоэлемента, который срабатывает, когда липкий элемент меняется между относительным и фиксированным положением.
Результаты поиска довольно обескураживают, и самый полезный пост от разработчика, в котором говорится, что вам следует использовать IntersectionObserver
API.
API-интерфейс Intersection Observer обеспечивает способ асинхронного наблюдения за изменениями пересечения целевого элемента с элементом-предком или с окном просмотра документа верхнего уровня.
. . . 🙃
Но ваш UX рассчитывает, что вы включите эту функцию в MVP.
Чем вы занимаетесь?
Нет, погоди! Есть способ сделать это с помощью CSS.
Все, что вам нужно сделать, это создать элемент, который изначально «покрывает» тень, и когда пользователь прокручивает вниз, он начинает раскрывать тень.
Когда пользователь прокручивает страницу вниз, теневой элемент не перемещается, потому что он «прилипает» к своему текущему положению, а крышка перемещается вверх, постепенно «открывая» теневой элемент.
…
Наслаждайтесь еще одним красивым хаком