div+css实现照片堆叠图文幻灯片切换洗牌过渡效果代码
代码语言:html
所属分类:幻灯片
代码描述:div+css实现照片堆叠图文幻灯片切换洗牌过渡效果代码,没有用js实现,纯粹是css和div构建。
代码标签: div css 照片 堆叠 图文 幻灯片 切换 洗牌 过渡
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
*,::before,::after{
margin: 0;
}
@property --angle {
syntax: "<angle>";
initial-value: 0deg;
inherits: true;
}
img{
max-width: 100%;
}
/* Hide radio buttons */
input[type="radio"] {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
body{
background: white;
min-height: 100svh;
display: grid;
place-content: center;
margin: 0;
padding: 1rem;
font: 1rem system-ui;
}
.cards{
--img-w: 200px;
--duration: 300ms;
--img-easing: cubic-bezier(0.34, 1.56, 0.64, 1);
width: min(100% - 4rem, 800px);
margin-inline: auto;
display: grid;
}
.card{
--cards-grid-cols: auto;
--cards-grid-rows: var(--img-w) auto;
--cards-grid-gap: 2rem;
--cards-footer-justify: center;
grid-area: 1/1;
display: grid;
place-items: center;
grid-template-columns: var(--cards-grid-cols);
grid-template-rows: var(--cards-grid-rows);
gap: var(--cards-grid-gap);
}
@media (600px < width){
.card{
--cards-grid-cols: var(--img-w) auto;
--cards-grid-rows: auto;
--cards-grid-gap: 4rem;
--cards-footer-justify: start;
}
}
/* stacking order - these are updated according to which card is selected */
.card:nth-of-type(1){ z-index: var(--card-1-z,1);}
.card:nth-of-type(2){ z-index: var(--card-2-z,2);}
.card:nth-of-type(3){ z-index: var(--card-3-z,3);}
.card:nth-of-type(4){ z-index: var(--card-4-z,4);}
.card:nth-of-type(5){ z-index: var(--card-5-z,5);}
.card:nth-of-type(6){ z-index: var(--card-6-z,6);}
.card:nth-of-type(7){ z-index: var(--card-7-z,7);}
.card-img{
width: 200px;
height: 200px;
aspect-ratio: 1 / 1 ;
rotate: var(--angle, 0deg);
border-radius: 10px;
border: 3px solid #FFF;
overflow: hidden;
transform-origin: center;
object-fit: cover;
box-shadow: 0 0 5px 3px rgba(0 0 0 / .05);
}
input:nth-of-type(1):checked + .card ~ .card > .card-img{
animation: straighten-img-1 calc(var(--duration) * 2) forwards;
animation-timing-function: var(--img-easing);
}
.card:has(~input:nth-of-type(2):checked) > .card-img,
input:nth-of-type(2):checked + .card ~ .card > .card-img{
animation: straighten-img-2 calc(var(--duration) * 2) forwards;
animation-timing-function: var(--img-easing);
}
.card:has(~input:nth-of-type(3):checked) > .card-img,
input:nth-of-type(3):checked + .card ~ .card > .card-img{
animation: straighten-img-3 calc(var(--duration) * 2) forwards;
animation-timing-function: var(--img-easing);
}
.card:has(~input:nth-of-type(4):checked) > .card-img,
input:nth-of-type(4):checked + .card ~ .card > .card-img{
animation: straighten-img-4 calc(var(--duration) * 2) forwards;
animation-timing-function: var(--img-easing);
}
.card:has(~input:nth-of-type(5):checked) > .card-img,
input:nth-of-type(5):checked + .card ~ .card > .card-img{
animation: straighten-img-5 calc(var(--duration) * 2) forwards;
animation-timing-function: var(--img-easing);
}
.card:has(~input:nth-of-type(6):checked) > .card-img,
input:nth-of-type(6):checked + .card ~ .card > .card-img{
animation: straighten-img-6 calc(var(--duration) * 2) forwards;
animation-timing-function: var(--img-easing);
}
.card:has(~input:nth-of-type(7):checked) > .card-img,
input:nth-of-type(7):checked + .card ~ .card > .card-img{
animation: straighten-img-7 calc(var(--duration) * 2) forwards;
animation-timing-function: var(--img-easing);
}
/* as CSS can't remove animations, we change the animation according to which checkbox is checked - all animations are the same (would be simpler with SCSS) */
@keyframes straighten-img-1 { 50%{ --angle: 0deg;} }
@keyframes straighten-img-2 { 50%{ --angle: 0deg;} }
@keyframes straighten-img-3 { 50%{ --angle: 0deg;} }
@keyframes straighten-img-4 { 50%{ --angle: 0deg;} }
@keyframes straighten-img-5 { 50%{ --angle: 0deg;} }
@keyframes straighten-img-6 { 50%{ --angle: 0deg;} }
@keyframes straighten-img-7 { 50%{ --angle: 0deg;} }
/* ordering according to current checked card */
.cards:has(input:nth-of-type(1):checked){
--card-1-z: 7;
--card-2-z: 6;
--card-3-z: 5;
--card-4-z: 4;
--card-5-z: 3;
--card-6-z: 2;
--card-7-z: 1;
}
.cards:has(input:nth-of-type(2):checked){
--card-1-z: 6;
--card-2-z: 7;
--card.........完整代码请登录后点击上方下载按钮下载查看
网友评论0