当我们打开QQ音乐或者网易云音乐主页面的时候,会看到歌单推荐区域。该区域中歌单专辑的交互效果如何使用CSS实现的?
我的思路是将这个专辑歌单大盒子分为上下两个部分,上部图窗区域和下部文字区域。
上部图窗区域分为图片、蒙版、播放按钮和播放数据四个元素,其中需要注意的是图片会在鼠标悬停时在盒子内放大,蒙版使图片变色,播放按钮会从隐到现的同时放大出现,播放数据在右上角定位显示。
以下是我实现的效果:
(封面是网红Enndme)
html部分
<div class="album">
<!-- @上部图窗 -->
<div class="music-box">
<!-- 图片 -->
<div class="img"></div>
<!-- 蒙版 -->
<i class="mask"></i>
<!-- 播放按钮 -->
<i class="play"></i>
<!-- 播放数据 -->
<div class="date">
<i class="iconfont"></i>
<span>879万</span>
</div>
</div>
<!-- @下部文字 -->
<span>2022全网最好听的流行音乐</span>
</div>
使用less的部分
// #专辑大盒子
.album {
width: 200px;
height: 250px;
margin: 100px auto; //设置专辑大盒子宽高并且居中
// @上部图窗
.music-box {
position: relative;
width: 200px;
height: 200px;
border-radius: 3.5%; //这是圆角边框
overflow: hidden;
cursor: pointer; //鼠标悬停时指针变成手指
// 图片
.img {
width: 100%;
height: 100%;
background: url(../img/img2.jpg) no-repeat center;
background-size: 200px;
transition: all 0.35s;
}
// 蒙版
.mask {
display: block;
position: absolute;
top: 0;
height: 200px;
width: 200px;
transition: all 0.25s;
}
// 播放按钮
.play {
position: absolute;
top: 50%;
left: 50%; //播放按钮水平垂直居中
transform: translate(-50%, -50%) scale(0.5);
opacity: 0;
height: 70px;
width: 70px;
background: url(../img/cover_play2.png) no-repeat;
background-size: 100%;
transition: all 0.35s;
}
// !鼠标经过效果
&:hover .img {
transform: scale(1.2);
}
&:hover .mask {
background-color: rgba(0, 0, 0, 0.3);
}
&:hover .play {
transform: translate(-50%, -50%) scale(1); //鼠标经过变换属性保持一致
opacity: 1;
}
// 播放数据
.date {
position: absolute; //子绝父相定位播放数据盒子
top: 2px;
right: 8px;
color: white;
i {
font-size: 14px;
}
span {
font-size: 18px;
}
}
}
// @下部文字
span {
font-size: 19px;
}
}