美文网首页
响应式布局&自适应布局

响应式布局&自适应布局

作者: yuhuan121 | 来源:发表于2018-07-01 17:14 被阅读0次

    首先两种的方式的解决问题是不一样的。

    宽度自适应

    是为了解决如何才能在不同大小的设备上呈现相同的网页。手机的屏幕比较小,宽度通常在500像素以下,pc的像素一般在1000像素以上。因此就有人想出了一个办法,能不能"一次设计,普遍适用",让同一张网页自动适应不同大小的屏幕,根据屏幕的宽度,自动调节网页的内容大小,但是无论怎么样子,他们的主体的内容和布局没有变化。核心是使用rem代替绝对单位px。

    自适应还是暴露出一个问题,如果屏幕太小,即使网页能够根据屏幕大小进行适配,但是会感觉在小屏幕上查看,内容过于拥挤,响应式正是为了解决这个问题而衍生出来的概念。它可以自动识别屏幕宽度、并做出相应调整的网页设计,布局和展示的内容可能会有所变动。

    响应式Web设计

    让一个网站同时适配多种设备和多个屏幕,可以让网站的布局和功能随用户的使用环境(屏幕大小、输入方式、设备/浏览器能力)而变化。核心是使用媒体查询相对于视口大小应用CSS规则。

    响应式的概念应该覆盖了自适应(因为可以使用rem代替绝对单位px+媒体查询),而且涵盖的内容更多。

    自适应实现方式

    1. 首先在网页代码的头部,加入一行viewport元标签。

     <meta name="viewport" content="width=device-width, initial-scale=1" /> 
    

    viewport是网页默认的宽度和高度,上面这行代码的意思是,网页宽度默认等于屏幕宽度(width=device-width),原始缩放比例(initial-scale=1)为1.0,即网页初始大小占屏幕面积的100%。

    2. 使用rem代替绝对单位px

    动态 rem是针对移动端页面的适配方法。例如手机淘宝 在移动端宽度不适合再用固定宽度px,我们希望整体等比缩放。

    rem是CSS3新增的一个相对单位(root em,根em),相对的只是HTML根元素(1rem=html font size)。通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应(em也是相对长度单位,但会继承父级元素的字体大小)。

    注意:rem是相对于根节点html的font-size的倍数,浏览器对font-size值有限制,一般font-size最小值默认为12。

    动态rem方案

    1. meta:vp禁止缩放
      <meta name="viewport" content="width=device-width, height=device-height, inital-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
    2. document.documentElement.clientWidth动态获取页面宽度width
    3. 赋给html的font-size,即拼接成html{font-size:'+ width/10 +'px;}
    4. 10rem==页面宽度width
    5. 所有单位都用rem == 所有长度都以页面的宽度为基准
      示例

    3. 使用视口单位(Viewport units) vw/vh

    rem单位来实现适配,但是它还需要内嵌一段脚本去动态计算跟元素大小。
    那有没有一个单位不需要JS和CSS耦合在一起的单位?答案是有的,就是vw/vh。

    视口单位(Viewport units)

    视口单位中的“视口”,桌面端指的是浏览器的可视区域;移动端指的就是Viewport中的Layout Viewport。

    单位 解释
    vw 1vw = 视口宽度的1%
    vh 1vh = 视口高度的1%
    vmin 选取vw和vh中最小的那个
    vmax 选取vw和vh中最大的那个

    vh/vw与%区别

    vh/vw与%区别在于:

    单位 依赖于
    % 元素的祖先元素
    vh/vw 视口的尺寸

    自适应基础上的响应式页面

    3. 媒体查询

    目前一般常见的实现响应式有两种方法,一种是利用媒体查询,另外一种是bootstrap下的栅格布局。

    媒体查询,即 @media 查询,可以针对不同的屏幕尺寸设置不同的样式,当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。

    媒体查询示例

    如果页面宽度小于 300 像素,则修改body的背景颜色为红色:

    @media screen and (max-width: 300px) {
        body {
             background-color:red;
        }
    }
    

    如果页面宽度大于 300 像素并且小于600像素,则修改body的背景颜色为绿色:

    @media screen and (min-width: 300px) and (max-width:600px) {
        body {
             background-color:green;
        }
    }
    

    如果页面宽度大于 600 像素,则修改body的背景颜色为蓝色:

    @media screen and (min-width: 600px) {
        body {
             background-color:blue;
        }
    }
    

    还有一种响应式是使用绝对宽度px + 媒体查询,那么对于宽度不同的手机,显示页面内容的宽度仍然一样,内容居中,只是两边留白宽度不同。

    4. 使用Flex弹性布局

    布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。

    Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。可以简便、完整、响应式地实现各种页面布局。
    具体用法

    一个使用rem实现自适应+媒体查询实现响应式+使用Flex弹性布局的例子

    相关文章

      网友评论

          本文标题:响应式布局&自适应布局

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