移动端布局之动态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日

相关文章

  • css中float:right右对齐元素会换行不在同一条线上

    CSS中float:right属性是用于将元素向右浮动,但是当使用float:right时,右对齐元素会换行不在同一条线上的情况很常见。其原因是当一个元素被设置float:right后,它会尽量靠右排列,但排列的过程中可能因为行宽不够等限制条件而被迫换行,导致右对齐的元素不在同一条线上。下面是两条示例说明: 示例1 考虑以下HTML代码: <div c…

    css 2023年6月10日
    00
  • Vue中使用Tailwind CSS的具体方法

    当我们使用Vue.js进行前端开发时,很多时候我们需要使用CSS框架来提高开发效率并实现更漂亮的界面。而Tailwind CSS是一款基于Utility-First(以下简称UF)设计的CSS框架,可以让我们快速地构建HTML界面。本文将介绍如何在Vue项目中使用Tailwind CSS。 1. 安装Tailwind CSS 首先,我们需要在Vue项目中安装…

    css 2023年6月10日
    00
  • 给before和after伪元素设置js效果的方法

    给before和after伪元素设置js效果的方法主要有以下几个步骤: 首先,使用CSS选择器选中要添加效果的元素的before或after伪元素。例如: div:before { content: ""; display: block; width: 50px; height: 50px; background-color: red; …

    css 2023年6月10日
    00
  • Iconfont不能上传如何维护Icon

    如何维护 Iconfont 如果 Iconfont 不能上传,可以通过以下步骤进行维护: 下载 Iconfont 本地文件 打开 Iconfont 项目,在“已选中”的图标中勾选需要使用的图标; 点击页面下方的“下载代码”按钮; 选择“Symbol”类型,点击“下载”,下载得到的压缩包即为本地文件。 在项目中引入 Iconfont 解压下载得到的压缩包,将里…

    css 2023年6月10日
    00
  • 响应式WEB设计学习(1)—判断屏幕尺寸及百分比的使用

    响应式WEB设计是指网页能够在不同大小的设备上自适应地调整布局和样式,以适应不同大小屏幕的显示需求。在这篇攻略中,我将介绍如何使用判断屏幕尺寸和百分比布局来实现响应式WEB设计。 判断屏幕尺寸 在实现响应式设计时,我们需要对不同尺寸的设备进行适配。可以使用CSS媒体查询来判断不同屏幕尺寸下应该采用何种样式和布局方式。 例如,下面的代码表示当屏幕宽度小于等于6…

    css 2023年6月11日
    00
  • 纯CSS3绘制打火机动画火焰效果

    下面是“纯CSS3绘制打火机动画火焰效果”的完整攻略: 一、准备工作 在进行CSS3绘制打火机动画火焰效果前,我们需要准备以下两个部分: 1. 打火机图片素材 我们需要一张打火机的png图片作为打火机的背景,不能过于复杂,简单的打火机效果即可。可以借用各大图片搜索引擎(如百度图片、Google图片)进行搜索和下载。 2. CSS3知识 CSS3的新特性支持动…

    css 2023年6月10日
    00
  • 影响jQuery使用的14个方面

    影响jQuery使用的14个方面 1. jQuery版本 使用不同版本的jQuery可能会有差异,在使用中需要注意版本兼容性,保证所使用的插件与版本适配。 2. 引入方式 正确的引入jQuery是保证jQuery可用的基础,需要遵循CDN、本地文件同时存在的规则,保证引用的jQuery文件能被正确加载。 3. 加载顺序 jQuery与其它库、框架的引入顺序会…

    css 2023年6月9日
    00
  • CSS3制作日历实现代码

    下面我将为您详细讲解“CSS3制作日历实现代码”的完整攻略。 1. 概述 在制作日历时,我们可以使用HTML和CSS技术结合实现,其中CSS3的强大效果能够让我们的日历更加美观、炫酷。在这个过程中我们需要使用到CSS3属性及相关的样式设置,同时还需要使用HTML标签结构来实现日历。 2. HTML标签结构 日历的核心是一个个日期格子,因此我们可以使用HTML…

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