基于vw等viewport视区单位配合rem响应式排版和布局

如果要实现这种弹性自适应效果,目前主流的实现是通过设定根元素的font-size大小,具体元素或模块使用remem单位来实现。
一种是直接设定一个临界点字体大小,如:

html {
    font-size: 16px;
}
@media screen and (min-width: 600px) {
    html {
        font-size: 18px;
    }
}
@media screen and (min-width: 1000px) {
    html {
        font-size: 22px;
    }
}

还有一种就是使用JS在resize或者屏幕旋转的时候,动态修改root的font-size大小。

例如,我们希望浏览器宽度在600px~1000px变化的时候,html根元素的font-size大小是18px~22px之间对应变化的,则可以:

html { font-size: calc(18px + 4 * (100vw - 600px) / 400); }

苹果系统的Safari浏览器不认识上面的属性值(如下截图):
我们基础字体大小不使用像素单位,使用百分比单位即可

html { font-size: calc(112.5% + 4 * (100vw - 600px) / 400); }

根据实践,下面这段CSS是最好的基于remvmcalc实践代码::

html {
    font-size: 16px;
}

@media screen and (min-width: 375px) {
    html {
        /* iPhone6的375px尺寸作为16px基准,414px正好18px大小, 600 20px */
        font-size: calc(100% + 2 * (100vw - 375px) / 39);
        font-size: calc(16px + 2 * (100vw - 375px) / 39);
    }
}
@media screen and (min-width: 414px) {
    html {
        /* 414px-1000px每100像素宽字体增加1px(18px-22px) */
        font-size: calc(112.5% + 4 * (100vw - 414px) / 586);
        font-size: calc(18px + 4 * (100vw - 414px) / 586);
    }
}
@media screen and (min-width: 600px) {
    html {
        /* 600px-1000px每100像素宽字体增加1px(20px-24px) */
        font-size: calc(125% + 4 * (100vw - 600px) / 400);
        font-size: calc(20px + 4 * (100vw - 600px) / 400);
    }
}
@media screen and (min-width: 1000px) {
    html {
        /* 1000px往后是每100像素0.5px增加 */
        font-size: calc(137.5% + 6 * (100vw - 1000px) / 1000);
        font-size: calc(22px + 6 * (100vw - 1000px) / 1000);
    }
}

你可能感兴趣的:(基于vw等viewport视区单位配合rem响应式排版和布局)