Fluent Design - эффект лифта карты
Я хочу добавить эффект поднятия карт к моим картам начальной загрузки с плавными стилями дизайна при наведении курсора. Вы можете увидеть, что я имею в виду на веб-сайте Microsoft Design.
Вот что я попробовал, но чего-то не хватает, и я не могу это схватить.
Я старался:
.card {
box-shadow: -3px 6px 5px 0px rgba(176,164,176,1);
transition: all .3s ease-in-out;
}
.card:hover {
box-shadow: -3px 18px 20px 0px rgba(99,89,99,1);
}
<div class="card" style="width:19.5rem">
<div class="card-body">
Lorem ipsum dolor sit ameta, card content
</div>
</div>
Пожалуйста, спасибо за вашу помощь.
3 ответа
То, что делает эффект похожим на подъем, это transform: translate3d
, см. документацию translate3d w3cschools.
Когда box-shadow
изменения на :hover
сам элемент перемещается в другое положение, обеспечивая эффект.
Так, давая transform: translate3d(0px, -1px, 0px);
( translate3d(x,y,z)), элемент перемещается 1px
вверх и тень опускается.
.card {
padding: 15px; /* JUST TO LOOK COOL */
border: 1px solid #eee; /* JUST TO LOOK COOL */
box-shadow: rgba(0, 0, 0, 0.06) 0px 2px 4px;
transition: all .3s ease-in-out;
}
.card:hover {
box-shadow: rgba(0, 0, 0, 0.22) 0px 19px 43px;
transform: translate3d(0px, -1px, 0px);
}
<div class="card" style="width:19.5rem">
<div class="card-body">
Lorem ipsum dolor sit ameta, card content
</div>
</div>
Вам не хватает фактического движения вверх. Много способов достичь этого, например:
.card:hover {
margin-top: -1px;
}
от макушки моей головы.
Чтобы добиться этого эффекта, Microsoft использует несколько теней box, например:
box-shadow: rgba(0, 0, 0, 0.06) 0px 2px 4px, rgba(0, 0, 0, 0.05) 0px 0.5px 1px;
при наведении:
box-shadow: rgba(0, 0, 0, 0.22) 0px 19px 43px, rgba(0, 0, 0, 0.18) 0px 4px 11px;
.card {
box-shadow: rgba(0, 0, 0, 0.06) 0px 2px 4px, rgba(0, 0, 0, 0.05) 0px 0.5px 1px;
transition: all .3s ease-in-out;
}
.card:hover {
box-shadow: rgba(0, 0, 0, 0.22) 0px 19px 43px, rgba(0, 0, 0, 0.18) 0px 4px 11px;
}
<div class="card" style="width:19.5rem">
<div class="card-body">
Lorem ipsum dolor sit ameta, card content
</div>
</div>