本文的内容就是介绍淘宝弹性布局方案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
这一步其实非常简单,只要把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/android.png?v=@@version"); [data-dpr="3"] & { background-image: url("../img/@3x/android.png?v=@@version"); } }
这下就OK了,原先还不知道data-dpr有什么作用,现在看看,作用还是挺大的。
注:
以上就是实现淘宝弹性布局方案lib-flexible实践的全部过程,希望对大家的学习有所启发。
主要内容:1. 基本概念,2. 容器属性,3. 项目属性Flex 是 Flexible Box 的缩写,意为“弹性布局”或者“弹性盒子”,是 CSS3 中的一种新的布局模式,可以简便、完整、响应式地实现各种页面布局,当页面需要适应不同的屏幕大小以及设备类型时非常适用。目前,几乎所有的浏览器都支持 Flex 布局。 1. 基本概念 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称“容器”。它的所有子元素自动成为容器成
import { Flexbox,FlexboxItem } from 'feui'; components: { [Flexbox.name]: Flexbox, [FlexboxItem.name]: FlexboxItem } .flex-demo{ text-align: center; color: #fff; background-color: #
使用指南 组件介绍 本组件大量用到 flex 知识,同时实现栅格系统(12 列)。 引入方式 import { Flexbox,FlexboxItem } from 'feart'; components: { 'fe-flexbox': Flexbox, 'fe-flexbox-item': FlexboxItem } 代码演示 横向排列 <fe-flexbox> <f
虽然流式布局可以充分利用可用空间,但是,在高分辨率的屏幕上,行仍然会过长,让用户不舒服。相反,在低分辨率的屏幕上,或增加文本的字体大小时,行又变得非常短,内容很零碎。对于这个问题,弹性布局可能是一种解决方案。 弹性布局实际上是一种尺寸比较灵活的固定宽度设计,页面上的所有元素都使用 em 单位值来设置元素的宽度,而不是浏览器窗口宽度。当浏览器的字号发生改变时,em 值也会随之改变,因此,设计的宽度最
之前我们介绍过,响应式网站设计主要包括三部分:弹性布局、媒体查询和弹性媒介。我们分别了解下这几个。 弹性布局 所谓的弹性布局,说的是在创建网站的时候,采用流体网格布局方式,动态地调整网站布局宽度以此来适应各种设备屏幕大小。 弹性布局不使用固定的测量单位,比如像素或者英寸。原因显而易见,视窗( viewport )的高度和宽度在不同设备之间是不断变化的,那么弹性网站布局为了适应这种变化,所以就不可能
本文向大家介绍原生js实现淘宝购物车功能,包括了原生js实现淘宝购物车功能的使用技巧和注意事项,需要的朋友参考一下 js淘宝购物车功能描述: 1、点击“+”,单个商品数量加1,总数量加1;单个商品价格添加,总价也添加。 2、点击“-”,单个商品数量减1,总数量减1;单个商品价格减少,总价也减少。 当该商品数量为0时,点击依然为0; 3、显示出总价,总数量和其中最贵的那个商品的价格。 瞄一