《前端面试题 - 移动端适配》

171 阅读2分钟

一、移动端适配

1.Flexible 方案

Flexible 是淘宝推出的一个用于移动端适配的解决方案。其核心原理是:

// 核心代码
function setRem() {
    // 通常设计稿是750px
    const baseSize = 75;  // 基准值 750/10
    const scale = document.documentElement.clientWidth / 750;
    document.documentElement.style.fontSize = (baseSize * scale) + 'px';
}

// 初始化
setRem();
// 窗口变化时重新设置
window.addEventListener('resize', setRem);

2. rem 适配方案

rem 是相对于根元素(html)的 font-size 来计算的单位。

// 示例:设计稿上元素宽度为200px
.box {
    // 假设htmlfont-size75px
    width: 2.667rem;  // 200/75
    height: 1.333rem; // 100/75
}

3. vw/vh 方案

viewport 相对单位,更现代的解决方案:

  • vw: viewport width 的 1/100
  • vh: viewport height 的 1/100
.container {
    // 在750px设计稿下,100px转换为 (100/750*100)vw
    width: 13.333vw;  
    font-size: 4vw;
}

4. rpx(小程序专属单位)

rpx 是微信小程序中的响应式单位: -规定屏幕宽度为 750rpx -可以根据屏幕宽度自动转换

// 小程序内部转换逻辑(简化版)
const rpxRatio = windowWidth / 750;  // 屏幕宽度/750得到转换比例
const px = rpx * rpxRatio;  // rpx转换为px
/* 在750px设计稿中 */
.box {
    width: 100rpx;  /* 直接使用设计稿的px值 */
    height: 100rpx;
}

实际使用建议

1.现代项目推荐使用 vw 方案:

// 可以使用 postcss-px-to-viewport 自动转换
.container {
    width: 100px;  // 自动转换为 13.333vw
    font-size: 16px;  // 自动转换为 2.133vw
}

2.需要兼容老浏览器可以选择rem方案:

// 结合 postcss-pxtorem 使用
module.exports = {
    plugins: {
        'postcss-pxtorem': {
            rootValue: 75,
            propList: ['*']
        }
    }
}

3.小程序项目直接使用 rpx

.btn {
    width: 200rpx;
    height: 80rpx;
}

4.混合开发可以组合使用

.hybrid-container {
    // 主要使用vw
    width: 100vw;
    // 部分场景使用rem
    font-size: 1rem;
    // 固定单位场景使用px
    border: 1px solid #ccc;
}

这些方案各有优劣,需要根据具体项目需求(兼容性要求、开发效率、团队熟悉度等)来选择合适的方案