全国服务热线:4008-888-888

技术知识

详解H5 主题活动页之挪动端 REM 合理布局兼容方式

拿到设计方案稿后,怎样开展合理布局复原?

假如只必须做非精准的回应式设计方案,那末应用新闻媒体查寻来完成就 OK 了。假如必须精准复原设计方案稿,则1般根据放缩来完成。普遍计划方案有根据 viewport 和根据 rem 的放缩计划方案。

1 viewport 放缩计划方案

在挪动端,能够根据 viewport 放缩网页页面尺寸比率做到目地。

简易来讲,即全部宽高像素与视觉效果稿輸出同样,随后根据网页页面宽度与视觉效果稿的宽度比率,动态性设定 viewport。放缩计划方案关键编码参照:

(function () {
    var docEl = document.documentElement;
    var isMobile = window.isMobile /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobi/i.test(navigator.userAgent);

    function setScale() {
        var pageScale = 1;

        if (window.top !== window) {
            return pageScale;
        }

        var width = docEl.clientWidth || 360;
        var height = docEl.clientHeight || 640;
        if (width / height >= 360 / 640) {
            // 高宽比优先选择
            pageScale = height / 640;
        } else {
            pageScale = width / 360;
        }

        var content = 'width=' + 360 + ', initial-scale=' + pageScale 
          + ', maximum-scale=' + pageScale + ', user-scalable=no';
        document.getElementById('viewport').setAttribute('content', content);
        window.pageScale = pageScale;
    }
    if (isMobile) {
        setScale();
    } else {
        docEl.className += ' pc';
    }
})()

这类计划方案在大家上年的1次 H5 主题活动页设计方案中开展了有关实践活动。

可是假如期待 PC 上也能显示信息,因为沒有 viewport 的放缩定义,只能以固定不动值来设置,这个实际效果就不太理想化。

2 rem 合理布局兼容计划方案

rem 合理布局兼容计划方案被提到的较为多,在各大互联网技术公司商品中都有较为普遍的运用。

简易来讲其方式为:

  1. 依照设计方案稿与机器设备宽度的占比,动态性测算并设定 html 根标识的 font-size 尺寸;
  2. css 中,设计方案稿元素的宽、高、相对性部位等赋值,依照同样占比换算为 rem 为企业的值;
  3. 设计方案稿中的字体样式应用 px 为企业,根据新闻媒体查寻稍作调剂。

下面大家举个事例来讲明。

2.1 动态性设定 html 标识 font-size 尺寸

第1个难题是 html 标识的 font-size 动态性测算。这取决于怎样承诺换算占比,以网页页面宽度10等份为例,关键编码参照:

(function(WIN) {
    var  setFontSize = WIN.setFontSize = function (_width) {
        var  docEl = document.documentElement; 
        // 获得当今对话框的宽度
        var  width = _width || docEl.clientWidth; // docEl.getBoundingClientRect().width;
        // 超过 1080px 按 1080
        if (width > 1080) { 
            width = 1080;
        }
        var  rem = width / 10;
        console.log(rem);
        docEl.style.fontSize = rem + 'px';
       // 一部分机型上的偏差、适配性解决
        var  actualSize = win.getComputedStyle && parseFloat(win.getComputedStyle(docEl)["font-size"]);
        if (actualSize !== rem && actualSize > 0 && Math.abs(actualSize - rem) > 1) {
            var remScaled = rem * rem / actualSize;
            docEl.style.fontSize = remScaled + 'px';
        }
    }
    var timer;
    //涵数节流阀
    function dbcRefresh() {
        clearTimeout(timer);
        timer = setTimeout(setFontSize, 100);
    }
    //对话框升级动态性更改 font-size
    WIN.addEventListener('resize', dbcRefresh, false);
    //网页页面显示信息时测算1次
    WIN.addEventListener('pageshow', function(e) {
        if (e.persisted) { 
            dbcRefresh() 
        }
    }, false);
    setFontSize();
})(window)

此外,针对全屏显示信息的 H5 主题活动页,对宽高占比有一定的规定,此时理应做的调剂。能够这么来做:

function adjustWarp(warpId = '#warp') {
    // if (window.isMobile) return;
    const $win = $(window);
    const height = $win.height();
    let width = $win.width();
    // 考虑到导航栏栏状况
    if (width / height < 360 / 600) {
        return;
    }
    width = Math.ceil(height * 360 / 640);
    $(warpId).css({
        height,
        width,
        postion: 'relative',
        top: 0,
        left: 'auto',
        margin: '0 auto'
    });
    // 再次测算 rem
    window.setFontSize(width);
}

依照这类放缩方式,基本上在任何机器设备上都可以以完成等比放缩的精准合理布局。

2.2 元素尺寸赋值方式

第2个难题是元素尺寸的赋值。

以设计方案稿宽度 1080px 为例,大家将宽度分成 10 等份便于于换算,那末 1rem = 1080 / 10 = 108px 。其换算方式为:

const px2rem = function(px, rem = 108) {
    let remVal = parseFloat(px) / rem;
    if (typeof px === "string" && px.match(/px$/)) { 
        remVal += 'rem';
    }

    return remVal;
}

比如,设计方案稿中有1个照片尺寸为 460x210 ,相对性网页页面部位 top: 321px; left: 70; 。依照如上换算方法,获得该元素最后的 css 款式应为:

.img_demo {
    position: absolute;
    background-size: cover;
    background-image: url('demo.png');
    top: 2.97222rem;
    left: 0.64814rem;
    width: 4.25926rem;
    height: 1.94444rem;
}

2.3 rem 合理布局计划方案的开发设计方法

根据以上方式,rem 合理布局计划方案就获得了完成。可是手动式测算 rem 的赋值明显不实际。

根据 less/sass 预解决专用工具,大家只必须设定 mixins 方式,随后依照设计方案稿的具体尺寸来赋值便可。以 less 为例,mixins 参照以下:

// px 转 rem
.px2rem(@px, @attr: 'width', @rem: 108rem) {
    @{attr}: (@px / @rem);
}

.px2remTLWH(@top, @left, @width, @height, @rem: 108rem) {
    .px2rem(@top, top, @rem);
    .px2rem(@left, left, @rem);
    .px2rem(@width, width, @rem);
    .px2rem(@height, height, @rem);
}

对于前文的示例元素,css 款式能够这样来写:

.img_demo {
    position: absolute;
    background-size: cover;
    background-image: url('demo.png');
    .px2remTLWH(321, 70, 460, 210);
}

这里,宽和高能够立即根据设计方案稿輸出的照片元素尺寸载入到;top/left 的赋值,能够根据在 Photoshop 中挪动参照线精准定位元素迅速获得。

2.4 字体样式应用 px 为企业

字体样式应用 rem 等比放缩会出現显示信息上的难题,只必须对于性应用新闻媒体查寻设定几种尺寸便可。

示例参照:

// 字体样式回应式
@media screen and (max-width: 321px) {
    body {
        font-size: 13px;
    }
}

@media screen and (min-width: 321px) and (max-width: 400px) {
    body {
        font-size: 14px;
    }
}

@media screen and (min-width: 400px) {
    body {
        font-size: 16px;
    }
}

以上便是本文的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多适用脚本制作之家。



在线客服

关闭

客户服务热线
4008-888-888


点击这里给我发消息 在线客服

点击这里给我发消息 在线客服