移动端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

相关文章

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程

《双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程》:本文主要介绍如何在Windows11系统中使用VMware17创建虚拟机,并在虚拟机中安装Ubuntu22.04桌面版或Ubunt... 目录一、首先win11中安装vmware17二、磁盘分区三、保存四、使用虚拟机进行系统安装五、遇见的错误和解决