一.多种屏幕(响应式)

响应式是一种在多种设备(比如pc端 移动端)不同分辨率情况下使界面展现最大程度适应尺寸的手段。响应式包含了移动端适配,也可以使移动端不同分辨率展现不同样式。移动端适配则相对精准,是指仅针对移动端的适配方案。

1.百分数

最原始我们可以使用百分数来让界面达到适配效果。

*,html{margin: 0;padding: 0;
}
html,body{height: 100%;width: 100%;
}
header{width: 100%;height: 10%;background-color: #eee;
}
.info{width:80%;height: 100%;background-color: #fff;
}
<body><header><div class="info">this is info</div></header>
</body>

使用百分数计算起来有点麻烦,首先需要在html、body上宽高都设置100%,然后子元素根据需要设置宽度高度,需要元素自适应的时候就用上百分数计算(相对父元素宽高计算)。
上述header相对body的高度设为10%,info在header元素里面,想要设置与header一样高度的元素,高度就设置100%。

缺点:
1).不能字体大小自适应,需手动计算
2).百分数设置麻烦尤其是高度
3).奇数分割容器得不到精确宽度

2.Media媒体查询

媒体查询可以针对不同屏幕尺寸设置不同的样式。

@media screen and (min-width: 375px) {.container{width: 100%;height: 100px;background-color: bisque;}
}
@media screen and (max-width: 375px) {.container{width: 50%;height: 100px;background-color: burlywood;}
}
<div class="container">
</div>

上述使用媒体查询,在屏幕分辨率宽大于375px的时候container的宽度为100%,当屏幕宽度小于375px时container宽度为50%。还可以将尺寸设置得更细致。

一般media screen 与rem配合使用效果更加,因为根据媒体查询划分屏幕区间的话有点粗糙,分辨率区间与区间之间可能跳度过大,而且需要在每个区间里单独设置样式,样式繁冗。

@media screen and (min-width: 375px) {html{font-size: 25px;}
}
@media screen and (max-width: 375px) {html{font-size: 15px;}
}
.container{width: 16rem;height: 100px;background-color: bisque;
}

上述在不同分辨率下设置字体后,屏幕宽度改变,container的宽度、字体也会跟着改变,只需要写一遍container样式就可以在分辨率改变的时候改变样式。

html的font-size一般需要根据设备分辨率来动态计算。

缺点:只用media:每个分辨率区间都要单独写样式,麻烦、不利于维护、样式冗余。 与rem一起用:需要手动计算字体大小。

3.绝对定位
body{position: absolute;top:0;left: 0;right:0;bottom:0;
}
.container{position: absolute;top:0;left: 0;right:0;bottom:0;
}
.top-bar{position: absolute;top:0;left: 0;right: 0;bottom: calc(100% - 50px);background-color: #eee;
}
.info{width:50px;position: absolute;top: 0;bottom:0;background-color: #ddd;
}
.right-info{position: absolute;top: 0;bottom:0;left: 50px;right: 0;background-color: #fff;
}
.content{position: absolute;top:50px;bottom:0;width: 100%;background-color: antiquewhite;
}
<div class="container"><div class="top-bar"><div class="info">info</div><div class="right-info">right info</div></div><div class="content"></div>
</div>

绝对定位需要先固定一个宽/高度,然后其它元素根据这个元素的宽/高再计算。像一些左中右布局,左右两边宽度固定,中间不设置宽度,就能让中间区域达到响应的效果。

可以与百分数一起使用能够达到更好的效果。

缺点:
1).不能字体大小自适应,需手动计算
2).计算麻烦
3).视觉体验并不友好

相关还有display:flex、table-cell,(display: grid; grid-template-columns: Xpx Xpx Xpx; grid-template-rows: Xpx Xpx Xpx)

二.移动端常用适配
4.rem

rem需要给html标签元素设置字体大小,字体设置多少就会根据字体大小来变换尺寸。

document.documentElement.style.fontSize = document.documentElement.clientWidth / (设计稿宽/100) + 'px';

在给字体设置rem的时候,在不同屏幕下绝对尺寸不一致,最好是独立设置

@media screen and (min-width: 375px) and (max-width: 640px) {.div{font-size: 15px;}
}
@media screen and (max-width: 375px) {.div{font-size: 14px;}
}

与resize方法配合使用可以在屏幕宽度变化时动态改变字体大小而不是手动刷新.

window.addEventListener('resize', ()=>{document.documentElement.style.fontSize = document.documentElement.clientWidth / (设计稿宽/100) + 'px';
});
5.vw

安装:
npm i --save-dev postcss-px-to-viewport

新建:postcss.config.js

module.exports = {plugins: {autoprefixer: {},'postcss-px-to-viewport': {viewportWidth: 750,   // 视窗的宽度,对应的是我们设计稿的宽度,一般是750viewportHeight: 1334, // 视窗的高度,根据750设备的宽度来指定,一般指定1334,也可以不配置unitPrecision: 3,     // 指定`px`转换为视窗单位值的小数位数viewportUnit: "vm",   //指定需要转换成的视窗单位,建议使用vwselectorBlackList: ['.ignore'],// 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名minPixelValue: 1,     // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值mediaQuery: false     // 允许在媒体查询中转换`px`}}
};

@keyframes 和media查询里的px默认是不转化的,设置mediaQuery: true则媒体查询里也会转换px
@keyframes可以暂时手动填写vw单位的转化结果

viewportUnit也可以设置成vh, vmin, vmax,但是需要计算字体大小。

postcss-px-to-viewport 是借助postcss工具编写的postcss插件:

module.exports = postcss.plugin('postcss-px-to-viewport', function (options) {//。。。
}

通过这个函数计算单位:

function createPxReplace(opts, viewportUnit, viewportSize) {return function (m, $1) {if (!$1) return m;var pixels = parseFloat($1);if (pixels <= opts.minPixelValue) return m;var parsedVal = toFixed((pixels / viewportSize * 100), opts.unitPrecision);return parsedVal === 0 ? '0' : parsedVal + viewportUnit;};
}

vw相对于视口的宽度。视口被均分为100单位的vw
h1 { font-size: 8vw; }
如果视口的宽度是200px,那么上述代码中h1元素的字号将为16px,即(8x200)/100
也就是说将px转换为vw的公式为:16*100/200 <=>16/200*100 <=> 上述createPxReplace方法中的pixels / viewportSize * 100 < => 我们设置的px大小/视窗分辨率(设计稿大小)*100

5.微信rpx

rpx是微信小程序的css单位,可以根据屏幕尺寸适应。
默认375px屏幕宽度下 1rpx = 0.5px

rpx换算px(屏幕宽度/750) ,px换算rpx(750/屏幕宽度)

移动/PC端的一些适配方案相关推荐

  1. pc端不同分辨率适配

    1.以1920* 1080的设计稿为例,实现PC端不同分辨率适配 2.安装依赖 npm install --save lib-flexible     或者  yarn add lib-flexibl ...

  2. 如何进行PC端多屏适配

    如何进行PC端多屏适配 多屏适配的几种方法: 使用媒体查询,如 bootstrap等框架 制作设计图的时候,给一个固定的宽度,如1200,背景使用纯色,或者大背景图 使用rem 其他 这里介绍一下 r ...

  3. 移动端高清适配方案(解决图片模糊问题、1px细线问题)

    移动端高清适配方案(解决图片模糊问题.1px细线问题) 参考文章: (1)移动端高清适配方案(解决图片模糊问题.1px细线问题) (2)https://www.cnblogs.com/superliz ...

  4. Web移动端最强适配方案总结,没想到这么好用!

    点击上方的终端研发部,右上角选择"设为星标" 一.前言 在过去的几年时间里,移动端web野蛮生长,智能机的Android阵营和IOS阵营分庭抗礼,随之产生了多个系统版本(系统版本多 ...

  5. 移动端Web页面适配方案(整理版)

    @(概述)[基本概念|百分比|rem|vw/vh|响应式设计] 移动端web页面的开发,由于手机屏幕尺寸.分辨率不同,或者需要考虑横竖屏问题,为了使得web页面在不同移动设备上具有相适应的展示效果,需 ...

  6. cocos creator开发pc端的浏览器适配问题

    因为pc浏览器端不比手机端,手机分辨率除了ipad等特别的,一般只需要把背景图拉宽或者拉高一些,就能保证不留黑边,pc端浏览器可以随便拉,但是一般为了效果,浏览器界面再拉也不允许留黑边的,可以试试其他 ...

  7. vue+antd搭建后台管理界面模版(PC端),适配中文、英文、日文 mock数据,开箱即用

    vue+antd搭建后台管理界面模版(PC端) 完整代码下载地址:vue+antd搭建后台管理界面模版(PC端) 技术栈 vue2 + vuex + vue-router + webpack + ES ...

  8. 移动端H5终端适配方案

    1.JS的根据不同屏幕宽度动态设置html的font-size,使用rem布局. a.手淘方案 flexible+rem(参考https://github.com/amfe/article/issue ...

  9. CocosCreator的H5游戏适配PC端

    文章目录 Creator适配方式 效果 优势 劣势 核心问题 分析问题 解决问题[`度娘`] 完善 当今,手游的份额可以说占据了整个游戏市场的半壁江山,特别是最近几年H5游戏的兴起,更是让手游如日中天 ...

最新文章

  1. Linux 磁盘挂载
  2. 原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
  3. 将深度学习技术应用于基于情境感知的情绪识别
  4. jmeter 取json值_干货丨实战经验分析,带你走进Jmeter参数化
  5. 模拟 hihoCoder 1177 顺子
  6. 我的python学习笔记全集_我的python学习笔记
  7. 嘿,运维!你与VXLAN有场约会……
  8. c++ stl 容器 迭代器 stl用法示例
  9. js或jquery如何获取父级、子级、兄弟元素(包括祖级、孙级等)
  10. The peopleware papers
  11. crc java_求这个CRC16算法的java版实现!!!
  12. Tensorflow saved_model.pb 文件转成 saved_model.pbtxt文件
  13. 接口测试中POST方法该怎么测?4种数据提交方式,测试用例设计和测试工具操作步骤全讲清
  14. 人的成熟不是年龄,而是懂得了放弃。Python_China的博客
  15. java后端社招面试经历
  16. wdcp mysql configure error_install Error: mysql configure err
  17. 【教育小程序案例】线下培训机构辅导教育
  18. 【Zeekr_Tech】整车OTA概述
  19. Django Restframework 里的小插曲
  20. SpringBoot 监控

热门文章

  1. 趣味三角——第13章——地图师的乐园
  2. 005 maven中的坐标和仓库,修改为阿里maven仓库
  3. 分布式爬虫系统设计、实现与实战
  4. OpenCV实例解析(OpenCV初学者)
  5. 前端入门之特效、动画
  6. C#制作简易赛尔号登陆器
  7. 6步创建成功的项目日程计划表
  8. 【操作系统】IO设备
  9. 教妹学Java(九):一文搞懂Java中的基本数据类型
  10. Ubuntu 连接不上github 解决方法