Raining-UI 一个小白做UI的制作记录

简介: 为了更好的学习使用Vue3所开始 > Rain-UI

使用 Vite 搭建官网

全局安装 create-vite-app

yarn global add create-vite-app@1.18.0

创建项目目录

cva rain-ui

小知识

vite 文档给出的命令是

npm init vite-app <project-name>

yarn create vite-app <project-name>

等价于

全局安装 create-vite-app 然后

cva <project-name>

等价于

npx createa-vite-app <project-name>

即 npx 会帮你全局安装用到的包

创建项目后体会到的vue2和vue3的区别

90% 的写法完全一致,除了以下几点

Vue 3 的 Template 支持多个根标签,Vue 2 不支持

Vue 3 有 createApp(),而 Vue 2 的是 new Vue()

createApp(组件),new Vue({template, render})

引入 Vue Router 4,初始化 vue-router

新建 history 对象
新建 router 对象
引入 TypeScript
app.use(router)
添加 <router-view>
添加 <router-link>

开始创建官网

Home.vue

Topnav:左边是logo,右边是menu
Banner:文字介绍 + 开始按钮

Doc.vue

Topnav:同上
Content:左边是 aside,右边是 main

新的路由

路径为 #/ 时

渲染 Home.vue

路径为 #/doc 时

渲染 Doc.vue

封装Home和Doc的导航栏部分,完善css和router

完成官网创建。

abd17bda06ce337bf2ef20516615a9c.png

Switch组件

API 设计

<Switch value="true" />  //value 为字符串 "true"
<Switch value="false" /> //value 为字符串 "false"
<Switch :value="  true  " /> //value 为布尔值 true
<Switch :value="  false  " />  //value 为布尔值 false

当 value 为字符串 "true" 或布尔值 true 时,显示为开

其他情况一律显示为关

如何让圆圈滚到右边

用 CSS transition

点击切换,并有动画

如何让 Switch 发出 input 事件

用 context.emit('input', xxx) 即可

Vue 3 的 v-model

要求

属性名任意,假设为 x

事件名必须为 "update:x"

效果

<Switch :value="y" @update:value="y = $event"/>

可以简写为

<Switch v-model:value="y" />

文档

这是 Vue 2 到 Vue 3 的一个大变动(breaking change)

文档里面有详细的介绍

小总结

value="true" 和 :value="true" 的区别

使用 CSS transition 添加过渡动画

使用 ref 创建内部数据

使用 :value 和 @input 让父子组件进行交流(组件通信)

使用 $event

使用 v-model

框架就是把你框起来:不准改 props

Vue 2 和 Vue 3 的区别

新 v-model 代替以前的 v-model 和 .sync

新增 context.emit,与 this.$emit 作用相同

效果

ac9c9b9d9cd0418a67bd93d6e975773.png

fe079c75e065b5bdc38c306c8f52966.png

Button组件

需求

参考 Bulma、Element

可以有不同的等级(level)

可以是链接,可以是文字

可以 click、focus、鼠标悬浮

可以改变 size:大中小

可以禁用(disabled)

可以加载中(loading)

API 设计

<Button
 @click=? 
 @focus=? 
 @mouseover=?
 theme="button or link or text"
 level="main or normal or minor"
 size="big normal small"
 disabled
 loading
\></Button>

Vue 3 属性绑定

默认所有属性都绑定到根元素

使用 inheritAttrs: false 可以取消默认绑定

使用 $attrs 或者 context.attrs 获取所有属性

使用 v-bind="$attrs" 批量绑定属性

使用 const {size, level, ...xxx} = context.attrs 将属性分开

UI 库的 CSS 注意事项

不能使用 scoped

因为 data-v-xxx 中的 xxx 每次运行可能不同

必须输出稳定不变的 class 选择器,方便使用者覆盖

必须加前缀

.button 不行,很容易被使用者覆盖

.rain-button 可以,不太容易被覆盖

.theme-link 不行,很容易被使用者覆盖

.rain-theme-link 可以,不太容易被覆盖

CSS 最小影响原则

CSS 绝对不能影响库使用者

让 button 支持 size 属性

size 的值为 big / normal / small

让 button 支持 level 属性

level 的值为 main / normal / minor / danger

让 button 支持 disabled

disabled 的值为 true / false

<button disabled>

<button :disabled="true">

<button disabled="true">

<button disabled="false">

让 button 支持 loading

loading 值为 true / false

小总结

Vue 属性继承

默认属性传给根元素

inheritAttrs: false 禁用之

v-bind="$attrs" 或 context.attrs

库的 CSS 要求

不能用 scoped

每个 CSS 类要加前缀

CSS 最小影响原则

效果

6100f4c4872e2310345c7a3a858d5e2.png


Dialog组件

对话框

需求

点击后弹出

有遮罩层 overlay

有 close 按钮

有标题

有内容

有 yes / no 按钮

通过观看AntDesign确认大概代码

<Dialog 
  visible
  title="标题"
  @yes="fn1" @no="fn2"
></Dialog>

让 Dialog 支持 visible 属性

让 Dialog 可以点击关闭

注意不能修改 props

让 Dialog 支持自定义内容

使用插槽 slot

把 Dialog 移到 body 下

防止 Dialog 被遮挡

内置组件:Teleport

效果:

4ddafd004afda08c4f270820255a816.png


目录
相关文章
|
3月前
|
编解码 前端开发 vr&ar
从零开始的PICO教程(4)--- UI界面绘制与响应事件
这篇文章是PICO开发系列教程的第四部分,主要介绍了如何在PICO 4 VR环境中创建UI界面,包括Canvas和Panel的配置、UI元素的绘制、以及Button和Slider的事件响应绑定,并通过示例展示了数字增减和滑块功能的具体实现。
从零开始的PICO教程(4)--- UI界面绘制与响应事件
|
6月前
|
编解码 C++
Qt第一课 第一个ui界面
Qt第一课 第一个ui界面
86 2
|
6月前
【实用】一个移动端简单的UI弹窗组件,虽算不上高大上,但至少耐看
【实用】一个移动端简单的UI弹窗组件,虽算不上高大上,但至少耐看
|
Web App开发 JavaScript BI
|
程序员
程序员PS技能(四):程序员创建PSD文件、展示简单PSD设计流程,上传PSD至蓝湖,并下载Demo切图
程序员PS技能(四):程序员创建PSD文件、展示简单PSD设计流程,上传PSD至蓝湖,并下载Demo切图
程序员PS技能(四):程序员创建PSD文件、展示简单PSD设计流程,上传PSD至蓝湖,并下载Demo切图
|
XML SQL JSON
Toolkit 大更新:UI 更美观,用起来更方便!
前段时间有小伙伴在群里聊天,说到 Toolkit 下载量到 4.9k 了。就突然想起来,很久没有更新这个插件。
306 0
|
前端开发
#私藏项目实操分享# 【练习案例React九】封装一个标题显示栏
#私藏项目实操分享# 【练习案例React九】封装一个标题显示栏
145 0
#私藏项目实操分享# 【练习案例React九】封装一个标题显示栏
|
Android开发 Windows
最佳的UI更新套路
是这样的,有时候,我们需要创建一个符合业务的View,或者称为UI对象,比如,即时通讯软件的好友列表里面的每个item,那么这个item要有头像,名字,简短描述三个数据项。
1709 0