这是一款纯CSS堆叠卡片展开动画特效。该特效使用css将几个div层堆叠在一起,当鼠标悬停在上面时,图层垂直展开,非常炫酷。
使用方法
HTML代码
<div class="flex-wrapper"> <div class="item"> <img src="./img/1.jpg" /> <div class="innerContent"> <h2>....</h2> <p>...</p> <button>More info</button> </div> </div> <div class="item"> <img src="./img/2.jpg" /> <div class="innerContent"> <h2>....</h2> <p>....</p> <button>More Info</button> </div> </div> <div class="item"> <img src="./img/3.jpg" /> <div class="innerContent"> <h2>....</h2> <p>....</p> <button>More Info</button> </div> </div> </div>
CSS代码
:root { --sizeVar: 10px; } .container { background-color: #eeeeee; position: absolute; display: flex; inset: 32px; justify-content: center; align-items: center; } .flex-wrapper { width: calc(var(--sizeVar) * 40); display: flex; flex-direction: column; gap: calc(var(--sizeVar) * 1.2); } .flex-wrapper:hover .item { margin-top: 0; transform: rotate(0deg); } .item:nth-of-type(1) { margin-top: 0 !important; } .item h2 { margin: 0; color: #333333; font-family: "Poppins", sans-serif; font-weight: 600; font-style: normal; font-size: calc(var(--sizeVar) * 2); } .item img { width: calc(var(--sizeVar) * 16.4); height: calc(var(--sizeVar) * 16.4); aspect-ratio: 1 / 1; -o-object-fit: cover; object-fit: cover; border-radius: calc(var(--sizeVar) * 0.6); } .item .innerContent { display: flex; flex-direction: column; height: calc(var(--sizeVar) * 16.4); gap: calc(var(--sizeVar) * 0.4); } .item p { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden; text-overflow: ellipsis; color: #666666; font-family: "Poppins", sans-serif; font-weight: 400; font-style: normal; font-size: calc(var(--sizeVar) * 1.2); } .item button { border-radius: calc(var(--sizeVar) * 0.8); border: none; background-color: #35c4b6; color: #ffffff; padding: calc(var(--sizeVar) * 0.6); font-family: "Poppins", sans-serif; font-weight: 600; font-style: normal; font-size: calc(var(--sizeVar) * 1.4); cursor: pointer; } .item button:hover { background-color: #40e0d0; box-shadow: 0 0 calc(var(--sizeVar) * 1.2) #40e0d088; } .item button:active { background-color: #40e0d0; box-shadow: none; } .item { display: flex; gap: calc(var(--sizeVar) * 1.6); width: 100%; height: calc(var(--sizeVar) * 20); padding: calc(var(--sizeVar) * 1.6); box-sizing: border-box; background: #ffffff; border-radius: calc(var(--sizeVar) * 0.8); border: 1px solid lightgray; box-shadow: 0 0 calc(var(--sizeVar) * 0.6) #00000022; margin-top: calc(var(--sizeVar) * -20.8); transform: rotate(2deg); cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; transition: margin-top 300ms ease-in-out 0s, transform 300ms ease-in-out 0s; } .item:nth-of-type(2) { transform: rotate(-4deg); } .item:nth-of-type(3) { transform: rotate(0deg); } .item:hover { border-color: #40e0d0; box-shadow: 0 0 calc(var(--sizeVar) * 1.2) #40e0d088; } @media screen and (max-width: 600px) { :root { --sizeVar: 6px; } }