HTML页面中音乐专辑盒子的做法

499 阅读2分钟

Snipaste_2022-09-18_00-48-21.jpg

Snipaste_2022-09-18_00-53-09.jpg 当我们打开QQ音乐或者网易云音乐主页面的时候,会看到歌单推荐区域。该区域中歌单专辑的交互效果如何使用CSS实现的?

Snipaste_2022-09-18_01-06-26.jpg 我的思路是将这个专辑歌单大盒子分为上下两个部分,上部图窗区域和下部文字区域。

上部图窗区域分为图片、蒙版、播放按钮和播放数据四个元素,其中需要注意的是图片会在鼠标悬停时在盒子内放大,蒙版使图片变色,播放按钮会从隐到现的同时放大出现,播放数据在右上角定位显示。

以下是我实现的效果:

2022-09-18 00-06-27.gif

(封面是网红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">&#xea6d;</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;
  }
}