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

yizhihongxing

详解基于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日

相关文章

  • CSS教程(1):学习CSS背景相关知识

    下面是详细讲解“CSS教程(1):学习CSS背景相关知识”的完整攻略。 标题 CSS教程(1):学习CSS背景相关知识 概述 本教程将带领读者深入学习CSS中与背景相关的知识,包括背景颜色、背景图片以及背景定位等内容。 具体内容 1. 背景颜色 在CSS中,可以通过background-color属性来设置背景颜色。该属性可以接受任何有效的CSS颜色值。 示…

    css 2023年6月9日
    00
  • vue 框架下自定义滚动条(easyscroll)实现方法

    接下来我将为你详细讲解“Vue 框架下自定义滚动条(easyscroll)实现方法”的完整攻略。 1. 简介 当我们需要在 Vue 项目中使用自定义滚动条时,可以选择使用第三方库来实现,比如 Vuetify 的 v-scroll-x 或者 vue-bar 的 bar. 而在不使用任何第三方库的情况下,我们可以使用 easyscroll 插件,它是一个轻量级的…

    css 2023年6月10日
    00
  • 纯css实现树形结构的示例代码

    实现树形结构可以使用CSS选择器和伪元素。下面是详细步骤: 第一步:构建HTML结构 首先,需要构建树形结构的HTML代码。为了方便演示,我们构建一个树形结构,其中包含一个父节点,两个子节点以及一个孙子节点。HTML代码如下: <ul class="tree"> <li>父节点 <ul> <li&…

    css 2023年6月10日
    00
  • HTML默认样式表CSS属性除了inline和block的定义

    HTML默认样式表CSS属性除了inline和block的定义指的是HTML元素在浏览器初始渲染时所应用的默认样式,而这些默认样式可以被修改或者覆盖,而且不是所有的样式都能修改或覆盖。其中inline和block是CSS中最常用的两个属性,但是还有其他一些属性也有自己的特点和用途。 下面详细讲解一些常用的HTML默认样式表CSS属性: list-style …

    css 2023年6月9日
    00
  • css3 border-radius属性详解

    下面我将详细讲解“CSS3 border-radius属性详解”的完整攻略。 CSS3 border-radius属性详解 什么是border-radius属性 border-radius属性是CSS3中的一个新属性,用于设置圆角边框。通过设置border-radius,我们可以将矩形边框变得更加圆滑。border-radius的使用极大增加了网页设计的灵活…

    css 2023年6月10日
    00
  • css3新增选择器的应用示例

    下面是关于“CSS3新增选择器的应用示例”的完整攻略。 什么是CSS选择器? 在CSS中,选择器是指针对文档中元素的一种方式。使用选择器可以选定指定类型的HTML元素并对这些元素进行样式表的定义。 CSS3新增选择器 CSS3有很多新增加的选择器,让CSS更加强大。以下是一些比较常用的CSS3新增的选择器: 1. :nth-child() 选择器 :nth-…

    css 2023年6月9日
    00
  • JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)

    下面是“JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)”的攻略: 实现思路 本例中,我们需要通过鼠标事件监听和CSS动画实现,实现当鼠标经过一个元素时,弹出一个DIV框,并带有缓冲动画渐变效果。具体的实现步骤如下: 使用CSS定义一个弹出DIV框,并设置其初始状态为不可见。 监听需要触发弹出的元素的鼠标移入事件,并在事件处理函数中,使…

    css 2023年6月10日
    00
  • BootStrap创建响应式导航条实例代码

    下面是详细的BootStrap创建响应式导航条实例的攻略: 一、创建HTML文档结构 创建一个基本的HTML结构,并且引入BootStrap的CSS和JavaScript文件。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <…

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