首发于 前端每日一题
如何做一个自适应网页?

如何做一个自适应网页?

背景

现在手机、电脑、ipad成为了每个家庭必备内容,但是通常设计给到我们的都是一个固定大小的UI,如果用户是一个屏幕小或者大的设备,一般就会出现滚动条或者大片空白内容,为了更好的利用一些空间,或者在各种屏幕上都有一个较好的体验,出现了网页设计的概念,自适应的概念,也就是随着屏幕尺寸的不同能够适配各种内容

ea6ac8_8abc6421adcc4f48abe6d09cb2b995c1_mv2.gif

如何做好各种屏幕的适配工作,响应式和自适应网页设计成为了新的挑战

一般来说,UI给到我们的都是一个固定尺寸的设计图,然后按照一定的比例进行页面的渲染,比如这里我们有一个两列布局,左侧是简介,右侧是详细的内容,正常的电脑尺寸下展示效果如下,采用的是左右布局的方式,左边宽度25%,右边70%,中间留有5%的间隙,看着还可以,并且也有一定的自适应的效果

Pasted image 20230605145959.png

但是当我们屏幕缩小到一定的尺寸,缩小到手机大小,就会发现阅读很难,一行放不下几个字,尤其是左侧的简介部分,如果屏幕过大,这么多字就放一行,阅读起来也会变的困难

Pasted image 20230605151021.png

那既然设计给了固定的尺寸,我们就按照固定的尺寸来,这样导致的结果就是展示上无问题,小屏幕上就会出现滚动条,大屏幕上就会有过多的留白,屏幕的利用率不高

Pasted image 20230605151617.png

在早期的时候,通常移动端和web端是分开的,也就是会搞两套,一个移动版本,一个pc版本,并且两者的功能要同步迭代,典型的例子就是 m.taobao.comtaobao.com

自适应网页设计

自适应网页设计是一种网页设计,专门为给定平台创建的布局,它能够让网页根据监测到的设备加载静态的预制布局,为了实现这点,设计师需要根据不同的屏幕宽度创建不同的设计

Pasted image 20230605171001.png

常见的尺寸一般手机600px以下,pc屏幕的宽度基本都在1000px以上,再大一些的2000px以上,一个网站在设计的时候就要考虑较这些屏幕,如果针对每个版本都提供一个不同的页面,这样维护成本较高,并且比较麻烦,迭代一个需求要做几遍,大大增加项目需求的复杂度

Pasted image 20230607174648.png

概念

那如何做到同一套代码的自适应?在开始之前我们先了解几种布局

固定布局/弹性布局

固定布局顾名思义,就是一个固定大小的设计,然后让内容在大屏中居中,小屏中有滚动条

弹性布局其实就是根据浏览器窗口的大小更改大小,使用相对值(百分比、rem、em、vh、vw等)来进行,flex grid也属于自适应布局方式,另外max-width/min-width,max-height/min-height也属于弹性内容,当然内部的内容区域就需要使用比例进行书写

媒体查询

这段css表示的意思就是当前视口至少要有800像素,才会给.container选择器加上对应的css样式,你可以加入很多这样的条件,调整页面显示的最佳尺寸,改变相应的样式,这种行为被称为断点

同时在设计项目的时候,我们可以先完成一个手机端的页面,然后通过断点的方式不断完善pc的展示效果,这种通常被叫做移动优先设计

现代自适应布局

在很久之前,我们经常使用float进行多列布局,但是出现css3之后,现在我们通常使用flex、grid等现代的方式进行,本质是通过参照容器的空间大小,缩小或者放大每个元素分布的空间,达到动态平衡,更改flex-grow以及flex-shrink的值,达到预期的效果

而grid是一种二维的方式进行布局,这两者都可以达到动态更改元素所占空间大小的方式,然后再通过一些相对单位进行内容的填充,常用的一些相对单位

rem

rem的方式当前是不推荐的,因为有更好的方式,rem的方式在屏幕变化不大的情况下很有用,但是你要是想要把移动端的rem布局的内容直接放到pc上,就会出现下面的效果

Pasted image 20230606174604.png

页面上并没有展示更多的内容,反而变成了更大的字和图像,并且需要通过js计算根元素font-size的大小,或者使用媒体查询进行动态设置

实践

那既然有了上述的一些概念,我们如何做一个响应式的页面呢,本着移动端优先的原则,我们先简单写一个移动端的内容,首先需要写一个html文件,这个文件中要包含meta部分如下

content中的width表示可视区域的宽度,值可为数字或关键词device-width表示设备宽度,intial-scale页面首次被显示是可视区域的缩放级别,取值1则页面按实际尺寸显示,无任何缩放,可以通过maximum-scale和minimum-scale设置最大最小缩放级别

通常我们的页面中有header、slider、content、footer这四大部分,按照这个逻辑,我们给出html的结构

这里我们采用grid加栅格布局的方式,方便pc和移动端的转换,同时每个块之间的间距为10,添加上对应的样式,同时给每个区块加上对应的名字、颜色和高度(模拟内容的填充),小屏幕上不显示slider的内容

_Users_01394862_Downloads_A liquid layout.html (1) 1.png

然后当屏幕的尺寸大于500的时候,我希望展示出来slider的内容

_Users_01394862_Downloads_A liquid layout.html.png

当屏幕的尺寸大于800的时候,我希望改变整个布局方式

_Users_01394862_Downloads_A liquid layout.html (2).png

这种自适应的方式在切换起来很流畅,并且布局的改动在grid的加成下变得异常简单明了

其实最本质的内容就是对不同的屏幕加载不同的css样式,你也可以使用媒体查询的方式加载css样式

或者@import的方式

框架

TaiwindCSS

当前比较火的一些css的框架对于断点的实现也非常友好,比如TaiwindCSS中的断点加上对应的前缀就可以了,基于移动端优先的方式,它给了几个常用断点

Pasted image 20230606213705.png

在写断点的时候直接在元素上加前缀就可以了

Bootstrap

Bootstrap也提供了一些断点的方式,本质也是媒体查询的东西

Pasted image 20230606215125.png

使用上可能会有一些区别

总结

其实整体看下来如果需要只是移动端的适配的话,rem就可以,但是通过rem放大到pc端就会存在只是放大页面内容,屏效比并没有获得提升,效果还是不理想,所以更加成熟的方案就是flex做响应的区块,grid做整体布局,然后根据块的内容用相对单位进行适配,整体下来可以实现一套代码完成多端的展示效果

在做响应式网站的时候,要注意相互结合,或者使用较好的一些框架,栅格化系统完成整体内容,做好各个环节的适配方案

代做工资流水公司湘潭企业贷流水曲靖转账银行流水制作青岛打印离职证明惠州代办银行流水账西安工资银行流水报价蚌埠入职银行流水样本威海离职证明代办蚌埠代开银行对公流水南阳银行流水电子版代做武汉银行流水PS办理哈尔滨个人银行流水报价福州薪资银行流水报价揭阳做流水账单石家庄房贷工资流水 报价扬州银行流水电子版公司武汉工资流水单公司合肥背调银行流水模板西宁薪资流水办理莆田银行流水代开三亚签证银行流水 制作杭州日常消费流水模板盐城代开银行对公流水西宁转账银行流水报价芜湖公司银行流水公司天津查询银行流水单遵义企业对公流水模板宁波流水费用长沙工资银行流水查询济宁对公流水代办大庆日常消费流水代办香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化