移动端
移动端开发
原生开发
ios、Android、RN、uniapp、Flutter
小程序开发
原生小程序、uniapp、Taro等
Web页面
移动端web页面,可以使用浏览器或者webview浏览
视口
- 浏览器中看到的区域就是视口
- fixed就是相对视口定位的
- PC端中布局视口与视觉视口是同一个
移动端视口
- 默认情况下移动端布局视口往往大于视觉视口
视口划分
-
布局视口:宽度980px,超过移动端的可视视口
-
视觉视口: 在PC端布局的时候布局的视口可能会超过移动端的可视视口,所以手机浏览器会将页面缩小以查看所有内容。
-
理想视口:我们希望的是设置100px,那么移动端显示的就是100px,而不是缩小之后的
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0">
适配方案
百分比
- 不同属性的百分比,参照物可能不统一,极少使用
rem单位+动态html的font-size
-
媒体查询
- 需要根据不同屏幕写大量@media min-width
- 无法实时更改大小
-
js动态
设计稿为640,设备为320时,画一个宽100px高200px的矩形
使用rem: 设计稿设置font-size为100px,目的是取值方便转换,现在可以表示 宽1rem(100px)高2rem(200px)
设备中需要设置font-size: 320/640 = x / 100, x表示设备中需要设置的font-size的值
function setRemUnit(){ const htmlEl = document.documentElement; const htmlWidth = htmlEl.clientWidth; const unit = htmlWidth / 10; htmlEl.style.fontSize = unit + 'px' } setRemUnit() window.addEventListener('resize',setRemUnit)
-
(function flexible (window, document) { var docEl = document.documentElement var dpr = window.devicePixelRatio || 1 // adjust body font size function setBodyFontSize () { if (document.body) { document.body.style.fontSize = (12 * dpr) + 'px' } else { document.addEventListener('DOMContentLoaded', setBodyFontSize) } } setBodyFontSize(); // set 1rem = viewWidth / 10 function setRemUnit () { var rem = docEl.clientWidth / 10 docEl.style.fontSize = rem + 'px' } setRemUnit() // reset rem unit on page resize window.addEventListener('resize', setRemUnit) window.addEventListener('pageshow', function (e) { if (e.persisted) { setRemUnit() } }) // detect 0.5px supports if (dpr >= 2) { var fakeBody = document.createElement('body') var testElement = document.createElement('div') testElement.style.border = '.5px solid transparent' fakeBody.appendChild(testElement) docEl.appendChild(fakeBody) if (testElement.offsetHeight === 1) { docEl.classList.add('hairlines') } docEl.removeChild(fakeBody) } }(window, document))
- rem换算:postcss-pxtorem
- vs code 插件:
px to rem
vw单位
html{
font-size:10vw; /*相当于37.5px,375设计稿*/
}
vw相比较rem的优势
- 不需要计算html的font-size大小,也不需要给html设置这样一个font-size;
- 不会因为设置html的font-size大小,而必须给body再设置一个font-size,防止继承
- 因为不依赖font-size的尺寸,所以不用担心某些原因html的font-size尺寸被篡改,页面尺寸混乱
- vw相比较rem更具语义化,
- 可以具备rem之前的所有优点
换算
- postcss-px-to-viewport-8-plugin
- vs code 插件 px to vw
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署