实现页面在移动端自适应的方法总结

通常PC端和移动端是分开的两个项目,但最近遇到一个页面较少的pc端项目要求做移动端的自适应。那要做移动端的自适应有哪些方法呢?

在原生html页面下

使用meta标签:viewport

理论上这个标签能适应所有尺寸的屏幕,但不同设备对该标签的解释方式和支持程度不同,造成兼容效果较差

html 复制代码
<meta name="viewport" content="width=device-width, initial-scale=1.0">

在css中使用vw、vh或百分比

百分比:是根据父元素的宽度来确定的子元素的宽度百分比

vw、vh:根据浏览器的视口宽度来决定

在css中使用rem或em

rem:是新增的相对单位,相对于HTML根元素的字体大小来定义的单位

浏览器默认字体单位大小16px,1rem=16px

也可以通过在js处编写一个响应式字体大小的调整方案,根据设备视口宽度动态调整根元素html的字体大小,从而实现页面元素的等比例缩放。

js 复制代码
(function (doc, win) {
    var docEl = doc.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
               // 宽度     
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            // 
            if (clientWidth >= 750) {
                docEl.style.fontSize = '100px';
            } else {
                // 动态设置html的font-size
                docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
               //docEl.style.fontSize = Math.min(100, Math.max(50, 100 * (clientWidth / 750))) + 'px';
            }
         };
        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
  1. 通过监听resizeorientationchange事件来响应屏幕尺寸变化
  2. 以750px为基准宽度,当视口宽度≥750px时固定字体大小为100px
  3. 小于750px时按比例计算:fontSize = 100 * (clientWidth / 750)
  4. 这种方案通常配合rem单位使用,使所有基于rem的尺寸都能自适应

但这种方法还是比较粗略,需要添加最小/最大字体限制防止极端情况。需要使用clamp()函数动态限制其范围,或者配合vw视口单位实现响应式限制。

css 复制代码
.element { 
    font-size: clamp(12px, 4vw, 24px); 
    /* 语法:clamp(最小值, 首选值, 最大值) */ 
 }
css 复制代码
.title { 
    font-size: min(max(16px, 3vw), 28px); 
    /* 确保在 16px-28px 之间 */ 
 }

在vue项目中

若在vue项目中出现要同时包含PC端和移动端自适应时

使用媒体查询media

对需要自适应部分的页面进行详细调整。

css 复制代码
@media (max-width:768px) {
    //样式
}//诸如此类

将PC端页面和移动端页面分开写

为自适应的移动端页面单独写一个文件,与pc端页面的代码文件分开,通过在路由中分别配置对应的路由地址,使用vue-meta单独为移动端配置meta,再通过js编写一个响应式的字体大小的调整方案。

具体详情可查看juejin.cn/post/684490...

总的来说,以上方法是在页面较少时的处理方案,若是大型项目还是将PC端和移动端分开写是最好的,其中使用rem、vw和媒体查询是较提倡的方案。

相关推荐
Bdygsl29 分钟前
前端开发:HTML(5)—— 表单
前端·html
望获linux34 分钟前
【实时Linux实战系列】实时数据流处理框架分析
linux·运维·前端·数据库·chrome·操作系统·wpf
_一两风1 小时前
深入解析 Tailwind CSS:从安装到实用案例
css
国家不保护废物1 小时前
TailwindCSS:原子化CSS的革命,让React开发爽到飞起!🚀
前端·css·react.js
程序视点1 小时前
如何高效率使用 Cursor ?
前端·后端·cursor
前端领航者1 小时前
重学Vue3《 v-for的key属性:性能差异与最佳实践》
前端·javascript
归于尽1 小时前
跨域问题从青铜到王者:JSONP、CORS原理详解与实战(前端必会)
前端·浏览器
Andy_GF1 小时前
纯血鸿蒙HarmonyOS Next 远程测试包分发
前端·ios·harmonyos
嗑药狂写9W行代码2 小时前
cesium修改源码支持4490坐标系
前端
小山不高2 小时前
react实现leaferjs编辑器之形状裁剪功能点
前端