使用纯css制作类似轮播图效果

简介: 通过纯CSS实现流畅的页面切换效果,利用三个全屏大小的盒子放置于一个宽300vw的容器内。用户可通过点击底部按钮切换不同页面,每个按钮对应一个隐藏的单选按钮,选中时会触发容器的水平位移,从而展现不同的背景色页面。动画效果由`transition`属性完成,平滑过渡至下一个页面。此外,还提供了渐变色生成网站供参考,以丰富页面视觉效果。

思路:

  1. 首先先定义一个足够宽的大容器 例如300vw 三个页面宽度的大小
  2. 里面放3个小盒子 每个小盒子占满全屏,100vw 100vh
  3. 点击下面的按钮然后选择大容器元素
  4. 给大容器的left值 (相对定位),向左偏移一个页面的宽度100vw 就达到切换每个页面的效果
  5. 动画主要采用的 transition 过渡

首先我们看下实现的效果:

jcode

代码里面都标有注释,具体看代码:

Html

   <div class="container">
        <div class="tabs">
            <!-- type radio 单选框   name 为一组 这样三个单选只能选择一个 -->
            <input type="radio" id="web" name="slider">
            <input type="radio" id="grap" name="slider">
            <input type="radio" id="photo" name="slider">

            <div class="buttons">
                <!-- for 绑定 input -->
                <label for="web"></label>
                <label for="grap"></label>
                <label for="photo"></label>
            </div>
            <!-- 定义大容器 大盒子 -->
            <div class="content">
            <!-- 定义小容器 小盒子 -->
            <!-- 这里定义三个box相同的类名,是为了在css写三个盒子的共同样式 -->
                <div class="box web"></div>
                <div class="box grap"></div>
                <div class="box photo"></div>
            </div>
        </div>
    </div>

CSS

      * {
   
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .container {
   
            position: relative;
            /* width: 100%; */
            height: 100vh;
            background: #000;
            overflow: hidden;
        }

        .tabs input {
   
            visibility: hidden;
            display: none;
        }

        .buttons {
   
            /* 实现水平居中 */
            position: absolute;
            bottom: 50px;
            left: 50%;
            transform: translateX(-50%);
            /* 变为横向布局 */
            display: flex;
            /* 设置间距10px */
            gap: 10px;
            /* 设置层级 */
            z-index: 10000000;
        }

        .buttons label {
   
            /* 初始化按钮样式 */
            width: 20px;
            height: 20px;
            background-color: #fff;
            opacity: 0.5;
            border-radius: 20px;
            cursor: pointer;
            transition: 0.5s;
        }

        /* 当tabs的第一个input被选中,buttons的第一个label的不透明度设为1,宽度为50px */
        .tabs input:nth-child(1):checked~.buttons label:nth-child(1),
        .tabs input:nth-child(2):checked~.buttons label:nth-child(2),
        .tabs input:nth-child(3):checked~.buttons label:nth-child(3) {
   
            opacity: 1;
            width: 50px;
        }

        /* 定义 content 主要内容 */
        .content {
   
            /* 设置相对定位,方便后面在点击按钮的时候进行left属性进行偏移*/
            position: relative;
            /* 3 个 页面宽度 */
            width: 300vw;
            /* 横向布局 */
            display: flex;
            /* 添加过渡效果 */
            transition: 0.5s;
        }

        /* 定义每一个页面的共同样式  */
        .content .box {
   
            position: relative;
            width: 100vw;
            height: 100vh;
            /* flex布局 水平垂直居中 */
            display: flex;
            justify-content: center;
            align-items: center;

            user-select: none;
            padding: 40px
        }
         /* 设置每个页面的背景颜色*/
        .content .box:nth-child(1) {
   
            background: linear-gradient(to right, #1cefff, #c0c0aa);
        }
        .content .box:nth-child(2) {
   
            background: linear-gradient(to right, #9cecfb, #65c7f7, #0052d4);
        }
        .content .box:nth-child(3) {
   
            background: linear-gradient(to right, #3494e6, #ec6ead);
        }

        /* 这里是实现轮播的关键点 , 主要实现思路是运用到的相对定位 的偏移值 
            当我们点击第一个button 的适时候 button 已经绑定input元素
            点击第一个button content大盒子的left 向左偏移100vw
            因为一个页面 是100vw 这个content 盒子定义的大小是300vw 
        */
        .tabs input:nth-child(1):checked~.content {
   
            left: 0;

        }
        .tabs input:nth-child(2):checked~.content {
   
            left: -100vw;
        }
        .tabs input:nth-child(3):checked~.content {
   
            left: -200vw;
        }

推荐几个我常用的渐变色示例网站 (也支持定制):

最后有什么疑问可以在评论区回复,作者看到就会回复的.

目录
相关文章
|
前端开发 JavaScript 索引
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
HTML+CSS 实现带轮播图的企业官网页面(记得收藏)
HTML+CSS 实现带轮播图的企业官网页面(记得收藏)
|
移动开发 前端开发 JavaScript
HTML+CSS动画打造酷炫轮播图!(含源码)
HTML+CSS动画打造酷炫轮播图!(含源码)
|
前端开发 UED
超越静态:CSS动画轮播图,引领视觉新体验!
超越静态:CSS动画轮播图,引领视觉新体验!
|
前端开发
纯CSS实现轮播图
纯CSS实现轮播图
378 0
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
安全 JavaScript
旋转木马轮播图 html+css+js
旋转木马轮播图 html+css+js
|
前端开发 JavaScript
一键复制HTML+CSS动画:让轮播图效果酷炫升级!
一键复制HTML+CSS动画:让轮播图效果酷炫升级!

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    569
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    433
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    433
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    283
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    547
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    724
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1405
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    314
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1167
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    509