css移动端适配最佳实践

news2024/11/16 23:44:25

移动端适配,在移动端里经常有遇到,在不同分辨率移动端设备精确还原UI设计稿,这是一个令人抓狂的问题,好在有flexbox布局解决了自适应很大一部分问题。

在开始本文之前主要介绍几种笔者常用的适配方案

1、设置meta标签的initial-scale,mininum-scale,maxinum-scale缩放比

2、rem适配,利用根设置基础单位

3、vw+calc,结合rem适配

正文开始

meta缩放比

(function () {let timer = null;function flexable() {const deviceWidth = window.screen.width;// 根据当前设计稿,如果是设计稿640,那么targetWidth就是320,设计稿实际1px,页面也是1px// 如果设计稿是750,那么targetWidth就是375const targetWidth = 320;const scale = deviceWidth / targetWidth;let meta = document.querySelector('meta[name="viewport"]');if (!meta) {const meta = document.createElement("meta");meta.setAttribute("name", "viewport");meta.setAttribute("content",`width=device-width,initial-scale=${scale},minimum-scale=${scale},maximum-scale=${scale},user-scalable=no`);document.getElementsByTagName("head")[0].appendChild(meta);}if (meta) {meta.setAttribute("content",`width=device-width,initial-scale=${scale},minimum-scale=${scale},maximum-scale=${scale},user-scalable=no`);}}window.addEventListener("resize",() => {if (timer) {clearTimeout(timer);}timer = setTimeout(() => {flexable();}, 80);},false);flexable();
 })(); 

主要是设置根据window.screen.width与设计稿实际尺寸targetWidth计算出scale,将这个scale动态设置metacontent,width=device-width,initial-scale=scale,minimum-scale=scale,maximun-scale=scale

当我们动态设置meta后,我们不同分辨率下的字体大小就会动态的发生变化

640x960

注意targetWidth是你设计稿尺寸,如果是750的设计稿,那么就是375,在设计稿中量的是多少尺寸,就是多少固定尺寸

rem适配

因为默认浏览器字体的大小就是16px,所以我们在一些项目中会看到font-size:62.5%

62.5%到底怎么计算来的呢,如果我们根html设置font-size: 16px

1rem = 16px; 

换算成百分比就是1/16就是6.25%,现在我们扩大10倍就是62.5%,所以1rem = 10px,也就1px=0.1rem

在我们根据UI设计稿实际尺寸中,如果量得尺寸是16px那么就是1.6rem,只需要在原单位基础上/10即可

注意我们meta标签上同样要默认设置<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>rem</title><style> * {padding: 0;margin: 0;}html {font-size: 62.5%;}.title {font-size: 2rem;}.box {max-width: 64rem;height: 10rem;background-color: red;} </style></head><body><div id="app"><div class="title">rem适配</div><div class="box"></div></div></body>
</html> 

vw适配

vw是视口单位,通常来讲会将可视区域分成100vw

在利用vwcalc来设置根htmlfont-size,然后用rem单位

然后我们看下代码

 * {padding: 0;margin: 0;
}
html {font-size: calc(100vw / 320 * 10);
} 

100vw瓜分了320分辨率,然后我们需要扩大10倍

1rem = 10vw = 10px 

所以当我们实际量得UI上20px时,我们直接计算得出2rem即可

 #app {position: relative;}.title {font-size: 2rem;}.box {max-width: 32rem;height: 10rem;background-color: red;}.content {font-size: 2rem;position: absolute;top: 0px;z-index: 1;background-color: rgb(255, 0, 0, 0.1);}.row-present .col {/* width: calc(100% / 3); */width: 20%;height: 100px;float: left;color: green;font-size: 20px;}:root {--background-color: #111;}.row-present .col:nth-of-type(2n + 1) {background-color: var(--background-color);}p.title {clear: both;}.row-vw .col {float: left;height: 100px;width: 20vw;color: green;font-size: 2rem;}.row-vw .col:nth-of-type(2n + 1) {background-color: var(--background-color);} 

最后的结果就是下面

总结

  • 可以动态设置metainitial-scale的缩放比,主要是根据screen.width设备宽度与目标设计稿targetWidth形成像素比scale,假设设计稿是750的,那么我们的targetWidth就是375,设计稿量的尺寸就是10px,网页上所写的元素也是10px,因为scale=1,随着不同分辨率scale的值也会发生变化* rem适配,浏览器默认font-size:16px,当我们根font-size:62.5%时,我们利用rem单位设置元素单位,1rem=10px,所以当设计稿750像素时,量尺寸20px,那么你实际单位换成rem时,就是2rem,原有尺寸缩小10倍即可,这种方案会有一定误差,但也基本满足移动端自适应* vw+calc+rem方案,同样是设置根html的单位,主要是font-size: calc(100vw / targetWidth * 10),我们把vw视口单位,如果你的设计稿是640,100vw就是targetWidth=320像素,如果你的设计稿是750,那么targetWidth=3751rem = 10vw = 10px,所以当你750的设计稿20像素时,那么在实际网页的单位只需要缩小10倍即可,也就是2rem,这种方式精确度高,简单,基本不需要第三方什么适配js* 本文code example

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

美赛Day1

1 层次分析法 评价类问题 1.1 模型介绍 1.1.1 模型介绍 在对B的评价中&#xff0c;判断A个物体哪个最好。将B分为k个可以评价的方面分别进行打分&#xff08;每个方面A个物体的分数和为1&#xff09;&#xff0c;最终对A个物体的k个方面加权求和进行比较。 1.1.2 解题思路…

剑指政企数智办公市场,通信厂商融云有何看家本领?

近年来&#xff0c;数字经济正在加速赋能千行百业&#xff0c;我国的政务办公也正加速由数字化向智能化深度扩展。在线办公市场从公有云到政企私有云的热度&#xff0c;已然节节攀升。近日&#xff0c;作为通信厂商被熟知的融云推出了“百幄”数智办公平台&#xff0c;正式宣布…

05数据结构——顺序表与链表

开始系统学习算法啦&#xff01;为后面力扣和蓝桥杯的刷题做准备&#xff01;这个专栏将记录自己学习算法是的笔记&#xff0c;包括概念&#xff0c;算法运行过程&#xff0c;以及代码实现&#xff0c;希望能给大家带来帮助&#xff0c;感兴趣的小伙伴欢迎评论区留言或者私信博…

【DETR】DETR训练VOC数据集/自定义数据集

训练DETR一、数据准备二、配置DETRReferences一、数据准备 DETR用的是COCO格式的数据集。 如果要用DETR训练自己的数据集&#xff0c;直接利用Labelimg标注成COCO格式。 如果是VOC数据集的话&#xff0c;要做一个格式转换。网上一大堆格式转换的代码都很乱&#xff0c;所以自己…

java基于springboot外卖系统在线订餐系统app源码厨艺论坛APP

简介 本项目主要包括了外卖订餐系统&#xff08;在线订餐和外卖配送&#xff09;、厨艺论坛系统、管理员后台、用户中心等功能。用户注册后可以选择餐桌在线点餐支付&#xff0c;也可以选择外卖配送到家的方式。 演示视频 https://www.bilibili.com/video/BV1xv411t7JD/?sha…

Thinkphp5框架简单理解

说明 该文章来源于同事lu2ker转载至此处&#xff0c;更多文章可参考&#xff1a;https://github.com/lu2ker/ 目录说明TP5框架简单理解1. 架构总览1.1 控制器/操作1.2 MVC模式流程1.3 类库自动加载1.4 URL访问检测1.5 路由模式1.5.1 普通模式1.5.2 混合模式1.5.4 强制路由1.6 …

数据结构与算法学习——栈结构

在程序设计中&#xff0c;一定接触过“堆栈”的概念。其实&#xff0c;“栈 ” 和 “堆 ” 是两个不同的概念。这里&#xff0c;栈是一种特殊的数据结构&#xff0c;在中断处理特别是重要数据的现场保护有着重要意义。 什么是栈结构 从数据的逻辑结构来看&#xff0c;栈结构其…

59. 微调(fine-tuning)代码实现

1. 热狗识别 让我们通过具体案例演示微调&#xff1a;热狗识别。 我们将在一个小型数据集上微调ResNet模型。该模型已在ImageNet数据集上进行了预训练。 这个小型数据集包含数千张包含热狗和不包含热狗的图像&#xff0c;我们将使用微调模型来识别图像中是否包含热狗。 %matp…

专访中银金科:数字驱动成为新的增长引擎,未来业务转化是关键

大数据和信息科技正在逐步颠覆银行业过往的业务模式。建立以数据驱动为核心&#xff0c;以优化客户体验为目标的可持续营销理念&#xff0c;逐渐成为行业的共识。但是&#xff0c;伴随着银行业数字化转型进程加速发展&#xff0c;海量客户数据和低效营销之间的矛盾日益凸显。在…

Linux apt 命令

apt&#xff08;Advanced Packaging Tool&#xff09;是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。 apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令&#xff0c;而且命令简洁而又好记。 apt 命令执行需要超级管理员权限(root)。 apt 语…

23.2、Junit单元测试反射注解

Java代码执行的三个阶段 Junit单元测试&#xff1a; * 测试分类&#xff1a; 1. 黑盒测试&#xff1a;不需要写代码&#xff0c;给输入值&#xff0c;看程序是否能够输出期望的值。 2. 白盒测试&#xff1a;需要写代码的。关注程序具体的执行流程。 * Junit使用&#…

洛谷千题详解 | P1030 [NOIP2001 普及组] 求先序排列【C/C++、pascal语言】

博主主页&#xff1a;Yu仙笙 专栏地址&#xff1a;洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析&#xff1a; C源码&#xff1a; C源码2&#xff1a; pascal源码&#xff1a; C源码&#xff1a; --------------------------------------------------------…

P4Pi AP转wifi模式

调试时间&#xff1a;2022.11.07 树莓派在安装P4Pi后&#xff0c;会自动设置为AP热点模式。本文档通过配置将树莓派系统从ap模式转变为wifi模式。 1 调试环境 Raspberry 4B 4GB-SDcard 32GB Raspberry Pi Imager v1.7.3 Raspberry Pi OS – Raspberry PiFrom industries lar…

值得信赖的数据同步备份软件 -Allway Sync 安全又可靠,简单又易用!

Allway Sync 是一款可靠的数据同步备份工具&#xff0c;最初的版本发布于 2004 年 4 月 19 号&#xff0c;距离今日大约有 19 年的更新历史了&#xff0c;足以说明软件绝对稳定&#xff0c;时间验证了软件的可靠性&#xff01;而对于我们用户来说&#xff0c;数据同步备份最重要…

基于线性表的查找

目录 一、查找的基本概念 二、顺序查找 关键代码 完整代码 运行结果 增加哨兵 三、二分查找&#xff08;折半查找&#xff09; 关键代码 完整代码 运行结果 四、分块查找 图示 关键代码 完整代码 一、查找的基本概念 对查找表进行的操作 1.查找某个特定的数据元素是否存在 …

攻防世界-fakebook

题目 访问题目场景 我自己尝试了很久&#xff0c;发现怎么都找不到这道题的入手点&#xff0c;然后就去看了大佬们的文章&#xff0c;然后我发现这道题更趋近于真实的场景 解题过程 先使用目录扫描器扫一下发现存在robots.txt访问一下 这里发现存在一个备份文件 <?php…

html、css、js的小米商城

首页的展示 首页的功能 1、搜索栏模糊查询 在我在输入框输入关键字的时候&#xff0c;会匹配关键字&#xff0c;如果我的存放的数据里面包含这些关机键字就会显示出来。做到模糊查询的效果。 2、实现搜索功能 在首页的搜索框点击搜索的时候&#xff0c;就会对你输入的关键字进…

Redis 未授权访问的原理、危害及复现

原理介绍 Redis 未授权访问 准确的来说&#xff0c;其实并不是一个漏洞。而是由于开发人员配置不当&#xff0c;而产生的预料之外的危害。 具体原理&#xff1a; 可能由于部分业务要求&#xff0c;或者开发人员的配置不当&#xff0c;将 redis 服务器的 ip 和 port 暴露在公网…

基础数学(7)——常微分方程数值解法

文章目录期末考核方式基础知识解析解&#xff08;公式法&#xff09;解析解例题&#xff08;使用公式法&#xff0c;必考&#xff09;解析解的局限性数值解数值解的基本流程显示Euler法显示欧拉&#xff08;差值理解&#xff09;显示欧拉&#xff08;Taylor展开理解&#xff09…

ClickHouse表引擎详解看这篇就够了-基本讲解、处理逻辑、测试实例

表引擎是ClickHouse设计实现中的一大特色。表引擎在 ClickHouse 中的作用十分关键&#xff0c;直接决定了数据如何存储和读取、是否支持并发读写、是否支持 index、支持的 query 种类、是否支持主备复制等。1、表引擎概述1.1 介绍ClickHouse 提供了大约 28 种表引擎&#xff0c…