移动端布局之动态rem的实现

移动端布局是现在Web前端开发的重要一环,其中动态rem是解决移动端适配的好方法之一。下面是基本的实现步骤:

1. 设置页面的viewport

首先在HTML文档的head标签中设置viewport,这样才能正确显示在移动设备上:

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

其中width=device-width表示宽度设为设备的宽度(单位为CSS像素),initial-scale=1表示页面的初始缩放比例为1。

2. 设置root font-size

通常默认的font-size是16px,但是我们需要动态计算,为此我们可以用JavaScript根据设备宽度来计算并设置root font-size。例如:假设设计稿宽度为750px,代码如下:

var rootEl = document.documentElement;
var designWidth = 750;
function setRemUnit() {
  var screenWidth = rootEl.clientWidth;
  var rem = screenWidth / designWidth * 100;
  rootEl.style.fontSize = rem + 'px';
}
setRemUnit(); // 初始化
window.addEventListener('resize', setRemUnit); // 监听窗口变化,重新计算rem

上面代码中,我们通过dividing screen width by design width可以得到rem的大小。我们每次监听到window的resize事件时都会重新调用setRemUnit()函数以确保rem的size总是正确的。

3. 使用动态rem布局

有了上述的设置,我们现在就可以使用rem对于移动设备布局了。例如,我们需要一个50px的宽度的按钮,就可以这样定义样式:

.button {
  width: 0.5rem;
  height: 0.5rem;
  font-size: 0.14rem;
  line-height: 0.5rem;
  border-radius: 0.1rem;
}

如果设备的宽度为320px(屏幕分辨率),那么在该屏幕下,0.5rem将会被计算为:

var screenWidth = 320;
var designWidth = 750;
var rem = screenWidth / designWidth * 100;
// 此时rem=42.67px,所以.button的宽度和高度将会是21.34px,即0.5rem乘以42.67px/100 ≈ 21.34px

示例1

设计稿宽度为640px,html部分代码为:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">

js部分代码如下

var roothtml = document.getElementsByTagName("html")[0];
var deviceWidth = roothtml.getBoundingClientRect().width; // 获取设备宽度
window.onresize = function(){
  deviceWidth = roothtml.getBoundingClientRect().width;
  if(deviceWidth > 640){
    deviceWidth = 640;
  }
  if (deviceWidth < 320) {
    deviceWidth = 320;
  }
  roothtml.style.fontSize = deviceWidth / 6.4 + 'px'; //6.4是640/100,即设计图画布的宽度分100份
}

示例2

设计稿宽度为750px,html部分代码为:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">

js部分代码如下

var roothtml = document.getElementsByTagName("html")[0];
var deviceWidth = roothtml.getBoundingClientRect().width;
window.onresize = function(){
  deviceWidth = roothtml.getBoundingClientRect().width;
  if(deviceWidth > 750){
    deviceWidth = 750;
  }
  if (deviceWidth < 320) {
    deviceWidth = 320;
  }
  roothtml.style.fontSize = deviceWidth / 7.5 + 'px'; //7.5是750/100,即设计图画布的宽度分100份
}

以上两个示例都是以设计稿的宽度为基础,计算每个屏幕需要缩放的比例,然后适配各个屏幕大小。这样在移动端设备中,就可以使用rem单位进行布局了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:移动端布局之动态rem的实现 - Python技术站

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

相关文章

  • Webpack 中 css import 使用 alias 相对路径的方法

    在使用 Webpack 打包项目时,为了更方便地引用 CSS 样式,我们通常会使用 alias 别名来定义 CSS 文件存放的路径。但是,在使用 alias 别名时,如何在 CSS 中正确引用文件呢?下面来详细介绍一下这个过程。 1. 配置 Webpack 首先,在 Webpack 配置文件中,需要定义别名 alias,以便正确引用 CSS 文件。可以在 w…

    css 2023年6月9日
    00
  • JavaScript实现拖拽效果

    首先,要实现拖拽效果,需要掌握一些JavaScript基础知识,例如事件处理、DOM操作等等。接下来,我将为您提供完整的攻略,包含以下几个步骤: 为被拖拽元素添加事件处理程序 在HTML页面中,我们需要为需要拖拽的元素添加一个事件处理程序。例如,我们可以给目标元素添加一个mousedown事件处理程序,当用户按下鼠标左键时触发拖拽事件。代码如下: docum…

    css 2023年6月10日
    00
  • SEO图片优化:web前端图片极限优化策略

    SEO图片优化:web前端图片极限优化策略 为什么需要图片优化 在现代互联网中,网站的图片通常占据了一个很大的比例,而图片过大会导致网页加载速度过慢,影响用户体验。而谷歌搜索引擎优化(SEO)也会对网页的图片进行考虑,如果图片过大,会影响网站的排名。因此,图片优化成为了一项必要的工作。 图片优化的策略 1. 压缩图片 压缩图片是图片优化中最基础也是最有效的手…

    css 2023年6月9日
    00
  • javascript中offset、client、scroll的属性总结

    下面就来详细讲解一下“javascript中offset、client、scroll的属性总结”。 1. 前言 在html和css中,我们可以通过指定元素的宽度和高度,来控制元素在页面上的大小。但是对于元素的可视区域(也就是页面空间中显示元素内容的区域),我们则需要使用offset、client、scroll等属性来获得。 2. offset offset属…

    css 2023年6月10日
    00
  • DIV+CSS布局也需要注意的SEO原则

    DIV+CSS布局是网站前端开发中常用的技术,它能够让网页排版更加灵活、兼容性更好,并且对SEO友好。但是,布局方式并不是惟一的影响SEO的因素,我们还需要在DIV+CSS布局过程中注意以下SEO原则。 1. 布局结构应符合语义化原则 语义化HTML结构对SEO十分重要。语义化结构使页面文本更有意义,有助于搜索引擎更好地理解页面内容,提高页面在搜索结果中的排…

    css 2023年6月10日
    00
  • 移动端开发1px线的理解与解决办法

    我来详细讲解一下“移动端开发1px线的理解与解决办法”的完整攻略。 什么是1px线 1px线,即为移动端上的一个像素线。由于移动端屏幕像素密度较高,不同设备的像素比也不同(例如iPhone 6是2倍像素密度,iPhone X为3倍像素密度),所以在开发过程中,开发者常常会遇到一个让人头疼的问题:如何绘制一条真实的1像素宽的线。 解决方案 border 利用C…

    css 2023年6月10日
    00
  • 简述AngularJS相关的一些编程思想

    讲解AngularJS相关的编程思想,首先需要知道一些AngularJS的核心概念。 核心概念 双向数据绑定 AngularJS最大的特点之一便是双向数据绑定,如果把在DOM(input/input/select)中输入的数据称为Model,把显示在页面中的数据称为View,那么在AngularJS中这两个数据之间便可以直接进行双向绑定。当Model改变时V…

    css 2023年6月9日
    00
  • Dreamweaver怎么用CSS制作圆角按钮?

    Dreamweaver 是一款流行的 Web 开发工具,它提供了丰富的功能和工具,可以帮助开发人员快速创建 Web 页面。在 Dreamweaver 中,我们可以使用 CSS 技术来制作圆角按钮。下面是一个完整攻略,包含了 Dreamweaver 怎么用 CSS 制作圆角按钮的过程和两个示例说明。 Dreamweaver 怎么用 CSS 制作圆角按钮 步骤一…

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