响应式

作者: 懂会悟 | 来源:发表于2020-09-16 08:23 被阅读0次

    1、引言

    响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本(同一页面在不同屏幕尺寸下有不同的布局)。这个概念是为解决移动互联网浏览而诞生的


    2、响应式布局解决方案

    • 媒体查询

    媒体查询可以让我们针对不同的媒体类型定义不同的样式,当随着屏幕宽度增大或减小的时候,后面的样式会覆盖前面的样式

    常见的分隔点

    • 768
    • 992
    • 1200
    • 1920

    分隔点不是一成不变的,要随着项目的实际需求的变化而变化,移动端优先使用min-width,pc端优先使用max-width

    /* iphone6 7 8 */
    body {
        background-color: yellow;
    }
    /* iphone 5 */
    @media screen and (max-width: 320px) {
        body {
          background-color: red;
        }
    }
    /* iphoneX */
    @media screen and (min-width: 375px) and (-webkit-device-pixel-ratio: 3) {
        body {
          background-color: #0FF000;
        }
    }
    /* iphone6 7 8 plus */
    @media screen and (min-width: 414px) {
        body {
          background-color: blue;
        }
    }
    /* ipad */
    @media screen and (min-width: 768px) {
        body {
          background-color: green;
        }
    }
    /* ipad pro */
    @media screen and (min-width: 1024px) {
        body {
          background-color: #FF00FF;
        }
    }
    /* pc */
    @media screen and (min-width: 1100px) {
        body {
          background-color: black;
        }
    }
    
    
    /* pc width > 1024px */
        body {
            background-color: yellow;
        }
    /* ipad pro */
    @media screen and (max-width: 1024px) {
        body {
            background-color: #FF00FF;
        }
    }
    /* ipad */
    @media screen and (max-width: 768px) {
        body {
            background-color: green;
        }
    }
    /* iphone6 7 8 plus */
    @media screen and (max-width: 414px) {
        body {
            background-color: blue;
        }
    }
    /* iphoneX */
    @media screen and (max-width: 375px) and (-webkit-device-pixel-ratio: 3) {
        body {
            background-color: #0FF000;
        }
    }
    /* iphone6 7 8 */
    @media screen and (max-width: 375px) and (-webkit-device-pixel-ratio: 2) {
        body {
            background-color: #0FF000;
        }
    }
    /* iphone5 */
    @media screen and (max-width: 320px) {
        body {
            background-color: #0FF000;
        }
    }
    
    

    3、百分比

    通过百分比单位,可以使得浏览器中组件的宽和高随着浏览器的高度的变化而变化,从而实现响应式的效果,但是子元素不同属性的百分比的参照物是不同的

    • width相对于父元素的width
    • height相对于父元素的height
    • 子元素的top、bottom、left、right,则相对于直接非static定位(默认定位)的父元素的高度
    • 子元素的padding、margin都相对于直接父亲元素的width,而与父元素的height无关
    • border-radius、translate、background-size等都是相对于自身的宽度

    显然使用百分比进行响应式布局计算会分繁琐,因此在布局时要谨慎使用


    4、rem

    rem 是CSS3新增的单位,并且移动端的支持度很高,Android2.x+,ios5+都支持,rem单位是相对于根元素html的font-size来决定大小的,根元素的font-size相当于提供了一个基准

    当页面的size发生变化时,只需要改变font-size的值,那么以rem为固定单位的元素的大小也会发生响应的变化。因此,如果通过rem来实现响应式的布局,只需要根据视图容器的大小,动态的改变font-size即可

    rem布局的思想
    • 一般不要给元素设置具体的宽度,但是对于一些小图标可以设定具体宽度值
    • 高度值可以设置固定值,设计稿有多大,我们就严格有多大
    • 所有设置的固定值都用rem做单位(首先在HTML总设置一个基准值:px和rem的对应比例,然后在效果图上获取px值,布局的时候转化为rem值)
    • js获取真实屏幕的宽度,让其除以设计稿的宽度,算出比例,把之前的基准值按照比例进行重新的设定,这样项目就可以在移动端自适应了
    • 1rem等于html根元素设定的font-size的px值
    /* pc width > 1100px */
    html{ font-size: 100%;}
    body {
        background-color: yellow;
        font-size: 1.5rem;
    }
    /* ipad pro */
    @media screen and (max-width: 1024px) {
        body {
          background-color: #FF00FF;
          font-size: 1.4rem;
        }
    }
    /* ipad */
    @media screen and (max-width: 768px) {
        body {
          background-color: green;
          font-size: 1.3rem;
        }
    }
    /* iphone6 7 8 plus */
    @media screen and (max-width: 414px) {
        body {
          background-color: blue;
          font-size: 1.25rem;
        }
    }
    /* iphoneX */
    @media screen and (max-width: 375px) and (-webkit-device-pixel-ratio: 3) {
        body {
          background-color: #0FF000;
          font-size: 1.125rem;
        }
    }
    /* iphone6 7 8 */
    @media screen and (max-width: 375px) and (-webkit-device-pixel-ratio: 2) {
        body {
          background-color: #0FF000;
          font-size: 1rem;
        }
    }
    /* iphone5 */
    @media screen and (max-width: 320px) {
        body {
          background-color: #0FF000;
          font-size: 0.75rem;
        }
    }
    
    
    cssrem插件

    手动转换px与rem不仅效率低而且容易出错,因此推荐vscode 的cssrem 插件

    • cssrem插件是vscode ide 的一款插件,主要实现了在书写代码的时候直接将px转成rem

    5、总结

    在实际项目中,我们可能需要综合上面的方案,要点如下

    • 设置viewport
    • 媒体查询
    • 字体的适配(rem)
    • 百分比布局
    • 图片的适配
    • 结合flex弹性布局

    参考

    相关文章

      网友评论

          本文标题:响应式

          本文链接:https://www.haomeiwen.com/subject/qjkosktx.html