【环境搭建】后端开发者的前端笔记:用Ant Design Pro从0到1搭个可视化页面


我的随笔录:Satori2Core 随笔录 —— 更新计划 / 笔录目录


前言

本文中使用的前端脚手架是:Ant Design Pro

作为后端开发者,我们的核心需求是「快速让前端页面跑起来」——不需要复杂的前端工程化知识,不需要从头搭建环境,重点是复用现成工具,把精力放在「数据展示」和「业务对接」上。

本文用最短路径,教你用Ant Design Pro(以下简称「Pro」)从0到1搭一个可视化页面,并解释每一步的目标、操作、原因​(后端视角)。

官网地址


1. 目标明确:我们要做什么?​

最终目标是:用Pro生成一个包含「数据看板」的基础中后台页面,页面能展示后端API返回的数据(如用户管理系统的用户数据表格),并支持基础交互(如筛选、跳转)。

【为什么选Pro?​】

  • 开箱即用:内置React环境、路由、状态管理(Umi框架),无需手动配置Webpack/Vite。
  • 模板丰富:直接提供仪表盘、列表页等中后台常用页面模板,改数据就能用。
  • 适配后端:支持快速对接现有API(通过mock或代理),减少前后端联调成本。

2. 环境准备(目标:让Pro能跑起来)​

环境背景:本文基于 ​Ubuntu 24.04​ 系统,后端开发者对Linux环境更熟悉,Windows/macOS用户可参考调整命令。

操作步骤

  • 安装:Nodejsnpm
# 步骤1:更新包索引(可选,但推荐)
sudo apt update

# 步骤2:安装Node.js(v18+)和npm(随Node.js自动安装)
sudo apt install -y nodejs npm
  • 安装验证

安装完成后,通过以下命令确认版本(Node.js≥14,npm≥6即可):

npm -v   # 输出类似9.2.0(版本号≥6即可)
nodejs -v   # 输出类似v18.19.1(版本号≥14即可)

3. 初始化项目(目标:生成基础框架)​

操作步骤

Pro官方推荐通过 pro create 命令快速创建项目(本质是基于Umi的脚手架封装)。

# 步骤1:全局安装Pro CLI(首次使用需要)
sudo npm i -g @ant-design/pro-cli

# 步骤2:创建项目(交互式选择模板)
pro create myapp

关键选择

执行 pro create myapp 后,终端会提示选择模板类型。​建议选「simple」​​(精简版):

  • 不需要完整的企业级功能(如多租户、复杂权限);
  • 减少冗余代码,更快跑通基础流程。

4. 启动项目(目标:验证环境是否正常)​

执行完创建命令后,会生成一个名为 myapp 的项目文件夹。通过以下命令查看目录结构:

操作步骤

  • 生成项目目录
# 进入目录
cd myapp

ls   # 输出应包含config、src、public、package.json等核心文件
config  jest.config.ts  jsconfig.json  mock  node_modules  package.json  package-lock.json  pnpm-lock.yaml  public  README.md  src  tests  tsconfig.json  types
  • 安装依赖并启动

实际就是找到package.json,去下载dependencies列表里的内容。

# 步骤1:安装项目依赖(首次需要)
npm install   # 等待下载完成(约1-2分钟,视网络速度)

# 步骤2:启动本地开发服务
npm run start

在这里插入图片描述


5. 成果预览

登陆界面

在这里插入图片描述

主页样式


6. 项目目录简单认识

框架代码目录说明

在这里插入图片描述

6.1 目录结构

├── config                   # umi 配置,包含路由,构建等配置
├── mock                     # 本地模拟数据
├── public
│   └── favicon.png          # Favicon
├── src
│   ├── assets               # 本地静态资源
│   ├── components           # 业务通用组件
│   ├── e2e                  # 集成测试用例
│   ├── layouts              # 通用布局
│   ├── models               # 全局 dva model
│   ├── pages                # 业务页面入口和常用模板
│   ├── services             # 后台接口服务
│   ├── utils                # 工具库
│   ├── locales              # 国际化资源
│   ├── global.less          # 全局样式
│   └── global.ts            # 全局 JS
├── tests                    # 测试工具
├── README.md
└── package.json

6.2 页面代码结构推荐

为了让项目代码组织更加规范,让开发能够更方便的定位到相关页面组件代码,官方定义了一套规范,该规范当前只作为推荐的指导,并非强制。

src
├── components
└── pages
    ├── Welcome        // 路由组件下不应该再包含其他路由组件,基于这个约定就能清楚的区分路由组件和非路由组件了
    |   ├── components // 对于复杂的页面可以再自己做更深层次的组织,但建议不要超过三层
    |   ├── Form.tsx
    |   ├── index.tsx  // 页面组件的代码
    |   └── index.less // 页面样式
    ├── Order          // 路由组件下不应该再包含其他路由组件,基于这个约定就能清楚的区分路由组件和非路由组件了
    |   ├── index.tsx
    |   └── index.less
    ├── User
    |   ├── components // group 下公用的组件集合
    |   ├── Login      // group 下的页面 Login
    |   ├── Register   // group 下的页面 Register
    |   └── util.ts    // 这里可以有一些共用方法之类,不做推荐和约束,看业务场景自行做组织
    └── *              // 其它页面组件代码

所有路由组件(会配置在路由配置中的组件),推荐以大驼峰命名打平到 pages 下面第一级(复杂的项目可以增加 group 层级,在 group 下放置 pages)。不建议在路由组件内部再嵌套路由组件 - 不方便分辨一个组件是否是路由组件,而且不方便快速从全局定位到路由组件。

推荐尽可能的拆分路由组件为更细粒度的组件,对于多个页面可能会用到的组件我们推荐放到 src/components 中,对于只是被单个页面依赖的(区块)组件,推荐就近维护到路由组件文件夹下即可。


<think>好的,我现在需要帮助用户解决在Vue PC端项目中,使用REM结合Viewport进行屏幕自适应时内容不适配的问题。用户已经尝试了这两种方案,但似乎效果不佳,需要找出原因并提供解决方案。 首先,我得回忆REM和Viewport的基本原理。REM是基于根元素(html)的字体大小,而Viewport通常指通过meta标签设置视口,或者使用vw单位。用户可能同时使用了这两种方法,但可能存在配置冲突或者使用不当的情况。 接下来,用户提到的内容不适配,可能表现为布局错乱、元素大小不合适,或者在不同屏幕尺寸下显示不一致。常见的问题点可能包括:根字体大小设置不正确、Viewport配置错误、媒体查询缺失、第三方库干扰、CSS使用绝对单位等。 我需要逐步分析可能的原因。首先,检查REM的配置是否正确。根字体大小通常需要根据屏幕宽度动态计算,比如使用lib-flexible或者手写JS来调整。如果根字体没有动态变化,REM单位无法正确缩放。 然后,检查Viewport的设置是否正确。用户可能使用了viewport的meta标签,但可能缺少缩放设置,或者视口宽度没有正确设置为设备宽度。此外,如果同时使用vw单位,需要确保计算方式与REM的根字体大小协调,避免冲突。 接下来,查看CSS中是否混用了绝对单位,如px,这会导致部分元素无法自适应。需要确保所有尺寸单位都使用REM或vw,或者在PostCSS配置中正确启用px转REM的插件,如postcss-pxtorem,并检查其配置是否正确,比如rootValue是否与设计稿匹配。 媒体查询也是一个关键点。对于PC端,可能需要为不同分辨率设置不同的根字体大小或布局调整。如果用户没有针对大屏幕或高分辨率进行媒体查询调整,可能会导致布局在小屏幕上正常,但在大屏幕上出现问题。 另外,第三方UI库如Element UI或Ant Design可能自带响应式处理,如果用户没有正确配置这些库的按需加载或主题变量,可能会导致样式冲突,或者组件尺寸固定,无法自适应。 还需要考虑浏览器默认样式的影响,比如某些元素可能自带padding或margin,或者盒模型设置不正确,导致布局计算错误。使用reset.css或normalize.css可以统一默认样式。 最后,视口缩放策略是否正确。在PC端,可能需要禁用用户缩放,或者通过JS动态调整视口比例,特别是在处理高分辨率屏幕时,如Retina显示屏,需要适当调整缩放比例。 现在,需要将这些问题整理成结构化的解决方案,包括逐步检查的步骤、常见错误示例、配置示例以及验证方法。同时,可能需要提供替代方案,比如使用CSS网格布局、Flexbox结合百分比布局,或者改用成熟的UI框架如Bootstrap Vue来简化响应式设计。 在回答时,需要确保语言清晰,步骤明确,并给出具体的代码示例和配置建议,帮助用户逐步排查问题。同时,提醒用户注意版本兼容性和常见的配置错误,如拼写错误、路径问题等。</think>以下是针对 Vue PC 端使用 **REM + Viewport** 方案仍不适配的深度解决方案,包含完整排查流程和代码示例: --- ### 一、核心问题定位 当 REM + Viewport 组合方案失效时,通常存在以下问题: 1. **REM 动态计算未生效** - 根字体未随视口变化 2. **Viewport 配置冲突** - meta 标签与 JS 控制冲突 3. **CSS 单位混合污染** - 同时存在 px/rem/vw 单位 4. **第三方组件样式固定** - UI 库组件使用绝对尺寸 --- ### 二、完整解决方案 #### 1. 正确配置 REM 动态计算 ```javascript // utils/rem.js const setRem = () => { const designWidth = 1920 // 设计稿宽度(PC建议1920) const baseSize = 16 // 基础字体大小(1rem=16px) const scale = document.documentElement.clientWidth / designWidth document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px' // 限制最大缩放 } // 初始化执行 setRem() // 监听窗口变化 window.addEventListener('resize', setRem) ``` ```javascript // main.js import '@/utils/rem.js' ``` #### 2. 精准控制 Viewport Meta ```html <!-- index.html --> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> ``` #### 3. PostCSS 自动转换配置 ```javascript // postcss.config.js module.exports = { plugins: { 'postcss-pxtorem': { rootValue: 16, // 与 rem.js 中 baseSize 一致 propList: ['*', '!border'], // 转换所有属性(除边框) selectorBlackList: ['el-'] // 排除 ElementUI 组件 } } } ``` #### 4. 响应式断点补充(关键分辨率适配) ```scss // styles/responsive.scss @media screen and (max-width: 1600px) { html { font-size: 14px; // 中等屏幕基准调整 } } @media screen and (max-width: 1280px) { html { font-size: 12px; // 小屏幕基准调整 } } ``` --- ### 三、常见问题排查表 | 现象 | 可能原因 | 解决方案 | |---------|----------|---------| | 部分元素过大 | 第三方组件样式未转换 | 配置 `selectorBlackList` 排除特定前缀 | | 缩放时出现滚动条 | 容器宽度未使用百分比 | 添加 `max-width: 100vw; overflow: hidden` | | 图片模糊 | 固定尺寸图片未响应式 | 使用 `img { max-width: 100%; height: auto }` | | 表格错位 | 表格列宽使用 px | 改用 `minmax(100px, 1fr)` 网格布局 | --- ### 四、进阶适配方案 #### 1. 混合布局策略 ```scss .container { width: 100vw; padding: 2rem; display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } ``` #### 2. 可视化调试工具 ```javascript // 在控制台实时显示当前 rem 基准 const showRem = () => { const div = document.createElement('div') div.style = 'position:fixed;right:0;bottom:0;padding:1rem;background:#000;color:#fff;z-index:999' div.innerHTML = `1rem = ${getComputedStyle(document.documentElement).fontSize}` document.body.appendChild(div) } showRem() ``` --- ### 五、验证流程 1. **基础验证**:改变浏览器窗口大小,查看根字体是否动态变化 ```javascript // 控制台输入验证 console.log(getComputedStyle(document.documentElement).fontSize) ``` 2. **元素检查**:用开发者工具检查元素尺寸是否显示为 rem 单位 3. **极端测试**:在 4K 屏幕(3840px)和 1366px 笔记本屏幕验证布局完整性 --- ### 六、替代方案建议 如果仍存在适配问题,可考虑以下方案: ```javascript // 使用 CSS 的 clamp() 函数实现动态响应 .title { font-size: clamp(1.5rem, 2vw + 1rem, 2.5rem); // 最小值 | 动态值 | 最大值 } ``` 通过以上系统性配置和验证,可确保在 PC 端实现精准的响应式适配。如果问题仍然存在,建议提供具体组件截图和 CSS 代码片段进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值