位置: IT常识 - 正文

移动端适配方案有哪几种?(移动端适配方案面试题)

编辑:rootadmin
移动端适配方案有哪几种?

推荐整理分享移动端适配方案有哪几种?(移动端适配方案面试题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:移动端适配方案怎么设置,移动端适配方案rem具体流程,移动端适配方案有哪些,前端移动端适配方案,移动端适配方案有哪些,移动端适配方案有哪些,移动端适配方案有哪些,移动端适配方案阮一峰,内容如对您有帮助,希望把文章链接给更多的朋友!

虽然我们课程明确的区分各种移动端适配方案,但依然有很多同学搞不清楚移动端等比适配和响应式,这里对移动端主流适配方案给大家做一个分析。

移动端适配是指同一个页面可以在不同的移动端设备上都有合理的布局。主流的实现方案有两种:

响应式布局,通过@media实现一套html配合多套css实现适配;通过rem或者vw,vh等实现不同的设备俺照相同的比例适配;例子

这里给大家列举几个例子:

小米移动端商城,很明显是采用了rem等比适配的方案。

        2. 不凡官网,采用了@media媒体监听实现适配。

        3.  王者荣耀,同时采用了媒体监听和rem等比适配。

 4. vh,vm 暂时没找到。

实现原理

首先需要了解一个概念:viewport 视口(mdn)。如果要实现浏览器适配移动端,首先我们要统一标准视口。在html的head中添加以下代码:

<meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no">第一种:rem实现原理

rem是一个倍数单位,它是基于html的font-size的倍数。只要我们在不同的设备上设置一个合适的初始值,当设备发生变化font-size就会自动等比适配大小,从而在不同的设备上表现统一。

比如说:移动端设计稿一般会以750px进行交付,而手机实际像素可能是375px。那么一般我们会以设备宽度的1/10作为初试html的font-size大小,当然这个值是动态的,在不同设备上得到的值不同。

移动端适配方案有哪几种?(移动端适配方案面试题)

比如有的设备宽度是375px,那么html初始font-size就是37.5px,如果设备宽度是300px,那么font-size就是30px。 因为内容都是rem基于font-size的倍数,所以不同宽度的设备上都是等比显示的。

注意:这个font-size基数到底是不是设备的1/10是没有统一论调的,你可以用1/n任意定义。关键是理解rem适配的原理是元素等比缩放。

参照具体代码:

<!DOCTYPE html><!-- 0. 注意:font-size是动态设置,宽度为屏幕1/10 --><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 1. 标准视口,禁止缩放,初始缩放为1 --> <meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no"> <title>移动视口</title> <style> *{ margin: 0; padding: 0; } .box{ /* 4. 如果原稿宽度是750px,而且在750宽度的设备上开发。则375px应该还是375px。 基础font-size为75px,则这里换算成rem应该是5rem */ /* 想必你不一定能理解。试想如果在375宽度的设备上开发。这里的5rem是不是应该为37.5的5倍? 37.5*5=187.5刚好为375的1/2呢? */ width: 5rem; height: 5rem; background-color: green; }​ </style></head><body> <!-- 2. 假设一个750px宽度的设计稿,给了一个375px的元素块。 --> <!-- 我们的实现应该是一个盒子在不同宽度的设备上都应该表现一致(占比屏幕宽度的1/2)。 因为屏幕宽度不一定,通过px显然无法实现,那么我们就需要使用rem来做等比缩放。 --> <!-- 一个简单的例子: --> <div class="box"></div> <script> // 3. 这里通过js监听屏幕尺寸 设置html的font-size function setView(){ document.documentElement.style.fontSize = screen.width/10 + 'px'; } setView(); // 这里是为什么?你自己想一想 window.onresize = setView;​ </script></body></html>

至于px如何转换为rem,在vscode中可以搜索相关插件。

第二种: 媒体监听

媒体监听通过@media实现。注意:媒体监听不是等比缩放!!!是同一块内容在不同设备上有合理的表现。

比如在PC端一行能同时展示4个元素块,而在移动端只能一行展示1个或者2个元素块(要不看不清)。

那么就可以通过监听媒体宽度,给元素设置不同的宽度,从而有合理的表现。

代码参考:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 1. 标准视口,禁止缩放,初始缩放为1 --> <meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no"> <title>媒体监听适配</title> <style> *{ margin: 0; padding: 0; } ul{ list-style: none; } .header{ width: 100%; height: 100px; background-color: pink; } .header .header-c{ width: 1200px; height: 100px; background-color: green; margin: 0 auto; } .header .nav{ /* width: xx */ height: 100%; } .header .nav .nav-item{ float: left; width: 100px; height: 100%; line-height: 100px; text-align: center; cursor: pointer; } /* 3. 针对适配的设备重新写一套样式 */ @media screen and (max-width: 750px){ .header{ position: relative; height: 40px; } .header .header-c{ width: 100%; } .header .nav{ position: absolute; width: 100%; left: 0; top: 40px; } .header .nav .nav-item{ float: none; width: 100%; height: 40px; background-color: pink; border-bottom: 1px solid gray; line-height: 40px; } } </style></head><body> <!-- 2. 要明确媒体监听实现的不是等比缩放!!!而是同一个内容在不同设备上都有合理的表现。 --> <!-- 比如一个导航 --> <div class="header"> <div class="header-c"> <ul class="nav"> <li class="nav-item">首页</li> <li class="nav-item">分类</li> <li class="nav-item">发现</li> <li class="nav-item">我的</li> </ul> </div> </div></body></html>第三种: vw/vh方案

vw 是相对单位,1vw 表示屏幕宽度的 1%。需要缩放的元素采用vw,不需要的采用px。

具体实现方法与rem类似,至于转换问题也可以参考rem的插件形式。

各种方案对比

rem方案:

原理不好理解^_^从px到rem的转换需要使用工具灵活可控,几乎完美复刻设计稿可能大量出现小数点,由于换算有些许误差(极小)适合具有完全移动端设计稿的项目

media媒体监听方案:

没有学习成本如何适配需要重新定义,可能设计稿都不会体现复杂的组件很难有完美的呈现适合只有PC端设计稿,又需要兼容移动端的需求

综合方案:

可以同时使用media和rem实现更大的自由度和更完美的呈现实现复杂,颗粒度不好把控

这里总结了两种常用的移动端适配方案。其实后来的微信小程序css单位rpx,换算方法为1px=2rpx,应该和rem的适配方案原理大致相同。

附件

代码仓库: https://gitee.com/bufanxy/learnjs-troublemaker

本文链接地址:https://www.jiuchutong.com/zhishi/296061.html 转载请保留说明!

上一篇:微信登录的接口(微信登录接口购买)

下一篇:GPT-4,大增长时代的序幕(增长gdp是什么意思)

  • 苹果13promax怎么连接蓝牙耳机(苹果13promax怎么显示电池电量百分比)

    苹果13promax怎么连接蓝牙耳机(苹果13promax怎么显示电池电量百分比)

  • 苹果微信扫一扫怎么使用(苹果微信扫一扫怎么添加到桌面小组件)

    苹果微信扫一扫怎么使用(苹果微信扫一扫怎么添加到桌面小组件)

  • oppo如何关闭手势横屏防误触(oppo如何关闭手机温控)

    oppo如何关闭手势横屏防误触(oppo如何关闭手机温控)

  • 苹果高清通话volte怎么开(苹果高清通话功能)

    苹果高清通话volte怎么开(苹果高清通话功能)

  • 高德地图怎么删除订单记录(高德地图怎么删除打车订单)

    高德地图怎么删除订单记录(高德地图怎么删除打车订单)

  • 国际上网可以卸载吗(国际上网卸载了怎么下回来)

    国际上网可以卸载吗(国际上网卸载了怎么下回来)

  • 支付宝扫福全家福怎么扫(支付宝扫福全家福是不是只能一张)

    支付宝扫福全家福怎么扫(支付宝扫福全家福是不是只能一张)

  • lite版是青春版吗(lite和普通版区别)

    lite版是青春版吗(lite和普通版区别)

  • 三星手机提示volte不可用(三星手机提示有水不能充电)

    三星手机提示volte不可用(三星手机提示有水不能充电)

  • 华为手机突然发热严重(华为手机突然发热怎么回事)

    华为手机突然发热严重(华为手机突然发热怎么回事)

  • 微信解除实名认证还能用吗(微信解除实名认证后银行卡会解绑吗)

    微信解除实名认证还能用吗(微信解除实名认证后银行卡会解绑吗)

  • 苹果se2支持5g网吗(苹果se2支不支持5g)

    苹果se2支持5g网吗(苹果se2支不支持5g)

  • 摄像头4mm和6mm的区别(摄像头4mm6mm8mm有什么区别)

    摄像头4mm和6mm的区别(摄像头4mm6mm8mm有什么区别)

  • 什么是京东自营产品(什么是京东自营商品京东卡怎么用)

    什么是京东自营产品(什么是京东自营商品京东卡怎么用)

  • i3 7100支持什么主板(i3 7100支持什么内存)

    i3 7100支持什么主板(i3 7100支持什么内存)

  • 电脑里的系统设置在哪(电脑里的系统设置在哪里找)

    电脑里的系统设置在哪(电脑里的系统设置在哪里找)

  • 手机安全模式怎么关(手机安全模式怎么解除vivo手机)

    手机安全模式怎么关(手机安全模式怎么解除vivo手机)

  • 一加7T Pro怎么强制关机(一加七pro怎么操作)

    一加7T Pro怎么强制关机(一加七pro怎么操作)

  • set协议的缺点(set协议的目的)

    set协议的缺点(set协议的目的)

  • 恋爱记怎么解除另一半(恋爱记怎么解除自动攒钱)

    恋爱记怎么解除另一半(恋爱记怎么解除自动攒钱)

  • 佳能5d4与5dsr画质对比(佳能5d4和5dsr)

    佳能5d4与5dsr画质对比(佳能5d4和5dsr)

  • mimi完成怎么取消(mimi已完成是什么意思)

    mimi完成怎么取消(mimi已完成是什么意思)

  • 风险管控中心怎么解除(风险管控中心怎么关闭)

    风险管控中心怎么解除(风险管控中心怎么关闭)

  • vivox23通话录音在哪里找到(vivox23的电话录音之后在哪里找出来)

    vivox23通话录音在哪里找到(vivox23的电话录音之后在哪里找出来)

  • QQ邮箱密码是QQ密码吗(qq邮箱密码是qq号的密码吗)

    QQ邮箱密码是QQ密码吗(qq邮箱密码是qq号的密码吗)

  • 如何激活最新Win11系统?最新Win11密钥/激活码分享 附激活工具(咋激活windows)

    如何激活最新Win11系统?最新Win11密钥/激活码分享 附激活工具(咋激活windows)

  • Windows 10如何清理DNS缓存(windows10如何清理磁盘碎片)

    Windows 10如何清理DNS缓存(windows10如何清理磁盘碎片)

  • PCTVoice.exe是什么进程 PCTVoice进程查询(pctversion)

    PCTVoice.exe是什么进程 PCTVoice进程查询(pctversion)

  • 银行存款利息收税吗
  • 应付税费重分类如何做会计分录?
  • 增值税税负率是含税还是不含税
  • 其他个人出租房屋按照多少征收应纳税额
  • 出售交易性金融资产发生的净损失应计入营业外支出
  • 国有划拔土地房整体可以买卖吗
  • 取得的股息红利收入计入哪个科目
  • 交易性金融资产和其他权益工具投资的区别
  • 如何开增值税专用发票视频
  • 内账固定资产已经费用化了怎么办
  • 车辆保险费专用发票图片
  • 房地产企业广告费扣除基数
  • 增值税为什么不重复征税
  • 生产过程半成品报废
  • 财务申报工资和实际发工资
  • 买商铺返租金之套路
  • 报关税怎么做账
  • 附税分录怎么做?
  • 劳务派遣企业如何认定
  • 职工福利费扣除标准2022
  • 关于诉讼费减半如何减的问题
  • 交到公户上的钱,还没到账可以退回吗?
  • 用人单位逾期未缴纳社会保险费可能会使用的文书
  • 恢复修改过的图片
  • 增值税专用发票和普通发票的区别
  • 微软2003系统
  • 本月未抵扣完的进项税是否转出
  • 个人所得税账务处理分录怎么做
  • bios中英文对照表图新版
  • 工程竣工结算资料存档几年
  • 在一个js文件中怎么写
  • 律师异地办案家属要跟着吗
  • php数组的概念是什么
  • thinkphp excel
  • vue创建项目后开始写的步骤
  • custom用法
  • mkdir命令怎么用
  • 软件开发行业税负
  • 税审报告什么时候需要
  • 股东转让股份会退股吗
  • 新建利润表
  • 进货退出进项税额的核算
  • 如何正确的开具增值税专用发票
  • 自建厂房流程
  • 弃置费用预计负债的摊余成本
  • 会计科目设置怎么操作
  • mysql查询日志位置
  • 企业发生的直接进入当期损益的期间费用包括
  • 含税与不含税的区别是什么
  • SQL SERVER 2008 CTE生成结点的FullPath
  • 制造费用账户在月末一般没有余额
  • 投资收益在什么科目
  • 小规模纳税人的增值税计入成本吗
  • 以前年度损益调整
  • 废料入库如何估价
  • 原始凭证丢了判刑吗
  • 办理营业执照需要什么条件
  • mysql的主从复制模式
  • win9什么意思
  • win10隐藏设置
  • 电脑win7怎么样
  • xp系统进程
  • win8 chkdsk
  • 如何输入密钥上网
  • win8和win10双系统切换
  • linux使用命令查看ip地址
  • linux安装步骤
  • 菜单按钮是什么
  • ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点
  • 怎样提升android的版本为最新版本?
  • python入门笔记
  • android界面控件
  • crontab设置每天执行
  • pypy 使用
  • 异步任务管理器
  • unity如何导出vr项目
  • 详解jQuery中的empty、remove和detach
  • jquery控制css样式
  • 印花税当期没有发生可以不用申报吗
  • 哪些情况要交房租
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设