移动端页面不需要在meta加_移动端适配viewport缩放方案

1. 前言

设计师交付给前端开发一张宽度为750px的视觉稿,设计稿上元素的尺寸、颜色、位置等已做过标注,要求工程师工在适配不同屏幕尺寸的设备时采用等比缩放的方案。

a1a42598793dece06104a312ad9b2939.png

采用viewport缩放的方案能又快又好的实现需求。

2. 原理

在写HTML、CSS对设计稿进行还原时不关注屏幕尺寸的差异,而是直接按设计稿的标注来开发。比如设计稿里标注的文字字号是30px,CSS里就设置文字字号30px。

页面开发好后,在HTML的head标签里加入 <meta name="viewport" content="width={设计稿宽度}, initial-scale={屏幕逻辑像素宽度/设计稿宽度}" > 。

举个例子。假设设计师交付的设计稿宽度是750px,设计稿上一个标题字号标注的是32px 、margin是20px。我们以标注的大小来写CSS。之后需要通过JavaScript计算获取屏幕的宽度(假设需要适配逻辑像素宽度是428px的屏幕),在HTML的head里添加 <meta name="viewport" content="width=750px, initial-scale=0.57" > 即可(428/759 = 0.57)。

这段代码的意思是:设置布局视口(layout viewport)的宽度为750px(此时页面一般会超出屏幕),再缩放页面(initial-scale)使其恰好撑满屏幕。

3. 适配代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><script>const WIDTH = 750const mobileAdapter = () => {let scale = screen.width/WIDTHlet content = `width=${WIDTH}, initial-scale=${scale}, maximum-scale=${scale}, minimum-scale=${scale}`let meta = document.querySelector('meta[name=viewport]')if(!meta) {meta = document.createElement('meta')meta.setAttribute('name', 'viewport')document.head.appendChild(meta)} meta.setAttribute('content', content)}mobileAdapter()window.onorientationchange = mobileAdapter</script>
</head>
<body>...
</body>
</html>

优点与缺点

  • 优点: 开发流程很简单,工程师只需根据设计稿标注还原页面,不需要额外计算。适配范围广。
  • 缺点: 页面整体放大缩小,对于不想缩放的元素无法控制。比如边框在大屏手机下显得很粗,在小屏手机下显得很细(下图所示)。

09aa1be9d43d7b4d736f1486e58859e7.png

我们更需要一种既能整体缩放,又能个性化控制某些元素不缩放的方案。见下篇文章:移动端动态REM方案。

下一篇:移动端动态REM适配方案​mp.weixin.qq.com

4. 最后

  • 如果本文对你有帮助,点个赞给作者一点小小的鼓励让我坚持更新
  • 最近的文章为前端剑指offer系列,是面向大厂求职的文章合集,关注公众号「 编程公子 」提前看到文章更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)用 Fiddler 看看 UpdatePanel 发生了什么

第一个 ASP.NET AJAX 程序&#xff1a;UpdatePanel一文中介绍了 UpdatePanel 实现 Ajax&#xff0c;我们今天利用 Fiddler 来看看 UpdatePanel 发生了什么。 实验步骤 启动 Fiddler&#xff0c;访问我们事先写好的 UpdatePanel 网页&#xff08;注意不要用 127.0.0.1 或 localh…

转载:div和flash层级关系问题

转自&#xff1a;http://sin581.blog.163.com/blog/static/860578932012813112334404/问题&#xff1a;ie下默认好像div层级没有flash层级高&#xff0c;也就是当div绝对相对压在flash上&#xff0c;压不住flash总是在最上面显示&#xff0c;请给出方案 或者说下大概如何解决 用…

基于Google Reader发展起来的个性化推荐系统之三大问题

郑昀玩聚SR 20091003 中科院的xlvector(即项亮&#xff0c;他所在的团队The Ensemble在7月份获得Netflix大奖赛公开测试排名第一&#xff0c;但在9月22日Netflix宣布BPC获胜&#xff0c;原因据说只是因为项亮他们提交结果晚了20分钟)最近发布了一个小工具GRSuggest&#xff0c;…

直接从chrome中复制的body到postman中希望能自动识别去除空格

Describe the bug直接从chrome开发者工具中request的body复制到postman中时会带有空格&#xff0c;需要手动删除空格。 To Reproduce1、使用chrome开发者工具抓取一个post请求2、复制请求中参数3、粘贴到postman的body中 Expected behavior3、把带的空格删除掉 转载于:https://…

气象ts评分_给大家分享一个格点插值到站点然后TS评分的程序

登录后查看更多精彩内容~您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册x!****************************************************************************!! PROGRAM: T639格点资料插值成站点资料!!**********************************************…

RichTextBox 右键显示 ContextMenuTrip

说明&#xff1a; (1)命名&#xff1a; RichTextBox -> rtxt1 ContextMenuTrip -> cms1 (2)截图&#xff1a; (3)完整代码&#xff1a; <span style"font-size:14px;">using System; using System.Collections.Generic; using System.ComponentModel; u…

设计模式学习笔记--Mediator 中介者模式

我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成。当彼此引用的对象数量比较少时&#xff0c;此时对象之间就为直接交互&#xff08;点对点)。而当对象的数量增加时&#xff0c;这种直接交互会导致对象之间复杂的、混乱的引用,最后形成一张巨大的网&…

Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验

vee-validate 是为 Vue.js 量身打造的表单校验框架&#xff0c;允许您校验输入的内容并显示对应的错误提示信息。它内置了很多常见的校验规则&#xff0c;可以组合使用多种校验规则&#xff0c;大部分场景只需要配置就能实现开箱即用&#xff0c;还支持自定义正则表达式。而且支…

python微博自动评论转发_python3 调用新浪微博api实现自动发布评论

新浪微博开放平台提供了丰富的API接口&#xff0c;利用这些接口&#xff0c;开发者能够开发出独具特色的微博应用。但是&#xff0c;大部分接口都需要用户授权给应用&#xff0c;应用利用授权得到的Access Token来调用相应的接口来获取内容。新浪微博的授权机制目前主要有3种应…

Linux中fork()函数详解

参考地址 1.对fork函数的认识&#xff1a; 一个进程&#xff0c;包括代码、数据和分配给进程的资源。fork&#xff08;&#xff09;函数通过系统调用创建一个与原来进程几乎完全相同的进程&#xff0c; 也就是两个进程可以做完全相同的事&#xff0c;但如果初始参数或者传入的变…

类似pyinstaller_Python 打包工具对比,Nuitka vs Pyinstaller

py2exe&#xff0c;Pyinstaller&#xff0c;Cx_freeze&#xff0c;Nuitka都可以完成python打包的任务。Pyinstaller和Nuitka都号称跨平台&#xff0c;但其实顶多只能算是工具本身跨平台&#xff0c;实际体验中不仅打包产生的文件不能跨平台&#xff0c;能否成功打包本身也不确定…

Android学习之PopupWindow

Android的对话框有两种&#xff1a;PopupWindow和AlertDialog。 详细说明如下&#xff1a; AlertDialog是非阻塞式对话框&#xff1a;AlertDialog弹出时&#xff0c;后台还可以做事情&#xff1b; AlertDialog的位置固定&#xff0c;而PopupWindow的位置可以随意&#xff1b; A…

spring整合mybatis接口无法注入问题

在学习Spring完之后简单的了解了MyBatis。然后进行简单的整合&#xff0c;遇到MyBatista接口映射的Bean无法自动注入的问题&#xff1b; 代码异常&#xff1a; 线程“main”org.springframe .bean .factory中的异常。创建名为“UserController”的bean时出错:通过字段“userdao…

LR重新安装的问题

LR的安装&#xff0c;说难不难&#xff0c;说易也不易。在此就把我安装时碰到的问题记录下来&#xff0c;以供大家参考。 第一次安装时&#xff0c;我是成功了的。&#xff08;注意&#xff1a;安装程序的目录不能有中文&#xff0c;当然同时你得有lincense&#xff09; 后来因…

matlab柱状斜线_Matlab小练习:按斜线方向依次赋值矩阵

来自知乎问题&#xff0c;觉得挺有意思&#xff0c;留给学生解答之余&#xff0c;我也做了一番思考&#xff0c;得到三种解法。题目如下&#xff1a;以n80为例&#xff0c;————————————————————一、先要根据确定矩阵的阶数 如果先生成足够大矩阵&#xff0…

Programming C#.Classes and Objects.只读字段

只读字段 当字段声明中含有 readonly 修饰符时&#xff0c;该声明所引入的字段为只读字段。给只读字段的直接赋值只能作为声明的组成部分出现&#xff0c;或在同一类中的实例构造函数或静态构造函数中出现。&#xff08;在这些上下文中&#xff0c;只读字段可以被多次赋值。&am…

会计知识

毛利 等于收入纯利 等于利润 按照&#xff1a;利润&#xff1d;收入-成本-费用 收入&#xff1a;收到的现金、支票、签单金额成本&#xff1a;买材料、酒水、电、工资、等费用&#xff1a;日租金、桌椅、碗、盘子等摊销、税金等等 ------------------------------------------…

2020-12-21

蜂鸣器&#xff08;向导辅助&#xff09; /******************************************************* This program was created by the CodeWizardAVR V3.12 Advanced Automatic Program Generator ?Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpin…

xgboost 一般多少棵树_大白话人工智能算法-第32节集成学习之通俗理解XGBoost原理和过程...

本节讲解XGBoost的原理~目录1、回顾&#xff1a;1.1 有监督学习中的相关概念1.2 回归树概念1.3 树的优点2、怎么训练模型&#xff1a;2.1 案例引入2.2 XGBoost目标函数求解3、XGBoost中正则项的显式表达4、如何生长一棵新的树&#xff1f;5、xgboost相比原始GBDT的优化&#xf…

C++函数中返回引用和返回值的区别

https://www.cnblogs.com/JMLiu/p/7928425.html转载于:https://www.cnblogs.com/liuw-flexi/p/10745246.html