3D立体翻转轮播图效果。该3D轮播图通过js和CSS代码,构建出切换时,左右立方体3D翻转的效果,非常炫酷。
使用方法
HTML代码
<div class="carousel"> <div class="carousel__control"> </div> <div class="carousel__stage"> <div class="spinner spinner--left"> <div class="spinner__face js-active" data-bg="#27323c"> <div class="content" data-type="iceland"> <div class="content__left"> <h1>ICELAND<br><span>EUROPE</span></h1> </div> <div class="content__right"> <div class="content__main"> <p> </p> <p>– Carolyn Bain</p> </div> <h3 class="content__index">01</h3> </div> </div> </div> <div class="spinner__face" data-bg="#19304a"> <div class="content" data-type="china"> <div class="content__left"> <h1>CHINA<br><span>ASIA</span></h1> </div> <div class="content__right"> <div class="content__main"> <p></p> <p>– Damian Harper</p> </div> <h3 class="content__index">02</h3> </div> </div> </div> <div class="spinner__face" data-bg="#2b2533"> <div class="content" data-type="usa"> <div class="content__left"> <h1>USA<br><span>NORTH AMERICA</span></h1> </div> <div class="content__right"> <div class="content__main"> <p></p> <p>– Regis St Louis</p> </div> <h3 class="content__index">03</h3> </div> </div> </div> <div class="spinner__face" data-bg="#312f2d"> <div class="content" data-type="peru"> <div class="content__left"> <h1>PERU<br><span>SOUTH AMERICA</span></h1> </div> <div class="content__right"> <div class="content__main"> <p></p> <p>– Carolyn McCarthy</p> </div> <h3 class="content__index">04</h3> </div> </div> </div> </div> </div> </div>
CSS代码
html, body { height: 100%; padding: 0; margin: 0; } body { background: #fff; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } .js-transitions-disabled * { transition: none !important; } .carousel { position: relative; height: 100%; overflow: hidden; perspective: 50vw; perspective-origin: 50% 50%; } .carousel__control { position: absolute; height: 160px; width: 40px; background: #fff; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; } .carousel__control a { position: relative; display: block; width: 100%; padding-top: 75%; box-sizing: border-box; } .carousel__control a:hover:before { background-color: rgba(0, 0, 0, 0.4); } .carousel__control a.active:before, .carousel__control a.active:hover:before { background-color: rgba(0, 0, 0, 0.6); } .carousel__control a:first-child { margin-top: 15px; } .carousel__control a:before { position: absolute; top: 50%; left: 0; right: 0; margin: auto; border-radius: 50%; padding-top: 25%; width: 25%; background: rgba(0, 0, 0, 0.2); content: ''; display: block; margin-top: -12.5%; } .carousel__stage { position: absolute; top: 20px; bottom: 20px; left: 20px; right: 20px; margin: auto; transform-style: preserve-3d; transform: translateZ(calc(-50vh + 20px)); } .spinner { position: absolute; width: calc(50vw - (20px)); height: calc(100vh - 40px); top: 0; left: 0; right: auto; bottom: 0; margin: auto; transform-style: preserve-3d; transition: transform 1s; -webkit-backface-visibility: hidden; backface-visibility: hidden; transform-origin: 50% 50%; transform: rotateX(0); } .js-spin-fwd .spinner { transform: rotateX(-90deg); } .js-spin-bwd .spinner { transform: rotateX(90deg); } .js-spin-fwd .spinner--right { transform: rotateX(90deg); } .js-spin-bwd .spinner--right { transform: rotateX(-90deg); } .spinner--right { right: 0; left: auto; } .spinner__face { display: none; position: absolute; width: 100%; height: 100%; overflow: hidden; } .spinner__face.js-next { display: block; transform: rotateX(90deg) translateZ(calc(50vh - 20px)); } .spinner--right .spinner__face.js-next { transform: rotateX(270deg) translateZ(calc(50vh - 20px)); } .js-spin-bwd .spinner__face.js-next { transform: rotateX(-90deg) translateZ(calc(50vh - 20px)); } .js-spin-bwd .spinner--right .spinner__face.js-next { transform: rotateX(-270deg) translateZ(calc(50vh - 20px)); } .js-active { display: block; transform: translateZ(calc(50vh - 20px)); } .content { position: absolute; width: 200%; height: 100%; left: 0; } .spinner--right .content { left: -100%; } .content__left, .content__right { position: absolute; left: 0; top: 0; width: 50%; height: 100%; } .content__right { right: 0; left: auto; } .content__left { background-repeat: no-repeat; background-size: cover; } .content__left:after { position: absolute; display: block; content: ""; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.1); } .content__left h1 { position: absolute; top: 50%; margin-top: -3vw; text-align: center; font-family: oswald; font-size: 5vw; height: 10vw; opacity: 1; color: #fff; width: 100%; letter-spacing: 0.15em; line-height: 0.6; } .content__left span { font-size: 1vw; font-weight: 300; letter-spacing: 0.2em; opacity: 0.9; font-family: Merriweather; } .content__right { display: flex; align-items: center; justify-content: center; } .content__right .content__main { position: absolute; font-family: Merriweather, serif; text-align: left; color: #fff; font-size: 1.3vw; padding: 0 8vw; line-height: 1.65; font-weight: 300; margin: 0; opacity: 0.8; } .content__right .content__main p:last-child { text-transform: uppercase; letter-spacing: 0.15em; font-size: 0.85em; } .content__right .content__index { font-size: 30vh; position: absolute; right: -1vh; top: 35vh; opacity: 0.04; font-family: oswald; color: #fff; } [data-type="iceland"] .content__left { background-image: url("iceland.jpg"); } .spinner--right [data-type="iceland"] .content__left { background-image: none; } [data-type="china"] .content__left { background-image: url("china.jpg"); } .spinner--right [data-type="china"] .content__left { background-image: none; } [data-type="usa"] .content__left { background-image: url("usa.jpg"); } .spinner--right [data-type="usa"] .content__left { background-image: none; } [data-type="peru"] .content__left { background-image: url("peru.jpg"); } .spinner--right [data-type="peru"] .content__left { background-image: none; }
codepen网址:https://codepen.io/paulnoble/pen/yVyQxv