移动端的适配问题

本文详细介绍了@media查询在响应式设计中的应用,包括不同屏幕尺寸下的媒体适配示例。此外,还讲解了rem和vw单位的原理及在项目中的使用,如amfe-flexible.js和postcss工具的应用,适合前端开发者理解和实践布局调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.媒体查询的定义

(1)作用和简介;

使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。@media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。

 (2) 代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .aa{
      width:100px;
      height: 100px;
      font-size: 20px;
       background-color: pink;
       line-height: 100px;
       text-align: center;
       transition: all 0.5s;
    }
  
 
    @media screen and (max-width:1200px) {
    /* 小于1200px */
    .aa{
    background-color: firebrick;
      font-size: 70px;
      width: 600px;
      height: 600px;
    } 
        /* 当屏幕小于750的时候  宽高 由于 450-600  颜色 蓝色-->酒红*/
       /* 字体大小由于50-70px */
     
    }
    @media screen and (max-width:750px) {
      /* 小于750px的情况 */
    .aa{
       background-color: chocolate;
      font-size: 50px;
      width: 450px;
      height: 450px;
    } 
        /* 当屏幕小于750的时候  宽高 由于 200-450   颜色 蓝色-->橙色*/
       /* 字体大小由于30-50px */
    }
      /* 小576像素情况 */
      @media screen and (max-width:576px) {
    .aa{
      background-color: royalblue;
      font-size: 30px;
      width: 200px;
      height: 200px;
    } 
    /* 当屏幕小于576的时候  宽高 由于 100-200   颜色 pink--->蓝色 */
    /* 字体大小由于20-30px */
    }
  </style>
</head>
<body>
  <div class="aa">
    <h3> 御剑传说----剑姬 </h3>
  </div>
  
</body>
</html>

(3)图示:

 二.rem适配方案

1.什么是rem?

相对于html下的font-size 

2.设计稿999px,在789px做适配转换成rem

   999/10=99.9

   789/99.9

设计稿的1rem 作为标准,将屏幕像素除以设计稿的1rem

得到现有的rem

3.amfe-flexble.js的应用

(1)作用: 将html下的fontsize设置成屏幕宽度的1/10。

(2)安装和导入

- 安装 amfe-flexible插件
  - yarn add amfe-flexible
  - npm i amfe-flexible
- 在main.js导入
  - import "amfe-flexible"

 4.vant:设计稿375px ,并且提前写好css样式怎么处理

  (1):安装postcss-pxtorem

 yarn add  postcss-pxtorem@5.0.0
 npm i  postcss-pxtorem@5.0.0

 (2):配制

创建postcss.config.js(加载css时使用)
module.exports={
    plugins:{
        rootValue:基准值(37.5),
        propList:哪些css需要转换,针对的css选择["*"]
    }
}

html 下font-size=屏幕宽度/10

设计稿:1080   723px用rem表示    723/108rem



const path = require('path')
module.exports = ({ file }) => {
  // 如果是vant的css需要转换,它的文件都是来自于node_modules/vant   
  // file.dirname:需要转换的文件路径
  const base = file.dirname.includes(path.join('node_modules', 'vant'))
    ? 37.5
    : 75
  return {
    plugins: {
      'postcss-pxtorem': {
        rootValue: base,
        propList: ['*']
      }
    }
  }
}

 三.vw适配

1.vw为什么不用百分比 而是用vw

1.百分比: 相对于父级的

2.vw:相对于视图

2.vw兼容性问题不好,成为主流的趋势

图示:

现在使用rem 主要是因为, 维护以前的老项目, 不易发生更改。

3.安装

yarn add postcss-px-to-viewport -D

 4.配置 

根目录下的postcss.config.js:

const path=require('path')
module.exports=({file})=>{
 const base= file.dirname.includes(path.join('node_modules','vant'))?375:750
 return {
     plugins:{
         'postcss-px-to-viewport':{
             viewportWidth:base
         }
     }
 } 
}
对于Vue 3移动端适配问题,可以参考以下步骤: 1. 首先,可以使用一个公共方法来判断是否为移动端。你可以将以下代码添加到你的代码中: ```javascript export function isPc() { if (navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)) { return false; } else { return true; } } ``` 这个方法会根据用户的User Agent来判断是否为移动端。 2. 其次,你可以使用postcss-pxtorem插件来实现rem适配。在你的根目录下创建一个postcss.config.js文件,并添加以下代码: ```javascript module.exports = { "plugins": { "postcss-pxtorem": { rootValue: 37.5, // Vant 官方根字体大小是 37.5 propList: [&#39;*&#39;], selectorBlackList: [&#39;.norem&#39;] // 过滤掉.norem-开头的class,不进行rem转换 } } } ``` 这个配置文件会将像素自动转换为rem单位,方便移动端适配3. 如果你在针对iPad和iPad Pro设备时遇到无效的问题,你可以在index.html文件中添加以下代码: ```html <script> /(pad|pod|iPad|iPod|iOS)/i.test(navigator.userAgent) && (head=document.getElementsByTagName(&#39;head&#39;),viewport=document.createElement(&#39;meta&#39;),viewport.name=&#39;viewport&#39;,viewport.content=&#39;target-densitydpi=device-dpi, width=480px, user-scalable=no&#39;,head.length>0&&head<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue项目的移动端适配方案](https://blog.csdn.net/weixin_40758662/article/details/131812827)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [vue3-移动端适配](https://blog.csdn.net/m0_65791412/article/details/125177494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值