前言

轮播图经常会在项目里用到,但是实际上用到的轮播图都是比较简单的,没有复杂的特效,这个时候如果去引入swiper那些库的话,未免就有点杀鸡焉用牛刀了。

所以不如自己手写一个,而今天我要分享的一种写法也是我最近才发现的,发现写起来真的是很丝滑,只纯css就实现了呢!

可以先看看预览效果

预览地址:https://sunny-lucking.github.io/howToBuiMySwiper/myswiper.html

源码地址:https://github.com/Sunny-lucking/howToBuiMySwiper/blob/main/myswiper.html

HTML <label> 标签的 for 属性的用法及作用

for 属性规定 label 与哪个表单元素绑定,label的for属性要与绑定表单元素(input)的ID对应。绑定完成后可以通过点击label触发表单元素的默认属性。通俗的讲就是你绑定完了点lebel就相当于点击表单元素(input)。

<form><label for="male">Male</label><input type="radio" name="sex" id="male" /><br /><label for="female">Female</label><input type="radio" name="sex" id="female" />
</form>

开始实现吧

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>我的轮播图</title><style>body {display: flex;justify-content: center;align-items: center;min-height: 100vh;}ul.slides {position: relative;width: 600px;height: 280px;list-style: none;margin: 0;padding: 0;background-color: #eee;}li.slide {margin: 0;padding: 0;width: inherit;height: inherit;position: absolute;top: 0;left: 0;display: flex;justify-content: center;align-items: center;font-family: Helvetica;font-size: 120px;color: #fff;transition: .5s transform ease-in-out;}.slide:nth-of-type(1) {background-color: #F2E205;}.slide:nth-of-type(2) {background-color: #F25C05;left: 100%;}.slide:nth-of-type(3) {background-color: #495F8C;left: 200%;}</style>
</head><body><ul class="slides"><li class="slide">1</li><li class="slide">2</li><li class="slide">3</li></ul>
</body></html>

首先先写了所需要的三个子元素。分别给了三种颜色。

接下来。最外层加上overflow: hidden,让只显示一个slide子元素

ul.slides {position: relative;width: 600px;height: 280px;list-style: none;margin: 0;padding: 0;background-color: #eee;overflow: hidden;}

接下来,加上label和input起到控制切换的效果

html

<body><ul class="slides"><input type="radio" id="control-1" name="control" checked><input type="radio" id="control-2" name="control"><input type="radio" id="control-3" name="control"><li class="slide">1</li><li class="slide">2</li><li class="slide">3</li><div class="controls-visible"><label for="control-1"></label><label for="control-2"></label><label for="control-3"></label></div></ul>
</body>

css

input[type="radio"] {position: relative;z-index: 100;display: none;
}.controls-visible {position: absolute;width: 100%;bottom: 12px;text-align: center;
}.controls-visible label {display: inline-block;width: 10px;height: 10px;background-color: #fff;border-radius: 50%;margin: 0 3px;border: 2px solid #fff;
}.slides input[type="radio"]:nth-of-type(1):checked ~ .controls-visible label:nth-of-type(1) {background-color: #333;
}.slides input[type="radio"]:nth-of-type(2):checked ~ .controls-visible label:nth-of-type(2) {background-color: #333;
}.slides input[type="radio"]:nth-of-type(3):checked ~ .controls-visible label:nth-of-type(3) {background-color: #333;
}

这里利用input和label来模拟轮播图的pagination分页功能。label模拟的是圆点,然后把radio输入框隐藏了。radio放在最前面的目的是为了用了控制后面的slides 和controls的 样式

现在实现点击label切换轮播图的效果

.slides input[type="radio"]:nth-of-type(1):checked ~ .slide {transform: translatex(0%);
}.slides input[type="radio"]:nth-of-type(2):checked ~ .slide {transform: translatex(-100%);
}.slides input[type="radio"]:nth-of-type(3):checked ~ .slide {transform: translatex(-200%);
}

可以看到已经非常地简单就实现了点击lebel切换轮播图的效果。

当然,我们要实现一个上下页切换的功能也非常简单

我们添加三组navigator,一页页面对应一组

<body><ul class="slides"><input type="radio" id="control-1" name="control" checked><input type="radio" id="control-2" name="control"><input type="radio" id="control-3" name="control"><div class="navigator slide-1"><label for="control-3">《</label><label for="control-2">》</label></div><div class="navigator slide-2"><label for="control-1">《</label><label for="control-3">》</label></div><div class="navigator slide-3"><label for="control-2">《</label><label for="control-1">》</label></div><li class="slide">1</li><li class="slide">2</li><li class="slide">3</li><div class="controls-visible"><label for="control-1"></label><label for="control-2"></label><label for="control-3"></label></div></ul>
</body>

我们要把不属于当前的那一页的navigator隐藏掉,所以用display:none,当选中对应的页面的时候,再让它显示出来,所以可以这样实现

    .navigator {position: absolute;top: 50%;transform: translatey(-50%);width: 100%;z-index: 100;padding: 0 20px;display: flex;justify-content: space-between;box-sizing: border-box;display: none;}.navigator {font-size: 32px;color #333333;}.slides input[type="radio"]:nth-of-type(1):checked~.navigator:nth-of-type(1) {display: flex;}.slides input[type="radio"]:nth-of-type(2):checked~.navigator:nth-of-type(2) {display: flex;}.slides input[type="radio"]:nth-of-type(3):checked~.navigator:nth-of-type(3) {display: flex;}

可以看到,又轻而易举就实现了点击切换上下页的功能,太腻害了。

纯css就能实现可点击切换的轮播图,feel起来很丝滑相关推荐

  1. JavaScript简单点击切换效果——轮播图

    如何实现一个简单轮播图效果,通过点击切换图片?在JavaScript内容的实现是使用点击触发事件,改变src图片路径. 直接展示JS代码哈! // 创建一个数组来保存图片的路径var imgArr = ...

  2. 用js实现点击切换+自动切换的轮播图

    用js实现点击切换+自动切换的轮播图 之前博主写过一篇用css实现轮播图的文章,可以看到用css实现的轮播图也能实现我们所需要的功能.那么这些功能用js该如何实现呢?我们一起来看下吧! (ps:博主在 ...

  3. Js实现图片点击切换与轮播

    Js实现图片点击切换与轮播 图片点击切换 <!DOCTYPE html> <html><head> <meta charset="UTF-8&quo ...

  4. 怎么做轮播图中的小圆点html,JQuery和html+css实现带小圆点和左右按钮的轮播图实例...

    是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...

  5. 点击左侧导航 轮播图定位 轮播图导航

    点击左侧导航 轮播图定位 <template><div class="service_contain"><Spin size="large& ...

  6. 使用CSS实现简单的图片切换(轮播图)

    使用CSS实现简单的图片切换(轮播图) 预览图如下: 目录 使用CSS实现简单的图片切换(轮播图) 一:首先创建基本布局 1:创建一个div容器 ,里面的ul与ol标签分别对应轮播图片和下方圆点: 二 ...

  7. html圆形按钮和箭头同时变色,JQuery和html+css实现带小圆点和左右按钮的轮播图

    是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...

  8. html图片圆点切换,JQuery和html+css实现带小圆点和左右按钮的轮播图实例

    搜索按钮 $("#ss").click(function(){ var new_li = $(" "+ $("#skuang").val() ...

  9. Vue 实现商品详情多播图(点击图片列表轮播图)

    Vue 实现商品详情多播图(点击轮播图) 之前弄商城项目有要到这种效果的商品展示图(商品图片轮播),找了很久没找到,就自己写了一个. 实现效果: 点击左右按钮图片左右移动 点击小图片图片展示到大图 图 ...

最新文章

  1. 使用Shell(bash) 来检查 git 本地某个分支是否存在
  2. Geomagic Freeform Plus 2019中文版
  3. java private 变量_java 的private的用法保护成员变量的值,将值判断
  4. 谈谈InnoDB下的记录锁,间隙锁,next-key锁
  5. oracle中extents存在的理由
  6. boost::mpl::divides相关的测试程序
  7. 【7】测试用例设计-等价类分析法
  8. Prototype使用$A()函数
  9. Java期末设计(十三周)
  10. 活代码LINQ——08
  11. 阿里矢量库图标在线链接的使用方法,引入,改变大小与颜色
  12. js混淆还原工具_技术分享:几种常见的JavaScript混淆和反混淆工具分析实战【转】...
  13. JTopo交互式拓扑图(基本使用+常用场景)
  14. 数字城市新型基础设施——打造以“运营与安全并重”为特色的新型数字空间
  15. Saber 基本操作学习-Buck仿真实例
  16. 马王堆汉墓帛书本《道德经》解读
  17. DataWhale第21期组队学习自然语言处理实践(知识图谱)task4— 用户输入->知识库的查询语句
  18. ADS(Advanced Design system)良率分析(Yield)、良率优化(YieldOptim)
  19. MarkdownPad 2使用教程(语法篇)
  20. Python基础知识点六万字总结,爆肝一周熬夜完成【建议收藏】

热门文章

  1. typecho 不能上传附件,上传附件失败
  2. 开传奇要用什么样的服务器
  3. 小米pad MI PAD 开发者选项、USB调试开启方式
  4. c# 面试题及部分答案
  5. 用C++品尝Vista美味:界面的毛玻璃效果——涨姿势
  6. Oracle EBS Concurrent Request:Gather Schema Statistics
  7. google邮箱语言转换为中文(图示)
  8. 关系型数据库和非关系型的区别
  9. Mac应用打开小程序的技术解决方案
  10. jquery.form.js的ajaxSubmit和ajaxForm使用(用于多文件上传以及其他参数的混合提交)