美文网首页
几种布局方案的总结

几种布局方案的总结

作者: 柏丘君 | 来源:发表于2018-10-11 23:01 被阅读0次

在进行页面布局的时候,经常将自适应布局和响应式布局弄混,还有对流式布局,弹性布局等概念模糊。为了弄清这些概念,我在网上查阅了一些文章,然后整理成文。

常用布局方案

常用对布局方案有以下几种:

  • 静态布局
  • 流式布局
  • 自适应布局
  • 响应式布局
  • 弹性布局

下面就依次对这些布局方案进行介绍,并分析它们对使用场景。

静态布局

静态布局就是固定宽度布局,或者说使用绝对宽度布局。最开始是应用在 PC 站点中。设计师给出一个固定宽度(如 980px)对设计稿,然后前端工程师按照设计稿中标注的尺寸进行布局。
这样的布局通常有一个全屏的 Header 和 Footer,内容区域宽度固定并居中展示,两侧自动留白。


PC端静态布局.png

上面就是 PC 端静态布局的一个例子,页面的 HTML 代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    body{
      margin:0;
    }
    header,footer{
      padding:20px;
      background:orange;
    }
    .main{
      min-width: 980px;
      background:peachpuff;
      margin:0 auto;
      min-height: 300px;
    }
  </style>
</head>
<body>
  <header>Header</header>
  <section class="main">Section</section>
  <footer>Footer</footer>
</body>
</html>

在 PC 端,使用 min-width 属性对内容区域的最小宽度进行限制,当屏幕宽度大于内容区域最小宽度时全部展示,当屏幕宽度小于内容区域最小宽度时会出现滚动条。

移动端的静态布局

除了在 PC 端使用静态布局以外,移动端也可以使用静态布局。通常,移动端会以 750 或者 640 的宽度做设计稿。在移动端使用静态布局时,可以完全按照设计稿的标注进行开发,采用绝对长度单位,在渲染时根据设备屏幕的宽度,自动计算视口的缩放,实现屏幕的适配。
下面是通过 JS 控制 viewport 缩放的例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
  <title>Document</title>
  <style>
    body{
      margin: 0;
    }
    header,footer{
      background: orange;
      padding:20px;
      font-size: 32px;
    }
    .main{
      font-size:32px;
      background:orchid;
      padding:40px;
    }
    .main div{
      width: 200px;
      height: 50px;
      background:olive;
    }
  </style>
  <script>
    const screenWidth = parseInt(window.screen.width);
    const scale = screenWidth / 750;
    const viewPortMeta = document.querySelector("meta[name='viewport']");
    const viewPortMetaContent = `width=device-width,initial-scale=${scale},user-scalable=no`;
    viewPortMeta.setAttribute("content",viewPortMetaContent)
  </script>
</head>
<body>
  <header>Header</header>
  <section class="main">
    <div>Section</div>
  </section>
  <footer>Footer</footer>
</body>
</html>

在模拟器中查看效果如下:

Galaxy S5.png
iPhoneX.png
以上就是在移动设备上采用静态布局的方案:根据设备的宽度动态计算 viewport 的缩放比例,需要使用 JS 控制 meta 标签的缩放值。
其实,不用 JS 控制缩放也可以完成同样的效果:将 viewport 宽度设置为和设计稿一致,让浏览器自动缩放:
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <meta name="viewport" content="width=750,user-scalable=no">
  <title>Document</title>
  <style>
    body{
      margin: 0;
    }
    header,footer{
      background: orange;
      padding:20px;
      font-size: 32px;
    }
    .main{
      font-size:32px;
      background:orchid;
      padding:40px;
    }
    .main div{
      width: 200px;
      height: 50px;
      background:olive;
    }
  </style>
</head>
<body>
  <header>Header</header>
  <section class="main">
    <div>Section</div>
  </section>
  <footer>Footer</footer>
</body>
</html>

由于我们没有设置 initial-scale 属性,仅将 viewport 的宽度设置为了设计稿的宽度 750,浏览器会自动将 viewport 缩放为适应屏幕的实际宽度。同时设置了 user-scalable=no 禁止了用户对视口缩放,实现起来非常简单。
以上就对 PC 端和移动端的静态布局方案进行了介绍,静态布局实现起来难度较小,对于 UI 的还原性也很好,开发效率高。下面介绍第二种布局方式:流式布局。

流式布局

以 PC 端的静态布局为例,静态布局的缺点在于对屏幕的适应性弱,当屏幕尺寸过大时,内容区的内容显的很小,当屏幕尺寸偏小时,又无法完全展示内容区,需要拖动滚动条。
流式布局,就是使用百分比代替静态布局中的绝对宽度,使得页面在不同尺寸的屏幕上保持比例一致。
流式布局一般对于宽度采用百分比,字体大小和高度采用固定长度。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
  <title>Document</title>
  <style>
    body{
      margin: 0;
    }
    header,footer{
      background: orange;
      padding:20px;
    }
    .main{
      background:orchid;
      padding:40px;
      width: 60%;
      margin: 0 auto;
    }
    .main div{
      width: 50%;
      background:olive;
    }
  </style>
</head>
<body>
  <header>Header</header>
  <section class="main">
    <div>Section</div>
  </section>
  <footer>Footer</footer>
</body>
</html>

下面是效果展示:


流式布局效果1.png
流式布局效果2.png
流式布局效果3.png

流式布局可以很方便的让页面在不同的屏幕宽度下保持相同的比例,但也有一些缺点:

  • 字体和高度的比例无法随屏幕大小缩放
  • 如果不对最小宽度进行限制,在较小宽度的时候,会导致内容溢出(上面图三)
  • 由于字体和高度无法随屏幕大小缩放,过大的屏幕宽度会导致布局看起来十分狭长

为了解决这几个缺点,在使用流式布局的时候,一般会设置元素的最小宽度,如果有需要的话,也可以设置元素的最大宽度。

自适应布局

自适应布局是为了对不同的设备,在展示上做更多的控制。首先,会为不同的设备(如手机,平板和 PC)设计布局,在这些设备上访问网站时,根据设备的类型(屏幕的宽度)加载不同的样式表。
举个例子,公司的官网,需要适配 PC 端和移动端,那么就对 PC 端写一套样式,对移动端写一套样式。用户浏览网站时,根据设备类型来加载不同的样式表,或者干脆准备两个域名,一个用于 PC 端,一个用于移动端,用户浏览网站时根据设备类型进行跳转。
自适应布局相比于静态布局或者流式布局的优势在于,自适应布局不是简单的在不同的设备上进行等比例的适配,而是可以做更多的定制。比如 PC 端的某些元素,在移动端不显示出来,PC 端和移动端采用不同的排版等。

响应式布局

和自适应一样的是,响应式布局也是为了针对不同的设备呈现不同的效果。和自适应不同的是,响应式布局着重在“响应”二字,即根据屏幕宽度变化,动态应用样式。
自适应布局会在用户访问网站时根据设备类型加载不同的样式表,对于不同类型的设备有不同的样式表。而响应式布局的样式表是在访问网站时就全部加载,在样式表中通过检测屏幕尺寸变化动态的应用样式。自适应布局和响应式布局都需要用到 CSS 的媒体查询。
自适应布局的好处是开发较为快速,要兼容某个新的设备,直接写一份新的样式即可,不用动老的样式文件,可以十分方便的“打补丁”,缺点是对于样式控制的粒度不够。
响应式布局的好处是对于样式的控制可以十分精细,缺点是控制不同设备布局的样式是写在一起的,开发和修改不太方便。

弹性布局

弹性布局是通过 rem 或者 em 单位,或者通过 vwvh 单位来进行布局。弹性布局可以看作是流式布局的增强版:不仅仅是宽度,对于字体和高度也可以在不同的屏幕上保持一致的比例。
弹性布局一般用于移动端中,但在 PC 端使用也没有毛病。
对于 rem 布局,一般将屏幕的宽度分为一百份(为了兼容 vw),每一份就是 1rem,将 <html></html> 元素的 font-size 设置为 1rem 的值,页面中的元素就可以根据跟元素的字号来布局了。举个例子,设备的宽度为 375px,那么可以将 <html></html> 元素的字号设置为 3.75px。如果 UI 的设计稿是 750px 的,设计稿上有个宽度为 75px 的元素,假如我们将设计稿看作是一个手机,将这个手机屏幕宽度的一百分之一作为 1rem(也即7.5px),那么这个元素的宽度就是 10rem。在写 css 时,将元素的宽度设置为 10rem:

div{
  width:10rem
}

vwvh 也是长度单位,1vw 表示屏幕宽度的百分之一,1vh 表示屏幕高度的百分之一,因此上面的样式也可以写为:

div{
  width:10vw
}

在某些浏览器上(如 Chrome),元素的字体不能太小,像上面我们将 <html></html> 元素的字号设置为 3.75px 可能不会生效。因此我们一般将跟元素的字体设置为屏幕宽度的十分之一。对于上例,我们将 <html></html> 的字号设置为 37.5px,那么元素的样式就是:

div{
  width:1rem
}

对于 rem 的计算,还有很多其他的手段,只要您设置好对应的转换关系即可。使用 vw 布局比 rem 布局方便快捷的多,省去了计算转换的步骤,推荐使用。

总结

本文对几种常见的布局方案进行了整理,并对这些方案的应用场景和优缺点进行了简要说明,了解了常用的布局方案,方便我们建立起布局的大局观,在写项目的时候,能够清楚的知道什么样的布局适应当前的项目。对于之前含混的概念,如自适应布局和响应式布局的区别也能做到良好的区分。
这些方案中,并没有那个方案是完美的,或者是最糟糕的。静态布局有静态布局的优势,响应式布局有响应式布局的优势。在实际的项目中,往往是将这些布局方案进行整合应用,取长补短,并非说用了静态布局,就不能再在页面中使用自适应布局了,这样的思维是错误的。灵活组合应用这些方案才能适应各式各样的需求,毕竟软件工程中没有银弹。

参考资料:
http://www.cnblogs.com/yanayana/p/7066948.html
https://www.zhihu.com/question/21679928
https://www.zhihu.com/question/32090605
http://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html
http://html-js.com/article/MobileWeb

完。

相关文章

  • 几种布局方案的总结

    在进行页面布局的时候,经常将自适应布局和响应式布局弄混,还有对流式布局,弹性布局等概念模糊。为了弄清这些概念,我在...

  • iOS 左文右图的按钮

    iOS 按钮默认布局方式是左图右文,但是有时候我们需要左文右图的布局。 下面总结了几种方案。要结论的同学直接看方案...

  • vue-移动端屏幕适配

    目前,方案有几种。以下的方案亲测有效。 引入淘宝开源的可伸缩布局方案 github开源地址https://gith...

  • CSS布局(不完全)总结

    CSS布局(不完全)总结 实现水平居中布局的几种方式 方法一: 通过以下CSS代码实现水平居中布局 方法二: 通过...

  • 2019-01-26

    一、总结一下CSS的几种布局以及实现方法 左右布局 左中右 水平居中 垂直居中 1. 左右布局 左右布局很多种实现...

  • 经典页面布局学习

    总结几种常用的页面布局 上中下布局 页面运行效果: 左右两栏布局 页面运行效果: 左右两栏纯浮动实现宽度固定,不能...

  • 【整理】CSS布局方案

    我们在日常开发中经常遇到布局问题,下面罗列几种常用的css布局方案话不多说,上代码! 以下所有demo的源码链接:...

  • CSS的布局与居中

    今天就总结一下CSS中几种常用的布局方式和居中方式。 1. 左右布局 网页布局常见左右两列布局,左侧栏是固定宽度。...

  • 简直是神了!iOS开发中利用setFrame快速对视图布局

    前言 iOS开发布局有多套方案可以实现,大致有几种方法。NSLayoutConstraint, Masony, S...

  • 常见自适应布局/等分布局/九宫格布局

    自适应布局/等分布局/九宫格布局是面试常考的内容,通常要求掌握几种实现方法,以下是我自己准备秋招总结的布局,方便记...

网友评论

      本文标题:几种布局方案的总结

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