【山竹记账前端-vue】2.页面划分和布局
大纲链接 §
[toc]
页面划分与布局
有哪些页面?有哪些组件?如何排期?
1. 前端路由 ⇧
RESTful风格
- 4个欢迎界面
/welcome/1/welcome/2/welcome/3/welcome/4
/start开始记账/items/new记一笔/tags/new新建标签/tags/:id标签详情/items记录首页- 浮层菜单
overlay未登录/已登录
- 浮层菜单
/sessions/new登录 ->sign_in/statistics统计图表
2. 组件规划 ⇧
组件分析结果
- 页面
/welcome/1~4/start/items/new/tags/new/tags/:id/items/sessions/new/statistics
- 组件
layout/welcomelayout/maintabsbuttonoverlaylineChartpieChart...
组件库
echartsvant-ui
3. 工作排期原则 ⇧
- 越细越好
- 每个页面的工作量是不同的
- 每个组件的工作量是不同的
- 不能一概而论
- 留好buffer
- 你预估的时间乘以n(
1.2 < n < 3.14)
- 你预估的时间乘以n(
4. 拆分路由,并添加欢迎页面路由 ⇧
拆分路由表 src/router/routes.ts ⇧
添加欢迎页面路由表
|
|
- 先用
component: FooComp,组件占位 - 注意这里路由表需要更具体的类型声明,而不仅仅是数组
const routes: RouteRecordRaw[] = [] - 可以点开
createRouter({...})的类型提示查看路由表类型RouteRecordRaw - 可以直接将类型抄过去声明
routes - 之后写路由表属性都会有类型提示
- 排查嵌套路由报警告
...No match found for location with path "/welcome/1"fix: Add a route matching this path or check for typos in the location- 嵌套路由中多写了前缀
/,需要去除
src/router/routerHistory.ts
|
|
- 参数
base- 基准路径,它被预置到每个 URL 上
- 允许在一个域名子文件夹中托管 SPA
- 例如将 base 设置为
/sub-folder使得其托管在example.com/sub-folder vite可以使用import.meta.env.BASE_URL获取基准路径
createWebHashHistory无需配置服务器,但不会被搜索引擎处理,SEO 的效果较差,大多用于静态站点history配置将会做单独的重定向处理- 注意区分全局变量
Window.history已存在;只能重命名为routerHistory
@/router/index.ts
|
|
简单地 代码/模块/组件 的划分依据
- 根据通过搜索文件名称直接找到对应的 代码/模块/组件
- 搜
routes - 搜
history
欢迎页面路由 ⇧
|
|
- 注意在
tsx文件中朱支持原vue中的中划线组件命名,需要全部改为大写驼峰风格<RouterView/>✅️<router-view/>❌️,识别不出,无提示
5. CSS 初始化 ⇧
额外需要安装
pnpm add -D sass-embedded,几乎零配置;
- 使用
scss预编译样式
重命名
base.scss
|
|
添加
reset.scss
|
|
重命名
main.scss
|
|
字体库
base.scss
-
1 2 3 4 5 6 7 8 9body { // ... font-family: -apple-system, "Noto Sans", "Helvetica Neue", Helvetica, "Nimbus Sans L", Arial, "Liberation Sans", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", "ST Heiti", SimHei, "WenQuanYi Zen Hei Sharp", sans-serif; }
6. 使用 CSS Modules ⇧
src/modules/welcome/Welcome.module.scss
|
|
改写
src/views/WelcomeView.tsx
|
|
module.scss基本可以模拟vue scoped style的行为- 会添加
_wrapper_${hash}的类名来隔离样式
- 会添加
CSS Modules会拍平嵌套样式src/modules/welcome/Welcome.module.scss
|
|
src/modules/welcome/WelcomeView.tsx
|
|
- 打印结果为
{wrapper: '_wrapper_44dd5_1', title: '_title_44dd5_7'} - 因为 module 会为样式生成单独的哈希名,用来隔离样式,
- 但是如果样式嵌套的话,子样式可能不会生效,那么可以使用
:global包括子样式。
- 但是如果样式嵌套的话,子样式可能不会生效,那么可以使用
7. 使用 JSX Scoped CSS 插件 ⇧
- 暂不支持
Vue,目前仅支持React、Solid - 略
8. 使用 UnoCSS ⇧
安装 ⇧
pnpm install -D unocss @unocss/vite @unocss/preset-attributify @unocss/preset-wind4其中单独安装的预设配置
@unocss/preset-attributify @unocss/preset-wind4
配置文件 ⇧
vite.config.ts
|
|
- 在
plugins: [unoCSS(), ...]中无需写额外配置,直接在uno.config.ts中配置即可
uno.config.ts
|
|
tsconfig.app.json
|
|
src/main.ts
|
|
- UnoCSS 采用的是即时(On-demand)引擎,硬盘里没有一个叫 uno.css 的物理文件
- 启动开发服务器(npm run dev)或打包项目时,UnoCSS 的构建插件会拦截 virtual:uno.css 的导入请求
- 插件会扫描你代码中用到的所有样式类名(如 m-1, text-red-500),实时在内存中将它们转换为对应的 CSS 代码,最后把这些代码塞进这个“虚拟文件”中
import 'virtual:uno.css'和import 'uno.css'本质上等价- virtual: 是 Vite 插件体系中约定俗成的虚拟模块前缀,显式地告诉开发者和编译器“这是一个内存中的模块”
- uno.css 则是 UnoCSS 官方为了让代码看起来更简洁、更符合直觉而提供的一个别名(Alias)。无论你写哪一个,UnoCSS 插件在底层处理时都是一样的
通过这种虚拟层设计,UnoCSS 实现了两个关键特性
- 极致的性能与 HMR(热更新):当修改一个类名时,UnoCSS 只需要更新内存中的虚拟模块,浏览器会瞬间秒级应用新样式,而不需要重新读写硬盘文件
- 零体积浪费:打包时,生成的 CSS 文件只包含你实际在项目中写过的类名,不会带有一丝多余的代码
参考
UnoCss 初学者学习使用方法 ⇧
- 写出原本的
css代码 - 丢到
ai搜索,给出unocss写法 - 查询对应写法 unocss interactive
安装类样式合并工具 cn ⇧
pnpm add cn- 使用
<div class={cn("px-2 py-1", isActive && "bg-blue-500", { "text-white": isActive })}></div>
参考
- npm @styled-cva/react
- Tailwind Variants A first-class variant API for Tailwind CSS
- class module vs cva vs clsx 类模块与 CVA、CLSS 之间的对比
- 用禁止广告插件会404匿名模式打开:cva & cn in Tailwind CSS: Conditional Classes in React
- shadcn/ui 里的 cva vs. cn():现代 React 组件库里真的需要这两个吗?
- How to Use the clsx Library
- github clsx
- shadcn 新开源 cn:干掉 clsx+tailwind-merge,Tailwind 类合并引擎提速 30 倍
- github cn
- unocss shadcn/cn,代替 clsx+tailwind-merge
9. 完成第一个界面 ⇧
- 注意文件名重命名,由小写(小驼峰)改成大写(大驼峰)时,需要先改成一个其他名称,如
fack,再改成大驼峰名称- 需要被 git 识别,除非设置
git config --global core.ignorecase false
- 需要被 git 识别,除非设置
- 仅适配
440 x 956,无设计图不适配,画草图,等认可后再写适配代码
src/assets/styles/vars.scss
|
|
src/assets/styles/main.scss
|
|
uno.config.ts
|
|
src/views/WelcomeView.tsx
|
|
src/modules/welcome/WelCome1stPage.tsx
|
|
参考文章
相关文章
- ALiuYiLin/jsx-scoped
- jsx-scoped Vue-like scoped styles for JSX/TSX 组件级样式隔离工具链
- npm @10coding/vite-plugin-jsx-scoped
- CSS Modules
- UnoCss
- UnoCss Vite Plugin
- Vue3 TSX UnoCss
- 在 Vue 3 + TS + Vite + TSX 项目中配置 UnoCSS
- UnoCSS, Vite + Vue3 easy setup
- stackblitz unocss-unocss
- primevue UnoCSS
- vite-vue3-tsx-pinia-unocss
- unocss-ui
- How to setup VueJS 3 with Vite, TypeScript, UnoCSS, ESLint (flat config) and Prettier
- UnoCss 过时的预设
@unocss/preset-uno - npm @unocss/preset-uno This package is deprecated and renamed to @unocss/preset-wind3
- Uno preset Uno 预设
- UnoCss Official Packages
- Wind4 preset
- tailwindcss
- windicss
cn clsx cva @styled-cva/react- npm @styled-cva/react
- Tailwind Variants A first-class variant API for Tailwind CSS
- class module vs cva vs clsx 类模块与 CVA、CLSS 之间的对比
- 用禁止广告插件会404匿名模式打开:cva & cn in Tailwind CSS: Conditional Classes in React
- shadcn/ui 里的 cva vs. cn():现代 React 组件库里真的需要这两个吗?
- How to Use the clsx Library
- github clsx
- shadcn 新开源 cn:干掉 clsx+tailwind-merge,Tailwind 类合并引擎提速 30 倍
- github cn
- unocss shadcn/cn,代替 clsx+tailwind-merge
- 作者: Joel
- 文章链接:
- 版权声明
- 非自由转载-非商用-非衍生-保持署名