用纯CSS实现简单的相册幻灯片

值年神李丙
• 阅读 9237

之前发了两篇关于CSS的文章,大家都比较关注,看来大家对这块东西都是很感兴趣的,现在趁热打铁再来一发~~

简介

一个用纯CSS实现的简单幻灯片效果,仅供实验,要看Demo请自备Chrome浏览器,勿用于生产环境,不然后果自付,咩哈哈哈哈哈~~

Demo地址:http://output.jsbin.com/tewuso

效果图

效果图录出来很烂,不上传了,请看Demo :(

技术点

  • :target伪类
  • object-fit属性

原理说明

:target伪类可以指定当前锚点目标元素的样式,比如下面:

<a href="#image-1">查看图片</a>
<img id="image-1" src="xxx.jpg">
#image-1{
  display: none;
}
#image-1:target{
  display: block;
}

点一下"显示图片",原本隐藏起来的#image-1就会突然冒出来,是不是很神奇?(噗→_→)


CSS中的object-fit属性在本Demo里面只是辅助作用,其作用是指定object类元素(img、video等)中的实际内容在元素中的填充方式,跟background-size: contain/cover有点点类似。
更具体的介绍请看张鑫旭的文章:半深入理解CSS3 object-position/object-fit属性


既然知道有:target这么个神奇的东西在,那我们完全可以用CSS实现“点一个小图显示一个大图”的效果,再把HTML写得溜~一点,实现上下图连续查看也是可以的。

代码

先上HTML部分,可以看到其实这种方式实现的幻灯片效果并不太灵活,每一个上下图按钮都要写出来,当然用程序生成此类代码也是很方便的~

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div class="container">
    <!--缩略图列表-->
    <ul class="gallery-wrapper">
      <li>
        <a href="#image-1">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/alarm%20politie.jpg">
        </a>
      </li>
      <li>
        <a href="#image-2">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/flowers.jpg">
        </a>
      </li>
      <li>
        <a href="#image-3">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/her%20camera.jpg">
        </a>
      </li>
      <li>
        <a href="#image-4">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/little%20fox.jpg">
        </a>
      </li>
      <li>
        <a href="#image-5">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/map.jpg">
        </a>
      </li>
      <li>
        <a href="#image-6">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/ship.jpg">
        </a>
      </li>
      <li>
        <a href="#image-7">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/snow%20mountain.jpg">
        </a>
      </li>
      <li>
        <a href="#image-8">
          <img src="http://7rf38t.com1.z0.glb.clouddn.com/ship%20and%20shepherd.jpg">
        </a>
      </li>
    </ul>
    <!--大图容器-->
    <div class="hidden-images-wrapper">
      <div id="image-1">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/alarm%20politie.jpg">
        <a class="img-prev" href="#image-8">PREV</a>
        <a class="img-next" href="#image-2">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
      <div id="image-2">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/flowers.jpg">
        <a class="img-prev" href="#image-1">PREV</a>
        <a class="img-next" href="#image-3">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
      <div id="image-3">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/her%20camera.jpg">
        <a class="img-prev" href="#image-2">PREV</a>
        <a class="img-next" href="#image-4">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
      <div id="image-4">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/little%20fox.jpg">
        <a class="img-prev" href="#image-3">PREV</a>
        <a class="img-next" href="#image-5">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
      <div id="image-5">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/map.jpg">
        <a class="img-prev" href="#image-4">PREV</a>
        <a class="img-next" href="#image-6">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
      <div id="image-6">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/ship.jpg">
        <a class="img-prev" href="#image-5">PREV</a>
        <a class="img-next" href="#image-7">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
      <div id="image-7">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/snow%20mountain.jpg">
        <a class="img-prev" href="#image-6">PREV</a>
        <a class="img-next" href="#image-8">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
      <div id="image-8">
        <img src="http://7rf38t.com1.z0.glb.clouddn.com/ship%20and%20shepherd.jpg">
        <a class="img-prev" href="#image-7">PREV</a>
        <a class="img-next" href="#image-1">NEXT</a>
        <a class="img-close" href="#"></a>
      </div>
    </div>
  </div>
</body>
</html>

CSS代码,很大部分都是用于定位啊布局什么的,另外还有相当一部分用于过渡动画效果,貌似有点影响性能~

html,body{
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #f0f0f0;
}

.gallery-wrapper{
  display: block;
  list-style: none;
  width: 800px;
  height: 400px;
  margin: 60px auto 0 auto;
  padding: 10px;
  background-color: #fff;
}
.gallery-wrapper li{
  display: block;
  float: left;
  list-style: none;
  width: 180px;
  height: 180px;
  padding: 10px;
}
.gallery-wrapper a{
  display: block;
  width: 180px;
  height: 180px;
  overflow: hidden;
}
.gallery-wrapper img{
  display: block;
  width: 180px;
  height: 180px;
  object-fit: cover;
  background-color: #eee;
  transition: .5s;
}
.gallery-wrapper a:hover img{
  transform: scale(1.1);
}

.hidden-images-wrapper > div{
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: rgba(0,0,0,.8);
  opacity: 0;
  transition: .6s;
  pointer-events: none;
}
.hidden-images-wrapper > div:target{
  opacity: 1;
  pointer-events: auto;
}
.hidden-images-wrapper img{
  display: block;
  position: absolute;
  z-index: 3;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 740px;
  height: 500px;
  max-width: 90%;
  max-height: 90%;
  margin: auto;
  padding: 30px;
  background-color: #fff;
  border-radius: 5px;
  object-fit: contain;
  transition: .7s;
  transform: translateY(-30px);
}
.hidden-images-wrapper div:target img{
  transform: translateY(0);
}
.img-prev,
.img-next{
  display: block;
  position: absolute;
  z-index: 4;
  top: 0;
  bottom: 0;
  height: 50px;
  margin: auto 0;
  padding: 0 20px;
  color: #333;
  font-size: 16px;
  line-height: 50px;
  text-decoration: none;
  background-color: #fff;
}
.img-prev:hover,
.img-next:hover{
  background-color: #eee;
}
.img-prev{
  left: 0;
  border-radius: 0 5px 5px 0;
}
.img-next{
  right: 0;
  border-radius: 5px 0 0 5px;
}
.img-close{
  position: absolute;
  z-index: 2;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  cursor: default;
}

就这些。。。
最后丢一个单个图片放大展示的效果:http://output.jsbin.com/goyeju/2,有性趣的同学可以自行研究原理,也很简单的

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
徐小夕 徐小夕
4年前
用css3实现惊艳面试官的背景即背景动画(高级附源码
我们传统的前端更多的是用javascript实现各种复杂动画,自从有了Css3transition和animation以来,前端开发在动画这一块有了更高的自由度和格局,对动画的开发也越来越容易。这篇文章就让我们汇总一下使用Css3实现的各种特效。这篇文章参考《css揭秘》这本书,并作出了自己的总结,希望能让大家更有收获,也强烈推荐大家看看这本书,你值得拥有
徐小夕 徐小夕
4年前
如何使用css3实现一个类在线直播的队列动画
之前在群里有个朋友问了这样一个问题,就是如何在小程序中实现类似直播平台的用户上线时的队列动画?作为一名前端工程师,解决方案无非以下2种:1.使用javascript根据条件来控制元素的样式实现队列动画2.用纯css3配合数据驱动模型来实现.大家都知道在现代的Web开发中,我们能使用Css实现的效果尽量不要用Js,所以我们应该优先考虑用C
徐小夕 徐小夕
4年前
css3实战汇总(附源码)
本文是继上一篇文章用css3实现惊艳面试官的背景即背景动画(高级附源码)(https://juejin.im/post/6844903950123188237)的续篇也是本人最后一篇介绍css3技巧的文章,因为css这块知识难点不是很多,更多的在于去熟悉css3的新特性和基础理论知识。所以写这篇文章的目的一方面是对自己工作中一些css高级技巧的总结,另一
徐小夕 徐小夕
4年前
《前端实战总结》之使用纯css实现网站换肤和焦点图切换动画
今天我们来继续复盘一些工作中常用的css技巧和知识,以便我们可以更加优雅的用css实现富有动感的网站.你将收获网站换肤设计方案介绍:target伪类介绍和用法以及如何使用css实现网站换肤transition动画以及如何用纯css实现焦点图动画效果展示1.网站换肤(https://imghelloworld.ossc
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Python+Selenium练习篇之5
前面介绍了,XPath,id,class,linktext,partiallinktext,tagname,name七大元素定位方法,本文介绍webdriver支持的最后一个方法:by\_css。css和XPath类似,也需要掌握一些语法,才能写出正确的,完整的css选择表达式。相关脚本代码如下:codingu
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。