移动端rem布局

移动端rem布局

在之前学习的布局中屏幕中的文字、高度、都是固定的,

用rem布局就能随屏幕大小的改变而等比例的进行改变

1.rem基础

1.1rem单位

在之前所学内容中的单位有px

rem(root em) 是一个相对单位,类似于em ,em是父元素字体大小

不同的是rem的基准是html元素的字体大小

        html {
            font-size: 12px;
        }
        
        div {
            font-size: 12px;
            width: 15rem;
            height: 15rem;
            background-color: purple;
        }
        
        p {
            /* 1. em相对于父元素 的字体大小来说的 */
            /* width: 10em;
            height: 10em; */
            /* 2. rem 相对于 html元素 字体大小来说的 */
            width: 10rem;
            height: 10rem;
            background-color: pink;
            /* 3.rem的优点就是可以通过修改html里面的文字大小来改变页面中元素的大小可以整体控制 */
        }

2.媒体查询

2.1什么是媒体查询

媒体查询(Media Query)是CSS3新语法。

  • 使用@media查询,可以针对不同的媒体类型定义不同的样式
  • @media可以针对不同的屏幕尺寸设置不同的样式
  • 当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面
  • 目前很多设备都用到了多媒体查询

2.2语法规范

@media mediatype and/not/only(media feature){}
  • 用@media开头 注意@符号
  • mediatype媒体类型
  • 关键字 and not only
  • media feature 媒体特色 必须有小括号包含
2.2.1 mediatype媒体查询类型

与终端设备相关

解释说明
all用于所有设备
print打印机、打印预览
screen用于电脑屏幕、平板电脑、智能手机
2.2.2 关键字

关键字将媒体类型或多个媒体特性连接到一起作为媒体查询的条件。

  • and:连接多个媒体特性
  • not:排除某个媒体类型
  • only :指定 某个媒体类型
    <style>
        /* 这句话的意思就是: 在我们屏幕上 并且 最大的宽度是 800像素 设置我们想要的样式 */
        /* max-width 小于等于800 */
        /* 媒体查询可以根据不同的屏幕尺寸在改变不同的样式 */
        
        @media screen and (max-width: 800px) {
            body {
                background-color: pink;
            }
        }
        
        @media screen and (max-width: 500px) {
            body {
                background-color: purple;
            }
        }
    </style>

2.3 媒体查询+rem实现元素大小动态变化

    <style>
        * {
            margin: 0;
            padding: 0;
        }
        /* html {
            font-size: 100px;
        } */
        /* 从小到大的顺序 */
        
        @media screen and (min-width: 320px) {
            html {
                font-size: 50px;
            }
        }
        
        @media screen and (min-width: 640px) {
            html {
                font-size: 100px;
            }
        }
        
        .top {
            height: 1rem;
            font-size: .5rem;
            background-color: green;
            color: #fff;
            text-align: center;
            line-height: 1rem;
        }
    </style>

2.4 引入资源

当样式比较繁多的时候,针对不容的媒体使用不同stylesheets

原理:就是在link中判断设备的尺寸,然后应用不同的css文件

    <link rel="stylesheet" href="style320.css" media="screen and (min-width: 320px)">
    <link rel="stylesheet" href="style640.css" media="screen and (min-width: 640px)">

3.less基础

3.1维护css的弊端

CSS是一门非程序语言,没有变量、函数、SCOPE(作用域)等概念

  • CSS需要书写大量看似没有逻辑的代码,CSS冗余度是比较高的。
  • 不方便维护级扩展,不利于复用
  • CSS没有很多好的计算能力
  • 非前端开发工程师来讲,往往会应为缺少CSS编写经验而很难写出组织良好且易于维护的CSS代码项目

直接pass掉less安装等有的没的 我还担心装了sass会不会有冲突,瞎忙活 easy less就完事了

3.4 less变量

@变量名:值;
3.4.1 变量命名规范
  • 必须有@为前缀

  • 不能包含特殊字符

  • 不能以数字开头

  • 大小写敏感

语法等笔记通sass差不多 ok 结束今天的学习2022.11.2

3.6 less 嵌套

3.7 less运算

对于两个不同的单位的值之间的运算,运算结果的值去第一个单位

如果两个值之间只有一个值有单位,则运算结果就取该单位

4.rem适配

1.让一些不能等比自适应的元素,达到当设备尺寸发生改变
的时候,等比例适配当前设备。
2.使用媒体查询根据不同设备按比例设置html的字体大小,
然后页面元素使用rem做尺寸单位,当html字体大小变化
元素尺寸也会发生变化,从而达到等比缩放的适配。

4.1rem实际开发适配方案

1.按照设计稿与设备宽度的比例,动态计算并设置html 根标签的font-size大小;(媒体查询)

2.CSS中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为rem为单位的值;

4.2 rem技术

技术方案1技术方案2(推荐)
leeflexible.js
媒体查询rem
rem

4.3 rem适配方案1

4.3.1常见设计尺寸宽度

根据市场手机决定

一般情况下,会以一套或两套效果图适应大部分的品目,放弃极端屏或对齐优雅降级牺牲一些效果

4.3.2 动态设置html标签font—size大小
  • 假设设计稿是750px
  • 假设我们把整个屏幕划分为15等份(划分标准不一可以是20份也可以是10等份)
  • 每份作为html字体大小,这里就是50px
  • 那么在320px设备的时候,字体大小为320/15就是21.33px
  • 用我们页面元素的大小除以不同的html字体大小会发现他们比例还是相同的
  • 比如我们以750为标准设计稿
  • 一个100*100像素的页面元素在750屏幕下,就是100/50转换为rem 是2rem *2 rem 比例是1比1
  • 320屏幕下,html字体大小为21.33则2rem = 42.66px此时宽和高都是42.66但是宽和高的比例还是1比1但是已经能实现不同屏幕下页面光素盒子等比例缩放的效果
4.3.4元素大小取之方法
  1. 最后的公式︰页面元素的rem值=页面元素值( px )/(屏幕宽度│划分的份数)
  2. 屏幕宽度/划分的份数就是 html font-size的大小
  3. 或者:页面元素的rem值=页面元素值( px ) / html font-size字体大小

4.5.苏宁首页制作

4.5.1 技术

单独制作移动页面方案

技术:布局才去rem适配布局(less+rem+媒体查询)

设计图:750尺寸

4.5.2 搭建文件
4.5.3 设置视口标签以及引入初始化样式
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="css/normalize.css">
    <link rel="stylesheet" href="css/index.css">
    <title>Document</title>
</head>
4.5.4 设置公共common.less文件

新建文件 设置常见屏幕尺寸,利用媒体查询设置不同的html字体大小

划分的分数定位15等份

4.5.5新建index.less文件

1.新建index.less 写首页的样式

  1. 导入common.less
@import "common"

3.生成index.css 引入到index.html

4.5.6.body样式
body {
  min-width: 320px;
    /* 页面宽度随屏幕改变*/
  width: 15rem;
  margin: 0 auto;
  line-height:  1.5;
  font-family:  Arial,Helvetica;
  background:  #F2F2F2;
}

重点:

@baseFont: 50;
.search-content {
    display: flex;
    position: fixed;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 15rem;
    height: 88rem / @baseFont;

height: 88rem / @baseFont;

假设当前屏幕宽度为750px ,且分为15等份

由于1rem = 750/15 =50px

那么屏幕宽度为750px时需要设置的高度为88px时,求需要设置为几rem

此时1rem = 50px 直接用相同单位下的px去计算rem值

x rem = 88/50 rem

4.6 rem适配方案2

4.6.1 简介高校的rem适配方案felxible.js

手机淘宝团队出的简洁高效移动端适配库
我们再也不需要在写不同屏幕的媒体查询,因为里面js做了处理
它的原理是把当前设备划分为10等份,但是不同设备下,比例列还是一致的。我们要做的,就是确定好我们当前设备的html文字大小就可以了
比如当前设计稿是750px,那么我们只需要把html文字大小设置为75px(750px /10)就可以里面页面元素rem值:页面元素的px值/75
剩余的,让flexible.js来去算

  // set 1rem = viewWidth / 10
  function setRemUnit () {
    var rem = docEl.clientWidth / 10
    docEl.style.fontSize = rem + 'px'
  }

4.6.2 使用适配方案2制作苏宁移动端首页

技术发生改变

搭建文件时多个js文件夹

引入js

body样式也不变 只需更改rem值 15→10 同时需要限制最大宽度

body {
    min-width: 320px;
    max-width: 750px;
    /* flexible 给我们划分了 10 等份 */
    width: 10rem;
    margin: 0 auto;
    line-height: 1.5;
    font-family: Arial, Helvetica;
    background: #f2f2f2;
}
4.6.3 VSCode px转换rem 插件 cssrem

注意插件默认的font-size为16px

使用时需要进入setting.json修改cssroot

将16改为当前项目所需要的大小

使用flexible.js时会将html font-size更改为屏幕大小/10

当超出移动端最大宽度是 会发生变形

需要限定font-size的值

/* 如果我们的屏幕超过了 750px  那么我们就按照 750设计稿来走 不会让我们页面超过750px */

@media screen and (min-width: 750px) {
    html {
        font-size: 75px!important;
    }
}

!important 提权

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值