【Vue3从零开始-实战】S1:工程初始化及首页Tabbar样式编写

简介: 【Vue3从零开始-实战】S1:工程初始化及首页Tabbar样式编写

TQF(U$5`NM_$X}O1CR%ZQ)7.png


开始之前


【vue3从零开始】已经写了七个大章节的内容,也把vue3里面的知识点都大致讲解了一遍,从本篇文章开始,就正式进入实战篇了,我们会一起做一个仿某电商的网站。


在实战项目中,我们不会去完整的写完一个网站,之后把其中一些重点的地方或者是常用的组件写出来,也会在实战过程中把之前没讲过的一些内容重点说明一下。


项目初始化


👆 要开始做一个实战项目了,就得重新去创建一个项目。


vue create vue_pro
复制代码


✌️ 在创建项目的时候,我们会把Router、Vuex、Css预处理器(本项目中会用到Scss来处理样式)、Eslint等都一并安装到项目中。


UO`%EKV~123_0Y][U{4BAPV.png


  • 大家可以根据上面的动图来创建一个自己的项目哦。


  • 项目中使用的Eslint是一个标准版的配置。


👌 项目创建完成之后,就可以将项目导入vscode里面运行起来了。


npm run serve
复制代码


Y0(L920N_C30FZ{T7]I@PFC.png

vscode插件安装


在写代码的时候,我们可能需要一些智能提示或者代码校验的规则,这时候我们就需要在vscode中安装一些适用的插件来帮助我们更好更方便的完善项目。


185[2{{W4`UOAK7FXA}0@6J.png


  • 首先在vscode左侧有一个插件栏,点击进去之后就可以搜索想要的插件了。


  • 项目中需要的而且是vue开发中常用的插件就是ESlint和Vetur了。


ESlint插件主要是校验代码中的语法是否规范,从而给到一些提示。


Vetur插件主要是识别vue文件中的代码,可以使代码高亮显示出来。


配置样式


由于我们这个实战项目是基于手机端的,为了更好的适配浏览器,更正部分浏览器自身的bug并保证各浏览器的一致性,我们需要在项目中安装一个css插件。


npm install normalize.css --save
复制代码


]PY1X~))$QKO8IPPN5F6R_F.png


  • 可以在package.json文件里面看看normalize.css是否有安装成功。


安装成功之后,就可以在main.js里面引用normalize.css了。


import 'normalize.css'
复制代码


@B)U}BDY2DYO[B63[FW`J~U.png


normalize.css就已经配置完成了,接下来就要配置基础样式。


⭐️ 在项目根目录下新建一个style文件夹,style文件夹中再新建一个base.scss文件。


⭐️ 打开base.scss文件,写上如下样式代码:


html{
    font-size: 100px;
}
复制代码


由于项目是手机端使用的,我们会用rem来表示像素单位,1rem就等于html下面的font-size配置的像素值。 这里我配置的就表示1rem = 100px,也方便后续的样式计算。


base.scss配置完之后,也要在main.js中引入。


import './style/base.scss'
复制代码


F2W(`)LC}6$C}T{04E13T45.png


下面我们就把App.vue改造一下,看看样式是否有生效。


<template>
  <div>
    JueJin
  </div>
</template>
<style lang="scss">
</style>
复制代码

然后启动项目之后打开浏览器就可以看到效果了。


8ZILDYEI[IIE311YWCI{2HA.png


由于我们设置html的样式,所以在页面上看到的文字效果会比较大。证明base.scss的样式已经生效了。


因为我们的实战项目是移动端的网页,所以还需要在PC端的chrome浏览器中配置移动端开发模拟器。


]9N2`6I@1@J9D4}PRE7($%5.png


首页Tabbar样式


项目原稿


_Z_FV5SNB_U[TLRBSC~F7V2.png


在每一个实战环境都会把项目原稿中的尺寸通过贴图的方式展现出来,也方便大家在实战项目中可以更好的一起学习。


研究Tabbar


NCGPLM6A_@{`%YKE4V9EFFU.png


在tabbar中是有图标和文字构成,采用的是居中并且均匀分布的方式分割出来的。但是通过稿图发现,tabbar两端的间距是不一致的,会有一个居左居右的padding值。


图标配置


tabbar上面的图标均可以在iconfont官网中找到。


[)TPNYACL~A97U50WQJOCUR.png


  • 把所需的icon都放到一个iconfont项目中保存起来,然后下载至本地打开。


MA`3LK2AO)G85%G_]N`Y5[3.png


  • 下载的iconfont文件中有一个iconfont.css文件,我们将里面的部分内容复制到项目中的css文件。


`DL27DC)A6BS%M$DIBDYBSL.png


  • 在style文件夹中新建一个iconfont.css文件,然后把下面的css代码复制进去。


@font-face {
  font-family: "iconfont";
  src: url('../assets/font/iconfont.woff2') format('woff2'),
    url('../assets/font/iconfont.woff') format('woff'),
    url('../assets/font/iconfont.ttf') format('truetype');
}
.iconfont {
  font-family: "iconfont" !important;
  font-size: 16px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
复制代码


  • @font-face中url里面是字体文件存储的位置,所以我们需要把下载下来的iconfont中的字体文件放到assets下面的font文件夹中(font文件夹是新建的哦~)。


⭐️ 图标已经配置完成,那么就要去App.vue里面试一下看看会不会生效。


<template>
  <div>
    <div class="iconfont">&#xe737;</div>
    JueJin
  </div>
</template>
<style lang="scss">
.iconfont{
  font-size: 100px;
}
</style>
复制代码


  • 是在iconfont项目中复制过来的。


  • iconfont样式名是在iconfont.css中@font-face定义的font-family名称。


%%IE_G2)4ZK8}213Q535L0P.png


tabbar编写


]_BVBT4Z$YX)8[@EG[ST)Q5.png


<template>
  <div class="tabbar">
    <div class="tabbar__item">
      <div class="iconfont">&#xe64f;</div>
      <div class="tabbar__title">首页</div>
    </div>
    <div class="tabbar__item">
      <div class="iconfont">&#xe61a;</div>
      <div class="tabbar__title">购物车</div>
    </div>
    <div class="tabbar__item">
      <div class="iconfont">&#xe737;</div>
      <div class="tabbar__title">订单</div>
    </div>
    <div class="tabbar__item">
      <div class="iconfont">&#xe8a0;</div>
      <div class="tabbar__title">我的</div>
    </div>
  </div>
</template>
<style lang="scss">
.tabbar{
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 0.49rem;
  border-top: 1px solid #f1f1f1;
  display: flex;
  padding: 0 0.18rem;
  box-sizing: border-box;
}
.tabbar__item{
  flex: 1;
  text-align: center;
}
</style>
复制代码


  • 根据稿图我们定义了一个tabbar的div标签,并将所需的四个模块分别包裹进去。


  • 由于tabbar是定位在底部的,所以tabbar的样式需要采用绝对定位。


  • 绝对定位的标签在写padding样式时,需要同时加上box-sizing,不然样式会出现偏差。


  • 为了使四个模块都均匀分割,还使用了flex布局。


⭐️ 由于首页中的字体大部分都是12px左右,所以我们在base.scss中还给body定义了一个0.12rem的样式。


3V8E%66~M`YTKL4(]9$O85D.png


🔥 这样就可以在浏览器中看到tabbar的展示效果了


9AF~DSX6@SU[MA$(Z4V)FN6.png


处理间距和文字大小


8NZ65`R}X[E6$U@VA$4F]97.png


根据稿图会发现图标大小是20px,还有上下间距。


.tabbar__item{
  flex: 1;
  text-align: center;
  .iconfont{
    font-size: 0.2rem;
    margin: 0.07rem 0 0.02rem 0;
  }
}
复制代码


  • 由于我们使用的是scss的样式,所以可以直接将iconfont样式写在上级标签(tabbar__item)样式里面。


[K9)HC53%0[4(5_)EYZ@COV.png


稿图中的文字大小是10px,而浏览器默认的最小字体样式是12px,所以我们还要手动修改为10px。


.tabbar__title{
  font-size: 20px;
  transform: scale(0.5, 0.5);
  transform-origin: center top;
}
复制代码


  • 通过transform进行缩放0.5倍,在通过transform-origin从中心和顶部开始缩放。


CIYM)P2WB9E~BV67Z89IBTK.png


样式合并


因为scss的特性,我们可以把一些名称前缀相同的样式通过 & 符号合并在一起去写,这样看起来就会简洁一点。


<style lang="scss">
.tabbar {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 0.49rem;
  border-top: 1px solid #f1f1f1;
  display: flex;
  padding: 0 0.18rem;
  box-sizing: border-box;
  &__item {
    flex: 1;
    text-align: center;
    .iconfont {
      font-size: 0.2rem;
      margin: 0.07rem 0 0.02rem 0;
    }
  }
  &__title {
      font-size: 20px;
      transform: scale(0.5, 0.5);
      transform-origin: center top;
    }
}
</style>
复制代码


⭐️ 除了页面上的样式可以合并之外,main.js中的引入样式也可以合并起来。这样可以避免后续的开发中,引入的样式越来越多,导致main.js看起来太混乱。


  • 在style文件夹下面新建一个index.scss文件。


  • 将style文件夹下面的其他样式文件通过import引入进去。


@import './base.scss';
@import './iconfont.css';
复制代码


  • 最后在main.js中只需要引入index.scss即可。


import './style/index.scss'
复制代码


JCAEELLC1H1LDP(M611`K7P.png


总结


本篇文章主要是把实战项目的搭建过程和首页的tabbar样式编写了一部分,在之后的文章中会继续实战项目的其他内容的学习。

相关文章
|
19天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
120 64
|
19天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
100 60
|
19天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
27 8
|
18天前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
20 1
|
18天前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
30 1
|
19天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
1月前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
28天前
|
JavaScript 索引
Vue 3.x 版本中双向数据绑定的底层实现有哪些变化
从Vue 2.x的`Object.defineProperty`到Vue 3.x的`Proxy`,实现了更高效的数据劫持与响应式处理。`Proxy`不仅能够代理整个对象,动态响应属性的增删,还优化了嵌套对象的处理和依赖追踪,减少了不必要的视图更新,提升了性能。同时,Vue 3.x对数组的响应式处理也更加灵活,简化了开发流程。
|
1月前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
69 7
|
1月前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
86 3