详解基于Vue/React项目的移动端适配方案

详解基于Vue/React项目的移动端适配方案

移动端适配问题一直困扰着前端开发人员,特别是在不同设备分辨率差异巨大的情况下。本攻略将详细介绍基于Vue/React项目的移动端适配方案,包括使用vw和rem两种方式进行适配。

什么是vw和rem

vw和rem是移动端适配中比较常用的两种方式。vw是视窗单位,将屏幕宽度分成100份,1vw表示屏幕宽度的1%。rem是根据HTML根元素字体大小来决定页面其他元素的大小的单位,1rem等于HTML根元素字体大小。使用vw和rem可以让页面元素按比例自适应。

使用vw进行适配

使用vw进行适配的步骤如下:

  1. 引入postcss-px-to-viewport插件,在项目根目录下的.postcssrc.js文件中进行配置。
module.exports = {
  "plugins": {
    "postcss-import": {},
    "postcss-url": {},
    "postcss-aspect-ratio-mini": {},
    "postcss-write-svg": {
      utf8: false
    },
    "postcss-cssnext": {},
    "postcss-px-to-viewport": {
      viewportWidth: 750, // UI设计稿的宽度
      viewportHeight: 1334, // UI设计稿的高度
      unitPrecision: 3, // 转换后保留的小数位数
      viewportUnit: 'vw', // 转换成vw单位
      selectorBlackList: ['.ignore', '.hairlines'], // 不转化为vw的类名
      minPixelValue: 1, // 最小的转换数值
        mediaQuery: false // 不允许在媒体查询中使用px
    },
    "postcss-viewport-units":{},
    "cssnano": {
      preset: "advanced",
      autoprefixer: false,
      "postcss-zindex": false
    }
  }
}
  1. 在样式文件中将px单位转换为vw单位。
/* 对于320px宽度的屏幕 1rem = 20px */

body{
  font-size:2rem;
}

h1{
  font-size: 0.5rem; /* 页面上的字体大小为10px(0.5*20) */
}

.container{
  width: 5rem; /* 页面上的宽度为100px(5*20) */
  height: 6.4rem; /* 页面上的高度为128px(6.4*20) */
}

使用vw进行适配有个优点就是可以不关注设备的具体尺寸,只需要根据设计稿的宽度进行设置即可。

使用rem进行适配

使用rem进行适配的步骤如下:

  1. 在根元素HTML上设置字体大小。
/* 对于320px宽度的屏幕 1rem = 20px */

html{
  font-size:20px;
}
  1. 在样式文件中将px单位换算为rem单位。
.container{
  width: 5rem; /* 页面上的宽度为100px(5*20) */
  height: 6.4rem; /* 页面上的高度为128px(6.4*20) */
  font-size: 0.5rem; /* 页面上的字体大小为10px(0.5*20) */
}

使用rem进行适配需要手动计算出根元素字体大小,如果设计稿尺寸改变,还需要重新计算根元素字体大小,不太方便。

示例说明

假设设计稿宽度为750px,高度为1334px。

vw示例

在vue项目中,可以先在根组件App.vue中引入postcss-px-to-viewport插件,然后设置统一的根元素字体大小和样式,如下所示:

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<style>
/* 对于750px宽度的屏幕 1rem = 10px */

html{
  font-size:75px; /* 1rem = 7.5vw */
}

body{
  font-size:16px;
  color: #333;
}
</style>

然后在其他组件中,可以将px单位直接转化为vw单位,如下所示:

<template>
  <div class="container">
    <h1>hello world</h1>
  </div>
</template>

<style>
.container{
  width: 100vw; /* 页面上的宽度为750px */
  height: 56.25vw; /* 页面上的高度为422px */
  font-size: 2vw; /* 页面上的字体大小为15px */
}
</style>

rem示例

在react项目中,可以先在根组件App.js中设置根元素字体大小和样式,如下所示:

import React from 'react';
import ReactDOM from 'react-dom';

import './index.css';

class App extends React.Component {
  componentDidMount() {
    document.documentElement.style.fontSize = `${document.documentElement.clientWidth / 7.5}px`;
  }

  render() {
    return (
      <div className="container">
        <h1>hello world</h1>
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

然后在其他组件中,可以将px单位直接转化为rem单位,如下所示:

/* 对于750px宽度的屏幕 1rem = 100px */

.container{
  width: 10rem; /* 页面上的宽度为750px */
  height: 4.22rem; /* 页面上的高度为422px */
  font-size: 1.5rem; /* 页面上的字体大小为15px */
}

以上就是基于Vue/React项目的移动端适配方案的详解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解基于Vue/React项目的移动端适配方案 - Python技术站

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

相关文章

  • 关于图片与文字垂直方向不对齐问题的解决方法

    当网站中同时存在图片和文字时,经常会遇到图片与文字垂直方向不对齐的问题,这不仅影响美观度,也会影响用户的体验。下面,我们来讲解如何解决这一问题。 问题的原因 首先要了解,这种问题的原因通常是因为图片和文字所在的盒子(box)使用了不同的属性,导致文本所在的行盒(line-box)和图像所在的行盒不在同一水平线上。 常见的有以下两种情况: 图片设置了 vert…

    css 2023年6月10日
    00
  • vue实现鼠标经过显示悬浮框效果

    实现鼠标悬浮框效果的一种常用方式是使用Vue的v-show指令和CSS的:hover伪类。利用Vue的数据绑定,实现鼠标悬浮时显示悬浮框,鼠标移开时隐藏悬浮框的效果。以下是实现该效果的步骤: 步骤一:在Vue组件中加入需要显示的悬浮框和绑定悬浮框显示的数据属性。示例代码: <template> <div> <p @mouseov…

    css 2023年6月10日
    00
  • ASP.NET Datagridview自动换行的小例子

    ASP.NET Datagridview自动换行是一个比较常见并且非常有用的功能,它能够在数据较多时,将数据自动进行换行,从而使得表格更易读。下面是一个完整的攻略,包含了基本步骤和两个实例说明: 基本步骤 以下是实现ASP.NET Datagridview自动换行的基本步骤: Step 1 转换字段类型 为了让Datagridview进行自动换行,首先需要将…

    css 2023年6月10日
    00
  • 使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)

    下面是使用CSS创建三角形和使用CSS3创建3D四面体的攻略,包括原理和代码实现。 使用CSS创建三角形 原理 使用CSS的 border 属性可以创建三角形,具体方法是将元素的三个边界变为不同颜色,并让其中两个边界的长度设为0,从而形成一个三角形。 代码实现 以下是一个简单的示例代码,实现了创建一个向上的三角形,指定颜色为红色: .triangle { w…

    css 2023年6月10日
    00
  • 基于原生JS实现图片裁剪

    本文将详细讲解如何使用原生JS实现图片裁剪的过程,包含以下几个步骤: 用JavaScript获取用户上传的图片文件并显示在页面上; 借助HTML5的canvas元素进行图片裁剪; 将裁剪后的图片以文件流的形式上传到服务器。 1. 获取图片文件并显示 用户上传图片文件后,需要通过JavaScript获取文件,并将其显示在页面上。 // 获取上传的图片文件 co…

    css 2023年6月11日
    00
  • 闭合浮动元素超级简单的方法

    下面是详细讲解“闭合浮动元素超级简单的方法”的完整攻略。 什么是闭合浮动? 当一个元素浮动时,它将会脱离文档流,而其他元素将会绕开它。这时如果父元素没有设置高度或者内部没有包含一个清除浮动的元素,就会出现高度塌陷的问题。这种情况称为浮动元素没有闭合,需要手动进行闭合。 传统的闭合浮动方法 在传统的闭合浮动方法中,你需要在浮动元素后面添加一个空的元素,并给其添…

    css 2023年6月9日
    00
  • Bootstrap每天必学之折叠

    Bootstrap每天必学之折叠 折叠是 Bootstrap 中非常实用的一个组件,它能够让页面上的内容通过二次点击等交互方式展开或隐藏。本篇就来详细讲解 Bootstrap 折叠组件的使用方法。 折叠组件的基本用法 HTML 结构 折叠组件的基础结构需要三个元素,分别是触发折叠的按钮,折叠的内容和容器元素。这里的按钮可以是一个普通按钮或者是一个链接。 以下…

    css 2023年6月10日
    00
  • 【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)

    【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)是一篇关于jQuery实用代码片段的攻略,其中包括了一些可以直接使用的代码片段,可供开发者在开发过程中直接使用,提高开发效率。以下是对该攻略的详细讲解: 一、筛选与搜索 1.1 筛选指定元素 $(“selector”).filter(expression); 使用该代码片段可以筛…

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