移动端布局(2)

3.移动端适配

3.1.百分比适配

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta ="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    div {
      width: 25%;
      height: 100px;
      float: left;
    }
    .box_1{
      background-color: #673AB7;
    }
    .box_2 {
      background-color: #E91E63;
    }
    .box_3 {
      background-color: #009688;
    }
    .box_4 {
      background-color: #FF5722;
    }
  </style>
</head>
<body>
  <div class="box_1"></div>
  <div class="box_2"></div>
  <div class="box_3"></div>
  <div class="box_4"></div>
</body>
</html>

百分比适配这种方式比较简单,但缺点是高度无法适配,因为高度通常都不确定,所以,百分比适配这种方案一般是宽度适配

3.2.viewport适配

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
  <script>
  (function(){
    // 固定目标宽度
    var targetWidth = 320
    // 获取屏幕宽度
    var w = window.screen.width 
    // 算出设备屏幕宽度是目标宽度的多少倍
    var scale = w / targetWidth
    // 创建一个meta标签
    var  meta = document.createElement('meta')
    meta.name = "viewport"
    meta.content="user-scalable=no, initial-scale="+scale+",minimum-scale="+scale+",maximum-scale="+scale
    document.head.appendChild(meta)
  })()
  </script>
  <meta ="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    body{
      margin: 0;
    }
    div {
      width: 80px;
      height: 100px;
      float: left;
    }
    .box_1{
      background-color: #673AB7;
    }
    .box_2 {
      background-color: #E91E63;
    }
    .box_3 {
      background-color: #009688;
    }
    .box_4 {
      background-color: #FF5722;
    }
  </style>
</head>
<body>
  <div class="box_1"></div>
  <div class="box_2"></div>
  <div class="box_3"></div>
  <div class="box_4"></div>
</body>
</html>

viewpoint的适配的核心思想是通过控制viewport的缩放来实现各种设备的适配,我们在写的时候是按某个固定宽度来写的

3.3.rem适配

rem是一个字体单位,值会根据html元素大小变化而变化,宽度和高度我们都可以用rem来表示,使用rem做适配的原理就是把页面元素的px单位换成rem单位,然后动态的修改html的字体大小,html字体大小变化了,那么以rem为单位的子元素大小也会跟着变化

这里比较关键的是动态的去设置html字体的大小,这里设置的依据是根据不同设备的宽度来进行设置的,这样我们就能在不同的设备上展示不同的大小,从而达到不同尺寸设备的适配

1.1rem等于浏览器默认的html元素的font-size值

.html {
  font-size: 16px;
}
p {
  font-size: 2rem; /* 2 * 16 =  32px */
}

2.动态的修改html元素font-size大小,通俗的说就是设置1rem的长度

var rem = document.documentElement.clientWidth / 10

document.document.documentElement.style.fontSize = rem + "px"

注意:上面 “document.documentElement.clientWidth / 10” 这里的10可以是其他的值, 20、30 都可以,我们在做px转rem的时候要用到

3.使用的时候,我们需要将px转成rem,举个例子:设计稿宽度是750px, 其中有一个盒子的宽度是100px,高度是100px,如果在iphone6下面显示,应该如何用rem来表示这个盒子的宽高呢

公式: 像素/rem基准值

在iphone下面,document.documentElement.clientWidth的值为375,rem基准值为 375/10=37.5,那么,100px转换成rem为:

100px/37.5 = 2.66667rem(约等于)

3.4.基于vw的适配方案

在css3中引入了视口单位,vw表示视口的宽度,vh表示视口的高度,也就是把视口平均分成100份,每一份为1个单位,那么1vw = 1%视口宽度,1vh = 1%视口高度

<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- <script>
    document.documentElement.style.fontSize = document.documentElement.clientWidth / 100 + "px"
  </script> -->
  <meta ="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    body{
      margin: 0;
    }
    div {
      width: 100vw;
      height: 10vh;
      float: left;
    }
    .box_1{
      background-color: #673AB7;
    }
    .box_2 {
      background-color: #E91E63;
    }
    .box_3 {
      background-color: #009688;
    }
    .box_4 {
      background-color: #FF5722;
    }
  </style>
</head>
<body>
  <div class="box_1"></div>
  <div class="box_2"></div>
  <div class="box_3"></div>
  <div class="box_4"></div>
</body>
</html>

螺钉课堂视频课程地址:http://edu.nodeing.com

posted @ 2019-12-12 13:45  螺钉课堂Nodeing-com  阅读(108)  评论(0编辑  收藏  举报