响应式布局
本文最后更新于:8 个月前
响应式布局与几种相似布局介绍,主流的端点方案,响应式开发的两种优先策略、响应式的实现方案,百分比属性的参考标的
响应式布局
一、简介
1. 什么是响应式布局
响应式布局就是:通过检测视口的类型、分辨率,针对不同客户端应用不同的样式,来展现不同的布局和内容。
2. vs 其它布局
除了 「响应式布局」,与之相似的还有另外一种叫 「自适应布局」,网上有说法认为两者相同,也有说法认为两者不同(这里我们假定两者相同)。除了这两个之后,还有一些比较相似的布局
流式布局:是页面中元素的宽度按照屏幕分辨率自动进行适配调整,也就是我们常说的适配,它可以保证当前屏幕分辨率发生改变的时候,页面中的元素大小也可以跟着改变
瀑布流布局:多行不等高排列,根据内容原比例自动调节高度
弹性布局:CSS3 中的一种新的布局模式(Flex Box),可以简便、完整、响应式地实现各种页面布局。
以上定义并非唯一答案,事实上,大家对于不同”布局“的理解有有诸多差异。但想一想,分清楚什么布局是什么布局,这件事并没有多大意义,就好像喝一杯可乐的时候去纠结它是百事可乐还是可口可乐一样,不管它叫什么,都不妨碍它们都是碳酸饮料这个本质。同理,在面对不同的布局需求时,我们只需要知道用哪种方式能够合理地实现就可以了,至于这种方式叫什么,完全不妨碍我们实现需求。
3. 响应式布局的要点
- 设置viewport
- 媒体查询
- 尺寸自适应
- 图片的适配
- 结合成型方案
二、断点方案
通过「CSS媒体查询」,我们可以为不同的媒体类型定义不同的样式(通常是为不同设备的屏幕定义不同的样式)。但是该如何区分不同设备的屏幕呢?目前主流的一种区分方式是通过屏幕分辨率(宽度、高度)来进行区分。那么又该如何定义不同设备的屏幕宽度范围呢?这里我们参考市场的成熟方案——断点 · Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 (bootcss.com)
Breakpoint | Class infix | Dimensions |
---|---|---|
Extra small 手机 | None | <576px |
Small 平板 | sm |
≥576px |
Medium 平板 | md |
≥768px |
Large 普通PC屏幕 | lg |
≥992px |
Extra large 高分辨率PC屏幕 | xl |
≥1200px |
Ant-design的端点方案就是参照了 bootstrap 的这个方案
三、优先策略
我们书写样式总要有一个先后顺序,比如先基于PC屏幕写一套基本样式,然后再使用CSS媒体查询为PC端修改布局方式,这种就叫「PC优先」。同理,我们可以先基于移动端(手机or平板)写一套基本样式,然后再使用CSS媒体查询,为PC端做样式修改进行适配,这种就叫「移动端优先」。
这两种优先策略没有本质区别,所区别的只是写法。下面通过例子进行对比
1. PC优先
1 |
|
当屏幕宽度小于992px时,第二段样式会覆盖第一段样式,背景颜色从red变成green;当屏幕宽度小于576px时,第三段样式会覆盖前两段样式,背景颜色变成blue。
2. 移动端优先
1 |
|
四、实现方案
1. CSS媒体查询
这是实现响应式布局最本质的方法,也是最灵活的方案。
详细的使用方法看这篇:CSS(七)媒体查询 - timegogo
这里简要介绍一下3种使用方式:
第一种是直接在CSS文件中使用,也是最常见的方式
1 |
|
第二种是与@import
结合使用
1 |
|
第三种是结合<link>
标签使用
1 |
|
2. 成型方案
比如 Ant-design 提供了 栅格系统,结合:xs
、:sm
、lg
等属性就可以用来实现响应式布局
1 |
|
五、尺寸自适应
1. 百分比
标题就不叫百分比布局了,要不然又要多一种布局了(晕)
在定义元素的width
、height
、padding
、margin
时,我们经常使用百分比的方式,但是这里的百分比究竟是相对于 哪个元素 的 哪个属性 而言的呢?
属性 | 相对于 |
---|---|
height | 直接父元素的 height |
width | 直接父元素的 width |
padding | 直接父元素的 width |
margin | 直接父元素的 width |
border-radius | 相对于自身 |
translate | 相对于自身 |
background-size | 相对于自身 |
top 和 bottom | 非static定位的父元素的 height |
left 和 right | 非static定位的父元素的 width |
2. vw 和 vh
css3
中引入了一个新的单位vw/vh
,与视图窗口有关,vw
表示相对于视图窗口的宽度,vh
表示相对于视图窗口高度
单位 | 含义 |
---|---|
vw | 相对于视窗的宽度,1vw 等于视口宽度的1%,即视窗宽度是100vw |
vh | 相对于视窗的高度,1vh 等于视口高度的1%,即视窗高度是100vh |
vmin | vw和vh中的较小值 |
vmax | vw和vh中的较大值 |