@Vurundshundba

Как не обрезать тень элемента, используя «overflow: hidden»?

Всем привет.

Верстаю по макету. По дизайну на странице присутствует слайдер (карусель). Изначально видно по три слайда, слайды фиксированной ширины, кнопки "вперёд-назад", буллеты - в общем классика. Казалось бы, ничего сложного. Но у каждого слайда по дизайну в макете имеется нехилая тень в 24 пикселя, а по hover на слайде она ещё и смещается на 5 пикселей вниз. Поскольку контейнер со слайдами имеет свойство overflow: hidden, чтобы обрезать остальные слайды, вместе с ними обрезается и тень.

Вопрос: как добиться того, чтобы тень не обрезалась? Пробовал присобачить её к псевдо-элементам, а их абсолютно позиционировать - обрезает. Пробовал задавать z-index - не помогает. Пробовал filter: drop-shadow вместо box-shadow - всё то же самое. Отступы, разумеется, тоже пробовал задавать - но тень настолько широкая, что пока угасает тень одного элемента, она начинается у другого, и не получается найти такой отступ чтобы где-то не обрезалось.

Пример кода тут: https://codepen.io/tracktor/pen/OJeNaJe - последняя строка в css у .item. Особенно хорошо обрезку заметно при переключении слайдов.

Если отказаться от анимации и просто отображать по три слайда, переключая их JavaScript-ом, то проблемы нет, но хотелось бы всё-таки сделать красиво... В вёрстке я не очень силён, возможно, в упор не вижу какой-то простейший вариант решения проблемы. В общем, пожалуйста, помогите. Третий вечер бьюсь...
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 3
delphinpro
@delphinpro Куратор тега CSS
frontend developer
Сделать для контейнера, у которого overflow:hidden, внутренний отступ 24 + 5 пикселей. Зачем здесь три дня биться, непонятно.
Ответ написан
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега CSS
Руководитель frontend направления, предприниматель
Задача со звёздочкой, факт. В целом поддержу оратора — Сергей delphinpro. Добавлю, что неплохо бы после сделать отрицательный отступ, чтобы не было нерегулируемого смещения остальными блоками. Плюс можно поиграться с «разгоном» элементов следующего и предыдущего слайда, чтобы задать им пространство в рамках «ушей», чтобы тень не выплывала обрезанной.
Ответ написан
Комментировать
@alexalexes
669f3ac55a2de517816393.png
Банальная геометрия.
Горизонтальная ширина тени выбирается как значение a, при котором градиент тени полностью уходит от насыщенного цвета в цвет фона.
Теперь нужно соблюсти условия:
1) Два горизонтальных отступа между слайдами не должно быть меньше значения 2a - чтобы тени соседних слайдов не накладывались.
2) Горизонтальный отступ контейнера слайдов должен быть равен ровно значению a, тогда по краям граница контейнера не будет затрагивать ни одну тень крайних и скрытых слайдов. Если сделать больше горизонтальный отступ, то предусмотрите, чтобы скрытые элементы убирали свою тень когда они выходят за пределы контейнера.

Если соблюсти эти условия, то проблем с обрезкой тени не будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы