美文网首页
移动端适配

移动端适配

作者: 海山城 | 来源:发表于2018-04-27 17:06 被阅读0次

meta viewport

在head中加上

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

宽度等于设备宽度,initial-scale表示初始缩放比例,maximum-scale,minimum-scale分别表示最大,最小缩放比例,user-scalable表示是否允许用户缩放

媒体查询

媒体查询,简而言之就是根据不同的媒体(手机,平板,电脑等等)的查询条件,展示不同的样式,使用列子如下

@media (max-width: 800px){
    body{
        background: red;
    }
}

如果某个媒体宽度小于800,那么body就变红,通过这种满足媒体的查询条件(移动端只要满足移动端对应的条件),才展示某种样式,从而做到适配

动态 rem 方案

百分比布局

//html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>百分比布局</title>
</head>
<body>
  <div class="container clearfix">
    <div class="box">40%</div>
    <div class="box">40%</div>
    <div class="box">40%</div>
    <div class="box">40%</div>
  </div>
</body>
</html>
//css
*{
  margin: 0;
  padding: 0;
}
.clearfix::after{
  content: '';
  display: block;
  clear: both;
}
.box{
  background: #ddd;
  margin-top: 10px;
  margin-bottom: 10px;
  text-align: center;
}
.box{
  float: left;
  width: 40%;
  margin-left: 5%;
  margin-right: 5%;
}

这种是通过设置元素宽度百分比来自适应,但是这种方法,高度没法确定,相当于将元素拉长了,很不好看,所以推荐使用下面的更好看的动态 rem 方案

动态 rem 方案

这种方法的思路是整体缩放,实现方式如下
首先通过js让html的font-size和页面宽度相等或成倍数关系,目的是为了让rem和页面宽度挂钩,从而页面宽度变化的时候,rem的值也会变化

//html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>动态rem</title>
  <script>
    var pageWidth = window.innerWidth
    document.write('<style>html{font-size:' + pageWidth/10 + 'px}</style>')
  </script>
</head>
<body>
  <div class="container clearfix">
    <div class="box">40%</div>
    <div class="box">40%</div>
    <div class="box">40%</div>
    <div class="box">40%</div>
  </div>
</body>
</html>

然后页面上除了字体或者小单位长度(比如border),其他的诸如元素的长度,宽度,间距等都用rem来表示。这样每次缩放页面刷新后,rem的值都会根据页面的宽度的缩放等比缩放

//css
*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
.clearfix::after{
  content: '';
  display: block;
  clear: both;
}
body{
  font-size: 16px;
}
.box{
  background: #ddd;
  text-align: center;
  float: left;
  width: 4rem;
  height: 2rem;
  margin: .5rem .5rem;
  border: 1px solid red;
  font-size: 1.2em;
}

补充:px自动转换为rem

上面的每一个rem都要计算,是不是觉得挺烦的,那么我们可以通过在在 SCSS 里使用 PX2REM来自动将px变成rem,以下是使用步骤

① 安装node-sass
②编写对应的sass文件,使用px编写
  • mkdir ~/Desktop/scss-demo
  • cd ~/Desktop/scss-demo
  • mkdir scss css
  • touch scss/style.scss
  • 编写 scss/style.scss
//style.scss文件

@function px2rem( $px ){
  @return $px/$designWidth*10 + rem;
}

$designWidth : 640; // 640 是设计稿的宽度,你要根据设计稿的宽度填写。即开发基准的页面宽度,在这个宽度的页面下用px开发

*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
.clearfix::after{
  content: '';
  display: block;
  clear: both;
}
body{
  font-size: 16px;
}
.box{
  background: #ddd;
  text-align: center;
  float: left;
  width: px2rem(256);
  height: px2rem(128);
  margin: px2rem(32) px2rem(32);
  border: 1px solid red;
  font-size: 1.2em;
}
③执行转换,得到px转换成rem的css文件
  • node-sass -wr scss -o css
    注意直接运行node-sass -wr scss -o css是不会得到css文件的,这个命令是一个监听的命令,必须在执行这行命令后保存一下之前编辑的style.scss文件才会得到转换后的css文件
//转换后的style.css文件
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box; }

.clearfix::after {
  content: '';
  display: block;
  clear: both; }

body {
  font-size: 16px; }

.box {
  background: #ddd;
  text-align: center;
  float: left;
  width: 4rem;
  height: 2rem;
  margin: 0.5rem 0.5rem;
  border: 1px solid red;
  font-size: 1.2em; }

相关文章

网友评论

      本文标题:移动端适配

      本文链接:https://www.haomeiwen.com/subject/htzblftx.html