淘宝弹性布局方案lib-flexible实践

2个月前,写过一篇文章《从网易与淘宝的font-size思考前端设计稿与工作流》总结过一些移动web中有关手机适配的一些思路,当时也是因为工作的关系分析了下网易跟淘宝的移动页面,最后才有那篇文章的总结,可惜的是因为项目的关系,这两个月来几乎没有机会做移动类项目的工作,所以那些理论一直没有得到真正的实践。这次因为公司有一个app需要做一个推广的下载页面,虽然简单,但也值得一试那篇文章里提到的适配方法,所以本文的内容就是介绍该文中提到的淘宝的做法:《lib-flexible弹性布局方案》。(注:该文中提到的网易的做法跟淘宝的做法其实是大同小异,你访问http://3g.163.com/touch/看下页面源码顶部的JS就能明白了。相较于淘宝的做法,淘宝的方法更能称之为一个方案,网易的做法代码质量实在不敢恭维,所以从本文的角度,推荐淘宝的lib-flexible)

1. 页面需求

这是要做的页面效果(不要对设计置评,这不是开发人员决定的):

这是尺寸标注图(750*1334):

然后美工在750*1334的设计稿之上,按我的要求提供以下素材的切图:

包括两个下载按钮的背景图片,logo,底部梯形的渐变背景和body部分的mobile 背景图。注意这些图片都是在750*1334的设计稿里面切出来的,所以尺寸都是设计稿里的原始尺寸,比如android.png:

考虑到retina显示屏的问题,结合下图的适配思路:

我认为解决retina屏问题的可行方案是:

1)在devicePixelRatio<=2时,图片统一使用750设计稿的切图

2)在devicePixelRatio>=2时,图片统一使用750*1.5=1125,也就是所谓@3x设计稿的切图。

我把美工给我的在750*1334的设计稿下的切图都放在img/@2x 这个文件夹下:

然后让她帮忙把750的设计稿矢量放大1.5倍,再按照同样的切图要求为我提供@3x的切图,并放在了img/@3x 这个文件夹下:

@3x下的图片理论上尺寸应该等于@2x下的图片*1.5,不过我的切的没有这么完美。

有了前面的需求介绍和素材准备,下一步就是该引入核心的js文件,编写css样式了。

2. 引入flexible.js

这一步其实非常简单,只要把https://github.com/amfe/lib-flexible源码里flexible.js的内容复制出来,在本地新建一个flexible.js的文件,打开粘贴进去就可以了,我把这个文件放在了js/lib下面:

接着在html页面里面,尽可能早的引入这个js文件(为了让适配的效果更快):

注:使用lib-flexible,通常不要写:

<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>

交给flexible.js自动处理。

然后在chrome的模拟器里面,选择iphone6,应该就能看到html的font-size已经被设置为font-size: 75px了:

3. 编写CSS

基本要求:

1)除font-size外,其它大小都根据750标注稿的尺寸,转换成rem单位的值,转换方法为:标注稿尺寸 / 标注稿基准字体大小;

2)标注稿基准字体大小 = 标注稿宽度 / 10,如标注稿宽为750,标注稿基准字体大小为75;标注稿宽为640,标注稿基准字体大小为64;(所以淘宝这个方案是可以在任意设计稿尺寸下使用的)

3)如果需要设置font-size,可跟据html的data-dpr属性来处理,类似下面的写法:

[data-dpr="2"] p {
    font-size: 16px;
}

[data-dpr="3"] p {
    font-size: 24px;
}

以安卓下载按钮的样式为例,说明这种用法。android.png的尺寸为:414*80,所以css这么写:

.btn {
    width: 414rem/@font-size-base;
    height: 80rem/@font-size-base;
}

由于用了less,事先定义了一个变量来保存标注稿基准字体大小:

@font-size-base: 75;

所以px2rem的转换变得非常容易,如上所示。less编译之后,会将正确的rem值计算出来:

.btn {
  width: 5.52rem;
  height: 1.06666667rem;
}

到此,lib-flexible的基本实践就结束了,不过还有一个问题,就是retina屏的问题,到现在都还没提到@3x下图的那些切图怎么办,其实很简单,借助html元素的data-dpr属性,可以轻松实现另一种媒介查询,以便在devicePixelRatio>=2的时候启用@3x下的图片,还是以安卓下载按钮的样式为例,写法是:

.btn-android {
  background-image: url("../img/@2x/[email protected]@version");
  [data-dpr="3"] & {
    background-image: url("../img/@3x/[email protected]@version");
  }
}

这下就OK了,原先还不知道data-dpr有什么作用,现在看看,作用还是挺大的。

4. 结束语

本篇内容相对简单,一方面补充《从网易与淘宝的font-size思考前端设计稿与工作流》,另一方面也记录下这个页面中积累的一些经验,虽然只是一个小页面,但是也见识到了lib-flexible的威力,毕竟一个页面如果成功应用了这个方案,更多页面也就不是问题了。

我把源码发出来,有兴趣的人可以下载参考:本页源码

注:

1) 由于使用了grunt构建,所以需要先安装node ,git,再通过npm安装grunt 和bower

2)考虑到将来可能要做全屏滚动的效果,所以这页面一开始就是用fullpage.js来做的,通过bower引入了jquery跟fullpage.js的库

3) 模块化用到了requirejs

4)运行grunt default完成构建,再运行grunt server启动静态服务器预览。

谢谢阅读:)

时间: 2024-08-02 19:19:24

淘宝弹性布局方案lib-flexible实践的相关文章

淘宝弹性布局方案lib-flexible研究

1. lib-flexible不能与响应式布局兼容 先说说响应式布局的一些基本认识: 响应式布局的表现是:网页通过css媒介查询判断可视区域的宽度,在不同的范围应用不同的样式,以便在不同尺寸的设备上呈现最佳的界面效果.典型的例子是,有一个商品列表页,应用响应式布局后,可能在pc上是用4列展示,在平板上用3列展示,在手机上只用1列展示.这种布局的最大好处就是节省人力.资源和时间,所以很多公司都喜欢用.而响应式布局有两个必须的要求: 1)是viewport的设置,width跟initial-scal

淘宝弹性布局实践

1. 页面需求 这是要做的页面效果(不要对设计置评,这不是开发人员决定的): 这是尺寸标注图(750*1334): 然后美工在750*1334的设计稿之上,按我的要求提供以下素材的切图: 包括两个下载按钮的背景图片,logo,底部梯形的渐变背景和body部分的mobile 背景图.注意这些图片都是在750*1334的设计稿里面切出来的,所以尺寸都是设计稿里的原始尺寸,比如android.png: 考虑到retina显示屏的问题,结合下图的适配思路: 我认为解决retina屏问题的可行方案是: 1

(淘宝无限适配)手机端rem布局详解

一.        首先我们先来看看淘宝不同分辨率下的适配页面 可以看出来,淘宝在不同的分辨率下,页面的尺寸和模块间的间距会发生变化,这是因为淘宝采用了rem,这篇文章会简单介绍淘宝的布局思路以及具体做法,不过在此之前我们先了解一些移动端的知识,以为更好的理解淘宝布局的方案,下面我们来看一些移动端的知识 二.了解一些移动端的知识viewport的<meta>标签用法 其主要用来告诉浏览器如何规范的渲染Web页面,而你则需要告诉它视窗有多大 移动端开发中,通常我们都会采用<meta nam

手机淘宝构架演化实践

2014年12月19日~20日,ArchSummit北京2014大会顺利举行.“移动互联网,随时随地”是非常火爆的一个专题.阿里无线事业部技术负责人庄卓然(花名南天)任出品人.来自阿里无线事业部的高级专家李敏(花名心石,微博:@allblue_华丽地低调 )分享了<手机淘宝架构演化实践>(幻灯片下载). 李敏主要负责淘宝无线客户端和无线网站基础服务.购物主链路的架构.研发方面的工作.从09年开始参与手机淘宝研发团队的组建和线上产品研发,先后负责过无线部门的社区.会员.营销.交易等多条产品线的技

手机淘宝架构演化实践

“移动互联网,随时随地”是非常火爆的一个专题.阿里无线事业部技术负责人庄卓然(花名南天)任出品人.来自阿里无线事业部的高级专家李敏在ArchSummit 全球架构师峰会上分享了<手机淘宝架构演化实践>(视频连接). 李敏主要负责淘宝无线客户端和无线网站基础服务.购物主链路的架构.研发方面的工作.从09年开始参与手机淘宝研发团队的组建和线上产品研发,先后负责过无线部门的社区.会员.营销.交易等多条产品线的技术工作,构建和发展了阿里无线技术体系中包括交易链路.百亿级别高性能API网关.WebApp

转:阿里巴巴集团技术丛书——淘宝一线团队实践

原文来自于:http://download.csdn.net/album/detail/1013/2 阿里巴巴集团技术丛书——淘宝一线团队实践0 浏览量:7840下载次数:94创建者:broadview2006创建时间:2014-09-25 淘宝技术这十年,淘宝技术十年事.来自阿里一线专家作译图书精选. 阿里 淘宝 分享到: 共6个 直接下载 Storm 实战:构建大数据实时计算试读样章0 上传者:broadview2006      上传时间:2014-08-14 阿里巴巴集团技术丛书,大数据

第29章 CSS伸缩弹性布局(上)

第 29章 CSS3弹性伸缩布局[上]学习要点:1.布局简介2.旧版本 本章主要探讨 HTML5中 CSS3提供的用来实现未来响应式弹性伸缩布局方案,这里做一个初步的了解.一.布局简介CSS3提供一种崭新的布局方式:Flexbox布局,即弹性伸缩布局模型(Flexible Box).用来提供一个更加有效的方式实现响应式布局.但是用于这个布局方式还处于 W3C的草案阶段,并且它还分为旧版本.新版本以及混合过渡版本三种不同的编码方式.在发展中,可能还有各种改动,浏览器的兼容性还存在问题.所以,本节课

flex弹性布局

Css3的flex布局用法 Flex意为"弹性布局",英文flexible box的缩写,flex布局使css盒模型变得更加强大和灵活,flex布局主要用在webapp和移动端中使用,移动端flex布局,将使的布局变得异常简单. 任何一个容器都可以指定为flex布局: 行内元素也可以使用flex布局. .box{display:inline-flex;} Webkit内核的浏览器,必须加上-webkit前缀 .box{ display:-webkit;/*Safari*/display

手机淘宝flexible布局探索及最终方案

相关文章 http://blog.csdn.net/junreycen/article/details/51261653 http://www.html-js.com/article/2402 https://segmentfault.com/a/1190000004403496 https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html?utm_source=tuicool&utm_medium=referral 关于wi