手风琴特效这么简单还不赶紧来学?

手风琴特效

效果展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQqcHKzp-1608959688970)(Video_2020-12-26_105302.gif)]

实现原理

鼠标移入到某张图片上时,使图片宽度变大,其余图片宽度减小。鼠标移入效果我们可以利用伪类:hover实现。

实现方法有两种:
第一种:最传统的布局方法,使用float。但需要计算图片缩小的尺寸,比较繁琐。
第二种:使用 CSS3 加入的新样式——弹性盒子display:flex,其中的弹性元素会自动分配剩余空间,无需手动计算缩小后每张图片所占像素。

方法一

我们先来展示 float 的写法:

html 结构:

<ul>
  <li><img src="1.png" alt="" /></li>
  <li><img src="2.png" alt="" /></li>
  <li><img src="3.png" alt="" /></li>
  <li><img src="4.png" alt="" /></li>
</ul>

css 样式:

* {
  margin: 0;
  padding: 0;
}
body {
  background-color: #f8bbd0;
}
img {
  width: 250px;
  height: 325px;
}
li {
  list-style: none; /*消除无序列表默认样式*/
  width: 100px;
  transition: all 1s;
  float: left; /*使li浮动并列一行展示*/
}
ul {
  width: 400px;
  height: 325px;
  margin: 100px auto;
  overflow: hidden;
  box-shadow: 3px 3px 10px #555;
}
ul:hover li {
  width: 50px;
  /* 手动计算每张图片缩小后的大小 
    250px + 50px*3 = 400px*/
}
ul li:hover {
  width: 250px;
  /*鼠标移入时,该图片完全显示出来 
    与上面img设置的尺寸保持一致*/
}

注意: 先设置 ul:hover li{…},再设置 ul li:hover{…}。顺序千万不能反,否则会出 BUG。因为鼠标第一触碰到的肯定是它的父级盒子 ul,其次再是里面的 li,所以顺序不能反!

方法二

html 结构:

<ul>
  <li><img src="1.png" alt="" /></li>
  <li><img src="2.png" alt="" /></li>
  <li><img src="3.png" alt="" /></li>
  <li><img src="4.png" alt="" /></li>
</ul>

css 样式:

* {
  margin: 0;
  padding: 0;
}
body {
  background-color: #f8bbd0;
}
img {
  width: 250px;
  height: 325px;
}
li {
  list-style: none;
  width: 100px;
  overflow: hidden;/*一定要设置li超出部分隐藏*/
  transition: all 1s;
}
ul {
  width: 400px;
  height: 325px;
  display: flex;/*设置为弹性盒子*/
  margin: 100px auto;
  box-shadow: 3px 3px 10px #555;
}
li:hover {
  width: 250px;
  flex-shrink: 0;/*空间不足时,不会缩小*/
}

为什么一定要设置超出部分隐藏呢,如果不设置overflow:hidden,li里面的图片会超出li的宽度(只是表面上看上去的视觉隐藏了,因为后者li盖住了前者li,起到了视觉隐藏)。图片超出的部分会影响弹性元素li的自适应,当你鼠标放上去时候会发现,后面的元素被挤走了,前面的图片也没有发生自适应。如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErF3V4i3-1608959688973)(Video_2020-12-26_112248.gif)]



各位看官,如果觉得有帮助,麻烦看完给个三连
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值