前端响应式布局的优缺点
在前端开发的工作中,我们通常要处理响应式布局,针对响应式布局,我们通常会使用媒体查询或是Flex
布局的办法去处理,总体来说,前端去使用响应式布局是有利有弊的,我们先总结优点如下:
- 用户体验一致:响应式布局可以保证用户在不同的设备上获得一致的体验(包括
PC
,平板和手机) - 节约维护的时间成本:对于开发者来说,我们只需要维护一个版本的代码,就可以兼容每个设备的展示情况,这很大程度上节约了开发的时间成本。
- 适应未来设备:响应式布局只需要兼容一个范围内的设备,不需要针对每个不同的设备去调整代码,对于新出的设备,只要归在已划定的屏幕范围内,就能被兼容。
SEO
的优势:搜索引擎倾向于给予响应式网站更高的排名,因为这些网站会给用户更好的体验。
综上所述,响应式带给用户的体验感受好是毋庸置疑的,对于不同的响应式布局方法,他们的优点是共通的,但是他们也会带来一些缺点,接下来我们针对响应式布局的方法,分别阐述他们所带来的缺点和解决办法。
响应式布局的几种方法
一、 媒体查询
我们通常使用@media
来为不同尺寸的屏幕设置不同的css样式。常用参数如下:
属性名 | 作用 |
---|---|
device-width | 设备屏幕的宽度 |
device-height | 设置屏幕的高度 |
width、height | 浏览器可视宽度、高度 |
css用法:
/* 屏幕小于 300 px */
@media screen and (max-width: 300px) {
div {
background-color:red;
}
}
/* 屏幕大于 300 px */
@media screen and (min-width: 300px) {
div {
background-color:yellow;
}
}
/* 屏幕小于 300px 大于 200px */
@media screen and (min-width: 200px) and (max-width: 300px){
div {
background-color:blue;
}
}
行内用法:
<link href="css/test1.css" rel="stylesheet"></link>
// 当浏览器宽度大于 200px 时引入 test2.css
<link href="css/test2.css" rel="stylesheet" media="(min-width:200px)"></link>
这是我们最常见的一种前端处理响应式布局的方法,它对不同屏幕的样式处理可以说是极为细节的,但是我们也不得不提这种办法所带来的缺点:
缺点:
- 性能问题: 我们在加载页面时可能会下载不必要的内容,特别是在移动设备上,我们要加载大量的
PC
端样式。 - 设计限制: 由于需要适应多种屏幕尺寸,可能会对设计施加一定的限制,以确保在各种设备上都能正常显示。
- 代码维护: 实现复杂的响应式布局可能需要更多的代码,这可能会导致代码变得难以维护和理解。
解决方案:
- 性能优化: 通过压缩和合并代码、使用适当的图像格式以及延迟加载不必要的资源,可以改善响应式网站的性能。
- 设计策略: 采用灵活的设计策略,使设计在不同屏幕尺寸上看起来都自然流畅。在设计过程中考虑移动优先的方法可以帮助解决这个问题。
- 代码管理: 使用模块化的代码结构、CSS预处理器(如Sass或Less)以及现代的前端框架,可以帮助降低代码的复杂性和维护难度。
二、 Flex弹性布局
Flex
布局也是一种前端较为常见的处理响应式布局的方法,我们一般通过灵活的运用以下六个容器属性来对不同的屏幕进行适配。
属性名 | 作用 | 可选值 |
---|---|---|
flex-direction | 决定主轴的方向(即项目的排列方向) | row / row-reverse / column / column-reverse |
flex-wrap | 决定是否开启换行,如何换行 | nowrap / wrap / wrap-reverse |
flex-flow | flex-direction 和 flex-wrap 的简写形式,默认值为 row nowrap | - |
justify-content | 定义了项目在主轴上的对齐方式 | flex-start / flex-end / center / space-between / space-around |
align-items | 定义项目在交叉轴上如何对齐 | flex-start / flex-end / center / baseline / stretch |
align-content | 定义多根轴线的对齐方式(相对于把整个容器看成整体)。只有一根轴线时,不起作用 | flex-start / flex-end / center / space-between / space-around / stretch |
Flex
布局是一种流体布局,可以轻松的适应不同屏幕的大小和设备类型,根据页面内容进行渐进式变化,非常灵活且强大,但是它也有一些缺点:
缺点:
- 浏览器兼容:
Flex
布局只兼容ie9
以上的浏览器 - 高度不确定:
Flex
布局在遇到外部盒子的高度不确定时,会使垂直方向的属性丢失。
解决方案:
- 浏览器兼容: 虽然我们现在的项目没有兼容
ie9
以下的需求,但是如果今后项目中遇到了这样的情况,我们需要灵活控制项目布局方式的选用,必要时候增加代码去进行兼容。 - 确定高度:遇到高度不确定的情况我们适当选用其他的布局方式或者是放弃
Flex
布局。
三、Grid布局
上面说完Flex
布局,我们就不得不提到Grid
布局,在我看来,Grid
布局会比Flex
布局更为强大,这主要因为它是由纵横相交的两组网格线形成的框架性布局结构,它的构成元素包括:
属性名 | 说明 |
---|---|
row line | 行 |
column line | 列 |
track | 网格轨道,即行线和行线,或列线和列线之间所形成的区域,用来摆放子元素 |
gap | 格间距,行线和行线,或列线和列线之间所形成的不可利用的区域,用来分隔元素 |
cell | 网格单元格,由行线和列线所分隔出来的区域,用来摆放子元素 |
area | 网格区域,由单个或多个网格单元格组成,用来摆放子元素 |
如图所示,Grid
布局使我们能够比以往任何时候都可以更灵活构建和控制自定义网格:
但是它也有一些缺点:
缺点:
- 浏览器兼容:和
Flex
布局一样,一些旧版本的浏览器(尤其是ie
)可能不完全支持Grid
,这可能会导致布局在这些浏览器中显示不正常。
解决方案:
- 浏览器兼容:和
Flex
布局一样,可以考虑在旧版本浏览器上使用传统的布局技术。另外,我们也可以使用浏览器特定的前缀来增加对部分旧版浏览器的支持。
四、流式布局(Fluid Layout)
流式布局在我们当前的项目中很少使用,它主要是使用百分比或em/rem
单位进行布局,使内容随着屏幕尺寸的变化而自动缩放。它适用于简单的网站布局,特别是以内容为主的网站。缺点如下:
缺点:
- 设计限制:在某些情况下,特别是在处理复杂的布局和设计元素时,流式布局可能限制了设计的自由度。
- 字号问题:使用相对单位来设置字号可能会导致在不同屏幕上字号的表现效果不一致,影响可读性。
解决方案:
- 优雅降级:使用流式布局时,考虑以渐进增强和优雅降级的方式设计,确保在不支持流式布局的浏览器中也能提供合理的用户体验。
- 字号单位的合理使用:用
rem
来确保字号在不同元素之间的一致性。
总结
综上所述,在具体的项目开发中我们需要综合考虑各种方法的优势和不足。通过合理选择方法、持续优化以及灵活的设计和技术应用。在我当前所开发的项目中,最多的是使用Flex
布局和Grid
布局,其次是选择媒体查询,我也建议使用Flex
布局和Grid
布局,这是能够使代码利益最大化的一种方法。
转载自:https://juejin.cn/post/7269264585651863610