实现响应式网页设计
@
为什么需要响应式网页
随着网页数量和质量的上升,以及设备种类和数量的增加,不同设备查看不同网页导致的缩放问题、排版问题等一系列前端问题越发明显。
想要解决他们,我们可以为不同类型的设备编写不同样式的代码,做不同版本的测试。
然而这样做有两个弊端:
- 工作量过大
- 同种类型设备的尺寸相差也可能很大,有时尽管专门设计了对应版本,依然无法保证每个用户的设备都能较好适配
因此我们需要使用响应式网页来解决这个问题,通过设备自适应解决排版问题而非程序员编写对应代码适应设备,这样一来就能减少工作量,同时保证绝大多数设备都能很好适配
什么是响应式网页
利用 CSS 和 JavaScript 自动根据设备屏幕尺寸调整页面的布局和样式的网页,主要解决固定
宽度和影响布局的元素的问题
如何实现响应式网页
1. 设置前置 meta 元素
<meta name="viewport" content="width=device-width, initial-scale=1.0" >
设置 name 属性值为 viewport,content 中的内容意味设置宽度为设备宽度,缩放比例为1(不缩放),因此移动设备查看 PC 网页时就不会缩放的很小,而是原始比例显示
2. 设置了固定宽度的区域
对于这类区域,有时会出现横向滚动条,很不方便
因此,我们可以使用百分比宽度,使其根据浏览器可视区域自动调整尺寸
即 width = 100% 或 max-width = 80%
3. 使用布局的区域
gird 布局默认竖向,不会产生问题,但是如果设置多列布局,且每列浮动宽度如 fr,那么就会导致每列过小。
此时可以通过 repeat() 和 minmax() 函数来实现,当容器最后的空间不足以容纳列的最小宽度时,换行。
flex 布局也有类似的问题,但 flex 默认就是横向,但是可以更简单的使用 wrap 和设置最小宽度的方式实现折行以及扩展
4. 图片
在 PC 端,我们可以简单的使用 width = 100% 来保证布局的美观大方,但这样一来,在移动端显示时就会导致图片过小,而且纵横比相反。
我们可以使用 img 标签的 srcset 属性和 sizes 属性来根据最大宽度和像素密度选择合适的最大宽度图片路径
<img src="../image-300.png"
srcset=" ../image-1240.png 1240w,
../image-600.png, 600w
../image-300.png, 300w
sizes="(max-width : 400px) 300px, (max-width : 900px) 600px, 1240px"/>
我们也可以使用 picture 标签和 source 标签,在其中设置 media 属性和 srcset 属性,根据显示屏尺寸选择合适的图片,进行路径选择以及渲染
使用一个 img 标签进行保底图片,以免出现无图加载的情况
<picture>
<source media="(max-width : 400px)" srcset="../image-300.png" />
<source media="(max-width : 900px)" srcset="../image-600.png" />
<img src="../image-1240.png" />
</picture>
5. 字体
比较建议使用浮动单位进行调整,比如 em, rem , vw
但是注意,使用 vw 时最好加一个保底数值,以免页面宽度过小时字体也会变得非常小:
h1 {
font-size : calc(2rem + 2vw);
}
我们也可以选择用 @media() 根据不同设备大小选择不同的字体大小:
@media (max-width : 900px) {
h1 {font-size : 3rem;}
}
@media (max-width : 700px) {
h1 {font-size : 2rem;}
}