likes
comments
collection
share

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

作者站长头像
站长
· 阅读数 79

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

一、实现网易云首页 item 图片上的图标

上篇文章中我们已经实现了封面的基本样式:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

与官网中的样式相比还缺少播放量和播放按钮等信息:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

第 1 步:设置播放量

div.top 中添加一个 div.info 来显示播放量信息,具体代码如下所示:

<div class="item">
  <div class="top">
    <img src="https://p1.music.126.net/sixunTcvD_IXeVqxZnpHkA==/109951163452086313.jpg?param=140y140" alt="">
    <!-- 封面背景 -->
    <a class="cover"></a>
    <div class="info">2928万</div>
  </div>
  <div class="bottom">这些充满『强烈画面感』的音乐</div>
</div>

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

播放量信息是覆盖在封面图上的,因为 div.top 已经是相对定位元素了,因此通过添加绝对定位并设置偏移量,将播放信息放在左下角,具体代码如下:

.item .top .info {
  position: absolute;
  bottom: 0;
  left: 0;
}

刷新浏览器,具体效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

原样式中播放量信息还有一个半透明灰色的背景:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

添加同样的背景以及背景图片位置,需要注意的是 background-position 一定要放在 background 属性后面,否则设置无效。

.item .top .info {
  position: absolute;
  bottom: 0;
  left: 0;

  /*高度*/
  height: 27px;
  width: 100%;
  background: url(../images/coverall.png) no-repeat;
  background-position: 0 -537px;
  /*字体颜色*/
  color: #ccc;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

可以看到背景没有整行显示,这是因为设置了定位和偏移之后 div.info 的宽度由内容决定,导致没有占据整行,因此图片没有完全显示。

这是可以通过添加一个 right: 0; 来将 div.info 拉长,背景就可以完全显示出来了,具体代码如下:

.item .top .info {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;

  height: 27px;
  width: 100%;
  background: url(../images/coverall.png) no-repeat;
  background-position: 0 -537px;
  color: #ccc;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

这样背景就整行显示了,接着还需要设置字体大小、居中等样式,具体代码如下:

.item .top .info {
  position: absolute;
  bottom: 0;
  left: 0;

  height: 27px;
  width: 100%;
  background-position: 0 -537px;
  background: url(../images/coverall.png) no-repeat;
  color: #ccc;
  font-size: 12px;
  line-height: 27px;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

第 2 步:设置耳机图标

接着在 div.info 中添加一个 icon 图标来表示播放量左边的耳机图标,具体 HTML 代码如下:

<div class="info">
  <i class="icon"></i>
  <span class="count">2829万</span>
</div>

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

这里没有显示出来耳机图标,因为还没有设置具体的精灵图,查看原样式中精灵图所在的图片即位置:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

设置耳机图标的宽高及位置,具体 CSS 代码如下:

.item .top .info .icon {
  display: inline-block;
  width: 14px;
  height: 11px;

  background: url(../images/iconall.png) no-repeat;
  background-position: 0 -24px;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

图标有一点太靠上,设置相对定位以及 top 偏移量来微调图标位置,具体代码如下:

.item .top .info .icon {
  position: relative;
  top: 2px;
  display: inline-block;
  width: 14px;
  height: 11px;

  background: url(../images/iconall.png) no-repeat;
  background-position: 0 -24px;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

原样式中耳机图标距离父元素 div.info 左边界有一定的间距:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

可以通过 padding-left 来实现,具体 HTML 代码如下:

.item .top .info {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;

  height: 27px;
  background: url(../images/coverall.png) no-repeat;
  background-position: 0 -537px;
  color: #ccc;
  font-size: 12px;
  line-height: 27px;

  padding-left: 10px;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

耳机图标和同级的播放量之间也有一定的间距,可以通过给播放量设置左外间距实现:

.item .top .info .count {
  margin-left: 4px;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

位置调整完成,至此已经实现了耳机图标。

第 3 步:实现播放图标

封面底部的右边还有一个播放量的图标,在 div.info 中添加 i 元素实现右边的播放图标:

<div class="info">
  <i class="icon"></i>
  <span class="count">2829万</span>
  <i class="play"></i>
</div>

查看原样式中播放图标的宽高以及位置信息:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

设置播放图标的宽高及在图片中的位置,播放图标具体的摆放位置通过绝对定位来实现,位置参照对象是定位父元素 div.info,并设置 bottomright 偏移量,具体 CSS 代码如下:

.item .top .info .play {
  width: 16px;
  height: 17px;
  position: absolute;
  right: 10px;
  bottom: 5px;

  background: url(../images/iconall.png) no-repeat;
  background-position: 0 0;
}

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

至此播放图标已经完全实现了

第 4 步:抽取公共 CSS 代码

在设置耳机图标和播放图时有很多重复的 CSS 代码,这两个图标是来自同一张精灵图,因此我们可以进行抽取代码。

首先重新设置耳机和播放图标的 class 属性值,都给一个 icon 属性,具体代码如下:

<div class="info">
  <i class="icon hearset"></i>
  <span class="count">2829万</span>
  <i class="icon play"></i>
</div>

对选择器名称也进行修改:

 /*修改选择器名*/
.item .top .info .hearset {
  position: relative;
  top: 2px;
  display: inline-block;
  width: 14px;
  height: 11px;

  background: url(../images/iconall.png) no-repeat;
  background-position: 0 -24px;
}

/*修改选择器名*/
.item .top .info .play {
  width: 16px;
  height: 17px;
  position: absolute;
  /* top: 0px; */
  right: 10px;
  bottom: 5px;

  background: url(../images/iconall.png) no-repeat;
  background-position: 0 0;
}

将重复代码抽取到 icon 选择其中:

.icon {
  background: url(../images/iconall.png) no-repeat;
  display: inline-block;
}

再把位置信息抽取出到单独的选择器中:

.hearset {
  width: 14px;
  height: 11px;
  background-position: 0 -24px;
}

.play {
  width: 16px;
  height: 17px;
  background-position: 0 0;
}

添加定位信息:

.item .top .info .icon-play {
  position: absolute;
  /* top: 0px; */
  right: 10px;
  bottom: 5px;
}

.item .top .info .icon2-hot {
  position: absolute;
  top: 0;
  left: 0;
}

给耳机和播放图标添加上面定义的样式:

<div class="info">
 <i class="icon icon-hearset hearset"></i>
 <span class="count">2829万</span>
 <i class="icon icon-play play"></i>
</div>

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

在之后的代码中想要直接使用这两个图标,直接添加相关的 class 就可以了:

<!--在div.top 下面增加图标-->
<i class="icon hearset"></i>
<i class="icon play"></i>

刷新浏览器,效果如下:

HTML + CSS 连载 | 54 - 网易云音乐 ITEM(中)一、实现网易云首页 item 图片上的图标 上篇文章

转载自:https://juejin.cn/post/7300207920284827689
评论
请登录