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

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

相关推荐
祈祷苍天赐我java之术2 小时前
CSS 进阶用法
前端·css
2501_915106325 小时前
移动端网页调试实战,iOS WebKit Debug Proxy 的应用与替代方案
android·前端·ios·小程序·uni-app·iphone·webkit
柯南二号6 小时前
【大前端】React Native 调用 Android、iOS 原生能力封装
android·前端·react native
睡美人的小仙女1277 小时前
在 Vue 前端(Vue2/Vue3 通用)载入 JSON 格式的动图
前端·javascript·vue.js
yuanyxh7 小时前
React Native 初体验
前端·react native·react.js
大宝贱7 小时前
H5小游戏-超级马里奥
javascript·css·html·h5游戏·超级马里奥
程序视点7 小时前
2025最佳图片无损放大工具推荐:realesrgan-gui评测与下载指南
前端·后端
程序视点9 小时前
2023最新HitPaw免注册版下载:一键去除图片视频水印的终极教程
前端
小只笨笨狗~10 小时前
el-dialog宽度根据内容撑开
前端·vue.js·elementui
weixin_4903543410 小时前
Vue设计与实现
前端·javascript·vue.js