纯CSS实现手风琴效果

野性酷女 2022-08-25 08:36 452阅读 0赞

今天来看一个使用hover触发的一个手风琴效果,鼠标hover时改变图像宽度,配合transition实现动画,效果如下图所示。大家也可以到我的codepen在线编辑、下载收藏。

感谢TheCodePlayer的图片和灵感。

SouthEast

SouthEast 1

下面来看看html,我们用ul、li来布局案例,我们需要一个图像盒子和一个图像描述的盒子。

  1. <div class="accordian">
  2. <ul>
  3. <li>
  4. <div class="image_title">
  5. <a href="#">KungFu Panda</a>
  6. </div>
  7. <a href="#">
  8. <img src="http://thecodeplayer.com/uploads/media/3yiC6Yq.jpg"/>
  9. </a>
  10. </li>
  11. <li>
  12. <div class="image_title">
  13. <a href="#">Toy Story 2</a>
  14. </div>
  15. <a href="#">
  16. <img src="http://thecodeplayer.com/uploads/media/40Ly3VB.jpg"/>
  17. </a>
  18. </li>
  19. <li>
  20. <div class="image_title">
  21. <a href="#">Wall-E</a>
  22. </div>
  23. <a href="#">
  24. <img src="http://thecodeplayer.com/uploads/media/00kih8g.jpg"/>
  25. </a>
  26. </li>
  27. <li>
  28. <div class="image_title">
  29. <a href="#">Up</a>
  30. </div>
  31. <a href="#">
  32. <img src="http://thecodeplayer.com/uploads/media/2rT2vdx.jpg"/>
  33. </a>
  34. </li>
  35. <li>
  36. <div class="image_title">
  37. <a href="#">Cars 2</a>
  38. </div>
  39. <a href="#">
  40. <img src="http://thecodeplayer.com/uploads/media/8k3N3EL.jpg"/>
  41. </a>
  42. </li>
  43. </ul>
  44. </div>

接下来,我们来看看CSS的写法,这里我们用到了normalize.css和prefix free。首先我们来进行布局

  1. /* 让顶盒子居中显示 */
  2. .accordian{
  3. width:850px;
  4. /* 850=(800+2)*5+20*2 */
  5. margin:100px auto;
  6. }
  7. /* 配置li */
  8. .accordian li{
  9. list-style:none;
  10. width:160px;
  11. height: 320px;
  12. float:left;
  13. position:relative;
  14. overflow:hidden;
  15. border-left:2px solid rgba(255,255,255,.8);
  16. }
  17. /* 配置图像信息盒子 */
  18. .accordian li .image_title{
  19. position:absolute;
  20. width:100%;
  21. height:50px;
  22. background-color:rgba(0,0,0,.5);
  23. text-indent:2em;
  24. line-height:50px;
  25. bottom:0px;
  26. left:0
  27. }
  28. /* 改变链接 */
  29. .accordian a{
  30. color:#fff;
  31. text-decoration:none;
  32. }

然后我们来看关键,设置li的hover前后状态。我们需要改变的是li的宽度,hover之前都是160px,hover之后激活的li宽640px,其余的40px

  1. /* hover之后所有的li宽改为40px */
  2. .accordian ul:hover li{
  3. width:40px;
  4. }
  5. /* hover之后激活的li宽为640px,注意这两个设置有先后顺序 */
  6. .accordian ul li:hover{
  7. width:640px;
  8. }

同时,我们需要给li增加transition。

  1. .accordian li{
  2. /* 之前的代码省略 */
  3. /* 新增transition属性 */
  4. transition:all 2s;
  5. }

这样我们就完成了整个效果,为了优化效果,我们增加了hover前后的图像滤镜,不幸的是这个效果只有webkit内核认识,为了代码的未来兼容性我们还是增加了标准属性(虽说现在暂时没有用),代码如下。

  1. .accordian ul:hover li{
  2. width:40px;
  3. -webkit-filter:grayscale(.8);
  4. filter:grayscale(.8);
  5. }
  6. .accordian ul li:hover{
  7. width:640px;
  8. -webkit-filter:grayscale(0) hue-rotate(300deg);
  9. filter:grayscale(0) hue-rotate(300deg);
  10. }

好的,整个CSS文件如下。

  1. .accordian{
  2. width:850px;
  3. margin:100px auto;
  4. }
  5. .accordian li{
  6. float:left;
  7. list-style:none;
  8. width:160px;
  9. height320px;
  10. transition:all 2s;
  11. position:relative;
  12. overflow:hidden;
  13. border-left:2px solid rgba(255,255,255,.8);
  14. box-shadow:0px 0px 20px rgba(0,0,0,0.8);
  15. }
  16. .accordian ul:hover li{
  17. width:40px;
  18. -webkit-filter:grayscale(.8);
  19. filter:grayscale(.8);
  20. }
  21. .accordian ul li:hover{
  22. width:640px;
  23. -webkit-filter:grayscale(0) hue-rotate(300deg);
  24. filter:grayscale(0) hue-rotate(300deg);
  25. }
  26. .accordian li .image_title{
  27. position:absolute;
  28. width:100%;
  29. height:50px;
  30. background-color:rgba(0,0,0,.5);
  31. text-indent:2em;
  32. line-height:50px;
  33. bottom:0px;
  34. left:0
  35. }
  36. .accordian a{
  37. color:#fff;
  38. text-decoration:none;
  39. }

考虑到案例的适用性,比如说以后照片可能会增加,使用LESS改变案例,CSS部分修正如下。

  1. //图像个数
  2. @imageN:5;
  3. //图像hover之前的总宽度
  4. @w:800px;
  5. //图像hover之后的宽度
  6. @imageL:640px;
  7. //图像hover之前的宽度
  8. @imageS:@w/@imageN;
  9. //边框宽度
  10. @bdWidth:2px;
  11. //阴影宽度
  12. @shadowWidth:20px;
  13. .accordian{
  14. width:@w + @bdWidth * @imageN + @shadowWidth*2;
  15. margin:100px auto;
  16. ul li{
  17. float:left;
  18. list-style:none;
  19. width:@imageS;
  20. transition:all 2s;
  21. position:relative;
  22. overflow:hidden;
  23. border-left:1px solid rgba(255,255,255,.8);
  24. border-left-width:@bdWidth;
  25. box-shadow:0px 0px 20px rgba(0,0,0,0.8);
  26. .image_title{
  27. position:absolute;
  28. width:100%;
  29. height:50px;
  30. background-color:rgba(0,0,0,.5);
  31. text-indent:2em;
  32. line-height:50px;
  33. bottom:0px;
  34. left:0
  35. a{
  36. color:#fff;
  37. text-decoration:none;
  38. }
  39. }
  40. }
  41. ul:hover li{
  42. width:@imageS - @imageL/@imageN;
  43. -webkit-filter:grayscale(.8);
  44. filter:grayscale(.8);
  45. }
  46. ul li:hover{
  47. width:@imageL;
  48. -webkit-filter:grayscale(0) hue-rotate(300deg);
  49. filter:grayscale(0) hue-rotate(300deg);
  50. }
  51. }

-———————————————————————————————

前端开发whqet,关注web前端开发技术,分享网页相关资源。
-———————————————————————————————

发表评论

表情:
评论列表 (有 0 条评论,452人围观)

还没有评论,来说两句吧...

相关阅读

    相关 css实现粒子效果

    前端开发whqet,csdn,王海庆,whqet,前端开发专家 好久没有更新的CSS3演武场系列,半年前搁浅的一篇文章赋予新年新气象闪亮登场了,研究一下利用css(sass)

    相关 CSS实现手风琴效果

    今天来看一个使用hover触发的一个手风琴效果,鼠标hover时改变图像宽度,配合transition实现动画,效果如下图所示。大家也可以到我的codepen[在线编辑][Li

    相关 css 实现三角效果

    之前写过一篇关于 border 如何实现一个三角形的方法,这一次,我们将在这个的基础上实现下面的效果: ![70][] 关于尺寸方面,自己看着来就行,无所谓的;