rem布局原理解析

Rem布局原理解析

在移动端页面开发中,由于设备尺寸的不同,为了适配不同分辨率的设备,我们需要用到不同的布局方法。其中,rem布局是一种比较实用的布局方案。通过本文,我们可以了解到什么是rem布局,以及如何使用rem布局。

什么是rem布局?

rem,全称为“root em”,它是相对于根元素的font-size大小来进行设置元素尺寸的单位。rem布局的原理就是通过改变其根元素的font-size大小来达到整个页面的缩放目的。

一般情况下,我们使用的rem的单位大小为root font size,即根字体大小(html标签的字体大小)。我们可以通过javascript脚本让根字体随着设备宽度的变化而发生变化,从而实现移动端适配。

rem布局的实现方式

方式一:js动态修改html根元素的font-size

function setRem(){
    var whdef = 100/1920;// 表示1920的设计图,使用100PX的默认值,(实际的750的设计图根号为50)
    var wH = window.innerHeight;// 当前窗口的高度
    var wW = window.innerWidth;// 当前窗口的宽度
    var rem = wW * whdef;// 以默认比例值乘以当前窗口宽度,得到该宽度下的相应font-size值
    document.getElementsByTagName("html")[0].style.fontSize = rem + "px";
}

setRem();
window.addEventListener("resize",function(){
    setRem();
})

这段代码中,首先定义了一个计算rem值的函数setRem(),计算公式为 wW * whdef,具体解释如下:

  • whdef是我们自定义的根元素默认比例值,本例中设为100/1920,即1920px宽设计图下,1rem=100px。
  • wW是当前设备的屏幕宽度,即我们现在要适配的窗口大小。
  • 计算出的rem值,在赋值给根元素html标签的font-size属性。

我们在窗口大小变化时,通过事件监听来动态的调整rem的比例值。

方式二:使用第三方库

此外,还有一种更加方便的方式,即使用第三方的库,如flexible.js、amfe-flexible.js等。

以amfe-flexible.js为例,其使用方法如下:

第一步:安装

我们可以通过npm安装该库,在终端中运行以下命令:

npm install amfe-flexible --save-dev

第二步:使用

main.js中引入该库,并调用一次它的init()方法即可。如下所示:

import flexible from 'amfe-flexible'

flexible.init()

在引入该库之后,它会在页面渲染的时候,自动计算出一个rem的比例值,并根据该比例值来设置根元素的font-size。

注意事项

在使用rem布局的时候,需要注意以下几点:

  • 根元素html必须设定font-size。
  • 1rem不应该等于某个具体的像素值,而应该等于视口的宽度 所占的比例值。
  • 使用rem布局时,尽可能将元素宽度、高度、间距等设置为整数类型。这是为了避免一像素问题。
  • 当屏幕的横向尺寸小于375px时,可以使用fixed布局。

示例说明

示例一:使用js动态设置rem的值

设想我们有一个设计稿,宽度为750px,如何使用rem布局来进行适配呢?

首先,我们定义设计稿与rem的转换关系:1rem=100px,即baseSize = 100 / 750 * window.innerWidth;

接着,我们可以通过如下代码来动态设置rem的值:

(function () {
    var baseSize = 100 / 750 * window.innerWidth + 'px';
    document.getElementById('html').style.fontSize = baseSize;
})()

这段代码中,我们首先将设备宽度乘以比例值,计算出一个rem的值,然后将该值通过style属性设置到根元素html上。

示例二:使用amfe-flexible库

amfe-flexible是一个流行的用于设置rem的库,下面是该库的使用方法:

  1. 安装:
npm install amfe-flexible --save
  1. 引入:
import 'amfe-flexible'
  1. 编写:

在写页面的时候,我们可以直接在CSS文件中使用rem单位来进行页面布局:

.s-box {
    width: 2rem;
    height: 1.5rem;
    margin: 0.5rem;
    padding: 0.2rem;
    font-size: .15rem;
    line-height: .2rem;
    border-radius: .2rem;
    box-shadow: 0 1px 1px rgba(0,0,0,.2);
    background: #fff;
}

在上面的代码中,我们使用了rem作为单位,这样就可以实现一个在不同设备上都具有相同尺寸的盒子了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:rem布局原理解析 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS属性之定位属性(图文详解)

    CSS属性之定位属性(图文详解) CSS定位属性会对元素的显示位置进行控制,包括position、top/bottom和left/right等属性。本文将为大家详细介绍CSS定位属性,以及如何正确应用它们。 position属性 position属性用来指定元素在文档中的定位方式。常用的值有4种: static(默认):元素在文档中遵循正常流程布局,不进行特…

    css 2023年6月9日
    00
  • 原生JS轮播图插件

    下面我就介绍一下如何制作一个原生JS轮播图插件的完整攻略。 步骤1:设计HTML结构 首先需要设计好轮播图的HTML结构,一般包括一个容器div,可以使用ul和li标签来构建轮播项,设计的结构应该符合插件的设计要求。 <div class="slider-container"> <ul class="slide…

    css 2023年6月9日
    00
  • HTML+CSS+JS实现堆叠轮播效果的示例代码

    下面是HTML+CSS+JS实现堆叠轮播效果的完整攻略,包含了实现步骤以及示例说明。 一、实现步骤 1.编写HTML结构 首先,我们需要编写基本的HTML结构,包括容器以及需要轮播的子元素。具体代码如下: <div class="slider-container"> <div class="slider-ite…

    css 2023年6月10日
    00
  • a和span组合定义按钮样式实例分享

    以下是“a和span组合定义按钮样式实例分享”的完整攻略。 1. a和span组合定义按钮样式的基本思路 a和span组合定义按钮样式,是指使用a标签来模拟一个链接按钮,同时使用span标签来添加按钮文字或图标等内容。实现此效果,需要按照以下步骤进行操作: 将a标签的display属性设置为inline-block或block,使其具有宽度和高度的可调节性。…

    css 2023年6月11日
    00
  • 深入剖析CSS变形transform(3d)

    深入剖析CSS变形transform(3d) 什么是Transform Transform 是 CSS3 中非常强大的一个属性。它可以让我们对元素进行各种变形操作,例如平移、旋转、缩放、扭曲等等,同时它也支持 3D 移动和变形。 Transform 的使用 Transform 属性包括很多个子属性,常用的有 translate、rotate、scale、sk…

    css 2023年6月10日
    00
  • 深入浅析Jsonp解决ajax跨域问题

    关于“深入浅析Jsonp解决ajax跨域问题”的完整攻略,我将从以下几个方面进行讲解: 什么是跨域问题 什么是Jsonp以及如何使用Jsonp解决跨域问题 Jsonp示例说明 注意事项与缺点 1. 什么是跨域问题 跨域问题是指在Web应用中,如果一个源(域、协议、端口号的组合)在请求一个不同的源的资源时,浏览器会阻止该请求,因为这样可能会导致信息泄露、数据损…

    css 2023年6月10日
    00
  • YUI 中的 Grids CSS值得关注和学习的

    YUI(Yahoo User Interface)中的Grids CSS是一个响应式布局框架,它可以帮助开发人员在不同设备上创建一致的网格布局,非常适用于Web应用程序和移动应用程序的开发。以下是关于YUI Grids CSS值得关注和学习的一些攻略: 1. 栅格系统的使用 YUI Grids CSS的栅格系统是用于布置页面的一组CSS类。这些类可以帮助你创…

    css 2023年6月10日
    00
  • AngularJs bootstrap详解及示例代码

    接下来我将给你详细讲解“AngularJs bootstrap详解及示例代码”的完整攻略。 什么是AngularJS Bootstrap? AngularJS Bootstrap是一个基于AngularJS框架的UI组件库,它为AngularJS应用程序提供了众多常用的UI组件和指令,例如弹出框(modal)、选项卡(tabs)、滚动条(scrollspy)…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部