移动端自适应

一. 在HTML的头部加入meta标签

    在HTML的头部,也就是head标签中增加meta标签,告诉浏览器网页宽度等于设备屏幕宽度,且不进行缩放,代码如下:

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

简单分析一下这一行代码的含义:width=device-width表示网页的宽度等于设备屏幕的宽度,initial-scale=1.0表示设置页面初始的缩放比例为1,user-scalable=no表示禁止用户进行缩放,maximum-scale=1.0 和 minimum-scale=1.0 表示设置最大的和最小的页面缩放比例。因为各大浏览器对meta标签的解析程度不一样,所以我们要尽可能的去兼容所有浏览器。

 

二. 百分比布局

    在页面布局中,相对宽度和绝对宽度相结合来进行布局,将更有利于网页的可维护性。

    下图分别是拉勾网在iPhone5、iPhone6和iPhone 6 Plus下的布局,可以看到随着设备的屏幕宽度不同,即使是同一套网页代码显示出来的字体大小以及间隔也都不一样。红线框内部分就是使用了百分比布局的做法,对于网页的可维护性将更好。

 

三. 响应式页面的实现

    目前一般常见的实现响应式有两种方法,一种是利用媒体查询,另外一种是bootstrap下的栅格布局.

媒体查询,即 @media 查询,媒体查询可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设计响应式的页面,@media 是非常有用的。当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。因为是设置样式,所以将媒体查询相关的代码放在css文件的最下方即可。

举例:实现了在不同的页面宽度中改变body的背景颜色的作用。

 

//如果页面宽度小于 300 像素,则修改body的背景颜色为红色:

@media screen and (max-width: 300px) { body { background-color:red; } }

//如果页面宽度大于 300 像素并且小于600像素,则修改body的背景颜色为绿色:

@media screen and (min-width: 300px) and (max-width:600px) {

body {

background-color:green;

}

}

//如果页面宽度大于 600 像素,则修改body的背景颜色为蓝色:

@media screen and (min-width: 600px) { body { background-color:blue; } }

注:screen 表示电脑屏幕,平板电脑,智能手机等,min-width和max-width 用于定义设备中页面的最小和最大宽度。

 

四. 页面使用相对字体

  在我们平常的网页布局过程中经常使用绝对单位像素(px)来进行布局,这样的布局不适合我们自适应网页的实现,所以我们现在来介绍两种常见的相对单位em和rem。rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素一个是依赖父元素计算。

  1. 相对长度单位em

      em的特点 : ① em的值并不是固定的; ② em始终会继承父级元素的字体大小。

. 2. 相对长度单位rem

      rem是CSS3新增的一个相对单位(root em,根em),与em区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。

 

五. Js动态设置rem来实现移动端字体的自适应

 

js代码:利用Js获取设备屏幕的宽度,并根据屏幕的宽度动态改变根元素html的font-siz属性的作用。

 

//获取html元素

var html = document.getElementsByTagName('html')[0];

//屏幕的宽度(兼容处理)

var w = document.documentElement.clientWidth || document.body.clientWidth;

//750这个数字是根据你的设计图的实际大小来的,所以值具体根据设计图的大小

html.style.fontSize = w / 750 + "px";

 

六. 淘宝的lib-flexible插件

 

(1).在项目中安装lib-flexible

$ npm install lib-flexible --save

 

(2).在项目的入口js文件中引入lib-flexible

import 'lib-flexible'

 

(3).删除该meta标签,需要使用lib-flexible自己生成的 meta name="viewport"来达到高清适配的效果:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

 

(4).使用px2rem-loader自动将css中的px转换成rem,安装px2rem-loader

$ npm install px2rem-loader --save-dev

 

(5).打开build/utils.js文件,找到exports.cssLoaders方法,在里面添加如下代码

const px2remLoader = {

loader: 'px2rem-loader',

options: {

remUint: 75

}

}

 

(6).修改generateLoaders方法中的loaders

// 注释掉这一行

// const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]

// 修改为

const loaders = [cssLoader, px2remLoader]

if (options.usePostCSS) {

loaders.push(postcssLoader)

}

 

然后重新npm run dev,打开控制台可以看到代码中的px已经被转成了rem

 

该插件需要注意以下两点:

 

1.此方法只能将.vue文件style标签中的px转成rem,不能将script标签和元素style里面定义的px转成rem

 

2.如果在.vue文件style中的某一行代码不希望被转成rem,只要在后面写上注释 /* no*/就可以了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值