• 使用rem做页面适配


    使用REM会出现什么问题,有没有PX会比REM更好的情况
    因为在大多数场景下,用户使用更大的屏幕,是想看到更多的内容,而不是更大的字。所谓大多数场景,指的是除去以图片为主的纯展示,以及游戏等非主流的 Web 应用场景,在上述这些情况下使用 rem 甚至 vw 都无可厚非。但是如果在常规的以文字信息为主的页面中也大量使用 rem 这种黑科技,只有两种情况:设计师或者前端偷懒,懒得去想如何适配不同的屏幕,直接缩放了事;前端工程师还没有掌握 flex 等更优秀的布局方案。By the way,你们敢直视大量使用 rem 的页面在 PC 上的惨状吗?

    css 中单位很多 %、px、em、rem,以及比较新的vw、vh等,每个单位都有特定的用途,而我呢,往往不知道什么时候该用什么,调重点总结一下

    使用px,结合Media Query进行阶梯式的适配;
    使用%,按百分比自适应布局;
    使用rem,结合html元素的font-size来根据屏幕宽度适配;
    使用vw、vh,直接根据视口宽高适配。
    在这些大前提下,对小的细节做微调。比如使用px的时候,可能在小屏幕中,要对某个容器进行transform:scale(.8),适当缩小处理。使用rem的时候,需要固定页面的左右间距为10px等。

    开发总结:

    在世界稿要求固定尺寸的元素上使用px。比如1px线,4px的圆角边框。
    在字号、(大多数)间距上使用rem。
    慎用em。
    %、vw、vh都是根据参考对象按比例适配

    %是参考父容器,vw和vh是参考视口。

    为什么慎用em?
    em会叠加计算。

    //HTML

    abc
    def
    abc

    //CSS
    span{font-size:1.5em;}
    效果

    em的计算原理,它是根据当前元素的字号按比例计算的。

    外层span的字号是16px(浏览器默认值),1.5em之后是24px。由于字号是继承的,导致内部span 的字号继承过来是24px,再经过1.5em之后就成了36px。

    所以,就算要用em的话,尽量不要用在继承属性(font-size)上,除非你真的清楚自己在做什么!

    比如你想根据字号自动调整字符间距,可以这么做:

    .content{
    font-size:1rem;
    letter-spacing:.03em;
    }
    rem VS. px
    px的性质决定了它只能用于固定尺寸。

    除了固定尺寸用px,其他大部分情况都可以用rem

    现在考虑一个实际的开发场景,一般来说都是先有视觉稿才能开发。两种情况:一、假设视觉稿iPhone 6和iPhone 6+,及其他尺寸各出了一份,那你就按照Media Query去适配。二、设计师只给你一种机型的视觉稿,以iPhone 6为例,750×1334,2倍屏下转换后是375×667。

    第一种情况,通过Media Query断点适配

    第二种,要根据宽度为375px的稿子,扩展到适配任意宽度的屏幕

    视觉稿如下:

    测量后主要参数如下:

    页面间距10px
    文字间距10px,字号16px
    A高度100px
    B高度50px,上间距30px
    HTML结构和CSS

    A.第一段内容
    B.第二段内容
    body{ padding: 10px; background-color: #f6f0ee; } .box{ padding: 10px; font-size: 16px; color: #fff; box-sizing: border-box; } .box-1{ height: 100px; background-color: #1daedc; } .box-2{ margin-top: 30px; height: 50px; background-color: #ddbe97; } 然后视觉开始提要求,大屏上要把字体放大、间距放大。

    一个选择:确认要适配哪种屏幕,字号是多少,间距是多少。技术上再通过Media Query微调

    @media(min-414px){

    }
    另一个选择:首先按rem作为字号,容器高度,外间距的单位。那么代码改为:

    html{
    font-size: 16px;
    }
    body{
    padding: 10px;
    background-color: #f6f0ee;
    }
    .box{
    padding: 10px;
    font-size: 1rem;
    color: #fff;
    box-sizing: border-box;
    }
    .box-1{
    height: 6.25rem;
    background-color: #1daedc;
    }
    .box-2{
    margin-top: 1.875rem;
    height: 3.125rem;
    background-color: #ddbe97;
    }
    通过Media Query改变iPhone 6+ 的html 字号,其他元素的属性就会自动变化

    @media(min-414px){
    html{
    font-size:17.664px;
    }
    }
    17.664 = 414 * 16 / 375.

    由此可以得到html的font-size计算公式为:font-size = deviceWidth * 16 /375;

    前提是你的html有这条meta属性

    所以rem 有个明显的有点,它可以通过少量的代码解决大部分问题。

    细节问题,用Media Query 微调

    关于rem兼容性 PC端仅在IE9+支持。vw和vh一样,如果要考虑IE8兼容,那只能用px。移动端支持

    html 的font-size该如何设置
    由于(大部分)浏览器的默认字号为16px,所以一般来说把html的font-size归一化为16px是比较合适的实践方式。

    常用的Media Query断点(以iPhone 6为基准)

    @media only screen and (min- 320px) {
    html{
    font-size: 13.65px;
    }
    }

    @media only screen and (min- 360px) {
    html{
    font-size: 15.36px;
    }
    }

    @media only screen and (min- 375px) {
    html{
    font-size: 16px;
    }
    }

    @media only screen and (min- 390px) {
    html{
    font-size: 16.64px;
    }
    }

    @media only screen and (min- 414px) {
    html{
    font-size: 17.66px;
    }
    }

    @media only screen and (min- 640px) {
    html{
    font-size: 27.31px;
    }
    }
    大家可能还会看到一些文章中建议把html字号设置成62.5%

    html{
    font-size:62.5%;
    }
    因为刚提到浏览器默认的字号是16px,因此换算成百分比就是62.5% = 1 / 16

    那为什么要用百分比呢?因为考虑到辅助功能和浏览器设置。对于部分用户,可能会在手机或浏览器的设置中增大手机字号,这意味着对方平时看字是很费力的,所以他要放大。那把html的字号设置成百分比就很贴心了,会随着手机设置改变页面的字号

    但是呢,就算你看到用62.5%的情况,有些间距也是不合理的,都做的不太好,特别是把文案做到图片上,对字号根本不敏感,所以缩放一定要考虑到位

    另外,针对本小节开头用16px 的情况,这里在提供一招

    用Media Query的缺点是什么?它是分段函数,对于宽度在[320,360]区间内的屏幕,会适用同一套方案。最完美的应该是线性函数,用vw即可

    html{
    font-size:4.266667vw;
    }
    用一行代码代替之前6个冗长的Media Query,还不错吧

    如何提高rem的可读性
    当你知道html的font-size怎么设置后,肯定想问,难道我每次写代码时,还得做个除法,把rem计算出来吗

    如果用到CSS预处理,这事情就好办了,以LESS为例,两部操作如下

    // 1.按iPhone 6的视觉稿,基准字号为16px,因此可以设置一个LESS变量。
    @px:16rem;

    //2.通过LESS内置的除法自动运算。比如用到16px的字号时,写成16/@px即可,最后会计算成1rem

    .example{
    font-size:16/@px;
    margin:20/@px 0;
    padding:20/@px 10/@px;
    }
    小结
    本文介绍了rem的适配方式,如何设置html的font-size,如何更快的书写rem 的值

  • 相关阅读:
    仿苹果菜单的效果
    不用系统自带的复选框,单选按钮,选择框的样式,该怎么做
    js面向对象(三)---组件开发
    JS面向对象(二)---继承
    js面向对象(一)---基本的概念、属性、方法
    移动端新建html页面
    《程序员思维修炼》读后摘录
    做一个简单的贪吃蛇游戏
    做一个简单的遮罩层
    在不同设备上控制元素
  • 原文地址:https://www.cnblogs.com/dillonmei/p/12578348.html
Copyright © 2020-2023  润新知