css+div实现三维立体图片幻灯片滚动效果代码

代码语言:html

所属分类:幻灯片

代码描述:css+div实现三维立体图片幻灯片滚动效果代码,鼠标滚轮可滚动翻页,空格键也能操控。

代码标签: cs div 三维 立体 图片 幻灯片 滚动

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" style="--n: 18" >

<head>
 
<meta charset="UTF-8">
 
 
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Caveat:wght@500&family=Saira:ital@0;1&family=Sour+Gummy:wdth,wght@125,300&display=swap" rel="stylesheet">
 
 
 
<style>
@property --k {
       
syntax: '<number>';
       
initial-value: -1;
       
inherits: true
}

@property --ang {
       
syntax: '<angle>';
       
initial-value: 0deg;
       
inherits: false
}

* { margin: 0 }

html
{
       
scrollbar-width: none;
       
height: calc(var(--n)*100%)
}

body
, header, main, section,
article
, figure { display: grid }

body
{
       
--dir: 0;
       
grid-template-rows: max-content 1fr max-content;
       
position: fixed;
       
width: 100%;
       
height: 100vh;
       
height: 100dvh;
       
color: #dedede;
       
font: clamp(.625em, 3vmin, 1.5em)/ 1.25 saira, sans-serif;
       
animation: k 1s linear;
       
animation-timeline: scroll();
       
       
&::before {
               
position: absolute;
               
inset: 0;
               
z-index: -1;
               
background: #000;
               
filter: url(#grain);
               
content: ''
       
}
       
       
@media (max-aspect-ratio: 2/ 3) { --dir: 1 }
}

svg
[height='0'][aria-hidden='true'] { position: fixed }

header
{
       
place-content: center;
       
place-items: center;
       
padding: .5em;
       
text-align: center;
       
text-wrap: balance
}

h1
, h2 {
       
//font-family: sour gummy, cursive;
       
//font-weight: 300
}

em
{ max-width: 32em }

main
{
       
overflow: hidden;
       
perspective: 50em
}

@keyframes k { to { --k: 1 } }

section
, article { transform-style: preserve-3d }

section
{
       
--r: calc(2 + var(--dir))/ 3;
       
--w: clamp(4em, min(50vh, 25vw), 18em);
       
--z: calc(var(--f, 1.25)*-.5*var(--w)/tan(.5turn/var(--n)));
       
place-self: center;
       
translate: 0 0 var(--z);
       
rotate: var(--dir) calc(1 - var(--dir)) 0 calc((var(--k) + .5)*-1turn);
}

article
, header, figure, img, figcaption { grid-area: 1/ 1 }

article
{
       
/* item progress value */
       
--j: var(--i)/var(--n);
       
/* linear difference between this item's progress value  
         * and progress value of highlighted item in front -
         * it's a value in the [0, 1] interval */

       
--dif-lin: calc(var(--j) - mod(var(--k) + 1, 1));
       
/* absolute value of linear difference */
       
--abs-lin: abs(var(--dif-lin));
       
/* difference between middle & absolute linear difference */
       
--dif-mid: calc(.5 - var(--abs-lin));
       
--abs-mid: abs(var(--dif-mid));
       
/* relative distance to from this item
         * to highlighted one in front */

       
--dif-arc: calc(2*(.5 - var(--abs-mid)));
       
/* relative distance limit */
       
--lim: .35;
       
--sel: max(0, calc((var(--lim) - var(--dif-arc))/var(--lim)));
       
--out: calc(1 - var(--sel));
       
--hov: 0;
       
width: var(--w);
       
aspect-ratio: var(--r);
       
transform:
                rotate3d
(var(--dir), calc(1 - var(--dir)), 0, calc(var(--j)*1turn))
                translatez
(var(--z))
                rotate
(calc(var(--dir)*.5turn));
       
        header
{ rotate: y calc(var(--hov)*.5turn) }
       
       
&:hover, &:focus-within { --hov: round(var(--sel)) }
}

article header
, figure {
       
--ang: calc(-45deg + var(--hov)*180deg);
       
overflow: hidden;
       
position: relative;
       
border: solid 4px #0000;
       
border-radius: .5em;
       
backface-visibility: hidden;
       
box-shadow: 5px 5px 13px #000;
       
background:
                var
(--url) 50%/ cover padding-box,
                linear-gradient
(#333 0 0) padding-box,
                repeating-conic-gradient
(from var(--ang),
                               
#0000 0% 15%,
                                color-mix
(in srgb,
                                       
#f48c06 calc(var(--sel)*100%), #333) 20% 30%,
                               
#0000 35% 50%)
                        border-box
#121212;
       
background-blend-mode: multiply, normal, normal;
       
isolation: isolate;
       
/* prevent edge glitching on article hover */
       
pointer-events: none;
       
transition: .35s ease-out;
       
transition-property: rotate, --ang;
       
       
&::after {
               
position: absolute;
               
inset: 0;
               
opacity: var(--out);
               
background: #03071e;
               
mix-blend-mode: color;
               
pointer-events: none;
               
content: ''
       
}
}

/* reverse from parent */
h2
, em, img, a { pointer-events: auto }

h2
, em { opacity: round(up, var(--sel)) }

h2
{ font-size: 1.125em }

figure
{ rotate: y calc((1 + var(--hov))*.5turn) }

img
{
       
width: 100%;
       
height: 100%;
       
aspect-ratio: var(--r);
       
object-fit: cover;
       
object-position: var(--pos)
}

figcaption
{
       
align-self: end;
       
padding: .5em;
       
background: #fff3;
       
color: #040404;
       
font: Max(.75rem, .75em) caveat, cursive;
       
text-align: right;
       
text-shadow: 1px 1px 1px #0006;
       
backdrop-filter: blur(5px) brightness(1.5);
       
        a
{ color: #370617 }
}

/* just support info */
aside
{
       
position: fixed;
       
bottom: 0;
       
padding: .5em;
}

.box-info-scrollani {
       
margin: .5em;
       
border-left: solid 5px #dc3055;
       
padding: .75em;
       
box-shadow: 2px 2px 5px hsla(0, 0%, 0%, .35);
       
background: #851d40;
       
color: #fff;
       
font: 1em/ 1.25 ubuntu, trebuchet ms, arial, sans-serif;
       
       
@supports (animation-timeline: scroll()) { display: none }
}

kbd
{
       
padding: 2px;
       
background: hsla(0, 0%, 0%, .35);
       
font: 1.1em/ 1.2 ubuntu mono, consolas, monaco, monospace
}
</style>


 
</head>


 
<body >
   
<svg width="0" height="0" aria-hidden="true">
     
<filter id="grain">
       
<feTurbulence type="fractalNoise" baseFrequency="7.13"></feTurbulence>
       
<feColorMatrix type="saturate" values="0"></feColorMatrix>
       
<feComponentTransfer>
         
<feFuncA type="linear" slope=".02"></feFuncA>
       
</feComponentTransfer>
       
<feBlend in2="SourceGraphic"></feBlend>
     
</filter>
   
</svg>
   
<header>
     
<h1>Infinite scroll circular gallery</h1><strong>scroll up & down/ use up & .........完整代码请登录后点击上方下载按钮下载查看

网友评论0