前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >移动端弹性布局方案lib-flexible实践

移动端弹性布局方案lib-flexible实践

作者头像
用户1174387
发布于 2020-04-23 07:34:48
发布于 2020-04-23 07:34:48
2.1K00
代码可运行
举报
文章被收录于专栏:web开发web开发
运行总次数:0
代码可运行

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,通常不要写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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属性来处理,类似下面的写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[data-dpr="2"] p {
  font-size: 16px;
}
[data-dpr="3"] p {
  font-size: 24px;
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.btn {
    width: 414rem/@font-size-base;
    height: 80rem/@font-size-base;
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@font-size-base: 75;

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.btn {
  width: 5.52rem;
  height: 1.06666667rem;
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.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有什么作用,现在看看,作用还是挺大的。

4. 结束语

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

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

注:

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

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

3) 模块化用到了requirejs

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

注:本文转载自:https://www.cnblogs.com/lyzg/p/5058356.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
浅谈-web屏幕适配的解决方案
就目前看来,web的屏幕适配是贯穿整个前端行业的,如常见的PC端,移动端,响应式,小程序等。
万少
2025/02/11
1080
浅谈-web屏幕适配的解决方案
移动端页面自适应解决方案:rem 布局篇
假设设计妹妹给我们的设计稿尺寸为750 * 1340。结合网易、淘宝移动端首页html元素上的font-size属性,html5设计稿尺寸以及前端与设计之间协作流程一般分为下面两种。
用户1272076
2019/03/26
2.3K0
比较好用的移动端适配的两种方案及flexible和px2rem-loader在webpack下的配置
https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html
蓓蕾心晴
2019/08/05
1.6K0
lib-flexible适配大屏方案(附移动端适配)
  相信大多数移动端前端开发者都是用过 lib-flexible来作为移动端适配的解决方案。lib-flexible是淘宝项目组开发出来的一个小插件,属于开源项目,可以在各类项目中引入并使用,为移动端的开发者带来了无穷的便利。
流眸
2019/10/30
6.1K0
8、手机适配问题之rem和lib-flexible
flexible方案是手淘经过多年的摸索和实战,总结出的一套移动端适配方案,这里我推荐一篇w3c大漠老师的一篇文章使用Flexible实现手淘H5页面的终端适配,里面详细的讲解了该方案的使用和原理。
Ewall
2018/09/04
1.3K0
8、手机适配问题之rem和lib-flexible
–我对移动端适配的了解
[总结]我对移动端适配的了解 不知不觉做前端已经两年了,从PC端,移动端,微信小程序一路走来到今天刚刚开放注册的快应用(手机厂商对抗小程序的新技能,所以在注册时用的是qq邮箱的话要去垃圾箱里才能找到注册邮件),对于前端圈日新月异的磅礴发展对于大前端发展是喜闻乐见的,这次的快应用的手机厂商们为其开放了应用入口和系统推广引流入口。这些新能力为前端开发者们带来更强的作战能力。 我们在开发PC站时经常在浏览器兼容问题上耗费巨大的时间,到了移动端,面对webkit内核的Safari与Chrome会舒心很多。b
大象无痕
2018/06/27
2.1K2
css篇-面试题7-说一说rem与em的区别并如何做移动端适配
rem 是基于 html 元素的字体大小来决定,而 em 则根据使用它的元素的大小决定,一般被称为相对长度单位,是根据它父元素的字体大小来计算的,一般默认情况下:16px = 1em
itclanCoder
2020/10/28
1.4K0
移动端H5通过flexible.js+rem自适应适配方案
手机淘宝团队出的简洁高效移动端适配库 它的原理是把当前设备划分为10等份,但是不同设备下,比例还是一致的。 我们要做的,就是确定好我们当前设备的html文字大小就可以了 比如当前设计稿是750px,那么我们只需要把html文字大小设置为75px(750px/ 10)就可以 里面页面元素rem值:页面元素的px值/ 75 剩余的,让flexible.js来去算
青梅煮码
2023/03/02
1.6K0
移动端H5通过flexible.js+rem自适应适配方案
【CSS】872- 浅析rem布局方案
这里说明一下,无论dpr多大,1px的大小通常来说是一致的,这也就意味着,随着dpr的增大,物理像素点会越来越小,这样才能容纳更多的物理像素,才能更高清,更retina
pingan8787
2021/02/26
8490
【CSS】872- 浅析rem布局方案
响应式或自适应布局的流派
(此图有可能名称反了,但不重要,我个人更偏向于 bootstrap 被叫作响应式的)
一起重学前端
2024/09/30
1540
移动端布局攻略
作者:Tolonger 原文链接:https://www.jianshu.com/p/9e7e755ca281 除了百分比流式布局之外,rem布局占据了目前移动端布局的热潮。那么究竟这几种布局差别在哪里,对应的有什么效果,希望本文能给你一些有益的启示。除此之外还有响应式布局,固定宽度布局等。 百分比流式布局 这里面最知名的当属bootstrap框架的思路,他所有的组件以及模板ui均是百分比流式布局,单位为px.并且我们看到的大部分对移动端适配的页面也均是采用这种核心思想去做的,方法简单,多端共用,可以针对
前端教程
2018/03/05
1.5K0
移动端布局攻略
08-移动端开发教程-移动端适配方案
由于移动端的特殊性,屏幕的尺寸碎片化严重,要想很好的适配不同的尺寸的设备,需要我们前端开发相比PC端要做一些基层的适配方案。
老马
2018/02/18
3.6K0
08-移动端开发教程-移动端适配方案
再看CSS长度单位使用,做到胸有成竹
涉及到网站需同时兼容 PC 和移动端情况更甚:px、百分比、em、rem、vw etc.
掘金安东尼
2024/01/28
2270
前端学习笔记—移动端web开发
响应式网站:即pc和移动端共用一套网站,只不过在不同宽度的屏幕下,样式会自动适配。配合媒体查询监听,通过判断屏幕宽度来改变样式,以适应不同终端。例如:三星电子官网: www.samsung.com/cn/ 缺点:制作麻烦,需要花很大精力去调兼容性问题
木溪bo
2024/03/23
2560
前端学习笔记—移动端web开发
细说移动端 经典的REM布局 与 新秀VW布局
说到前端页面的布局方案,可以从远古时代的Table布局说起,然后来到 DIV+CSS布局,之后有了Float布局,Flex布局,Column布局,Grid布局等等。
书童小二
2018/10/09
12.1K0
细说移动端 经典的REM布局 与 新秀VW布局
vue项目移动端、pc端适配方案
flexible会为页面根据屏幕自动添加标签,动态控制initial-scale,maximum-scale,minimum-scale等属性的值。
青梅煮码
2023/03/13
3.9K0
面试官:你了解过移动端适配吗?
很多人聊起移动端适配都是懵逼状态,都想口吐芬芳。难道移动端还要适配,直接px写死,其他自适应不就完了吗?其实不然,要求严格的公司会要求缩放比例完全相同,简单说就是,在每个手机上的每一行的字数都要一样。接下来,我们就要细说移动端适配的前世今生
用户7413032
2020/06/11
1.4K0
面试官:你了解过移动端适配吗?
rem+css预处理+媒体查询与rem+flexible.js做网页适配
rem是什么?l rem是一种新的单位,是一个相对单位,类似于em。 不同的是rem的基准是相当于html元素的字体大小
切图仔
2022/09/08
2.1K0
rem+css预处理+媒体查询与rem+flexible.js做网页适配
移动开发-媒体查询布局
每种媒体类型都有各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格,暂且了解三个,注意他们要加小括号包含
小城故事
2022/11/21
1.3K0
rem适配布局
@media mediatype and | not lonly (media feature) {
星辰_大海
2020/09/30
1.9K0
推荐阅读
相关推荐
浅谈-web屏幕适配的解决方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验