移动端布局方案

## 移动端布局方案

### 3.1 流式布局(宽度自适应)

流式布局是宽度使用百分比代替固定宽度px,高度大多使用px来固定,因此在大屏幕手机下显示的效果会变成页面元素的宽度被拉长,高度和原来保持一致

优点:

可以很好的来解决自适应的问题

缺点:

1、实际显示的效果不友好,屏幕越大,宽度被拉的很长,容易变形

2、大量使用百分比布局,会出现兼容性问题

```html

    <style>

        * {

            margin: 0;

            padding: 0;

        }

        .box {

            width: 50%;

            height: 100px;

            background-color: pink;

        }

        img {

            width: 50%;

            height: 100px;

        }

    </style>

</head>

<body>

    <div class="box"></div>

    <img src="./images/Koala.jpg" alt="">

</body>

```

### 3.2 rem布局

* rem是css3新增单位,它是相对于根元素的字号大小的单位

  rem原理:

​     rem是指相对于根元素的字体大小的单位,即根据html元素的font-size来计算大小。

​      在布局过程中只要使用 rem 设置元素的尺寸,在改变 rem 的基准值 html 的字体大小的时候,页面上的元素将等比例缩放实现适配。

比如说 html 的 font-size 大小为 100px, 一个 div 的 width 为 1rem,则 div 的 width大小为100px

相对单位 : rem  

```css

html {

    font-size:100px; //1rem = 100px

}

.box {

    width:2rem;// 2*100 = 200px

    height:3rem;//3*100 = 300px

    font-size:1rem;//1*100 = 100px

}

```

* rem布局的实现:

​    1、设置页面的viewport

​    2.动态计算并设置不同尺寸html的font-size属性

​    3.按照PC端布局方式正常布局,将px单位改为rem单位(较小 的长度比如1px的边框就不需要转换成rem,直接设置px)

```js

// 1. 获取当前屏幕的宽度

// 2. 获取当前屏幕下html元素的字体大小;

// 3. 赋值

  当前屏幕宽度字体基础值html = 当前屏幕宽度*预设字体基础值/psd设计稿的宽度;

       

        320:当前屏幕宽度,设备宽度  deviceWidth

        640:psd稿  desw

        100:预设字体基础值1rem=100px

        ?: 当前屏幕宽度字体的基础值(html的font-size的值)currFontSize

        320     ?

        ——  =  ——

        640     100

        ?=(320*100)/640

        currFontSize=(deviceWidth*100)/desw

        // 封装一个函数,这个函数的名字叫auto

        function auto() {

            // 获取当前屏幕的宽度

            var deviceWidth = document.documentElement.clientWidth;

            // 打印当前屏幕的宽度

            console.log(deviceWidth);

            //psd设计稿的宽度 假如设计稿就是750px

            var desw = 750;

            //手机屏幕 大于 设置稿  ,就按1:1的大小去做

            if (deviceWidth > desw) {

                deviceWidth = desw;

            }

            // 获取当前屏幕宽度字体的基础值

            var currFontSize = (deviceWidth * 100) / desw

         // 打印当前屏幕宽度html的font-size

            console.log(currFontSize);

            // 赋值 (给html设置font-size的值)

            document.documentElement.style.fontSize = currFontSize + 'px';

           

            // 表示获取 html

            console.log(document.documentElement);

        }

        // 调用函数

        auto();

        //只要屏幕改变就调用auto函数

        window.onresize = function () {

            auto();

        }

```

* 优点:

1.适用于偏APP类型的移动端页面

2.有利于手机端各种机型的适配

3.减少代码的重复性

* 缺点:

1.必须通过js来动态控制根元素的字体大小

 ```html

 在 Visual Studio Code 装一个插件: px to rem

 文件--首选项--设置--搜索 px to rem --16改成100

 转换px--rem或rem--px  捷键:alt +z(选中要换算的代码)

 ```

### 3.3 vw布局

 使用纯css实现动态改变font-size属性值,不需要引用js文件

 - vw viewport's width  是css3规范中宽度视口单位,将视口宽度平均分成100份

 - vh viewport's height 将视口高度平均分成100份

- 原理:确定基准值以常见的750像素宽度的设计稿为例,根据vw单位的原理100vw = 750px,即 1vw = 7.5px,根据设计稿中的px值,转换成对应的vw值进行布局,也可以直接写px

  100vw  =  750px      1vw = 7.5px;    

  100vw  = 375px        1vw = 3.75px  

  1px =0.1333333333333333vw

- 优点:页面元素随着页面宽度变化

- 缺点:

  * 兼容性没有rem好 ,得大量计算, 不是很精确

  * 转换后的长度单位不够直观修改维护困难

```html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

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

    <title>Document</title>

    <style>

        * {

            margin: 0;

            padding: 0;

        }

        .box {

            width: 1vw;

            height: 1vw;

            background-color: green;

        }

        .box1 {

            /* width: 100px; */

            width: 13.33vw;

            /* 100*0.1333=5.332 */

            height: 13.33vw;

            /* height: 100px; */

            background-color: pink;

        }

    </style>

</head>

<body>a

    <div class="box"></div>

    <div class="box1"></div>

    <!-- /* 在移动端调试,点击responsive,调到750px */ -->

</body>

</html>

```

 在 Visual Studio Code 装一个插件: px to vw

 转换px--vw或vw--px  捷键:alt +z(选中要换算的代码)

注意:会给px-rem有冲突

### 3.4 vw + rem布局

    确定基准值以常见的750px设计稿为例(宽度),根据vw单位和rem单位原理实现

在750px设计搞下,如果使用vw单位换算,可以理解成100vw = 750px,1px = 0.13333333vw;如果使用rem单位换算,预设1rem = 100px; 则100px = 13.333333vw

    html{

        font-size: 13.333333vw;

    }

 弊端 :  不是很精确

```css

750px   100vw   1vw = 7.5px;    

375px   100vw    1vw = 3.75px  

以设计稿为准:

假设还是750px设计稿  750px=100vw    1px=0.1333vw;  

预设字体基础值 100px   1rem = 100px  = 13.33vw;


 

html {

    font-size:13.33vw;

}

     .box1 {

            width: 0.4rem;

            height: 0.8rem;

            background: pink;

        }

        /*width:40px;

            height: 80px;  */

```





 

## 15.4移动端项目

### 项目介绍

#### 项目名称:

小U商城

#### 项目描述

小U商城是面向移动端的专业综合网上购物商城,我们要完成 首页、列表页、详情页等静态页面的制作

#### 技术选型

布局采取rem适配布局

#### 设计图尺寸

本设计图采用 750px 设计尺寸

#### 开发工具

- VScode

- 蓝湖


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值