## 自适应、响应式、弹性布局、屏幕适配
[浅谈响应式Web设计与实现思路 – 熊建刚的博客](http://blog.codingplayboy.com/2018/01/06/responsive-web-design/)
[浅谈响应式Web设计与实现思路](https://www.toutiao.com/a6508149161299280398/?tt_from=weixin&utm_campaign=client_share×tamp=1515350460&app=news_article&utm_source=weixin&iid=22069500288&utm_medium=toutiao_android&wxshare_count=1)
~~~
自适应vs响应式
自适应和响应式设计的不同主要概括如下:
自适应是多套用户界面,而后者则只有一套用户界面;
自适应需要服务端检测请求设备分辨率相关信息,然后选择对应版本返回;
自适应可以在不同版本使用不同适配方案,如在PC端使用百分比,在移动端使用rem等,而响应式则需要一个完美兼容的适配方案;
~~~
~~~
什么样的网页适合做成响应式的?
1. 页面结构不复杂的
2. 轻交互的
3. 展示型的
具体适合的类型
官网类(奈斯设计)
新闻类(懒熊体育)
轻博客类
产品展示类(app下载页面)
阅读类(看云)
(当然也不是说只要是这些类型的网页就都适合做响应式,这只是一般情况下,具体还是要看网页是否满足做响应式的几个基本条件)
不适合做响应式的类型,只能做自适应的
电商(比如商品详情页交互多)
重门户类(比如网易,虽然是新闻类,但是这种门户首页页面结构复杂,模块很多,做响应式成本太大,效率很低,得不偿失)
重官网类(比如阿里云,它的页面也很复杂,元素很多,做响应式也不现实,但里面的几个页面做成响应式还是可行的)
不能做的不是技术做不到而不能做,css无所不能,理论上都可以做成响应式的,但是这种无视成本的做法是愚蠢的,就像是捡个芝麻丢了西瓜。
总结:做响应式的网页必须要满足:结构简单,交互简单,两个字来说就是“要轻”。
~~~
> 常规的响应式页面是基于同一套html,利用css媒体查询 写多套css样式来实现的,通常这个方法很奏效,但如果页面比较复杂,有些组件在不同端的交互和页面结构有很大的区别时,依靠css媒体查询魔法就很麻烦了,所以可以看到现在很多网站,在一个页面上输出了 多套html(腾讯文档页面就大量使用了多套html),同样的还是利用css媒体查询控制不同屏幕显示不同的html,比如 `pc-nav`、`mobile-nav`,这样比较灵活,但也有弊端,那就是如果都这么做,那就相当于每次用户访问都同时加载了多套html页面,用户甚至永远不可能用到,虽然用户看不到这些多余的,也不关心背后的html,可是这必然增加了加载的开销导致页面打开速度下降,所以这种方法只能用于「在多端上交互和视觉差异较大」的组件上去,不能使用过度,不然为什么不使用自适应方案呢。
>
> 电脑背面的电路板也应该整齐完美,虽然用户看不到,但我们知道。 —— 史蒂夫·乔布斯
[B站不是中国YouTube](https://mp.weixin.qq.com/s/PyKInjunP2CIRZFguap9Yw)
> YouTube的产品理念则是移动优先,桌面端是移动版的从属,PC端同移动统一。即以前手机版是“缩小的桌面网页”,现在桌面版是“放大了的手机App。“不应该为不同的屏幕规格创建不同的产品,而是使用一种统一的设计方法开发一款可以跨多种屏幕的产品。”
> PC 和 移动端 同样重要,应该利用各自的特点,充分发挥其优势,全方面提供最好的用户体验,而不是 简单的 “统一”,谁是谁的附属品。
> 特别注意的是margin,padding属性值为百分比时,是基于当前元素width值的。%单位也是一个缩放单位,所以也常用于样式适配。**利用 padding 这个特性,我们就可以实现 [div宽高等比适应](https://blog.csdn.net/qq_38350907/article/details/78677611)了,就像img标签一样的效果**
>[tip] 错!!!只有padding才是基于当前元素的,margin和width一样,都是基于父元素的。
>[danger] **自适应和响应式不是一个东西。**
> 自适应、响应式、适配都是为了展示最好的前端效果,即在每一种设备上,都极力呈现出最好的效果。**这个最好的效果,指的是,在各终端表现出最好的视觉效果,以及最合适、最方便的操作习惯。**
**自适应、响应式、弹性布局、屏幕适配,这是四个独立不同的概念。**
自适应:多端请求时返回不同的页面,服务端需要准备多套程序或者多套模板。
响应式:主要是利用css媒体查询使得在不同屏幕大小下,页面有不同表现,主要是元素布局等变化。
弹性布局:主要是利用百分比设置元素宽度,浮动还有flex设置元素布局等等。
屏幕适配:主要是应用于对完美还原设计稿尺寸有要求的页面,主要是利用 flexible.js、rem、vm等技术。(类似于750px的设计稿是一张图片,这张图片无论怎么缩放,都能显示很好的效果,**现在我们的网页也需要图片这种等比缩放的效果**,这么说你应该能体会到了。当然了,这里还需要顺便解决高清屏显示的问题。)
*****
### 技术方案怎么选
#### 1. 简单 & 对速度不敏感和对代码精简没要求 & 预算紧张
响应式,一套代码解决多端
展示阅读类 交互逻辑简单且少,**且移动端与pc端内容差异不大**,如新闻站,企业官网
#### 2. 复杂 & 对精简代码和速度有要求 预算充足
做两套 根据请求头自适应返回 web端 手机端 (后端可共用,也可不共用,如不同模块或者部署不同应用)
功能类,交互逻辑复杂且多,如电商,社交类
#### 3. 复杂 & 有多终端适配要求 & 对细节有一定要求 追求用户体验 & 预算豪华
做两套 移动端用适配做以满足不同移动终端
#### 4. 复杂 & 细节要求和技术追求极高 & 追求极致完美的用户体验 & 不差钱 (艺术家、哲学家)
多端 多套 响应式 适配 多技术相结合
* * * * *
[关于响应式布局,你必须要知道的](https://mp.weixin.qq.com/s/y0a5t3Kd-GWACRlEg1cprQ)
*****
last update:2019-1-25 17:10:25
- 开始
- 微信小程序
- 获取用户信息
- 记录
- HTML
- HTML5
- 文档根节点
- 你真的了解script标签吗?
- 文档结构
- 已经落后的技术
- form表单
- html实体
- CSS
- css优先级 & 设计模式
- 如何编写高效的 CSS 选择符
- 笔记
- 小计
- flex布局
- 细节体验
- Flex
- Grid
- tailwindcss
- JavaScript
- javascript物语
- js函数定义
- js中的数组对象
- js的json解析
- js中数组的操作
- js事件冒泡
- js中的判断
- js语句声明会提前
- cookie操作
- 关于javascript你要知道的
- 关于innerHTML的试验
- js引擎与GUI引擎是互斥的
- 如何安全的修改对象
- 当渲染引擎遇上强迫症
- 不要使用连相等
- 修改数组-对象
- 算法-函数
- 事件探析
- 事件循环
- js事件循环中的上下文和作用域的经典问题
- Promise
- 最佳实践
- 页面遮罩加载效果
- 网站静态文件之思考
- 图片加载问题
- 路由及转场解决方案
- web app
- 写一个页面路由转场的管理工具
- 谈编程
- 技术/思想的斗争
- 前端技术选型分析
- 我想放点html模板代码
- 开发自适应网页
- 后台前端项目的开发
- 网站PC版和移动版的模板方案
- 前后端分离
- 淘宝前后端分离
- 前后端分离的思考与实践(一)
- 前后端分离的思考与实践(二)
- 前后端分离的思考与实践(三)
- 前后端分离的思考与实践(四)
- 前后端分离的思考与实践(五)
- 前后端分离的思考与实践(六)
- 动画
- 开发小技巧
- Axios
- 屏幕适配
- 理论基础
- 思考
- flexible.js原理
- 实验
- rem的坑,为什么要设置成百分比,为什么又是62.5%
- 为什么以一个标准适配的,其它宽度也能同等适配
- 自适应、响应式、弹性布局、屏幕适配
- 适配:都用百分比?
- 番外篇
- 给你看看0.5px长什么样?
- 用事实证明viewport scale缩放不会改变rem元素的大小
- 为什么PC端页面缩放不会影响rem元素
- 究竟以哪个为设备独立像素
- PC到移动端初试
- 深入理解px
- 响应式之栅格系统
- 深入理解px(二)
- 一篇搞定移动端适配
- flex版栅格布局
- 其他
- 浏览器加载初探
- 警惕你的开发工具
- JS模块化
- webpack
- 打包原理
- 异步加载
- gulp
- 命名规范
- 接口开发
- sea.js学习
- require.js学习
- react学习
- react笔记
- vue学习
- vue3
- 工具、技巧
- 临时笔记
- 怎么维护好开源项目
- 待办
- 对前端MVV*C框架的思考
- jquery问题
- 临时
- 好文
- 节流防抖