纯css就能实现可点击切换的轮播图,feel起来很丝滑
前言
轮播图经常会在项目里用到,但是实际上用到的轮播图都是比较简单的,没有复杂的特效,这个时候如果去引入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起来很丝滑相关推荐
- JavaScript简单点击切换效果——轮播图
如何实现一个简单轮播图效果,通过点击切换图片?在JavaScript内容的实现是使用点击触发事件,改变src图片路径. 直接展示JS代码哈! // 创建一个数组来保存图片的路径var imgArr = ...
- 用js实现点击切换+自动切换的轮播图
用js实现点击切换+自动切换的轮播图 之前博主写过一篇用css实现轮播图的文章,可以看到用css实现的轮播图也能实现我们所需要的功能.那么这些功能用js该如何实现呢?我们一起来看下吧! (ps:博主在 ...
- Js实现图片点击切换与轮播
Js实现图片点击切换与轮播 图片点击切换 <!DOCTYPE html> <html><head> <meta charset="UTF-8&quo ...
- 怎么做轮播图中的小圆点html,JQuery和html+css实现带小圆点和左右按钮的轮播图实例...
是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...
- 点击左侧导航 轮播图定位 轮播图导航
点击左侧导航 轮播图定位 <template><div class="service_contain"><Spin size="large& ...
- 使用CSS实现简单的图片切换(轮播图)
使用CSS实现简单的图片切换(轮播图) 预览图如下: 目录 使用CSS实现简单的图片切换(轮播图) 一:首先创建基本布局 1:创建一个div容器 ,里面的ul与ol标签分别对应轮播图片和下方圆点: 二 ...
- html圆形按钮和箭头同时变色,JQuery和html+css实现带小圆点和左右按钮的轮播图
是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...
- html图片圆点切换,JQuery和html+css实现带小圆点和左右按钮的轮播图实例
搜索按钮 $("#ss").click(function(){ var new_li = $(" "+ $("#skuang").val() ...
- Vue 实现商品详情多播图(点击图片列表轮播图)
Vue 实现商品详情多播图(点击轮播图) 之前弄商城项目有要到这种效果的商品展示图(商品图片轮播),找了很久没找到,就自己写了一个. 实现效果: 点击左右按钮图片左右移动 点击小图片图片展示到大图 图 ...
最新文章
- 使用Shell(bash) 来检查 git 本地某个分支是否存在
- Geomagic Freeform Plus 2019中文版
- java private 变量_java 的private的用法保护成员变量的值,将值判断
- 谈谈InnoDB下的记录锁,间隙锁,next-key锁
- oracle中extents存在的理由
- boost::mpl::divides相关的测试程序
- 【7】测试用例设计-等价类分析法
- Prototype使用$A()函数
- Java期末设计(十三周)
- 活代码LINQ——08
- 阿里矢量库图标在线链接的使用方法,引入,改变大小与颜色
- js混淆还原工具_技术分享:几种常见的JavaScript混淆和反混淆工具分析实战【转】...
- JTopo交互式拓扑图(基本使用+常用场景)
- 数字城市新型基础设施——打造以“运营与安全并重”为特色的新型数字空间
- Saber 基本操作学习-Buck仿真实例
- 马王堆汉墓帛书本《道德经》解读
- DataWhale第21期组队学习自然语言处理实践(知识图谱)task4— 用户输入->知识库的查询语句
- ADS(Advanced Design system)良率分析(Yield)、良率优化(YieldOptim)
- MarkdownPad 2使用教程(语法篇)
- Python基础知识点六万字总结,爆肝一周熬夜完成【建议收藏】
热门文章
- typecho 不能上传附件,上传附件失败
- 开传奇要用什么样的服务器
- 小米pad MI PAD 开发者选项、USB调试开启方式
- c# 面试题及部分答案
- 用C++品尝Vista美味:界面的毛玻璃效果——涨姿势
- Oracle EBS Concurrent Request:Gather Schema Statistics
- google邮箱语言转换为中文(图示)
- 关系型数据库和非关系型的区别
- Mac应用打开小程序的技术解决方案
- jquery.form.js的ajaxSubmit和ajaxForm使用(用于多文件上传以及其他参数的混合提交)