【HTML CSS】笔记11日 移动WEB开发之rem适配布局

在这里插入图片描述
在这里插入图片描述

1. rem 基础

1.1. rem 单位

  • em 相对于父元素的字体大小来说的,em 是父元素字体大小。
  • rem(root em)是一个相对单位,类似于 em,但它是相对于 html 元素字体大小来说的。
  • rem 的优点就是可以通过修改 html 里面的文字大小来改变页面中元素的大小可以整体控制。
  • 例如,根元素(html)设置 font-size=12px; 非根元素设置 width: 2rem; 则换成 px 表示就是 24px
    <style>
      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里面的文字大小来改变页面中元素的大小可以整体控制 */
      }
    </style>
  </head>

  <body>
    <div>
      <p></p>
    </div>
  </body>

2. 媒体查询

2.1什么是媒体查询

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

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

2.2 语法规范

@media mediatype and|not|only (media feature) {
    CSS-Code;
}
  • @media 开头,注意 @ 符号。
  • mediatype 媒体类型
  • 关键字 and not only
  • media feature 媒体特性必须有小括号包含。
2.2.1 mediatype 查询类型

将不同的终端设备划分成不同的类型,称为媒体类型
请添加图片描述

2.2.2 关键字

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

  • and:可以将多个媒体特性连接到一起,相当于“且”的意思。
  • not:排除某个媒体类型,相当于“非”的意思,可以省略。
  • only:指定某个特定的媒体类型,可以省略。
2.2.3 媒体特性

每种媒体类型都具有各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解三个,注意它们要加小括号包含。
请添加图片描述

    <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>
  </head>

  <body></body>

案例:根据页面宽度改变背景颜色

在这里插入图片描述
(1)按照从大到小的或者从小到大的思路。
(2)注意我们有最大值 max-width 和最小值 min-width 都是包含等于的。
(3)当屏幕小于540像素,背景颜色变为蓝色(x <= 539)。
(4)当屏幕大于等于540像素并且小于等于969像素的时候背景颜色为绿色(540<=x<=969)。
(5)当屏幕大于等于970像素的时候,背景颜色为红色(x >= 970)。

注意:为了防止混乱,媒体查询我们要按照从小到大或者从大到小的顺序来写,但是我们最喜欢的还是从小到大来写,这样代码更简洁。

    <style>
      /* 1. 媒体查询一般按照从大到小或者 从小到大的顺序来 */
      /* 2. 小于540px 页面的背景颜色变为蓝色 */

      @media screen and (max-width: 539px) {
        body {
          background-color: purple;
        }
      }
      /* 3. 540 ~ 970 我们的页面颜色改为 绿色 */
      /* @media screen and (min-width: 540px) and (max-width: 969px) {
            body {
                background-color: green;
            }
        } */

      @media screen and (min-width: 540px) {
        body {
          background-color: skyblue;
        }
      }
      /* 4. 大于等于970 我们页面的颜色改为 红色 */

      @media screen and (min-width: 970px) {
        body {
          background-color: pink;
        }
      }
      /* 5. screen 还有 and 必须带上不能省略的 */
      /* 6. 我们的数字后面必须跟单位  970px   这个 px 不能省略的 */
    </style>
  </head>

  <body></body>

在这里插入图片描述

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

(1)rem 单位是跟着 html 来走的,有了 rem 页面元素可以设置不同的大小尺寸。(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: 0.5rem;
        background-color: green;
        color: #fff;
        text-align: center;
        line-height: 1rem;
      }
    </style>
  </head>

  <body>
    <div class="top">购物车</div>
  </body>

2.4 引入资源(理解)

当样式比较繁多的时候,我们可以针对不同的媒体使用不同stylesheets(样式表)。原理,就是直接在link中判断设备的尺寸,然后引用不同的css文件。
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      /* 当我们屏幕大于等于 640px以上的,我们让div 一行显示2个 */
      /* 当我们屏幕小于640 我们让div一行显示一个 */
      /* 一个建议: 我们媒体查询最好的方法是从小到大 */
      /* 引入资源就是 针对于不同的屏幕尺寸 调用不同的css文件 */
    </style>
    <link
      rel="stylesheet"
      href="style320.css"
      media="screen and (min-width: 320px)"
    />
    <link
      rel="stylesheet"
      href="style640.css"
      media="screen and (min-width: 640px)"
    />
  </head>

  <body>
    <div>1</div>
    <div>2</div>
  </body>
</html>

3. Less 基础

3.1 维护 CSS 的弊端

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

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

3.2 Less 介绍

Less(LeanerStyle Sheets 的缩写)是一门 CSS扩展语言,也成为CSS预处理器。做为 CSS的一种形式的扩展,它并没有减少CSS的功能,而是在现有的CSS语法上,为CSS加入程序式语言的特性。它在CSS 的语法基础之上,引入了变量Mixin(混入)运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS的维护成本,就像它的名称所说的那样,Less可以让我们用更少的代码做更多的事情。

总结:Less 是一门 CSS 预处理语言,它扩展了CSS的动态特性

Less安装
  • 安装nodejs,可选择版本(8.0),网址:http://nodejs.cn/download/
  • 检查是否安装成功,使用 cmd 命令(win10是 window+r 打开运行输入cmd ) —输入node –v 查看版本即可。
  • 基于nodejs在线安装 Less,使用 cmd 命令 npm install -g less 即可。
  • 检查是否安装成功,使用cmd命令lessc -v查看版本即可。

3.3 Less 使用

我们首先新建一个后缀名为 less 的文件,在这个文件里面书写 less 语句。例如:my.less:
在这里插入图片描述
接下来的内容有:Less 变量、Less 编译、Less 嵌套、Less 运算

3.4 Less 变量

变量是指没有固定的值,可以改变的。因为我们CSS中的一些颜色和数值等经常使用。

  • 语法格式:@变量名: 值;
  • 必须有@为前缀。
  • 不能包含特殊字符。
  • 不能以数字开头。
  • 大小写敏感
@color: pink;

3.5 Less 编译

本质上,Less包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式,这些规则最终会通过解析器,编译生成对应的 CSS 文件。因此,我们需要把我们的 less 文件编译生成 css 文件,这样我们的 html 页面才能使用。

3.5.1 VScode Less 插件 ⭐⭐

Easy LESS 插件用来把 less 文件编译为 css 文件。安装完毕插件,重新加载下VScode后,只需要保存一下 less 文件,就会自动生成 css 文件。
在这里插入图片描述
例如:新建 my.less 文件,文件内容如上述 less 文件,保存后,VScode自动生成 my.css 文件。新建了一个html文件,引入my.css文件,之后就可以改变html中的样式了。
在这里插入图片描述

3.6 Less 嵌套

我们经常用到选择器的嵌套,例如下面代码所示:

#header .logo {
  width: 300px;
}

将 css 改为 less,less 的写法为:

#header {
    .logo {
       width: 300px;
    }
}

如果遇见 (交集|伪类|伪元素选择器) ,利用 & 进行连接。

  • 内层选择器的前面没有 & 符号,则它被解析为父选择器的后代。
  • 如果有 & 符号,它就被解析为父元素自身或父元素的伪类。
a:hover{
    color:red;
}
/* Less 嵌套写法 */
a{
  &:hover{
      color:red;
  }
}

nest.less 文件
在这里插入图片描述
生成的nest.css文件

.header {
  width: 200px;
  height: 200px;
  background-color: pink;
}
.header a {
  color: red;
}
.header a:hover {
  color: blue;
}
.nav .logo {
  color: green;
}
.nav::before {
  content: "";
}

less嵌套.html文件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      /* .header {}
        .header a {} */
    </style>
    <link rel="stylesheet" href="nest.css" />
  </head>

  <body>
    <div class="header">
      <a href="#">文字</a>
    </div>
    <div class="nav">
      <div class="logo">传智播客</div>
    </div>
  </body>
</html>

3.7 Less 运算 ⭐

任何数字、颜色或者变量都可以参与运算。Less提供了加(+)、减(-)、乘(*)、除(/)算数运算。

/*Less 里面写*/
@witdh: 10px + 5;
div {
    border: @witdh solid red;
}
/*生成的css*/
div {
  border: 15px solid red;
}
/*Less 甚至还可以这样 */
width: (@width + 5) * 2;

注意:
  • 乘号(*)和除号(/)的写法 。

  • 运算符中间左右有个空格隔开 1px + 5

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

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

  • count.less文件

在这里插入图片描述

  • count.css 文件
html {
  font-size: 50px;
}
div {
  width: 150px;
  height: 500px;
  border: 10px solid red;
  background-color: #444444;
}
img {
  width: 1.64rem;
  height: 1.64rem;
}
  • less运算.html文件
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <link rel="stylesheet" href="count.css" />
  </head>

  <body>
    <div></div>
  </body>
</html>

4. rem 适配方案

4.1 rem 实际开发适配方案

(1)按照设计稿与设备宽度的比例,动态地计算并设置 html 根标签的 font-size 大小;(媒体查询)
(2)CSS 中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为 rem 为单位的值。
在这里插入图片描述

4.2 rem 适配方案技术使用(市场主流)

在这里插入图片描述
总结:两种方案现在都存在。方案2更简单,现阶段大家无需了解里面的JS代码。

4.3 rem 实际开发适配方案1

rem + 媒体查询 + less 技术

4.3.1 设计稿常见尺寸宽度

在这里插入图片描述
一般情况下,我们以一套或者两套效果图适应大部分的屏幕,放弃极端屏或者对其优雅降级,牺牲一些效果。现在基本以750为准。

4.3.2 动态设置 html 标签 font-size 大小

在这里插入图片描述

4.3.3 元素大小取值方法

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      @media screen and (min-width: 320px) {
        html {
          font-size: 21.33px;
        }
      }

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

      div {
        width: 2rem;
        height: 2rem;
        background-color: pink;
      }
      /* 1. 首先我们选一套标准尺寸 750为准 
        2. 我们用屏幕尺寸 除以 我们划分的份数 得到了 html 里面的文字大小 但是我们知道不同屏幕下得到的文字大小是不一样的 */
      /* 3. 页面元素的rem值 =  页面元素在 750像素的下px值 / html 里面的文字大小 */
    </style>
  </head>

  <body>
    <div></div>
  </body>
</html>

5. 苏宁首页案例制作

5.1 技术选型

在这里插入图片描述

5.2 搭建文件夹结构

5.3 设置视口标签以及引入初始化样式

在这里插入图片描述

5.4 设置公共 common.less 文件

在这里插入图片描述

5.5 新建 index.html 文件

在这里插入图片描述

5.6 body样式

body {
    min-width: 320px;
    width: 15rem;
    margin: 0 auto;
    line-height: 1.5;
    font-family: Arial,Helvetica;
    background: #F2F2F2;
}

6. rem 适配方案2

6.1 简洁高效的rem适配方案flexible.js

在这里插入图片描述
github地址:https://github.com/amfe/lib-flexible。

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

  setRemUnit()

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

6.2.1 技术选型

在这里插入图片描述

6.2.2 搭建文件夹结构

6.2.3 设置视口标签、引入初始化样式以及js文件

在这里插入图片描述
在这里插入图片描述

6.2.4 body样式

在这里插入图片描述

6.3 VScode px 转换 rem 插件 cssrem

在这里插入图片描述
安装好插件之后,需要设置html字体大小基准值。

  • 打开设置,快捷键是 ctrl + 逗号。
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值