什么是手风琴效果?

  首先我们先来看一段动画,如下图所示:

在上面动画中,我们不难发现,一排照片正常排列,当我鼠标移上(:hover)时,照片会变大显示并且把其它照片挤小。那么在鼠标来回移动的过程中,画面正常显示的效果类似我们的手风琴,所以叫手风琴效果。

手风琴效果的实现

把图片显示出来

通过上面的效果,我们不难发现,首先所有照片的集合是一个有1px边框的div盒子,盒子里面有一组ul li ,每个li标签里面有一张照片,那么我们首先把这段代码实现,html代码如下

<div class="box">
    <ul>
        <li><img src="data:images/01.jpg" alt=""></li>
        <li><img src="data:images/02.jpg" alt=""></li>
        <li><img src="data:images/03.jpg" alt=""></li>
        <li><img src="data:images/04.jpg" alt=""></li>
        <li><img src="data:images/05.jpg" alt=""></li>
        <li><img src="data:images/06.jpg" alt=""></li>
    </ul>
</div>

css代码如下:

*{
            margin:;
            padding:;
            border:;
            list-style: none;
        }
        .box{
            width: 1200px;
            height: 300px;
            border: 1px solid #000;
            margin: 100px auto;
        }
        .box ul{
            overflow: hidden;
        }
        .box ul li{
            float: left;
            width: 200px;
            height: 300px;
            transition: all 1s;
        }
 

鼠标移上事件

接下来我们完成鼠标移上事件的代码。从上面的动画中我们不难发现,鼠标移上一共有3个效果;1、鼠标移上的那个li的宽度变大 2、其它li的宽度变小 3、移上两个效果的变化是逐渐完成的。首先我们想:第一个效果的话,是不是li:hover{width:XXXpx;}就可以实现了。那么第二个效果呢?我们是不是可以理解为鼠标移动到div上之后,div里面所有li的宽度都变小了,那代码实现为.box:hover li{width: XXXpx;}即可实现。第三个效果是不是可以使用css3中的trantation属性来实现?那么完整的代码如下

   .box ul li{
            transition: all 1s;
        }
        .box:hover li{
            width: 150px;
        }
        .box ul li:hover{
            width: 500px;
        }

看效果调BUG

那么完成上述代码,我们是不是就完成了手风琴效果了呢?我们不妨来看看效果,运行代码,效果如下:

  在上述效果中,我们发现当鼠标移动到右边数第二张照片的时候,最右边的照片显示不出来,这是为什么呢?我们来分析一下:上文中鼠标移上之后,我每张照片设置的宽度为150px,鼠标移上的那张照片为500px;150*5+500=1250,大于我们设置的1200的总宽度。由于ul上文中没有给它设置宽度,所以它默认的最大宽度为1200,所以没有足够的宽度让它来显示所有的照片,所以最后一张照片没有显示出来。那么我给ul的宽度设置的大一点可以吗?当然可以,保险起见,我给ul的宽度设置为9999px,那么有人会问了,ul这么宽,会超过div的宽度,这么办?放心,div给它设置一个overflow:hidden属性,超出隐藏即可。增加的代码如下:

.box{
            overflow: hidden;
        }
        .box ul{
            width: 9999px;
        }

  运行程序,完美实,但是gif太大,上传不了,最后还是放弃。有兴趣的同学可以自己试着写一下,然后看看效果。

总结

前面也写了几篇博客,但是每次都忘记总结一下在工作中实现一个功能的步骤,那在这里总结一下吧。

分析需求

首先我们拿到需求之后,我们不要急着去coding,而是先分析清楚我们的需求是什么,我们在实现这个需求的时候使用可以用到哪些标签,哪些样式,哪些js行为,哪些api等内容。

分步骤实现

分析完需求之后,我们按照分析的需求,一步一步实现代码。先搭建html标签,写css样式……在写的过程中,一步一步看看写的样式,js行为有没有起作用,确保上一条代码起作用之后再写下一条代码。

测试解决bug

所有的功能实现之后,我们来系统的测试一下完成的模块,看和需求有没有出入,有没有BUG,如果有BUG解决BUG,如果没有,那么,恭喜你,可以提交你的代码到测试部门了。

一步步教你css3手风琴效果的实现的更多相关文章

  1. 基于css3实现手风琴效果

    终于在凌晨一点钟逼迫自己写博客.一直想记录自己的前端工程师之路,但毕竟拖延症晚期.因为第一篇随笔,所以多写一点废话吧.刚刚从学校毕业,放弃了一直学习的java,而想从事前端的工作.第一是觉得osgi这 ...

  2. 使用 jQuery & CSS3 实现优雅的手风琴效果

    手风琴效果常用于切换显示一组内容,这种方式既可以节省网页空间又可以有动画效果.今天,我们将创造一个优雅的手风琴内容效果.这个想法是有悬停时滑出一些垂直手风琴标签.我们将添加一些 CSS3 属性来提升外 ...

  3. 纯css3实现美化复选框和手风琴效果(详细)

    关键技术点和原理: 原理就是把 checkbox或 radio 给隐藏掉   ,然后给选框 绑定一个label标签. 然后用label标签作为容器,在里面放一个:before或一个after 用bef ...

  4. 一步步教你轻松学主成分分析PCA降维算法

    一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...

  5. 一步步教你轻松学奇异值分解SVD降维算法

    一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ...

  6. 一步步教你轻松学支持向量机SVM算法之案例篇2

    一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  7. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  8. 一步步教你轻松学K-means聚类算法

    一步步教你轻松学K-means聚类算法(白宁超  2018年9月13日09:10:33) 导读:k-均值算法(英文:k-means clustering),属于比较常用的算法之一,文本首先介绍聚类的理 ...

  9. 一步步教你轻松学朴素贝叶斯模型算法Sklearn深度篇3

    一步步教你轻松学朴素贝叶斯深度篇3(白宁超   2018年9月4日14:18:14) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...

随机推荐

  1. IO通信

    DeviceIoControl 发送控制代码到指定设备驱动程序 参数解释: hDevice Long,设备句柄 dwIoControlCode Long,应用程序调用驱动程序的控制命令,就是IOCTL ...

  2. static变量的使用

    静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间 ...

  3. PHP浮点数的一个常见问题的解答

    作者: Laruence 本文地址: http://www.laruence.com/2013/03/26/2884.html 转载请注明出处 关于PHP的浮点数, 我之前写过一篇文章: 关于PHP浮 ...

  4. jQuery CSS3 照片墙

    <html> <head> <style type="text/css"> .picture-wall-container{ position: ...

  5. [转]用Objective-C实现简单的数学字符串公式的计算

    好友第一次用写技术分享,这么多年都没见他正经的写点东西.那天突然抬头问我,Objective-C有没字符串计算的.我说,没有.后来他默默实现了,特为他转发,表示支持. ================ ...

  6. Android 字体颜色变化(点击)

    在开发的过程中,经常会遇到这样的场景,点击按钮,背景颜色发生变化:在drawable中,定义xxx.xml(selector) <selector xmlns:android="htt ...

  7. Linux查看机器是多少位

    命令: file /bin/ls或者file /sbin/init 示例: 如上所示,我的机器是32位的.

  8. Ubuntu 下对ADT 添加别名(alias)

    1:~$ vim .bashrc 2:在打开的.bashrc文件中加入: alias adt='./adt-bundle-linux-x86-20130729/eclipse/eclipse' 3:保 ...

  9. 2015.9.11模拟赛 codevs4162 bzoj1774【无双大王】

    题目描述 Description 无双大王hzwer扫清六合,席卷八荒,万姓倾心,四方仰德. hzwer拥有一片领土,其中有n个城市和m条双向道路.他规定每个人在领土上行走都要交过路费,同时进城也要交 ...

  10. 【2013南京区域赛】部分题解 hdu4802—4812

    上周末打了一场训练赛,题目是13年南京区域赛的 这场题目有好几个本来应该是我擅长的,但是可能是太久没做比赛了各种小错误代码写的也丑各种warusn trush搞得人很不爽 全场题之一的1002也没有想 ...