专栏首页大前端666VUE实战—商品展示切图(7)
原创

VUE实战—商品展示切图(7)

上次我们通过设计评价组件这个过程,了解到了组件设计中的良好的习惯,比如,文件夹如何支撑组件,图片,组件路径的存放于设置。

本篇我们将继续推进外卖项目—商品页的展示。

如图所示,我们可以把商品也面分为两大部分:

  • 左侧“菜单栏”;
  • 右侧商品展示;

goods为当前商品页面的根元素。

<templete>
    <div class="goods">
        <div class="menu-wrapper"></div>    
        <div class="foods-wrapper"></div>   
    </div>
</templete>

细化左侧菜单栏

我们先来细化class为menu-wrapper的菜单内容。

 <div class="menu-wrapper">
      <ul>
        <li class="menu-item current">
          <p class="text">
            <img
              src="http://p1.meituan.net/xianfu/a4167074795cfb33d819fd0590d1545b2048.png"
              class="icon"
            >
            专场
          </p>
        </li>
        <li class="menu-item">
          <p class="text">
            <img
              src="http://p1.meituan.net/xianfu/10ba72e043ef4eca806cafb1a90a22662048.png"
              class="icon"
            >
            热销
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            早餐
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            促销产品和热卖产品
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            主食
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            超值套餐
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            小食
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            饮品
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            甜品
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
        <li class="menu-item">
          <p class="text">
            <!---->
            开心乐园餐
          </p>
          <i class="num" style="display: none;">0</i>
        </li>
      </ul>
    </div>

主要运用了css3的flexbox布局,使用绝对定位控制商品页在页面区域显示的范围。

.goods {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: absolute;
  top: 190px;
  bottom: 51px;
  overflow: hidden;
  width: 100%;
}
.goods .menu-wrapper {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 85px;
  flex: 0 0 85px;
  background: #f4f4f4;
}

使用css美化左侧菜单栏的内容:

​
.goods .menu-wrapper .menu-item {
  padding: 16px 23px 15px 10px;
  border-bottom: 1px solid #e4e4e4;
  position: relative;
}
.goods .menu-wrapper .menu-item.current {
  background: white;
  font-weight: bold;
  margin-top: -1px;
}
.goods .menu-wrapper .menu-item:first-child.current {
  margin-top: 1px;
}
.goods .menu-wrapper .menu-item .text {
  font-size: 13px;
  color: #333333;
  line-height: 17px;
  vertical-align: middle;
  -webkit-line-clamp: 2;
  display: -webkit-box;
  -webkit-box-orient: vertical;
​
  overflow: hidden;
}
.goods .menu-wrapper .menu-item .text .icon {
  width: 15px;
  height: 15px;
  vertical-align: middle;
}
.goods .menu-wrapper .menu-item .num {
  position: absolute;
  right: 5px;
  top: 5px;
  width: 13px;
  height: 13px;
  border-radius: 50%;
  color: white;
  background: red;
  text-align: center;
  font-size: 7px;
  line-height: 13px;
}

左侧菜单栏结构,美化现在就已经完成了。

细化右侧商品列表

下面我们来细化右侧列表:

<div class="foods-wrapper">
      <ul>
            <li class="container-list">
          <div>
            <img src="http://p1.meituan.net/xianfu/6588840adbcfbfe2c7a43aa69d4b36da107767.jpg">
          </div>
          <div>
            <img src="http://p1.meituan.net/xianfu/378446763167442a511dc9d4c675d877144571.jpg">
          </div>
        </li>
        <li class="food-list food-list-hook">
          <h3 class="title">热销</h3>
          <ul>
            <li class="food-item">
              <div
                class="icon"
                style="background-image: url(&quot;http://p0.meituan.net/xianfu/35f41c0badc69352b886cc34080f1f9a232448.png.webp&quot;);"
              ></div>
              <div class="content">
                <h3 class="name">脆香油条</h3>
                <!---->
                <div class="extra">
                  <span class="saled">月售154</span>
                  <span class="praise">赞3</span>
                </div>
                <img src class="product" style="display: none;">
                <p class="price">
                  <span class="text">¥5.5</span>
                  <span class="unit">/例</span>
                </p>
              </div>
              <div class="cartcontrol-wrapper">
                <div class="cartcontrol">
                  <div class="cart-decrease" style="display: none;">
                    <span class="inner icon-remove_circle_outline"></span>
                  </div>
                  <div class="cart-count" style="display: none;"></div>
                  <div class="cart-add icon-add_circle">
                    <i class="bg"></i>
                  </div>
                </div>
              </div>
            </li>
            </ul>
        </li>
      </ul>
    </div>

通过css美化代码

​
.goods .foods-wrapper {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  /* background: blue; */
}
.goods .foods-wrapper .container-list {
  padding: 11px 11px 0 11px;
  border-bottom: 1px solid #e4e4e4;
}
.goods .foods-wrapper .container-list img {
  width: 100%;
  margin-bottom: 11px;
  border-radius: 5px;
}
.goods .foods-wrapper .food-list {
  padding: 11px;
}
.goods .foods-wrapper .food-list .title {
  height: 13px;
  font-size: 13px;
  background: url(btn_yellow_highlighted@2x.png) no-repeat left center;
  background-size: 2px 10px;
  padding-left: 7px;
  margin-bottom: 12px;
}
​
.goods .foods-wrapper .food-list .food-item {
  display: flex;
  margin-bottom: 25px;
  position: relative;
}
.goods .foods-wrapper .food-list .food-item .icon {
  flex: 0 0 63px;
  background-position: center;
  background-size: 120% 100%;
  background-repeat: no-repeat;
  margin-right: 11px;
  height: 75px;
}
.goods .foods-wrapper .food-list .food-item .content {
  flex: 1;
}
.goods .foods-wrapper .food-list .food-item .content .name {
  font-size: 16px;
  line-height: 21px;
  color: #333333;
  margin-bottom: 10px;
  padding-right: 27px;
}
.goods .foods-wrapper .food-list .food-item .content .desc {
  font-size: 10px;
  line-height: 19px;
  color: #bfbfbf;
  margin-bottom: 8px;

总结

注意右侧结构的布局,通常在一个分类下,比如热销,同等结构,样式的展示我们通常依据请求到后台的数据循环模板就可以了。但是,先满足功能,需求,在优化,也是没有什么问题的。

下一篇文章我们开始为左侧菜单栏,右侧商品展示加入数据。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Vue实战—菜单栏商品展示数据交互(8)

    之前我们说过在created钩子,mounted钩子内可以发起请求,请求需要的数据。本次我们在created钩子内发起get请求,获取数据:

    前端大彬哥
  • 当前 GitHub 上排名前十的热门 Vue 项目

    Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的组件库,提供了配套设计资源,帮助你的网站快速成型。通过基础的 24 分栏,迅速简便地...

    疯狂的技术宅
  • Github上10个值得学习的Springboot开源项目

    Spring Boot 几乎继承了所有 Spring 框架的优点,同时还可以让项目的配置更简化、编码更简化、部署更方便。近两年受到很多开发者的追捧,也是火热的不...

    三哥
  • Github 上热门的 Spring Boot 项目实战推荐

    Guide哥
  • 基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用

    前言 初学vue时曾在网上搜索vue的实战项目源码,无奈大部分都是简单的demo,对于深究vue没有太大的帮助,剩下的一些大部分都是像音乐播放器之类的展示型项目...

    IMWeb前端团队
  • 基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用

    初学vue时曾在网上搜索vue的实战项目源码,无奈大部分都是简单的demo,对于深究vue没有太大的帮助,剩下的一些大部分都是像音乐播放器之类的展示型项目,交互...

    IMWeb前端团队
  • 实战SSM_O2O商铺_25【商品类别】商品类别列表展示从Dao到View层的开发

    进入owner拥有的店铺列表后,对某个店铺进行管理,其中类别管理模块的效果如上。所以获取商品类别的时候要传入shopId.

    小小工匠
  • 前端成神之路-vue路由

    路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源。 那么url地址和真实的资源之间就...

    海仔
  • Vue实战系列—项目搭建四步曲(0)

    开篇:想通过输出Vue系列文章,让大家全面理解Vue的实现原理,掌握实用技巧,能在实战中使用Vue,解锁一个开发技能。

    前端大彬哥
  • 用这些后台管理模版后,三天完成项目!

    你是否遇到过PM今天丢给你一堆后台管理系统的需求文档,并说这个产品下个星期上线没有问题吧!

    @超人
  • Vue实现电商网站项目

    vue-router路由管理/src/views/目录下的vue组件进行设置,router-views挂载所有路由,登录界面与商品列表页面之间header做隐藏...

    Jack Chen
  • 前端成神之路-vue前端项目06

    使用upload组件完成图片上传 在element.js中引入upload组件,并注册 因为upload组件进行图片上传的时候并不是使用axios发送请求 ...

    海仔
  • Vue3 的学习教程汇总、源码解释项目、支持的 UI 组件库、优质实战项目

    关于猫哥,大家可以看看我的年终总结 前端工程师的 2020 年终总结 - 3 年之痒。

    @超人
  • 八个开源的 Spring Boot 学习资源,你值得拥有

    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 《Spring Boot + Vue 全栈开发实战》迄今为止已经加印了 3 次,...

    JAVA葵花宝典
  • 从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(三)

    这篇文章中,我们将讲解 Vue 实例的 Props 和 Methods,接着我们又讲解了最常见的 Vue 模板语法,并通过实例的方式将这些模板语法都实践了一番,...

    一只图雀
  • 整理了八个开源的 Spring Boot 学习资源

    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 《Spring Boot + Vue 全栈开发实战》迄今为止已经加印了 3 次,...

    纯洁的微笑
  • Vue.js高仿饿了么外卖App学习记录

    开发一款vue.js开发一款app,使用vue.js是一款高效的mvvm框架,它轻量,高效,组件化,数据驱动等功能便于开发。使用vue.js开发移动端app,学...

    达达前端
  • 从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(六)

    前面五篇教程我们已经基本实现了迷你全栈电商应用的界面展示以及功能逻辑,相信大家在这个过程中都收获颇丰,并且迈向了全栈工程师的第一步。但是我们却并不满足于此,我们...

    一只图雀
  • 「葡萄城公开课」WijmoJS 前端开发工具包-新功能详解

    WijmoJS 前端开发工具包由多款高效、灵活的纯前端控件组成,全面支持 Angular、React、Vue、Type、Knockout 和 Ionic 框架,...

    葡萄城控件

扫码关注云+社区

领取腾讯云代金券