浅谈pc和移动端的响应式的使用


Posted in HTML / CSS onJanuary 03, 2019

身为一个前端攻城狮,是不是经常遇到各种各样的响应式问题?下面我们来说一下:

1.响应式跟自适应有什么区别?

有些人可能还不知道响应式跟自适应的区别,甚至认为他们是同一个东西,其实不是的.

自适应是最早出现的,后面才有了响应式。响应式布局等于流动网格布局,而自适应布局等于使用固定分割点来进行布局。

如下图所示,对于同一个页面(图中的Html),如果用响应式布局来处理的话,用不同设备(电脑、平板、手机)去访问此页面,最后看到的布局和内容有很大不同。

而如果用自适应布局去处理的话,那不管访问设备如何的不同(下图是三台尺寸不一样的手机),最后看到的页面内容和布局基本上还是一样的,就是尺寸略有不同。

浅谈pc和移动端的响应式的使用

响应式网站:https://www.microsoft.com/zh-cn/

自适应网站:http://m.ctrip.com/html5/

2.实现响应式有哪几种方式?

1.使用媒体查询(Media Query) 结合 rem字体

记住,先在 <head> 标签里加入这个meta标签(设置设备按照一比一的尺寸进行显示,并且禁止用户缩放页面):

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

其次是媒体查询,这个大家应该都知道,这个是响应式最重要的部分。

如果大于1000px,就用:

@media screen and (min-width:1000px){...}              对应PC端页面

如果在小于1000px和大于768px之间:

@media screen and (max-width:1000px) and (min-width:768px) {...}        对应平板端页面

如果小于768px:

@media screen and (max-width:768px){...}           对应手机端页面

然后是rem字体,rem是css3新出的单位,是指相对于根元素的字体大小的单位。一般设置在html,body,结合媒体查询我们可以这样写:

@media screen and (min-width:1000px){
html,body{

 font-size:14px;

}
}  
    
@media screen and (max-width:1000px) and (min-width:768px){

html,body{

 font-size:13px;

}
}  

@media screen and (max-width:768px){

html,body{

 font-size:12px;

}
}

然后在样式表里面,把px单位都转换为rem,这样rem就会根据我们在html,body设置的字体单位进行自动缩放的过程.

至于1px等于多少rem呢,我习惯是100px等于1rem,这样做的好处有两点:

第一,谷歌浏览器的默认字体是12px,小于就失效,如果1rem等于10px的话是没有任何效果的.第二,容易换算,例如我们15px的话,就写0.15rem.

当然还有几种比较方便的,如果你有使用webpack的话,可以使用 postcss-pxtorem 或者 px2rem-loader ,它们会把你写的样式打包的时候自动转换为rem,具体网上有教程.

转换前:

浅谈pc和移动端的响应式的使用

转换后:

浅谈pc和移动端的响应式的使用

还有一种就是使用sublime text的插件, cssrem 神器!在你输入的时候就自动转换了.

浅谈pc和移动端的响应式的使用

这里介绍一种用js自动计算rem的方法,可以不用到媒体查询:

// 基准大小 相当于窗口缩放到设计稿的尺寸时body的字体大小 这里设置100px 方便计算
  const baseSize = 100
  // 设置 rem 函数
  function setRem() {
    // 当前页面宽度相对于1280宽的缩放比例,可根据自己需要修改。1280是设计稿的宽度
    const scale = document.documentElement.clientWidth / 1280;
    let autoWidth = Math.round((baseSize * Math.min(scale, 2)));
    //判断页面缩放到小于99px的字体时 就不再缩小 防止内容溢出
    if (Math.round((baseSize * Math.min(scale, 2))) <= 99) {
      autoWidth = 99;
    }
    // 设置页面根节点字体大小
    document.documentElement.style.fontSize = autoWidth + 'px'
  }
  // 初始化
  setRem()
  // 改变窗口大小时重新设置 rem
  window.onresize = function () {
    setRem()
  }

这样只要把样式表的px单位都转换为rem即可.

2.使用插件(bootstrap)

栅格化布局,本例利用bootstarp的栅格系统

浅谈pc和移动端的响应式的使用

根据上图可以看到,只要在class加上bootstrap独有的Class前缀,就可以使用bootstrap了,当然你得先引入bootstrap的插件.示例:

<div class="col-xs-6 col-sm-3"></div>

这段代码的意思是在小于768px的尺寸下,这个div是占用一半的位置的,而在>=768px且<992px直接,这个div只占三分之一的位置.

这样就可以根据不同的屏幕尺寸来达到响应式效果.

3.使用弹性布局(flex)

由于弹性布局涉及的知识点比较多,后续会更~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
css动画效果之animation的常用样式
Mar 09 HTML / CSS
35款精致的 CSS3 和 HTML5 网页模板 推荐
Aug 03 HTML / CSS
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
May 07 HTML / CSS
利用CSS3的border-radius绘制太极及爱心图案示例
May 17 HTML / CSS
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
Jan 30 HTML / CSS
HTML5标签使用方法详解
Nov 27 HTML / CSS
字中字效果的实现【html5实例】
May 03 HTML / CSS
Html5新增标签有哪些
Apr 13 HTML / CSS
html5启动原生APP总结
Jul 03 HTML / CSS
Amaze UI 文件选择域的示例代码
Aug 26 HTML / CSS
boostrap modal 闪现问题的解决方法
Sep 01 HTML / CSS
纯 CSS 自定义多行省略的问题(从原理到实现)
Nov 11 HTML / CSS
canvas绘制文本内容自动换行的实现代码
Jan 14 #HTML / CSS
详解通过变换矩阵实现canvas的缩放功能
Jan 14 #HTML / CSS
html Table 表头固定的实现
Jan 22 #HTML / CSS
Html5如何唤起百度地图App的方法
Jan 27 #HTML / CSS
canvas学习笔记之绘制简单路径
Jan 28 #HTML / CSS
web页面录屏实现
Feb 12 #HTML / CSS
Canvas 文本转粒子效果的实现代码
Feb 14 #HTML / CSS
You might like
PHP系统命令函数使用分析
2013/07/05 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
基于Python测试程序是否有错误
2020/05/16 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
浅谈Python魔法方法
2021/06/28 Java/Android
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
Golang并发工具Singleflight
2022/05/06 Golang
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android