示例地址:demo示例演示
1、不一样的手风琴效果
按照设计需求,我们就可以很明显的看到不一样的地方,大多数的手风琴效果是这样的:四个div排列成一排,hover的时候把其他的三个进行了挤压处理。
不过我们需要的呈现效果是这样的:hover的时候,不用挤压其他的div,原因是希望1x的内容区域中,显示完整的内容,而不要去挤压他。
2、实现方式
第一种手风琴实现方式
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>手风琴效果</title><link rel="stylesheet/less" href="css/style.less">
</head>
<body>
<div class="organ"><div class="organ-list"><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></div>
</div></body>
</html>
*{margin: 0;padding: 0;
}
.organ{width: 1200px;margin: 200px auto;height: 800px;background: #1a8cff;.organ-list{width: 100%;height: 300px;padding: 10px;overflow: hidden;ul{width: 100%;height: 100%;list-style: none;position: relative;display: flex;li{width: 23.8%;height: 100%;background: #f5f5f5;margin-right: 1%;transition: all 0.5s;margin-bottom: 10px;font-size: 24px;font-weight: 600;color: #303233;line-height: 300px;text-align: center;position: relative;z-index: 399;&:hover{width: 48.5%;background: #07FFAE;}}}}
}
第二种实现方式相对来说会复杂一点,在实现第二种类型之前,先说一下遇到的问题
问题一:flex布局会让div都在同一行怎么办?
解决:ul添加flex-wrap: wrap;让他可以换行,当然也可以用float:left;
这样会出现新的问题:hover最后一个div时他不见了!!!
原因是因为最后一个div,hover时候,他超出父类的宽度,就会被顶出去,顶到下面一行
问题二:如何解决最后一个div被顶下去?
解决:单独处理最后一个div,给最后一个div进行定位处理,让他固定在那个位置,这里的方式是,给他添加一个类
.m2{position: absolute;right: 1%;z-index: 399;}
<script src="js/jquery-1.11.0.min.js"></script>
<script>$(function () {let $nth = $(".organ-list>ul>li:nth-of-type(4n)");$nth.hover(function () {$(this).addClass("m2");$(this).css("z-index","499");},function () {$(this).css("z-index","299");})})
</script>
细节问题:绑定最后的那个div时不要用li:last-of-type,因为当一行不满四个的时候,他会默认这一行的最后一个,这样是不行的,所有我们要用:nth-of-type(4n);
3、完整代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>手风琴效果</title><link rel="stylesheet/less" href="css/style.less">
</head>
<body>
<div class="organ"><div class="organ-list"><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></div><div class="organ-list"><ul><li>5</li><li>6</li><li>7</li><li>8</li></ul></div>
</div><script src="js/less.js"></script>
<script src="js/jquery-1.11.0.min.js"></script>
<script>$(function () {let $nth = $(".organ-list>ul>li:nth-of-type(4n)");$nth.hover(function () {$(this).addClass("m2");$(this).css("z-index","499");},function () {$(this).css("z-index","299");})})
</script>
</body>
</html>
*{margin: 0;padding: 0;
}
.organ{width: 1200px;margin: 200px auto;height: 800px;background: #1a8cff;.organ-list{width: 100%;height: 300px;padding: 10px;overflow: hidden;ul{width: 100%;height: 100%;list-style: none;position: relative;/*display: flex;//flex-wrap: wrap;*/li{float: left;width: 23.8%;height: 100%;background: #f5f5f5;margin-right: 1%;transition: all 0.5s;margin-bottom: 10px;font-size: 24px;font-weight: 600;color: #303233;line-height: 300px;text-align: center;position: relative;z-index: 399;&:hover{width: 48.5%;background: #07FFAE;}}.m2{position: absolute;right: 1%;z-index: 399;}}}
}