移动端适配最佳方案

本文深入探讨移动端网页设计的适配方案,介绍通过JS动态调整字体大小实现响应式布局,利用设备像素比进行视口缩放,以及通过LESS变量计算不同屏幕尺寸下的元素尺寸,避免繁琐的媒体查询,实现高效且精准的页面适配。

JS动态计算当前屏幕每一份大小

缺点:切换屏幕尺寸需要刷新界面才有效,真机上测试,可忽略

document.documentElement.style.fontSize = window.innerWidth / 7.5 + "px";

设置设备像素比

通过meta的initial-scale属性来缩小
注意点:缩放视口后视口大小会发生变化
当移动端设备的CSS像素和设备像素比例不为1时,需要进行缩放

 let scale = 1.0 / window.devicePixelRatio;// 计算缩放比例
 let text = `<meta name="viewport" content="width=device-width, initial-scale=${scale}, maxinum-scale=${scale}, mininum-scale=${scale}, user-scalable=no ">`;
 document.write(text);

style样式中通过比例公式计算

公式:原始元素尺寸 / 原始图片每一份大小 * 目标屏幕每一份大小 = 等比例缩放后的尺寸

设计图片是150*150

如何在前端开发中应用这个计算公式
目标屏幕每一份的大小就是HTML的font-size:50px(一共有7.5份,375/7.5)
使用时只需要用 原始元素尺寸 / 原始图片每一份大小rem 即可

案例

为了直接计算缩放后的尺寸,这个案例中用了less

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>移动端常用适配方案-不用媒体查询</title>
    <style type="text/less">
        *{
            margin: 0;
            padding: 0;
        }
        @media screen and (max-width: 320px) {
            html{
                font-size: 42.67px;
            }
        }
        @media screen and (min-width: 375px) {
            html{
                font-size: 50px;
            }
        }
        @media screen and (min-width: 414px) {
            html{
                font-size: 55.2px;
            }
        }
        .top{
            position: relative;
        }
        .top>img{
            width: 100%;
            height: auto;
        }
        .top>p{
            position: absolute;
            left: 50%;
            transform: translateX(-50%);
            top: 80/100rem;
            font-size: 36/100rem;
            color: #fff;
        }
        .middle, .bottom{
            position: relative;
            height: 290/100rem;
        }
        .main{
            border: 1/100rem dashed #0d7efb;
            border-radius: 5/100rem;
            padding: 10/100rem;
            display: inline-block;
            position: absolute;
            left: 50%;
            transform: translateX(-50%);
        }
        .main>img:nth-of-type(1){
            width: 410/100rem;
            height: 270/100rem;
            vertical-align: bottom;
        }
        .main>img:nth-of-type(2){
            width: 84/100rem;
            height: 84/100rem;
            position: absolute;
            left: 50%;
            transform: translateX(-50%);
            top: 60/100rem;
        }
        .bottom{
            margin-top: 35/100rem;
        }
    </style>
    <script src="../js/less.js"></script>
    <script>
        /*
        * 注意点:通过JS动态计算当前屏幕每一份大小的好处:不用写很多的媒体查询
        * 坏处:切换了屏幕尺寸之后需要刷新界面才有效
        *       而媒体查询如果切换了屏幕的尺寸不需要重新刷新界面
        * */
        console.log(window.devicePixelRatio);
        document.documentElement.style.fontSize = window.innerWidth / 7.5 + "px";
        // console.log(document.documentElement);
        let scale = 1.0 / window.devicePixelRatio;
        let text = `<meta name="viewport" content="width=device-width, initial-scale=${scale}, maxinum-scale=${scale}, mininum-scale=${scale}, user-scalable=no ">`;
        document.write(text);
    </script>
</head>
<body>
<div class="top">
    <img src="../images/bg.png" alt="">
    <p>实名认证</p>
</div>
<div class="middle">
    <div class="main">
        <img src="../images/back.png" alt="">
        <img src="../images/add.png" alt="">
    </div>
</div>
<div class="bottom">
    <div class="main">
        <img src="../images/back.png" alt="">
        <img src="../images/add.png" alt="">
    </div>
</div>
</body>
</html>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值