移动端Web适配

2024-09-03 13:08
文章标签 web 移动 适配

本文主要是介绍移动端Web适配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录(?)[+]

看了几篇文章,理一下网易跟淘宝移动端适配的思路,主要是参考 从网易与淘宝的font-size思考前端设计稿与工作流

像素相关概念

物理像素(physical pixel)

一个物理像素是显示器(手机屏幕)上最小的物理显示单元,在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值。

其值也就是我们常说的分辨率

设备独立像素(density-independent pixel)

设备独立像素(也叫密度无关像素),可以认为是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的虚拟像素(比如: css像素),然后由相关系统转换为物理像素。

简称dip,也可以称为CSS像素

设备像素比(device pixel ratio)

设备像素比(简称dpr)定义了物理像素和设备独立像素的对应关系,它的值可以按如下的公式的得到:

设备像素比 = 物理像素 / 设备独立像素 // 在某一方向上,x方向或者y方向
  • 1
  • 1

网易的做法

目的

css中使用的尺寸与设计稿保持一致,body的宽度设为屏幕宽度

原理

将页面宽度定为屏幕宽度,通过设置html的font-size与使用rem来实现尺寸与设计稿一致

思路

  • 假设设计稿宽度为640px
  • 那么以设计稿为准,设置body的宽度为640px
  • 由于使用rem单位,因此需要设置html标签的font-size
  • 为计算方便,取100px为参照,所以body的宽度为6.4rem
  • 由于设备的dip!=设计稿宽度,因此font-size=deviceWidth/6.4
  • css尺寸为:设计稿标注尺寸/100

淘宝的做法

目的

页面大小与设计稿保持一致

原理

设置meta viewport中的scale保证页面大小与设计稿一致,使用rem

思路

  • meta viewport中device-width的算法为:设备的物理分辨率/(devicePixelRatio * scale)
  • 而每台设备的devicePixelRatio都是已知的,可通过window.devicePixelRatio获取
  • JavaScript动态计算设置scale,包括initial-scale,maximum-scale,minimum-scale
  • 动态设置html的font-size,为屏幕分辨率/10
  • css尺寸为:设计稿标注尺寸/html的font-size

关于font-size能不能使用rem的问题

流云诸葛在文章中说font-size不能使用rem,要用media query,而实际上,网易的font-size也是有用rem来作为单位的。

那么为什么会说font-size不能使用rem呢?到底能不能用rem?

答案是的。

说不能可能是因为在网页中有可能使用了点阵字体,也叫位图字体,由于位图的缘故,点阵字体很难进行缩放。 
这个概念与矢量字体相对应。

网上有给出对于文字使用px的原因的文章

根据以下两个原因,对于文字使用px:

  • 在大屏设备希望看到更多的文字
  • 中文点阵最好是在12px,14px,16px这种尺寸,使用rem就会无法避免使用13px,15px尺寸,这样文字会显示的很奇怪

虽然如此,但没有使用点阵字体的话,在一些情况,比如在需要自适应的情况下,使用rem也是没问题的。

关于font-size的更新(2016-09-14 11:50)

前面说到font-size能不能使用rem,给出的答案是 能。

但是经过一番摸索,这边我还是建议字号用px来作为单位。

为什么呢,除了点阵字体的原因,我们在使用rem时,在不同设备的字体大小不一样,而比较适合阅读的字号大小是14px或16px之类。

比如:iPhone5的设计稿是640px,那么根据网易的做法,html的font-size就是50px,那么我们根据设计稿定义一段文本的font-size为0.16rem,换算成px就是0.16 * 50 = 8 px,这样,在4吋iPhone上看这段文本时,就会显得很小;如果设置成0.32rem,在4吋iPhone上看是正常了,但是在较大屏幕上看,又会显得太大。

还有一个原因,使用rem最终是转换成px的,这样,转换后的px就有可能出现存在小数的情况,这个时候就可能出现1px的不对称。

因此我们在给文本定义字号时还是使用px,应对不同设备,使用media query,或者像淘宝的那种做法,在html中加上data-dpr,算出当前设备的dpr,再根据不同dpr来区分文本字号大小。

.a{font-size:12px;
}
[data-dpr="2"] .a{font-size: 24px;
}
[data-dpr="3"] .a{font-size: 36px;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

参考

  • 从网易与淘宝的font-size思考前端设计稿与工作流 - 流云诸葛 - 博客园
  • 移动端高清、多屏适配方案 - Div.IO
  • webapp font-size解决问题的方案
  • H5自适应改造方案——rem方案
  • 移动端适配方案(上)
  • 移动端适配方案(下)

这篇关于移动端Web适配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133037

相关文章

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏