HTML+CSS静态仿QQ音乐网页设计(二)

歌单推荐模块

HTML

<!-- 歌单推荐 -->

        <div class="recommend">

            <div class="wrapper">

                <div class="index-hd">

                    <h1>歌&nbsp;单&nbsp;推&nbsp;荐</h1>

                </div>

                <div class="index-nav">

                    <ul>

                        <li><a href="#" class="active">为你推荐</a></li>

                        <li><a href="#">网络歌曲</a></li>

                        <li><a href="#">短视频热歌</a></li>

                        <li><a href="#">九月推荐</a></li>

                        <li><a href="#">官方歌单</a></li>

                        <li><a href="#">情歌</a></li>

                    </ul>

                </div>

            </div>

            <div class="banner">

                <div class="wrapper">

                    <ul class="carousel">

                        <li class="carousel-item">

                            <div class="recommend-list">

                                <a href="#" class="pic-cover">

                                    <!-- 遮罩层 -->

                                    <div class="mask"></div>

                                    <img src="./uploads/pic1.webp" alt="pic">

                                </a>

                                <div class="text">

                                    <h4><a href="#">纪念方大同:我们耳机里特别的人</a></h4>

                                    <p>播放量:805.8万</p>

                                </div>

                            </div>

                        </li>

                        <li></li> *24

                        ......

                    </ul>

                    <!-- 圆点    -->

                    <div class="switch">

                        <ol class="dots">

                            <li><a href="#" class="default-click"></a></li>

                            <li><a href="#"></a></li>

                            <li><a href="#"></a></li>

                            <li><a href="#"></a></li>

                            <li><a href="#"></a></li>

                        </ol>

                    </div>

                </div>

                <!-- 箭头 -->

                <a href="#" class="prev">

                    <em class="iconfont icon-arrow-left-bold"></em>

                </a>

                <a href="#" class="next">

                    <em class="iconfont icon-arrow-right-bold"></em>

                </a>

            </div>

        </div>


CSS

/* 歌单推荐 */

.main .index-hd h1 {

  height: (109 / @vw);

  padding-top: (43 / @vw);

  text-align: center;

  line-height: (40 / @vw);

  font-weight: 700;

  font-size: (32 / @vw);

}

.main .index-nav {

  width: 100%;

  /* 改为百分比 */

  max-width: (1122 / @vw);

  /* 如果需要限制最大宽度 */

  margin: 0 auto;

  /* 居中 */

  height: (50 / @vw);

}

.main .index-nav ul {

  display: flex;

  justify-content: center;

  align-items: center;

}

.main .index-nav ul li a {

  margin: 0 (24 / @vw);

  font-size: (15 / @vw);

}

.banner {

  width: 100%;

  font-weight: normal;

  background-color: #fafafa;

}

.banner .wrapper {

  width: (1122 / @vw);

  overflow: hidden;

}

.banner ul {

  display: flex;

  width: 100%;

  flex-wrap: wrap;

  justify-content: space-between;

  margin-bottom: (10 / @vw);

}

.banner ul.carousel {

  width: calc(100% * 5);

  flex-wrap: nowrap;

  justify-content: flex-start;

  margin-bottom: (10 / @vw);

  animation: slide 21s infinite;

}

.banner ul.carousel li.carousel-item {

  width: (224.4 / @vw);

}

.banner ul.carousel .recommend-list {

  width: 100%;

  height: (290 / @vw);

}

.banner ul li .pic-cover {

  display: block;

  position: relative;

  overflow: hidden;

}

.banner ul.carousel li.carousel-item .pic-cover {

  width: (208 / @vw);

  height: auto;

}

.banner ul li .pic-cover img {

  width: (208 / @vw);

  height: auto;

  /* object-fit: cover; */

  transition: all 0.3s ease;

}

@keyframes slide {

  0%,

  16% {

    transform: translateX(0);

  }

  20%,

  36% {

    transform: translateX(-20%);

  }

  40%,

  56% {

    transform: translateX(-40%);

  }

  60%,

  76% {

    transform: translateX(-60%);

  }

  80%,

  96% {

    transform: translateX(-80%);

  }

  100% {

    transform: translateX(0);

  }

}

.banner ul li .pic-cover:hover img {

  transform: scale(1.1);

}

.banner ul li .pic-cover .mask {

  /* 初始状态为透明,元素存在于布局中 */

  opacity: 0;

  position: absolute;

  top: 0;

  left: 0;

  width: 100%;

  height: 100%;

  z-index: 1;

  background: rgba(0, 0, 0, .3) url(../images/cover_play.56974e6f.png) no-repeat center;

  background-size: 20%;

  transform-origin: 50% 50%;

  transition: all 0.3s ease;

}

.banner ul li .pic-cover:hover .mask {

  opacity: 1;

  transform: scale(1.7);

}

.banner ul li .text {

  width: (208 / @vw);

  height: (60 / @vw);

}

.banner ul li .text h4 {

  margin-top: (12 / @vw);

}

.banner ul li .text p {

  height: (20 / @vw);

  color: #999;

}

总体总结

1、导航栏:不同分类的歌单标签

 <ul> 使用 Flex 布局实现水平排列

justify-content:center 实现水平居中排列

margin: 0 (24 / @vw): 控制间距

2、轮播图:自动滚动的歌单推荐列表,鼠标悬停缩放图片并显示遮罩层

@keyframes slide :动画效果,每 21 秒循环一次

transform: translateX() :依次切换页面(每次移动 20% 的宽度,对应 5 页内容)

transform: scale(1.1) :悬停时图片放大

遮罩层 .mask :从透明(opacity: 0)变为不透明(opacity: 1)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容