移动端适配方案(rem+flex)
为什么用rem不用px?
主流:各大网站的移动版绝大多数都是用的rem。
移动端屏幕分辨率差别太大:最低适配的iPhone6,分辨率仅为750*1334。而现在市面上大多数手机,都达到了1080*1920或1080*2340(全面屏)。
所有元素都要用rem吗?
大部分时候都是如此,但也有一些例外,比如文字的font-size,可能直接设为如17px,直接写死。一些近乎占满整个宽度的banner,可能它的样式会是这样:(width: 100%;padding: 0 10px;),即左右宽度也用px写死。所以在移动端项目,出现rem和px混写也是再正常不过的事情。这就跟响应式布局的原则是一样的。不需要所有设备的布局比例严格完全相同,而是优先保证内容比较舒服地显示。
顺便提一下,应该大部分移动端文字内容都是用px写死的,不会用rem去写。防止过大或过小的文字效果。
移动端开发的通用原则是:文字流式,控件弹性,图片等比缩放。
为何要引入flex?
为了弹性控件,比如有些关键元素,里面有些控件,不管移动设备的分辨率怎么变,这个关键元素的高度恒不变,只有控件的间距在做动态的调整。举个例子,京东的底部导航栏:
(京东移动版在iPhone8p和ipad上的视觉比例不太一样,如果按同一个比例原封不动地移植到ipad上,很多图标和元素会显得非常巨大)
如何设置html初始的font-size?
没有固定答案,但它的设置又很影响开发的效率。为了避免rem和px的大量换算,我提供一个自己的做法:根font-size完全取决于设计稿的尺寸。
根据设计稿的尺寸,把根font-size处理成100px。在开发的过程中,比如碰到一个120px*40px的元素,那就可以写成1.2rem*0.4rem,十分方便。
比如设计稿是750*1334px,也就是以iPhone6为基础的。那要处理成100px的根font-size,就需要屏幕宽度/7.5即可。如果设计稿是1080*1920的,那就用屏幕宽度除以10.8。
设置的具体代码?
比如我现在的设计稿是750*1334px的,我在项目的index.html中加入这样一段js代码:
<script>
let deviceWidth = document.documentElement.clientWidth || document.body.clientWidth;
let htmlDom = document.querySelector('html');
htmlDom.style.fontSize = deviceWidth / 7.5 + 'px';
</script>
还需要设置一下视口viewport,来避免devicePixelRatio带来的关于逻辑像素和物理像素的问题:
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
比如在这里,我设置了“朋友圈所在的header样式如下:
即宽度为7.5rem,在各个移动端效果如下:
(可以看到,都占满了横向宽度,即能正确显示宽度为100%)
看了好几家大型网站的移动版网站,虽然看不到源码,但是我猜测腾讯视频移动版网站跟我的想法应该是一样的,而且设计稿应该就是750*1334px。传送门:https://3g.v.qq.com/。此外,我还借鉴了流云诸葛小伙伴的一篇文章,分析得很详细,感谢他这种研究精神。原文地址:https://www.cnblogs.com/lyzg/p/4877277.html?utm_source=caibaojian.com
移动端适配方案(rem+flex)的更多相关文章
- 移动端适配方案-rem(基础篇)
常见移动web适配方案一般有3种方法,如下图: ①:定高,宽度百分比(一般用来做一些适配性不高的页面,比如主要以一些文字和图片为主的网页或移动端的头部和底部) ②:flex (更多的用于复杂页面的布局 ...
- H5移动端适配方案-rem
为什么移动端要适配: 由于移动设备的尺寸不一,所以移动端的页面要能够适应不同尺寸的设备,即页面的自适应,让页面在视觉上保持一致. rem:rem 是css3的一种相对单位,参考是根元素HMTL的fon ...
- rem移动端适配方案
一. rem vs em 单位 定义 特点 rem font size of the root element 以根元素字体大小为基准 em font size of the element 以父元素 ...
- H5 APP 页面移动端适配方案
H5 APP 页面移动端适配方案 https://segmentfault.com/a/1190000011586301 https://juejin.im/post/5cbdee71f265da03 ...
- 基于Vue/React项目的移动端适配方案
本文的目标是通过下文介绍的适配方案,使用vue或react开发移动端及H5的时候,不需要再关心移动设备的大小,只需要按照固定设计稿的px值布局,提升开发效率. 下文给出了本人分别使用create-re ...
- 移动端适配单位rem
0 写在前面 本周惊喜地发现,其他各个老师的软工班(罗杰老师班和欧阳老师班)的软工项目的alpha版本都已经发布了!(然而我们软工项目还没开始写代码…逃…) 十分好奇的我第一时间下载了一些他们的产品进 ...
- 移动端适配(rem & viewport)--移动端开发整理笔记(四)
移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸 我们知道,在不同的手机设备,分辨率大小是 ...
- 移动端适配方案 flexible.js
前言 移动端适配一直以来都是前端开发中不可或缺的重要组成部分,如果没有了它,那么你做出来的页面极有可能会出现各种意外(写出来的页面与设计稿之间的差别).所有我们得找到一种相对来说让人比较满意的解决方案 ...
- 手淘H5移动端适配方案flexible源码分析
移动端适配一直是一个值得探讨的问题,在业余时间我找了一些页面,查看了一些厂商对于移动端H5页面的适配方案,看到了几个典型的例子,今天就来记录一下我看到的第一个典型的例子,也是我们公司目前普通H5项目正 ...
- 移动端适配之REM
随着手机等移动设备的普及,移动端带来的流量已经不可忽视,一个网站不只是只有pc的页面就足够了,移动端的适配已经势在必行.但是移动设备种类繁多,屏幕尺寸也千奇百怪,能不能找到一种方式可以适配所有的手机屏 ...
随机推荐
- JVM内存模型与类加载机制
一. java虚拟机的内存模型如图: 补习一下jvm内存模型中的各个组成部分 堆: 我们new出来的对象全部放在堆中,他是jvm所能够动态分配的最大的一块空间 优点: 内存动态分配,生命周期不必事先告 ...
- 基于EF的一个简单实战型分层架构
注:此博客仅适合于刚入门的Asp.net Core初学者,仅做参考. 学了3个月的Asp.net Core,将之前一个系统(http://caijt.com/it)的PHP后端用Asp.net Cor ...
- Python中7个不一样的代码写法
打印index 对于一个列表,或者说一个序列我们经常需要打印它的index,一般传统的做法或者说比较low的写法: 更优雅的写法是多用enumerate 两个序列的循环 我们会经常对两个序列进行计算或 ...
- easyswoole对接支付宝,微信支付
在easyswoole中,已经开发好了相关的支付组件,只需要引入即可: composer require easyswoole/pay pay组件支持协程 支付宝 支付方法 支付宝支付目前支持 7 种 ...
- Java学习 1.4——第一个Java程序:Hello World!
这一篇一起来写第一个Java程序,同时也了解一下IDEA的使用: 打开IDEA,新建项目: 选择Java,右边project SDK是选择Java版本,上一篇我们自己安装了JDK1.8,IDEA自带一 ...
- vue非父子关系之间通信传值
第一种方法: 通过给vue实例添加自定义属性 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- CSS .css边框属性(border)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 如何为 Automatic Undo Management 调整 UNDO Tablespace 的大小 (Doc ID 262066.1)
How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1) APPLIES TO: Oracle Datab ...
- [Go] Golang中的面向对象
struct interface 就可以实现面向对象中的继承,封装,多态 继承的演示:Tsh类型继承People类型,并且使用People类型的方法 多态的演示Tsh类型实现了接口Student,实现 ...
- 非法指令(Illegal Instruction)问题定位
关键词:Illegal Instruction.SIGILL等. 进程在运行过程中会收到SIGILL信号,此类错误是由操作系统发送给进程的. SIGILL是某个进程中的某一句不能被CPU识别指令,这些 ...