手机商城项目
这个项目前期是我做的,由于当时要回学校,所以项目没有做完,后面交给了其他同事.我走前完成了,项目的构建,我的webpack配置也是从这里开始的,移动端界面做了8成左右.还有部分的接口,所有就总结我做了的部分.
效果图,只截图我做时的效果:
项目技术选择
是的,前期项目是我来做,所以项目调研,技术选型,项目搭建是我做的
来看一下技术栈
- vue@2.3.1
- vue-router@2.5.3
- vuex@2.3.1
- jquery@3.2.1
- mint-ui@2.2.5
- flexible.js
meta viewport
手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分。移动版的 Safari 浏览器最新引进了 viewport 这个 meta tag,让网页开发者来控制 viewport 的大小和缩放,其他手机浏览器也基本支持。
一个常用的针对移动网页优化过的页面的 viewport meta 标签大致如下:
<meta name=”viewport” content=”width=device-width, initial-scale=1, maximum-scale=1″>
- width:控制 viewport 的大小,可以指定的一个值,如果 600,或者特殊的值,如device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。
- height:和 width 相对应,指定高度。
- initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。
- maximum-scale:允许用户缩放到的最大比例。
- minimum-scale:允许用户缩放到的最小比例。
- user-scalable:用户是否可以手动缩放
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
移动端都使用viewport,
flexible.js
这里有个教程,详细使用看这个教程,再多看看其他的总是友好处的.有事例等
这个技术淘宝的一个开源技术看这里 今天看好像有改动,之前用时看都是一两年前的改动.找空时间去看看.
主要也是使用的meta viewport, rem; 没有理解错的话,flexible是动态修改html font-size的大小.
注意:750px以上,flexible认为不再是移动端
使用,引入两个文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="user-scalable=yes, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta charset="UTF-8">
<title>cinegear</title>
<script src="../static/vendor/flexible_css.js"></script>
<script src="../static/vendor/flexible.js"></script>
</head>
<body>
<div id="app">
<app></app>
</div>
</body>
</html>
flexible_css.js
和flexible.js
,都在github上下载
在这里再讲讲,ES6模块中要引入一个三方的js文件(非模块化的),如上面的代码.全局引入文件.直接在webpack打包的入口html文件中引入.不能在模块中引入import 'flexible.js'
我在做三方登陆时也遇到了这个问题,需要引入一段js
<!--QQ-->
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="1106291055" charset="utf-8" data-callback="true"></script>
<!--微薄-->
<script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=2973172615&debug=true" type="text/javascript" charset="utf-8"></script>
<!--微信-->
<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
我当然想过直接把js复制出来,保存在本地..可能姿势不对
rem
移动端单位使用rem,相对html单位, 还有em相对于父元素的font-size
单位都是rem, rem 值与 px 之间的换算,人工换算好麻烦,当然的找其他方法
我的是这样做的通过一个sass函数来转换
var.scss 定义的是一些基本变量,如:颜色值,文件内容如下:
$base-font-size: 37.5px; // html字体大小
fun.scss:
@import "./var";
/** px2rem
* @param $px 像素值
* @param $base-font-size html字体大小
* @return rem
*/
@function px2rem($px, $base-font-size: $base-font-size) {
@if (unitless($px)) {
@warn "Assuming #{$px} to be in pixels, attempting to convert it into pixels for you";
@return px2rem($px + 0px); // That may fail.
} @else if (unit($px) == rem) {
@return $px;
}
@return ($px / $base-font-size) * 1rem;
}
目前Flexible会将视觉稿分成100份(主要为了以后能更好的兼容vh和vw),而每一份被称为一个单位a。同时1rem单位被认定为10a。针对我们这份视觉稿可以计算出:著作权归作者所有。
原文: http://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html © w3cplus.com
1a = 7.5px
1rem = 75px
那么我们这个示例的稿子就分成了10a,也就是整个宽度为10rem,对应的font-size为75px:
但是,我设设置的font-size为37.5px才能正确转换,具体什么原因没有找到.猜测和苹果的像素有关,iOS像素和Point
使用:
@import "fun.scss"
width: px2rem(100px) // 转换为对应的rem值
mint-ui
mint-ui是个移动端的vue的UI组件库.我回来后接我项目的同事告诉我有些组件有些坑.我使用时倒是没有遇到.下次再去研究这些坑.
收集vue的ui库:
allen
2017.9.30 记