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

通常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和媒体查询是较提倡的方案。

相关推荐
xm_xm_xm_136 分钟前
react17版本以前类组件常用操作
前端·javascript·react.js
ly76891 小时前
Web 性能优化实战:从 Core Web Vitals 到工程化性能治理
前端·性能优化
冬奇Lab2 小时前
一天一个开源项目(第200篇):next-forge - 生产级 Next.js SaaS 启动模板
前端·前端框架·开源
Profile排查笔记2 小时前
指纹浏览器怎么设置 IP?代理配置、检测与排错流程
前端·人工智能·后端·自动化
lzhdim2 小时前
13、JavaScript事件循环机制 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
liangshanbo12152 小时前
Vue 3 <script setup> 的本质原理是什么?它与普通 setup()有何区别?
前端·javascript·vue.js
IT_陈寒3 小时前
SpringBoot自动配置失效?你可能漏了这个小开关
前端·人工智能·后端
kyriewen3 小时前
我写了1个复盘Skill,和AI协作踩过的坑第二天自动变成护栏
前端·程序员·ai编程
风骏时光牛马3 小时前
AI提示词异常故障复盘分析
前端
SoaringHeart4 小时前
Flutter 进阶:NCanvasImageLoader 让 Canvas 也能画网络图
前端·flutter