rem布局

142 阅读2分钟

rem布局

流式布局的缺点:

  1. 文字大小无法随着屏幕大小变化而变化
  2. 高度无法设置
  3. 无法在屏幕变化时让屏幕高度和宽度等比缩放

一. rem布局基础

rem是什么?

rem即root em,前面我们学习CSS的时候知道,em是父元素字体大小

rem是相对于html元素的字体大小

例如:

html{
    /*设置根元素为12px*/
	font-size:12px;
}
div {
    /*2rem即为24px*/
	font-size:2rem;
}

二. 媒体查询

什么是媒体查询?

媒体查询是CSS3新语法:

@media mediatype and|not|only (media feature) {
 CSS-Code;
}
media type连接词media feature
all 所有设备/print 打印机 /screen屏幕and 连接多个媒体特性/not排除某个媒体类型/only连接某天个特定媒体类型width定义可见区域宽度/min-width定义输出设备最小可见区域/max_width最大可见区域

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

@media screen and (max-width: 800px) {
    body {
        background-color: pink;
    }
}

@media screen and (max-width: 500px) {
    body {
        background-color: purple;
    }
}

实例解释:当页面宽度在800到500之间背景色为pink,当页面宽度在500以下,背景色为purple

三. 媒体查询+rem实现动态变化

实现思路:

  1. 针对每个宽度区域设置不同的rem大小
  2. 使用媒体查询在不同宽度内引入不同文件设置不同rem
  3. 在写CSS文件时,使用rem作为单位

这样我们就可以使用rem+媒体查询来动态改变盒子大小了

使用媒体查询引入资源

语法规范:<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">

实例:

    <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)">

四. rem适配方案

rem适配方案有两种:

  1. 媒体查询+rem
  2. flexible.js+rem(推荐)

前面已经基本讲过第一种适配方案了,这里重点看第二种适配方案

flexible.js是什么?

是手机淘宝团队编写的移动端适配库,无需编写太多媒体查询

该库代码和原理非常简单,即 将rem永远设置为视窗宽度的1/10

var rem = document.documentElement.clientWidth / 10

项目代码初始化

<meta name="viewport" content="width=device-width, user-scalable=no, 
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">
<script src=“js/flexible.js”> </script>
/* 如果我们的屏幕超过了 750px  那么我们就按照 750设计稿来走 不会让我们页面超过750px */
@media screen and (min-width: 750px) {
    html {
        font-size: 75px!important;
    }
}
body {
min-width: 320px;
width:15rem;
margin: 0 auto;
line-height: 1.5;
font-family: Arial,Helvetica;
background: #F2F2F2;
}

五. VScode插件cssrem

作用:自动将px转换为rem,免除繁琐的计算

image-20220107172939131.png

安装cssrem之后可以设置rem单位基准值,后面在写CSS时,直接写测量出来的px单位就可以直接转为rem单位