【vue】饿了么项目-页面骨架开发
1.页面骨架开发
1.1组件拆分
手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分。
<meta name="viewport" content="width=device-width,inital-scale=1.0,
maximum-scale=1.0,user-scalable=no">
参考:http://www.runoob.com/css/css-rwd-viewport.html
1.2header组件的导出、导入和引用
header.vue中 export default{}
App.vue中 import header from './components/header/header.vue'; export default{
components: {
'v-header': header
}} 就可以在template中引用 <v-header></v-header>
1.3 移动端经典布局-flex布局
1.4移动端中所有的宽度高度都是按两倍大小设计,设计图中的80px,在css中应设置为40px;
1.5 vue-loader依赖postcss插件,该插件会自动帮助我们完成浏览器兼容性的写法。
1.6 vue-router
main.js中 import VueRouter from 'vue-router';
// 安装 "VueRouter"这个插件 Vue.use(VueRouter);
App.vue template中:
<!-- 使用 router-link 组件来导航. -->
<!-- 通过传入 `to` 属性指定链接. -->
<!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
该项目中
<div class="tab-item">
<router-link v-bind:to="'/goods'"> 在CSS中要对a标签进行样式编写
商品 </router-link> </div> <router-view ></router-view>
main.js中JavaScript写法
vue文档
// 0. 如果使用模块化机制编程,導入Vue和VueRouter,要调用 Vue.use(VueRouter) // 1. 定义(路由)组件。
// 可以从其他文件 import 进来
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' } // 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
] // 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
routes // (缩写)相当于 routes: routes
}) // 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
router
}).$mount('#app') // 现在,应用已经启动了!
提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标。可以是 CSS 选择器,也可以是一个 HTMLElement 实例。在实例挂载之后, 元素可以用 vm.$el
访问。如果这个选项在实例化时有作用,实例将立即进入编译过程,否则,需要显式调用 vm.$mount()
手动开启编译。
对应到该项目中,写法为:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
import VueRouter from 'vue-router';
import VueResource from 'vue-resource';
import App from './App';
import goods from './components/goods/goods.vue';
import ratings from './components/ratings/ratings.vue';
import seller from './components/seller/seller.vue';
import 'common/stylus/index.styl';
// 安装 "VueRouter"这个插件
/* eslint-disable no-new */
Vue.use(VueRouter);
Vue.use(VueResource);
//路由配置
let routes = [
{path: '/', name: 'index', component: App, children: [{path: '/goods', component: goods}, {path: '/ratings', component: ratings}, {path: '/seller', component: seller}]}
];
let router = new VueRouter({
'linkActiveClass': 'active',
routes // (缩写)相当于 routes: routes
});
let app = new Vue({
router
}).$mount('#app'); //一进入就显示goods组件
router.push('/goods');
export default app;
导航高亮的实现,通过Router 构造配置linkActiveClass,linkActiveClass它默认值为"router-link-active"(也就是对应的class名为router-link-active),这里我们覆盖它的默认值,'linkActiveClass': 'active' 将其改为了active,在写css时,我们用的就是这个active。
1.7 导航栏中1像素边框
pc端的1像素在手机中会显示2像素,采用after伪类
mixin.styl中 border-1px($color)
position : relative
&:after
display: block
position: absolute
left: 0
bottom: 0
border-top 1px solid $color
width: 100%
content: ''
@media (-webkit-min-device-pixel-ratio: 1.5),(min-device-aspect-ratio: 1.5)
.border-1px //div中设置该类
&::after
-webkit-transform : scaleY(0.7)//1.5*0.7约为1
transform : scaleY(0.7)//Y轴缩放 @media (-webkit-min-device-pixel-ratio: 2),(min-device-aspect-ratio: 2)
.border-1px
&::after
-webkit-transform : scaleY(0.5)
transform : scaleY(0.5)
使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。@media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。同理,上边框可以用before实现;
1.8 mixin.styl的作用,里面可以写函数(是全局样式),可以在多处引用(引入:@import "common/stylus/mixin.styl"; )
1.9通过手机访问,通过ipconfig查看本机ip为192.168.0.1,用这个ip替换url中的localhost
将替换后的地址通过草料网站(http://cli.im/),生成对应的二维码,手机和电脑连接同一局域网时,就可在手机扫码查看页面了。
【vue】饿了么项目-页面骨架开发的更多相关文章
- vue 饿了么项目笔记
vue 饿了么项目 1.图标字体引用 链接 2.scss 二三倍图切换 1像素边框 链接 3.better-scroll 4.布局 商品主页面 <div id="app"&g ...
- 【vue】饿了么项目-header组件开发
1.数据传递的理解 在App.vue中用到了header组件,首先注册组件 components: { 'v-header': header } 然后才能引用 <v-header :seller ...
- Vue+webpack配置实现多页面应用开发
为什么要配置多页面开发? · 由于单页面应用不利于SEO,对于某些资讯类网站不够友好,而多页面则能够更优的解决此问题. · 传统的多页面开发模式(如java的jsp等) 前后端耦合性大,开发效率低,代 ...
- Vue页面骨架屏(二)
实现思路 参考原文中在构建时使用 Vue 预渲染骨架屏一节介绍的思路,我将骨架屏也看成路由组件,在构建时使用 Vue 预渲染功能,将骨架屏组件的渲染结果 HTML 片段插入 HTML 页面模版的挂载点 ...
- Vue单页面骨架屏实践
github 地址: VV-UI/VV-UI 演示地址: vv-ui 文档地址:skeleton 关于骨架屏介绍 骨架屏的作用主要是在网络请求较慢时,提供基础占位,当数据加载完成,恢复数据展示.这样给 ...
- vue pc端网站项目开发坑点与难度记录
背景 在一pc端的web项目里,由于某些特性需要由动态语言处理,所以只在有需要使用vue来处理数据的页面,直接引入vue.js来处理.由于刚开始并没有打算使用前端来渲染数据和处理交互,所以使用了一些非 ...
- Vue 框架-12-Vue 项目的详细开发流程
Vue 框架-12-Vue 项目的详细开发流程 首先,如果你还不了解 Vue 脚手架怎么搭建? 默认的环境中有哪些文件? 文件大概是什么作用? 那么,您要先查看之前的文章才有助于你理解本篇文章: Vu ...
- 【前端vue开发架构】vue开发单页项目架构总结
为营销活动设计的前端架构 主要的技术栈为 Vuejs,Webpack,请自行阅读如下技术或者框架的文档: 一.基础说明: node (https://nodejs.org/en/) npm (http ...
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
每天记录一点:NetCore获得配置文件 appsettings.json 用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...
随机推荐
- 记DateTime.Now.ToString()遇到的一个坑
最近在编写一个程序中遇到的 程序的简要逻辑就是一个timer控件 1.获取当前时间的短时间,例如 13:15 2.使用获取到的短时间去一个列表中查询是否有匹配的,列表中是一串短时间,类似 {" ...
- [编程] C语言枚举类型(Enum)
C语言枚举类型(Enum):定义形式为:enum typeName{ valueName1, valueName2, valueName3, ...... };enum 类型名{名字1,名字2} 枚举 ...
- hdu 1392 Surround the Trees 凸包模板
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- Java CountDownLatch解析(上)
写在前面的话 最近一直在边工作边学习分布式的东西,看到了构建Java中间件的基础知识,里面有提到Java多线程并发的工具类,例如ReentrantLock.CyclicBarrier.CountDow ...
- Win10系统安装vmware workstation 12后没有桥接网卡怎么办
原文 vmware workstation是一款虚拟机计算机软件,可以同时运行不同的操作系统,然而有win10系统用户在安装vmware workstation 12之后,却发现网络连接里面没有桥接网 ...
- [翻译]Review——Learn these core JavaScript concepts in just a few minutes
Learn these core JavaScript concepts in just a few minutes(只需几分钟即可学习这些核心JavaScript概念) 原文地址:https://m ...
- 简单Json序列化和反序列化
序列化是什么: 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得.序列化分为两大部分:序列化和反序列化.序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络 ...
- rocketmq 控制台 trackType NOT_CONSUME_YET
1. 问题描述 rocketmq消费者偶有没有收到消息,查看后台, 显示NOT_CONSUME_YET 2. 分析 mq控制台 显示有该条消息数据 只是状态为未消费 那么问题应该出在 消费者一方 诶? ...
- 【HTML基础】<acronym>和<abbr>的区别
缩写标签<acronym> <abbr>的区别 大家都知道HTML定义缩写有<acronym> <abbr>两种标签,但是经常分不清楚他们.这两个标签虽 ...
- [iOS] UIFont 设置字体
label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24]; 字体名如下: Font Family: Amer ...