随着互联网技术的发展,网络终端越来越丰富,从最早的桌面设备到现在丰富的桌面+平板+手机端,为了适应各种不同的屏幕,但是在各个端都开发各自不同的站点会让开发资源大大的浪费,可复用性及差,这样一来响应式的网站设计应用而生。那么如何才能做到响应式,如何才能让同样的代码在不用设备上都有更好的交互体验呢?让我们看看具体如何实践:
- 屏幕尺寸定义
- 媒体查询
- 栅格系统
- 响应式字体
- 响应式尺寸
- 响应式组件
首先,我们要定义好什么样的尺寸是桌面端、什么样的尺寸是平板、什么样的尺寸是手机端,我们需要参考大量的数据来做一个权衡的定义,结果如下表:
设备 | 屏幕大小 | 描述 |
---|---|---|
手机 | < 568px | |
大手机 | ≥ 568px | |
平板 | ≥ 768px | |
桌面 | ≥ 1024px | |
大桌面 | ≥ 1280px |
参考:https://material.io/devices/
这样一来,我们可以通过在不同的尺寸下设置不同的样式来达到响应式的效果,但是这种变化是需要有一定的规则的,不然在管理和维护上是灾难。
CSS3 加入了媒体查询功能,让样式可以识别不同的设备甚至是屏幕大小,有了这一功能后,让我们应对不同屏幕样式的问题上也变得简单起来。
以下是一个简单的媒体查询样式写法,它可以让 <body>
标签下的字体在屏幕宽度在 568px
以下的设备字体只有 14px
,而超过 568px
的屏幕字体大小为 16px
。由此一来,字体会随着屏幕的大小而变化:
body {
font-size: 16px;
}
@media screen and (max-width: 568px) {
body {
font-size: 14px;
}
}
更多媒体查询的相关知识可以查看:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Media_queries
有了媒体查询后,我们可以在前面定义好的尺寸中编写适合屏幕大小的响应式 CSS。
关键词 | CSS 媒体查询 | 适用于 | Class |
---|---|---|---|
- | - | 所有 | .* |
xs | @media screen and (max-width: 35.4em) | < 568px | 暂无 |
sm | @media screen and (min-width: 35.5em) | ≥ 568px | .*-sm |
md | @media screen and (min-width: 48em) | ≥ 768px | .*-md |
lg | @media screen and (min-width: 64em) | ≥ 1024px | .*-lg |
xl | @media screen and (min-width: 80em) | ≥ 1280px | .*-xl |
栅格系统是解决响应式布局的一套样式系统,通常有这样几种类型的栅格系统:10 等份、12 等份、24 等份,实现方式主要有两种:百分比和 flex
,在 CSS3 普及不大的年代通常采用百分比,现在绝大多数现代浏览器已经支持 flex
布局,推荐使用。
UI 必须在栅格系统中设计并符合栅格系统的规则,整体布局内的组件也需要符合栅格系统的规范。这样一来布局都会随着屏幕大小而调整,并且保证不同尺寸的最佳体验。
以下是 pure
框架的使用方式,其他响应式样式框架也差不多:
<div class="pure-g">
<div class="pure-u-1-3"> ... </div>
<div class="pure-u-1-3"> ... </div>
<div class="pure-u-1-3"> ... </div>
</div>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-3"> ... </div>
<div class="pure-u-1 pure-u-md-1-3"> ... </div>
<div class="pure-u-1 pure-u-md-1-3"> ... </div>
</div>
<div class="pure-g pure-g-span-1-24">
<div class="pure-u-1 pure-u-md-1-3">
<div class="pure-span-1-24"> ... </div>
</div>
<div class="pure-u-1 pure-u-md-1-3">
<div class="pure-span-1-24"> ... </div>
</div>
<div class="pure-u-1 pure-u-md-1-3">
<div class="pure-span-1-24"> ... </div>
</div>
</div>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-3">
<div class="offset-1-24"> ... </div>
</div>
<div class="pure-u-1 pure-u-md-1-3">
<div class="offset-1-24"> ... </div>
</div>
<div class="pure-u-1 pure-u-md-1-3">
<div class="offset-1-24"> ... </div>
</div>
</div>
对于字体的解决方案,我们也有一套规则:
- px:字体在任何设备上大小都保持一致,此时用 px
- 正文
- 注释、解释
- rem:字体在不同设备上大小不一样时,采用 rem,rem 在每个不同的屏幕大小之间的换算关系参考下表
- 标题
关键词 | 屏幕大小 | rem = px |
---|---|---|
xs | < 568px | 1rem = 8px |
sm | ≥ 568px | 1rem = 8px |
md | ≥ 768px | 1rem = 10px |
lg | ≥ 1024px | 1rem = 12px |
xl | ≥ 1280px | 1rem = 12px |
同: 响应式字体
当然对于非常特殊的组件,我们需要特殊对待,它们在桌面端和移动端相差太大,我们要采用组件的方式将复杂的逻辑封装进去,对外暴露相同的接口,让使用者在业务开发中不用考虑多个屏幕的适配问题:
- 图片浏览组件
- 对话框
- 导航
- 表单
- ...
以下是响应式设计所遵循的 9 大原则,我们会在以后的文章中一一介绍
- 响应式 vs 自适应网页设计
- 内容流动
- 相对单位
- 断点
- 最大值和最小值
- 嵌套对象
- Mobile 优先,还是 Desktop 优先
- 网页字体 vs 系统字体
- 位图 vs 矢量图
参考:http://blog.froont.com/9-basic-principles-of-responsive-web-design/
响应式设计并不是一件非常困难的事情,需要我们定义好规则,让开发和设计都遵循这一规则,化繁为简,让开发更佳高效。