diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1ed36fa --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +**/node_modules +/node_modules +# roadhog-api-doc ignore +/src/utils/request-temp.js +_roadhog-api-doc + +# production +/dist +/.vscode + +# misc +.DS_Store +npm-debug.log* +yarn-error.log + +/coverage +.idea +yarn.lock +package-lock.json +*bak +.vscode + +# visual studio code +.history +*.log +functions/* +.temp/** + +# umi +.umi +.umi-production + +# screenshot +screenshot +.firebase +.eslintcache + +build diff --git a/README.en.md b/README.en.md index b50e8db..7e0943b 100644 --- a/README.en.md +++ b/README.en.md @@ -1,7 +1,7 @@ -# colorui-document +# mi-admin-docs #### Description -{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} +MiAdmin开发文档 #### Software Architecture Software architecture description diff --git a/README.md b/README.md index 8274478..60d4775 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ -# colorui-document +# mi-admin-docs #### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} +MiAdmin开发文档 #### 软件架构 软件架构说明 diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js new file mode 100644 index 0000000..a8bf4a2 --- /dev/null +++ b/docs/.vuepress/config.js @@ -0,0 +1,110 @@ +const baiduCode = require('./config/baiduCode.js'); // 百度统计hm码 +const htmlModules = require('./config/htmlModules.js'); + +module.exports = { + +// theme: 'vdoing', // 使用依赖包主题 + theme: require.resolve('../../vdoing'), // 使用本地主题 + + title: "ColorUI 使用文档", + description: 'ColorUI 使用文档', + base: '/colorui-document/', // 默认'/'。如果你想将你的网站部署到如 https://foo.github.io/bar/,那么 base 应该被设置成 "/bar/",(否则页面将失去样式等文件) + head: [ // 注入到页面 中的标签,格式[tagName, { attrName: attrValue }, innerHTML?] + ['link', { rel: 'icon', href: '/img/colorui-logo.png' }], //favicons,资源放在public文件夹 + ['meta', { name: 'keywords', content: '前端,uniapp,uni,插件市场,color,colorui,color文档,colorui文档,colorui文档' }], + ['meta', { name: 'theme-color', content: '#11a8cd' }], // 移动浏览器主题颜色 + ], + // 主题配置 + themeConfig: { + nav: [ + { text: '文档', link: '/pages/base/' }, + ], + sidebarDepth: 1, // 侧边栏显示深度,默认1,最大2(显示到h3标题) + logo: '/img/colorui-logo.png', // 导航栏logo + repo: 'https://github.com/weilanwl/coloruicss', // 导航栏右侧生成Github链接 + searchMaxSuggestions: 10, // 搜索结果显示最大数 + lastUpdated: '上次更新', // 更新的时间,及前缀文字 string | boolean (取值为git提交时间) + + // 以下配置是Vdoing主题改动的和新增的配置 + sidebar: { mode: 'structuring', collapsable: false }, // 侧边栏 'structuring' | { mode: 'structuring', collapsable: Boolean} | 'auto' | 自定义 温馨提示:目录页数据依赖于结构化的侧边栏数据,如果你不设置为'structuring',将无法使用目录页 + + // sidebarOpen: false, // 初始状态是否打开侧边栏,默认true + updateBar: { // 最近更新栏 + showToArticle: false, // 显示到文章页底部,默认true + // moreArticle: '/archives' // “更多文章”跳转的页面,默认'/archives' + }, + + // categoryText: '随笔', // 碎片化文章(_posts文件夹的文章)预设生成的分类值,默认'随笔' + + // contentBgStyle: 1, + + category: false, // 是否打开分类功能,默认true。 如打开,会做的事情有:1. 自动生成的frontmatter包含分类字段 2.页面中显示与分类相关的信息和模块 3.自动生成分类页面(在@pages文件夹)。如关闭,则反之。 + + tag: false, // 是否打开标签功能,默认true。 如打开,会做的事情有:1. 自动生成的frontmatter包含标签字段 2.页面中显示与标签相关的信息和模块 3.自动生成标签页面(在@pages文件夹)。如关闭,则反之。 + // archive: false, // 是否打开归档功能,默认true。 如打开,会做的事情有:1.自动生成归档页面(在@pages文件夹)。如关闭,则反之。 + + author: { // 文章默认的作者信息,可在md文件中单独配置此信息 String | {name: String, href: String} + name: 'miren', // 必需 + href: 'https://gitee.com/miren123' // 可选的 + }, + social: { // 社交图标,显示于博主信息栏和页脚栏 + // iconfontCssFile: '//at.alicdn.com/t/font_1678482_u4nrnp8xp6g.css', // 可选,阿里图标库在线css文件地址,对于主题没有的图标可自由添加 + icons: [ + { + iconClass: 'icon-gitee', + title: 'Gitee', + link: 'https://gitee.com/miren123' + }, + // { + // iconClass: 'icon-github', + // title: 'GitHub', + // link: 'https://github.com/miren521' + // } + ] + }, + footer: { // 页脚信息 + createYear: 2022, // 创建年份 + copyrightInfo: 'miren | MIT License', // 版权信息,支持a标签 + }, + htmlModules, + }, + + // 插件 + plugins: [ + ['fulltext-search'], // 全文搜索 + + [ + 'vuepress-plugin-baidu-tongji', // 百度统计 + { + hm: baiduCode + } + ], + + ['one-click-copy', { // 代码块复制按钮 + copySelector: ['div[class*="language-"] pre', 'div[class*="aside-code"] aside'], // String or Array + copyMessage: '复制成功', // default is 'Copy successfully and then paste it for use.' + duration: 1000, // prompt message display time. + showInMobile: false // whether to display on the mobile side, default: false. + }], + + [ + 'vuepress-plugin-zooming', // 放大图片 + { + selector: '.theme-vdoing-content img:not(.no-zoom)', + options: { + bgColor: 'rgba(0,0,0,0.6)' + }, + }, + ], + + [ + '@vuepress/last-updated', // "上次更新"时间格式 + { + transformer: (timestamp, lang) => { + const dayjs = require('dayjs') // https://day.js.org/ + return dayjs(timestamp).format('YYYY/MM/DD, HH:mm:ss') + }, + } + ] + ], +} diff --git a/docs/.vuepress/config/baiduCode.js b/docs/.vuepress/config/baiduCode.js new file mode 100644 index 0000000..5b5dbd3 --- /dev/null +++ b/docs/.vuepress/config/baiduCode.js @@ -0,0 +1 @@ +module.exports = 'e68f305e8bf582d7045cfbeebd622885'; diff --git a/docs/.vuepress/config/htmlModules.js b/docs/.vuepress/config/htmlModules.js new file mode 100644 index 0000000..cdec1ee --- /dev/null +++ b/docs/.vuepress/config/htmlModules.js @@ -0,0 +1,20 @@ +/** 插入自定义html模块 (可用于插入广告模块等) + * { + * homeSidebarB: htmlString, 首页侧边栏底部 + * + * sidebarT: htmlString, 全局左侧边栏顶部 + * sidebarB: htmlString, 全局左侧边栏底部 + * + * pageT: htmlString, 全局页面顶部 + * pageB: htmlString, 全局页面底部 + * pageTshowMode: string, 页面顶部-显示方式:未配置默认全局;'article' => 仅文章页①; 'custom' => 仅自定义页① + * pageBshowMode: string, 页面底部-显示方式:未配置默认全局;'article' => 仅文章页①; 'custom' => 仅自定义页① + * + * windowLB: htmlString, 全局左下角② + * windowRB: htmlString, 全局右下角② + * } + * + * ①注:在.md文件front matter配置`article: false`的页面是自定义页,未配置的默认是文章页(首页除外)。 + * ②注:windowLB 和 windowRB:1.展示区块最大宽高200px*400px。2.请给自定义元素定一个不超过200px*400px的宽高。3.在屏幕宽度小于960px时无论如何都不会显示。 + */ +module.exports = {} diff --git a/docs/.vuepress/dist/404.html b/docs/.vuepress/dist/404.html new file mode 100644 index 0000000..c7c4211 --- /dev/null +++ b/docs/.vuepress/dist/404.html @@ -0,0 +1,20 @@ + + + + + + ColorUI 使用文档 + + + + + + + + + + +
404
这里什么都没有。
返回首页
+ + + diff --git a/docs/.vuepress/dist/archives/index.html b/docs/.vuepress/dist/archives/index.html new file mode 100644 index 0000000..9e04a54 --- /dev/null +++ b/docs/.vuepress/dist/archives/index.html @@ -0,0 +1,40 @@ + + + + + + 归档 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/assets/css/0.styles.80babc79.css b/docs/.vuepress/dist/assets/css/0.styles.80babc79.css new file mode 100644 index 0000000..092f873 --- /dev/null +++ b/docs/.vuepress/dist/assets/css/0.styles.80babc79.css @@ -0,0 +1 @@ +@import url(//at.alicdn.com/t/font_1678482_4tbhmh589x.css);.code-copy{color:#aaa;fill:#aaa;font-size:14px;display:inline-block;cursor:pointer}div[class*=aside-code] aside .code-copy,div[class*=language-] pre .code-copy{position:absolute;z-index:1000;top:7px;right:35px;opacity:0;font-size:16px}div[class*=aside-code] aside:hover .code-copy,div[class*=language-] pre:hover .code-copy{opacity:1}.content pre,.content pre[class*=language-]{overflow-y:hidden}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{position:static!important}div[class~=language-text]:before{content:"text"}div[class~=language-yml]:before{content:"yml"}div[class*=language-] pre{-webkit-user-select:text;-moz-user-select:text;user-select:text}p code{-webkit-user-select:all;-moz-user-select:all;user-select:all}@keyframes message-move-in{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}#message-container .message.move-in{animation:message-move-in .3s ease-in-out}@keyframes message-move-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}#message-container .message.move-out{animation:message-move-out .3s ease-in-out;animation-fill-mode:forwards}#message-container .message{background:#fff;margin:10px 0;padding:0 10px;height:40px;box-shadow:0 0 10px 0 #ccc;font-size:14px;border-radius:3px;display:flex;align-items:center;transition:height .2s ease-in-out,margin .2s ease-in-out}#message-container{position:fixed;left:0;top:100px;right:0;display:flex;flex-direction:column;align-items:center}#message-container .message .text{color:#333;padding:0 20px 0 5px}.theme-code-block[data-v-5a3e6e86]{display:none}.theme-code-block__active[data-v-5a3e6e86]{display:block}.theme-code-block>pre[data-v-5a3e6e86]{background-color:orange}@media (max-width:419px){.theme-code-group div[class*=language-][data-v-5a3e6e86]{margin:0}}.theme-mode-light[data-v-392329f0]{--bodyBg:#f4f4f4;--customBlockBg:#f1f1f1;--textColor:#00323c;--borderColor:rgba(0,0,0,0.12)}.theme-mode-dark[data-v-392329f0]{--bodyBg:#27272b;--customBlockBg:#27272b;--textColor:#9b9baa;--borderColor:#30363d}.theme-mode-read[data-v-392329f0]{--bodyBg:#ececcc;--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963}.theme-style-line.theme-mode-light[data-v-392329f0]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-392329f0]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-392329f0]{--bodyBg:#f5f5d5}.theme-mode-light[data-v-392329f0]{--bodyBg:#fff;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-392329f0],.theme-mode-light pre[class*=language-][data-v-392329f0]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-392329f0]::-moz-selection,.theme-mode-light code[class*=language-][data-v-392329f0] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-392329f0]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-392329f0] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-392329f0]::selection,.theme-mode-light code[class*=language-][data-v-392329f0] ::selection,.theme-mode-light pre[class*=language-][data-v-392329f0]::selection,.theme-mode-light pre[class*=language-][data-v-392329f0] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-392329f0],.theme-mode-light pre[class*=language-][data-v-392329f0]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-392329f0]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-392329f0],.theme-mode-light pre[class*=language-][data-v-392329f0]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-392329f0]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-392329f0],.theme-mode-light .token.comment[data-v-392329f0],.theme-mode-light .token.doctype[data-v-392329f0],.theme-mode-light .token.prolog[data-v-392329f0]{color:#708090}.theme-mode-light .token.punctuation[data-v-392329f0]{color:#999}.theme-mode-light .namespace[data-v-392329f0]{opacity:.7}.theme-mode-light .token.boolean[data-v-392329f0],.theme-mode-light .token.constant[data-v-392329f0],.theme-mode-light .token.deleted[data-v-392329f0],.theme-mode-light .token.number[data-v-392329f0],.theme-mode-light .token.property[data-v-392329f0],.theme-mode-light .token.symbol[data-v-392329f0],.theme-mode-light .token.tag[data-v-392329f0]{color:#905}.theme-mode-light .token.attr-name[data-v-392329f0],.theme-mode-light .token.builtin[data-v-392329f0],.theme-mode-light .token.char[data-v-392329f0],.theme-mode-light .token.inserted[data-v-392329f0],.theme-mode-light .token.selector[data-v-392329f0],.theme-mode-light .token.string[data-v-392329f0]{color:#690}.theme-mode-light .language-css .token.string[data-v-392329f0],.theme-mode-light .style .token.string[data-v-392329f0],.theme-mode-light .token.entity[data-v-392329f0],.theme-mode-light .token.operator[data-v-392329f0],.theme-mode-light .token.url[data-v-392329f0]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-392329f0],.theme-mode-light .token.attr-value[data-v-392329f0],.theme-mode-light .token.keyword[data-v-392329f0]{color:#07a}.theme-mode-light .token.class-name[data-v-392329f0],.theme-mode-light .token.function[data-v-392329f0]{color:#dd4a68}.theme-mode-light .token.important[data-v-392329f0],.theme-mode-light .token.regex[data-v-392329f0],.theme-mode-light .token.variable[data-v-392329f0]{color:#e90}.theme-mode-light .token.bold[data-v-392329f0],.theme-mode-light .token.important[data-v-392329f0]{font-weight:700}.theme-mode-light .token.italic[data-v-392329f0]{font-style:italic}.theme-mode-light .token.entity[data-v-392329f0]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-392329f0],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-392329f0]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-392329f0]{--bodyBg:#1e1e22;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--textColor:#8c8c96;--textLightenColor:#0085ad;--borderColor:#2c2c3a;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-392329f0],.theme-mode-dark pre[class*=language-][data-v-392329f0]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-392329f0]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-392329f0],.theme-mode-dark pre[class*=language-][data-v-392329f0]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-392329f0]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-392329f0],.theme-mode-dark .token.cdata[data-v-392329f0],.theme-mode-dark .token.comment[data-v-392329f0],.theme-mode-dark .token.doctype[data-v-392329f0],.theme-mode-dark .token.prolog[data-v-392329f0]{color:#999}.theme-mode-dark .token.punctuation[data-v-392329f0]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-392329f0],.theme-mode-dark .token.deleted[data-v-392329f0],.theme-mode-dark .token.namespace[data-v-392329f0],.theme-mode-dark .token.tag[data-v-392329f0]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-392329f0]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-392329f0],.theme-mode-dark .token.function[data-v-392329f0],.theme-mode-dark .token.number[data-v-392329f0]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-392329f0],.theme-mode-dark .token.constant[data-v-392329f0],.theme-mode-dark .token.property[data-v-392329f0],.theme-mode-dark .token.symbol[data-v-392329f0]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-392329f0],.theme-mode-dark .token.builtin[data-v-392329f0],.theme-mode-dark .token.important[data-v-392329f0],.theme-mode-dark .token.keyword[data-v-392329f0],.theme-mode-dark .token.selector[data-v-392329f0]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-392329f0],.theme-mode-dark .token.char[data-v-392329f0],.theme-mode-dark .token.regex[data-v-392329f0],.theme-mode-dark .token.string[data-v-392329f0],.theme-mode-dark .token.variable[data-v-392329f0]{color:#7ec699}.theme-mode-dark .token.entity[data-v-392329f0],.theme-mode-dark .token.operator[data-v-392329f0],.theme-mode-dark .token.url[data-v-392329f0]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-392329f0],.theme-mode-dark .style .token.string[data-v-392329f0],.theme-mode-dark .token.entity[data-v-392329f0],.theme-mode-dark .token.operator[data-v-392329f0],.theme-mode-dark .token.url[data-v-392329f0]{background:none}.theme-mode-dark .token.bold[data-v-392329f0],.theme-mode-dark .token.important[data-v-392329f0]{font-weight:700}.theme-mode-dark .token.italic[data-v-392329f0]{font-style:italic}.theme-mode-dark .token.entity[data-v-392329f0]{cursor:help}.theme-mode-dark .token.inserted[data-v-392329f0]{color:green}.theme-mode-read[data-v-392329f0]{--bodyBg:#f5f5d5;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-392329f0],.theme-mode-read pre[class*=language-][data-v-392329f0]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-392329f0]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-392329f0],.theme-mode-read pre[class*=language-][data-v-392329f0]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-392329f0]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-392329f0],.theme-mode-read .token.cdata[data-v-392329f0],.theme-mode-read .token.comment[data-v-392329f0],.theme-mode-read .token.doctype[data-v-392329f0],.theme-mode-read .token.prolog[data-v-392329f0]{color:#999}.theme-mode-read .token.punctuation[data-v-392329f0]{color:#ccc}.theme-mode-read .token.attr-name[data-v-392329f0],.theme-mode-read .token.deleted[data-v-392329f0],.theme-mode-read .token.namespace[data-v-392329f0],.theme-mode-read .token.tag[data-v-392329f0]{color:#e2777a}.theme-mode-read .token.function-name[data-v-392329f0]{color:#6196cc}.theme-mode-read .token.boolean[data-v-392329f0],.theme-mode-read .token.function[data-v-392329f0],.theme-mode-read .token.number[data-v-392329f0]{color:#f08d49}.theme-mode-read .token.class-name[data-v-392329f0],.theme-mode-read .token.constant[data-v-392329f0],.theme-mode-read .token.property[data-v-392329f0],.theme-mode-read .token.symbol[data-v-392329f0]{color:#f8c555}.theme-mode-read .token.atrule[data-v-392329f0],.theme-mode-read .token.builtin[data-v-392329f0],.theme-mode-read .token.important[data-v-392329f0],.theme-mode-read .token.keyword[data-v-392329f0],.theme-mode-read .token.selector[data-v-392329f0]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-392329f0],.theme-mode-read .token.char[data-v-392329f0],.theme-mode-read .token.regex[data-v-392329f0],.theme-mode-read .token.string[data-v-392329f0],.theme-mode-read .token.variable[data-v-392329f0]{color:#7ec699}.theme-mode-read .token.entity[data-v-392329f0],.theme-mode-read .token.operator[data-v-392329f0],.theme-mode-read .token.url[data-v-392329f0]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-392329f0],.theme-mode-read .style .token.string[data-v-392329f0],.theme-mode-read .token.entity[data-v-392329f0],.theme-mode-read .token.operator[data-v-392329f0],.theme-mode-read .token.url[data-v-392329f0]{background:none}.theme-mode-read .token.bold[data-v-392329f0],.theme-mode-read .token.important[data-v-392329f0]{font-weight:700}.theme-mode-read .token.italic[data-v-392329f0]{font-style:italic}.theme-mode-read .token.entity[data-v-392329f0]{cursor:help}.theme-mode-read .token.inserted[data-v-392329f0]{color:green}.theme-code-group[data-v-392329f0],.theme-code-group__nav[data-v-392329f0]{background-color:var(--codeBg);padding-bottom:22px;border-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__nav[data-v-392329f0]{margin-bottom:-35px}.theme-code-group__ul[data-v-392329f0]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__li[data-v-392329f0],.theme-code-group__nav-tab[data-v-392329f0]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:var(--codeColor);font-weight:600;opacity:.85}.theme-code-group__nav-tab-active[data-v-392329f0]{border-bottom:1px solid #11a8cd;opacity:1}.pre-blank[data-v-392329f0]{color:#11a8cd}body .theme-vdoing-content code{color:var(--textLightenColor);padding:.25rem .5rem;margin:0;font-size:.9em;background-color:hsla(0,0%,39.2%,.08);border-radius:3px}body .theme-vdoing-content code .token.deleted{color:#ec5975}body .theme-vdoing-content code .token.inserted{color:#11a8cd}body .theme-vdoing-content pre,body .theme-vdoing-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}body .theme-vdoing-content pre[class*=language-] code,body .theme-vdoing-content pre code{color:var(--codeColor);padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:var(--codeBg);border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.3)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative!important;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.8rem;color:hsla(0,0%,58.8%,.7)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:2.5rem;height:100%;background-color:rgba(0,0,0,.3)}div[class*=language-].line-numbers-mode pre{padding-left:3.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:2.5rem;text-align:center;color:hsla(0,0%,49.8%,.5);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:2.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--borderColor);background-color:var(--codeBg)}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:.2rem}.custom-block p{margin:0}.custom-block.danger,.custom-block.note,.custom-block.tip,.custom-block.warning{padding:.5rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983;color:#215d42}.custom-block.warning{background-color:#fff7d0;border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:var(--textColor)}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:var(--textColor)}.custom-block.note{background-color:#e8f5fa;border-color:#157bae;color:#0d4a68}.custom-block.right{color:var(--textColor);font-size:.9rem;text-align:right}.custom-block.theorem{margin:1rem 0;padding:.8rem 1.5rem;border-radius:2px;background-color:var(--customBlockBg)}.custom-block.theorem .title{font-weight:700;margin:.5rem 0}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1em 0;padding:1.6em;background-color:var(--customBlockBg)}.custom-block.details p{margin:.8rem 0}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.custom-block.details summary:hover{color:#11a8cd}.theme-mode-dark .custom-block.warning{background-color:rgba(255,247,208,.2);color:#e7c000}.theme-mode-dark .custom-block.warning .custom-block-title{color:#ffdc2f}.theme-mode-dark .custom-block.tip{background-color:rgba(243,245,247,.2);color:#42b983}.theme-mode-dark .custom-block.danger{background-color:rgba(255,230,230,.4);color:maroon}.theme-mode-dark .custom-block.danger a{color:#11a8cd}.theme-mode-dark .custom-block.note{background-color:rgba(243,245,247,.2);color:#157bae}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-vdoing-content:not(.custom){max-width:860px}.table-of-contents .badge{vertical-align:middle}.center-container{text-align:center}.center-container>h1,.center-container>h2,.center-container>h3,.center-container>h4,.center-container>h5,.center-container>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.center-container>h1 a.header-anchor,.center-container>h2 a.header-anchor,.center-container>h3 a.header-anchor,.center-container>h4 a.header-anchor,.center-container>h5 a.header-anchor,.center-container>h6 a.header-anchor{float:none;padding-right:0;margin-left:-.9rem}.cardListContainer{margin:.7rem 0}.cardListContainer>:not(.card-list){display:none}.cardListContainer .card-list{margin:-.35rem;display:flex;flex-wrap:wrap;align-items:flex-start}.cardListContainer .card-list .card-item{width:calc(33.33333% - .7rem);margin:.35rem;background:var(--bodyBg);border-radius:3px;color:var(--textColor);display:flex;box-shadow:1px 1px 2px 0 rgba(0,0,0,.06);transition:all .4s}.cardListContainer .card-list .card-item:hover{text-decoration:none;box-shadow:0 10px 20px -10px var(--randomColor,rgba(0,0,0,.15));transform:translateY(-3px) scale(1.01)}.cardListContainer .card-list .card-item:hover img{box-shadow:3px 2px 7px rgba(0,0,0,.15)}.cardListContainer .card-list .card-item:hover div p{text-shadow:3px 2px 5px rgba(0,0,0,.15)}.cardListContainer .card-list .card-item img{width:60px;height:60px;border-radius:50%;border:2px solid #fff;margin:1rem 0 1rem 1rem;box-shadow:3px 2px 5px rgba(0,0,0,.08);transition:all .4s}.cardListContainer .card-list .card-item div{flex:1;display:inline-block;float:right;padding:1rem 0}.cardListContainer .card-list .card-item div p{margin:0;padding:0 1rem;transition:text-shadow .4s;text-align:center}.cardListContainer .card-list .card-item div .name{margin:.2rem 0 .3rem}.cardListContainer .card-list .card-item div .desc{font-size:.8rem;line-height:1.1rem;opacity:.8;margin-bottom:.2rem}.cardListContainer .card-list .card-item.row-1{width:calc(100% - .7rem)}.cardListContainer .card-list .card-item.row-1 img{margin-left:2rem}.cardListContainer .card-list .card-item.row-2{width:calc(50% - .7rem)}.cardListContainer .card-list .card-item.row-2 img{margin-left:1.5rem}.cardListContainer .card-list .card-item.row-3{width:calc(33.33333% - .7rem)}.cardListContainer .card-list .card-item.row-4{width:calc(25% - .7rem)}.cardImgListContainer{margin:1rem 0}.cardImgListContainer>:not(.card-list){display:none}.cardImgListContainer .card-list{margin:-.5rem;display:flex;flex-wrap:wrap;align-items:flex-start}.cardImgListContainer .card-list .card-item{width:calc(33.33333% - 1rem);margin:.5rem;background:var(--mainBg);border:1px solid rgba(0,0,0,.1);box-sizing:border-box;border-radius:3px;overflow:hidden;color:var(--textColor);box-shadow:2px 2px 10px rgba(0,0,0,.04);display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:stretch;transition:all .4s}.cardImgListContainer .card-list .card-item:hover{box-shadow:1px 1px 20px rgba(0,0,0,.1);transform:translateY(-3px)}.cardImgListContainer .card-list .card-item .box-img{overflow:hidden;position:relative;background:#eee}.cardImgListContainer .card-list .card-item .box-img img{display:block;width:100%;height:100%;transition:all .3s}.cardImgListContainer .card-list .card-item a{color:var(--textColor);transition:color .3s}.cardImgListContainer .card-list .card-item a:hover{text-decoration:none}.cardImgListContainer .card-list .card-item .box-info{padding:.8rem 1rem}.cardImgListContainer .card-list .card-item .box-info p{margin:0}.cardImgListContainer .card-list .card-item .box-info .desc{margin-top:.3rem;opacity:.8;font-size:.9rem;line-height:1.1rem;overflow:hidden;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.cardImgListContainer .card-list .card-item .box-footer{overflow:hidden;padding:.8rem 1rem;border-top:1px solid rgba(0,0,0,.1)}.cardImgListContainer .card-list .card-item .box-footer img{width:1.8rem;height:1.8rem;border-radius:50%;float:left}.cardImgListContainer .card-list .card-item .box-footer span{line-height:1.8rem;float:left;margin-left:.6rem;font-size:.8rem}.cardImgListContainer .card-list .card-item.row-1{width:calc(100% - 1rem)}.cardImgListContainer .card-list .card-item.row-2{width:calc(50% - 1rem)}.cardImgListContainer .card-list .card-item.row-3{width:calc(33.33333% - 1rem)}.cardImgListContainer .card-list .card-item.row-4{width:calc(25% - 1rem)}.theme-mode-dark .cardImgListContainer .card-list .card-item,.theme-mode-dark .cardImgListContainer .card-list .card-item .box-footer{border-color:var(--borderColor)}@media (max-width:900px){.cardListContainer .card-list .card-item.row-4{width:calc(33.33333% - .7rem)}.cardImgListContainer .card-list .card-item.row-4{width:calc(33.33333% - 1rem)}}@media (max-width:720px){.cardListContainer .card-list .card-item.row-3,.cardListContainer .card-list .card-item.row-4{width:calc(50% - .7rem)}.cardListContainer .card-list .card-item.row-3 img,.cardListContainer .card-list .card-item.row-4 img{margin-left:1.5rem}.cardImgListContainer .card-list .card-item.row-3,.cardImgListContainer .card-list .card-item.row-4{width:calc(50% - 1rem)}}@media (max-width:500px){.cardListContainer .card-list .card-item.row-1,.cardListContainer .card-list .card-item.row-2,.cardListContainer .card-list .card-item.row-3,.cardListContainer .card-list .card-item.row-4{width:calc(100% - .7rem)}.cardListContainer .card-list .card-item.row-1 img,.cardListContainer .card-list .card-item.row-2 img,.cardListContainer .card-list .card-item.row-3 img,.cardListContainer .card-list .card-item.row-4 img{margin-left:1.5rem}.cardImgListContainer .card-list .card-item.row-1,.cardImgListContainer .card-list .card-item.row-2,.cardImgListContainer .card-list .card-item.row-3,.cardImgListContainer .card-list .card-item.row-4{width:calc(100% - 1rem)}}body,html{padding:0;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent;font-size:16px;color:#2c3e50;background:var(--bodyBg)}a,button,input{outline:none;-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-focus-ring-color:transparent}@media (min-width:719px){::-webkit-scrollbar{width:6px;height:5px}::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.15);-webkit-border-radius:3px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:rgba(0,0,0,.28);-webkit-border-radius:3px}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:rgba(0,0,0,.28);-webkit-border-radius:3px}}.card-box{border-radius:5px;background:var(--mainBg);box-shadow:0 0 4px 0 rgba(0,0,0,.1);transition:box-shadow .5s}.card-box:hover{box-shadow:0 1px 15px 0 rgba(0,0,0,.1)}@media (max-width:719px){.theme-style-line{margin-left:-1px;margin-right:-1px}}.theme-style-line .card-box{box-shadow:0 0;border:1px solid var(--borderColor)}.blur{-webkit-backdrop-filter:saturate(200%) blur(20px);backdrop-filter:saturate(200%) blur(20px)}.custom-page{min-height:calc(100vh - 3.6rem);padding-top:3.6rem;padding-bottom:.9rem}.custom-page .theme-vdoing-wrapper{margin:0 auto}body .search-box input{background-color:transparent;color:var(--textColor);border:1px solid var(--borderColor,#ccc)}@media (max-width:959px){body .search-box input{border-color:transparent}}.page{transition:padding .2s ease;padding-left:.8rem}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:3.6rem;background-color:var(--blurBg);box-sizing:border-box;box-shadow:0 2px 5px rgba(0,0,0,.06)}.sidebar-mask{top:0;width:100vw;height:100vh}.sidebar-hover-trigger,.sidebar-mask{position:fixed;z-index:12;left:0;display:none}.sidebar-hover-trigger{top:8.1rem;bottom:0;width:24px}.sidebar{font-size:16px;background-color:var(--sidebarBg);width:18rem;position:fixed;z-index:13;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--borderColor);overflow-y:auto;transform:translateX(-100%);transition:transform .2s}@media (max-width:719px){.sidebar{background-color:var(--mainBg)}}.theme-vdoing-content:not(.custom){word-wrap:break-word}.theme-vdoing-content:not(.custom) a:hover{text-decoration:underline}.theme-vdoing-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-vdoing-content:not(.custom) img{max-width:100%}.theme-vdoing-content.custom{padding:0;margin:0}.theme-vdoing-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#11a8cd}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;opacity:.75;border-left:.2rem solid hsla(0,0%,39.2%,.3);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-vdoing-content:not(.custom)>h1,.theme-vdoing-content:not(.custom)>h2,.theme-vdoing-content:not(.custom)>h3,.theme-vdoing-content:not(.custom)>h4,.theme-vdoing-content:not(.custom)>h5,.theme-vdoing-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-vdoing-content:not(.custom)>h1:first-child,.theme-vdoing-content:not(.custom)>h2:first-child,.theme-vdoing-content:not(.custom)>h3:first-child,.theme-vdoing-content:not(.custom)>h4:first-child,.theme-vdoing-content:not(.custom)>h5:first-child,.theme-vdoing-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-vdoing-content:not(.custom)>h1:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h1:first-child+p,.theme-vdoing-content:not(.custom)>h1:first-child+pre,.theme-vdoing-content:not(.custom)>h2:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h2:first-child+p,.theme-vdoing-content:not(.custom)>h2:first-child+pre,.theme-vdoing-content:not(.custom)>h3:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h3:first-child+p,.theme-vdoing-content:not(.custom)>h3:first-child+pre,.theme-vdoing-content:not(.custom)>h4:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h4:first-child+p,.theme-vdoing-content:not(.custom)>h4:first-child+pre,.theme-vdoing-content:not(.custom)>h5:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h5:first-child+p,.theme-vdoing-content:not(.custom)>h5:first-child+pre,.theme-vdoing-content:not(.custom)>h6:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h6:first-child+p,.theme-vdoing-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}.theme-vdoing-content:not(.custom)>.custom-block:first-child,.theme-vdoing-content:not(.custom)>p:first-child,.theme-vdoing-content:not(.custom)>pre:first-child{margin-top:2rem}h1{font-size:1.9rem}.theme-vdoing-content:not(.custom)>h1:first-child{display:none}h2{font-size:1.5rem;padding-bottom:.3rem;border-bottom:1px solid var(--borderColor)}h3{font-size:1.35rem}.page h4{font-size:1.25rem}.page h5{font-size:1.15rem}.page h6{font-size:1.05rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--borderColor)}table{border-collapse:collapse;margin:1rem 0;overflow-x:auto;width:100%;display:inline-table}@media (max-width:719px){table{display:block}}tr{border-top:1px solid var(--borderColor)}tr:nth-child(2n){background-color:hsla(0,0%,58.8%,.1)}td,th{border:1px solid var(--borderColor);padding:.6em 1em}@media (max-width:719px){td,th{padding:.3em .5em}}td a,th a{word-break:break-all}.theme-container{color:var(--textColor);min-height:100vh}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-vdoing-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px}}@media (max-width:719px){.sidebar{width:17.099999999999998rem}}@media (min-width:720px) and (max-width:959px){.sidebar{width:16.2rem}.theme-container.sidebar-open .page{padding-left:17rem!important}}@media (max-width:719px){.sidebar{top:0;height:100vh;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-vdoing-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}@media (min-width:720px){.theme-container .sidebar-hover-trigger{display:block}.theme-container .sidebar-hover-trigger:hover~.sidebar,.theme-container:not(.sidebar-open) .sidebar-hover-trigger~.sidebar:hover{transform:translateX(0);z-index:100}.theme-container.sidebar-open .sidebar-mask{display:none}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.sidebar-open .sidebar-button{left:18rem}.theme-container.sidebar-open .page{padding-left:18.8rem;padding-right:.8rem}.theme-container.sidebar-open .sidebar-hover-trigger{display:none}.theme-container.have-rightmenu .page{padding-right:445px}.theme-container.no-sidebar .page{padding-left:0!important}.theme-container.no-sidebar .sidebar-hover-trigger{display:none}.theme-container.hide-navbar .sidebar-hover-trigger{top:4.5rem}.theme-container.hide-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar-button{display:none}}@media print{.buttons,.navbar,.sidebar{display:none}.page{padding-top:0!important}}@media (min-width:720px) and (max-width:959px){.theme-container.sidebar-open:not(.on-sidebar) .sidebar-button{left:12.6rem}}.home-wrapper .banner .banner-conent .hero h1{font-size:2.8rem!important}.page{letter-spacing:.08rem}table{width:auto}.card-box,.page>:not(.footer){box-shadow:none!important}@media (min-width:940px){.page{padding-top:3.6rem!important}}.home-wrapper .banner .banner-conent{padding:0 2.9rem;box-sizing:border-box}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a h2{margin-top:2rem;font-size:1.2rem!important}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a p{padding:0 1rem}.gt-container .gt-ico-tip:after{content:"。( Win + . ) or ( ⌃ + ⌘ + ␣ ) open Emoji";color:#999}.gt-container .gt-meta{border-color:var(--borderColor)!important}.gt-container .gt-comments-null{color:var(--textColor);opacity:.5}.gt-container .gt-header-textarea{color:var(--textColor);background:hsla(0,0%,70.6%,.1)!important}.gt-container .gt-btn{border-color:#11a8cd!important;background-color:#11a8cd!important}.gt-container .gt-btn-preview{background-color:hsla(0,0%,100%,0)!important;color:#11a8cd!important}.gt-container a{color:#11a8cd!important}.gt-container .gt-svg svg{fill:#11a8cd!important}.gt-container .gt-comment-admin .gt-comment-content,.gt-container .gt-comment-content{background-color:hsla(0,0%,58.8%,.1)!important}.gt-container .gt-comment-admin .gt-comment-content:hover,.gt-container .gt-comment-content:hover{box-shadow:0 0 25px hsla(0,0%,58.8%,.5)!important}.gt-container .gt-comment-admin .gt-comment-content .gt-comment-body,.gt-container .gt-comment-content .gt-comment-body{color:var(--textColor)!important}.qq{position:relative}.qq:after{content:"可撩";background:#11a8cd;color:#fff;padding:0 5px;border-radius:10px;font-size:12px;position:absolute;top:-4px;right:-35px;transform:scale(.85)}body .vuepress-plugin-demo-block__wrapper,body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__display{border-color:hsla(0,0%,62.7%,.3)}body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__footer:hover .vuepress-plugin-demo-block__expand:before{border-top-color:#11a8cd!important;border-bottom-color:#11a8cd!important}body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__footer:hover svg{fill:#11a8cd!important}.suggestions{overflow:auto;max-height:calc(100vh - 6rem)}@media (max-width:719px){.suggestions{width:90vw;min-width:90vw!important;margin-right:-20px}}.suggestions .highlight{color:#11a8cd;font-weight:700}#nprogress{pointer-events:none}#nprogress .bar{background:#11a8cd;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #11a8cd,0 0 5px #11a8cd;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#11a8cd transparent transparent #11a8cd;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.theme-mode-light[data-v-08abdc17]{--bodyBg:#f4f4f4;--customBlockBg:#f1f1f1;--textColor:#00323c;--borderColor:rgba(0,0,0,0.12)}.theme-mode-dark[data-v-08abdc17]{--bodyBg:#27272b;--customBlockBg:#27272b;--textColor:#9b9baa;--borderColor:#30363d}.theme-mode-read[data-v-08abdc17]{--bodyBg:#ececcc;--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963}.theme-style-line.theme-mode-light[data-v-08abdc17]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-08abdc17]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-08abdc17]{--bodyBg:#f5f5d5}.theme-mode-light[data-v-08abdc17]{--bodyBg:#fff;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-08abdc17],.theme-mode-light pre[class*=language-][data-v-08abdc17]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-08abdc17]::-moz-selection,.theme-mode-light code[class*=language-][data-v-08abdc17] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-08abdc17]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-08abdc17] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-08abdc17]::selection,.theme-mode-light code[class*=language-][data-v-08abdc17] ::selection,.theme-mode-light pre[class*=language-][data-v-08abdc17]::selection,.theme-mode-light pre[class*=language-][data-v-08abdc17] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-08abdc17],.theme-mode-light pre[class*=language-][data-v-08abdc17]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-08abdc17]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-08abdc17],.theme-mode-light pre[class*=language-][data-v-08abdc17]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-08abdc17]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-08abdc17],.theme-mode-light .token.comment[data-v-08abdc17],.theme-mode-light .token.doctype[data-v-08abdc17],.theme-mode-light .token.prolog[data-v-08abdc17]{color:#708090}.theme-mode-light .token.punctuation[data-v-08abdc17]{color:#999}.theme-mode-light .namespace[data-v-08abdc17]{opacity:.7}.theme-mode-light .token.boolean[data-v-08abdc17],.theme-mode-light .token.constant[data-v-08abdc17],.theme-mode-light .token.deleted[data-v-08abdc17],.theme-mode-light .token.number[data-v-08abdc17],.theme-mode-light .token.property[data-v-08abdc17],.theme-mode-light .token.symbol[data-v-08abdc17],.theme-mode-light .token.tag[data-v-08abdc17]{color:#905}.theme-mode-light .token.attr-name[data-v-08abdc17],.theme-mode-light .token.builtin[data-v-08abdc17],.theme-mode-light .token.char[data-v-08abdc17],.theme-mode-light .token.inserted[data-v-08abdc17],.theme-mode-light .token.selector[data-v-08abdc17],.theme-mode-light .token.string[data-v-08abdc17]{color:#690}.theme-mode-light .language-css .token.string[data-v-08abdc17],.theme-mode-light .style .token.string[data-v-08abdc17],.theme-mode-light .token.entity[data-v-08abdc17],.theme-mode-light .token.operator[data-v-08abdc17],.theme-mode-light .token.url[data-v-08abdc17]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-08abdc17],.theme-mode-light .token.attr-value[data-v-08abdc17],.theme-mode-light .token.keyword[data-v-08abdc17]{color:#07a}.theme-mode-light .token.class-name[data-v-08abdc17],.theme-mode-light .token.function[data-v-08abdc17]{color:#dd4a68}.theme-mode-light .token.important[data-v-08abdc17],.theme-mode-light .token.regex[data-v-08abdc17],.theme-mode-light .token.variable[data-v-08abdc17]{color:#e90}.theme-mode-light .token.bold[data-v-08abdc17],.theme-mode-light .token.important[data-v-08abdc17]{font-weight:700}.theme-mode-light .token.italic[data-v-08abdc17]{font-style:italic}.theme-mode-light .token.entity[data-v-08abdc17]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-08abdc17],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-08abdc17]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-08abdc17]{--bodyBg:#1e1e22;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--textColor:#8c8c96;--textLightenColor:#0085ad;--borderColor:#2c2c3a;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-08abdc17],.theme-mode-dark pre[class*=language-][data-v-08abdc17]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-08abdc17]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-08abdc17],.theme-mode-dark pre[class*=language-][data-v-08abdc17]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-08abdc17]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-08abdc17],.theme-mode-dark .token.cdata[data-v-08abdc17],.theme-mode-dark .token.comment[data-v-08abdc17],.theme-mode-dark .token.doctype[data-v-08abdc17],.theme-mode-dark .token.prolog[data-v-08abdc17]{color:#999}.theme-mode-dark .token.punctuation[data-v-08abdc17]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-08abdc17],.theme-mode-dark .token.deleted[data-v-08abdc17],.theme-mode-dark .token.namespace[data-v-08abdc17],.theme-mode-dark .token.tag[data-v-08abdc17]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-08abdc17]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-08abdc17],.theme-mode-dark .token.function[data-v-08abdc17],.theme-mode-dark .token.number[data-v-08abdc17]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-08abdc17],.theme-mode-dark .token.constant[data-v-08abdc17],.theme-mode-dark .token.property[data-v-08abdc17],.theme-mode-dark .token.symbol[data-v-08abdc17]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-08abdc17],.theme-mode-dark .token.builtin[data-v-08abdc17],.theme-mode-dark .token.important[data-v-08abdc17],.theme-mode-dark .token.keyword[data-v-08abdc17],.theme-mode-dark .token.selector[data-v-08abdc17]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-08abdc17],.theme-mode-dark .token.char[data-v-08abdc17],.theme-mode-dark .token.regex[data-v-08abdc17],.theme-mode-dark .token.string[data-v-08abdc17],.theme-mode-dark .token.variable[data-v-08abdc17]{color:#7ec699}.theme-mode-dark .token.entity[data-v-08abdc17],.theme-mode-dark .token.operator[data-v-08abdc17],.theme-mode-dark .token.url[data-v-08abdc17]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-08abdc17],.theme-mode-dark .style .token.string[data-v-08abdc17],.theme-mode-dark .token.entity[data-v-08abdc17],.theme-mode-dark .token.operator[data-v-08abdc17],.theme-mode-dark .token.url[data-v-08abdc17]{background:none}.theme-mode-dark .token.bold[data-v-08abdc17],.theme-mode-dark .token.important[data-v-08abdc17]{font-weight:700}.theme-mode-dark .token.italic[data-v-08abdc17]{font-style:italic}.theme-mode-dark .token.entity[data-v-08abdc17]{cursor:help}.theme-mode-dark .token.inserted[data-v-08abdc17]{color:green}.theme-mode-read[data-v-08abdc17]{--bodyBg:#f5f5d5;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-08abdc17],.theme-mode-read pre[class*=language-][data-v-08abdc17]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-08abdc17]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-08abdc17],.theme-mode-read pre[class*=language-][data-v-08abdc17]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-08abdc17]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-08abdc17],.theme-mode-read .token.cdata[data-v-08abdc17],.theme-mode-read .token.comment[data-v-08abdc17],.theme-mode-read .token.doctype[data-v-08abdc17],.theme-mode-read .token.prolog[data-v-08abdc17]{color:#999}.theme-mode-read .token.punctuation[data-v-08abdc17]{color:#ccc}.theme-mode-read .token.attr-name[data-v-08abdc17],.theme-mode-read .token.deleted[data-v-08abdc17],.theme-mode-read .token.namespace[data-v-08abdc17],.theme-mode-read .token.tag[data-v-08abdc17]{color:#e2777a}.theme-mode-read .token.function-name[data-v-08abdc17]{color:#6196cc}.theme-mode-read .token.boolean[data-v-08abdc17],.theme-mode-read .token.function[data-v-08abdc17],.theme-mode-read .token.number[data-v-08abdc17]{color:#f08d49}.theme-mode-read .token.class-name[data-v-08abdc17],.theme-mode-read .token.constant[data-v-08abdc17],.theme-mode-read .token.property[data-v-08abdc17],.theme-mode-read .token.symbol[data-v-08abdc17]{color:#f8c555}.theme-mode-read .token.atrule[data-v-08abdc17],.theme-mode-read .token.builtin[data-v-08abdc17],.theme-mode-read .token.important[data-v-08abdc17],.theme-mode-read .token.keyword[data-v-08abdc17],.theme-mode-read .token.selector[data-v-08abdc17]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-08abdc17],.theme-mode-read .token.char[data-v-08abdc17],.theme-mode-read .token.regex[data-v-08abdc17],.theme-mode-read .token.string[data-v-08abdc17],.theme-mode-read .token.variable[data-v-08abdc17]{color:#7ec699}.theme-mode-read .token.entity[data-v-08abdc17],.theme-mode-read .token.operator[data-v-08abdc17],.theme-mode-read .token.url[data-v-08abdc17]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-08abdc17],.theme-mode-read .style .token.string[data-v-08abdc17],.theme-mode-read .token.entity[data-v-08abdc17],.theme-mode-read .token.operator[data-v-08abdc17],.theme-mode-read .token.url[data-v-08abdc17]{background:none}.theme-mode-read .token.bold[data-v-08abdc17],.theme-mode-read .token.important[data-v-08abdc17]{font-weight:700}.theme-mode-read .token.italic[data-v-08abdc17]{font-style:italic}.theme-mode-read .token.entity[data-v-08abdc17]{cursor:help}.theme-mode-read .token.inserted[data-v-08abdc17]{color:green}.theme-vdoing-content[data-v-08abdc17]{margin:3rem auto;padding:1.5rem}.theme-vdoing-content span[data-v-08abdc17]{font-size:6rem;color:#11a8cd}.main-wrapper{margin:1.5rem auto 0;max-width:1100px;padding:0 .9rem;box-sizing:border-box;position:relative;display:flex}.main-wrapper .main-left{flex:1}.main-wrapper .main-left .theme-vdoing-content.card-box{padding:1rem 1.5rem;margin-bottom:.9rem}.main-wrapper .main-left .home-content{padding:1rem 1.5rem 0}.main-wrapper .main-right>*{width:245px;box-sizing:border-box}@media (max-width:900px){.main-wrapper .main-right>*{width:235px}}.main-wrapper .main-right .card-box{margin:0 0 .8rem .8rem;padding-top:.95rem;padding-bottom:.95rem}@media (max-width:719px){.main-wrapper{margin:.9rem 0;padding:0;display:block}.main-wrapper .main-left{width:100%}.main-wrapper .main-left .post-list{margin-bottom:3rem}.main-wrapper .main-left .post-list .post{border-radius:0}.main-wrapper .main-left .pagination{margin-bottom:3rem}.main-wrapper .main-right .blogger-wrapper{display:none}.main-wrapper .main-right .card-box{margin:0 0 .9rem;border-radius:0;width:100%}.theme-style-line .main-wrapper .main-right .card-box{margin:-1px 0 0}}.post-list{margin-bottom:3rem}.post-list .post{position:relative;padding:1rem 1.5rem;margin-bottom:.8rem;transition:all .3s}.post-list .post:last-child{border-bottom:none}.post-list .post.post-leave-active{display:none}.post-list .post.post-enter{opacity:0;transform:translateX(-20px)}.post-list .post:before{position:absolute;top:-1px;right:0;font-size:2.5rem;color:#ff5722;opacity:.85}.post-list .post .title-wrapper a{color:var(--textColor)}.post-list .post .title-wrapper a:hover{color:#11a8cd}.post-list .post .title-wrapper h2{margin:.5rem 0;font-size:1.4rem;border:none}.post-list .post .title-wrapper h2 .title-tag{height:1.2rem;line-height:1.2rem;border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.15rem);display:inline-block}.post-list .post .title-wrapper h2 a{display:block}@media (max-width:719px){.post-list .post .title-wrapper h2 a{font-weight:400}}.post-list .post .title-wrapper .article-info>a,.post-list .post .title-wrapper .article-info>span{opacity:.7;font-size:.8rem;margin-right:1rem;cursor:pointer}.post-list .post .title-wrapper .article-info>a:before,.post-list .post .title-wrapper .article-info>span:before{margin-right:.3rem}.post-list .post .title-wrapper .article-info>a a,.post-list .post .title-wrapper .article-info>span a{margin:0}.post-list .post .title-wrapper .article-info>a a:not(:first-child):before,.post-list .post .title-wrapper .article-info>span a:not(:first-child):before{content:"/"}.post-list .post .title-wrapper .article-info .tags a:not(:first-child):before{content:"、"}.post-list .post .excerpt-wrapper{border-top:1px solid var(--borderColor);margin:.5rem 0;overflow:hidden}.post-list .post .excerpt-wrapper .excerpt{margin-bottom:.3rem;font-size:.92rem}.post-list .post .excerpt-wrapper .excerpt h1,.post-list .post .excerpt-wrapper .excerpt h2,.post-list .post .excerpt-wrapper .excerpt h3{display:none}.post-list .post .excerpt-wrapper .excerpt img{max-height:280px;max-width:100%!important;margin:0 auto}.post-list .post .excerpt-wrapper .readmore{float:right;margin-right:1rem;line-height:1rem}.post-list .post .excerpt-wrapper .readmore:before{float:right;font-size:.8rem;margin:.1rem 0 0 .2rem}.theme-style-line .post-list{border:1px solid var(--borderColor);border-bottom:none;border-radius:5px;overflow:hidden}.theme-style-line .post-list .post{margin-bottom:0;border:none;border-bottom:1px solid var(--borderColor);border-radius:0}.article-list{padding:1rem 2rem}@media (max-width:959px){.article-list{padding:1rem 1.5rem}}.article-list.no-article-list{display:none}.article-list .article-title{border-bottom:1px solid var(--borderColor);font-size:1.3rem;padding:1rem}.article-list .article-title a{font-size:1.2rem;color:var(--textColor);opacity:.9}.article-list .article-title a:before{margin-right:.4rem;font-size:1.1rem}.article-list .article-wrapper{overflow:hidden}.article-list .article-wrapper dl{border-bottom:1px dotted var(--borderColor);float:left;display:flex;padding:8px 0;margin:0;height:45px;width:100%}.article-list .article-wrapper dl dd{font-size:1.1rem;color:#f17229;width:50px;text-align:center;margin:0;line-height:45px}.article-list .article-wrapper dl dt{flex:1;display:flex}.article-list .article-wrapper dl dt a{color:var(--textColor);flex:1;display:flex;height:45px;align-items:center;font-weight:400}.article-list .article-wrapper dl dt a div{overflow:hidden;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.article-list .article-wrapper dl dt a div .title-tag{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}.article-list .article-wrapper dl dt a:hover{text-decoration:underline}.article-list .article-wrapper dl dt a.more{color:#11a8cd}.article-list .article-wrapper dl dt .date{width:50px;margin-right:15px;color:#999;text-align:right;font-size:.9rem;line-height:45px}.pagination{position:relative;height:60px;text-align:center}@media (max-width:720px){.pagination{margin-left:1px;margin-right:1px}}.pagination span{line-height:1rem;opacity:.9;cursor:pointer}.pagination span:hover{color:#11a8cd}.pagination span.ellipsis{opacity:.5}.pagination span.ellipsis:before{content:"...";font-size:1.2rem}@media (any-hover:hover){.pagination span.ellipsis.ell-two:hover:before{content:"«"}.pagination span.ellipsis.ell-four:hover:before{content:"»"}}.pagination>span{position:absolute;top:0;padding:1rem 1.2rem;font-size:.95rem}.pagination>span:before{font-size:.4rem}.pagination>span.disabled{color:hsla(0,0%,49%,.5)}.pagination>span.prev{left:0}.pagination>span.prev:before{margin-right:.3rem}.pagination>span.next{right:0}.pagination>span.next:before{float:right;margin-left:.3rem}.pagination>span p{display:inline;line-height:.95rem}.pagination .pagination-list span{display:inline-block;width:2.5rem;height:2.5rem;line-height:2.5rem;margin:.3rem}.pagination .pagination-list span.active{background:#11a8cd;color:var(--mainBg)}@media (max-width:800px){.pagination>span{padding:1rem 1.5rem}.pagination>span p{display:none}}@media (max-width:719px){.pagination>span{padding:.9rem 1.5rem}.pagination .pagination-list span{width:2.3rem;height:2.3rem;line-height:2.3rem;margin:.25rem}}@media (max-width:390px){.pagination>span{padding:.8rem 1.3rem}.pagination .pagination-list span{width:2rem;height:2rem;line-height:2rem;margin:.3rem .1rem .1rem}}.blogger-wrapper{height:auto;display:inline-table;padding-top:0!important;overflow:hidden}.blogger-wrapper .avatar{width:100%;overflow:hidden}.blogger-wrapper .avatar img{width:100%;height:100%}.blogger-wrapper .icons{border-top:none;height:35px;line-height:35px}.blogger-wrapper .icons a{font-size:20px;width:33%;color:var(--textColor);display:block;float:left;text-align:center;opacity:.8}.blogger-wrapper .icons a:hover{color:#11a8cd}.blogger-wrapper .blogger{padding:.3rem .95rem 0}.blogger-wrapper .blogger .name{font-size:1.3rem;display:block;margin-bottom:6px}.blogger-wrapper .blogger .slogan{color:var(--textColor)}.categories-wrapper .title{color:var(--textColor);opacity:.9;font-size:1.2rem;padding:0 .95rem}.categories-wrapper .title:before{margin-right:.3rem}.categories-wrapper .categories{margin-top:.6rem}.categories-wrapper .categories a{display:block;padding:8px 2.4rem 7px .95rem;color:var(--textColor);opacity:.8;font-size:.95rem;line-height:.95rem;position:relative;transition:all .2s;border-left:2px solid transparent;margin-top:-1px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media (max-width:719px){.categories-wrapper .categories a{font-weight:400}}.categories-wrapper .categories a:not(.active):hover{color:#11a8cd;background:#f8f8f8;border-color:#11a8cd}.categories-wrapper .categories a:not(.active):hover span{opacity:.8}.categories-wrapper .categories a span{background-color:var(--textColor);color:var(--mainBg);border-radius:8px;padding:0 .13rem;min-width:1rem;height:1rem;line-height:1rem;font-size:12px;text-align:center;opacity:.6;transition:opacity .3s;position:absolute;right:.95rem;top:8px}.categories-wrapper .categories a.active{background:#11a8cd;color:var(--mainBg);padding-left:.8rem;border-radius:1px;border-color:transparent}.theme-mode-dark .categories-wrapper .categories a:not(.active):hover,.theme-mode-read .categories-wrapper .categories a:not(.active):hover{background:var(--customBlockBg)}.tags-wrapper{padding:0 .95rem}.tags-wrapper .title{color:var(--textColor);opacity:.9;font-size:1.2rem}.tags-wrapper .title:before{margin-right:.3rem}.tags-wrapper .tags{text-align:justify;padding:.8rem .5rem .5rem;margin:0 -.5rem -.5rem}.tags-wrapper .tags a{opacity:.8;display:inline-block;padding:.2rem .4rem;transition:all .4s;background-color:var(--textColor);color:var(--mainBg);border-radius:3px;margin:0 .3rem .5rem 0;min-width:2rem;height:1rem;line-height:1rem;font-size:.8rem;text-align:center}@media (max-width:719px){.tags-wrapper .tags a{font-weight:400}}.tags-wrapper .tags a:hover{opacity:1;transform:scale(1.1)}.tags-wrapper .tags a.active{box-shadow:0 5px 10px -5px var(--randomColor,rgba(0,0,0,.15));transform:scale(1.22);opacity:1}.tags-wrapper .tags a.active:hover{text-decoration:none}.theme-mode-light[data-v-d146d2d2]{--bodyBg:#f4f4f4;--customBlockBg:#f1f1f1;--textColor:#00323c;--borderColor:rgba(0,0,0,0.12)}.theme-mode-dark[data-v-d146d2d2]{--bodyBg:#27272b;--customBlockBg:#27272b;--textColor:#9b9baa;--borderColor:#30363d}.theme-mode-read[data-v-d146d2d2]{--bodyBg:#ececcc;--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963}.theme-style-line.theme-mode-light[data-v-d146d2d2]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-d146d2d2]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-d146d2d2]{--bodyBg:#f5f5d5}.theme-mode-light[data-v-d146d2d2]{--bodyBg:#fff;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-d146d2d2],.theme-mode-light pre[class*=language-][data-v-d146d2d2]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-d146d2d2]::-moz-selection,.theme-mode-light code[class*=language-][data-v-d146d2d2] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-d146d2d2]::selection,.theme-mode-light code[class*=language-][data-v-d146d2d2] ::selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2]::selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-d146d2d2],.theme-mode-light pre[class*=language-][data-v-d146d2d2]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-d146d2d2]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-d146d2d2],.theme-mode-light pre[class*=language-][data-v-d146d2d2]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-d146d2d2]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-d146d2d2],.theme-mode-light .token.comment[data-v-d146d2d2],.theme-mode-light .token.doctype[data-v-d146d2d2],.theme-mode-light .token.prolog[data-v-d146d2d2]{color:#708090}.theme-mode-light .token.punctuation[data-v-d146d2d2]{color:#999}.theme-mode-light .namespace[data-v-d146d2d2]{opacity:.7}.theme-mode-light .token.boolean[data-v-d146d2d2],.theme-mode-light .token.constant[data-v-d146d2d2],.theme-mode-light .token.deleted[data-v-d146d2d2],.theme-mode-light .token.number[data-v-d146d2d2],.theme-mode-light .token.property[data-v-d146d2d2],.theme-mode-light .token.symbol[data-v-d146d2d2],.theme-mode-light .token.tag[data-v-d146d2d2]{color:#905}.theme-mode-light .token.attr-name[data-v-d146d2d2],.theme-mode-light .token.builtin[data-v-d146d2d2],.theme-mode-light .token.char[data-v-d146d2d2],.theme-mode-light .token.inserted[data-v-d146d2d2],.theme-mode-light .token.selector[data-v-d146d2d2],.theme-mode-light .token.string[data-v-d146d2d2]{color:#690}.theme-mode-light .language-css .token.string[data-v-d146d2d2],.theme-mode-light .style .token.string[data-v-d146d2d2],.theme-mode-light .token.entity[data-v-d146d2d2],.theme-mode-light .token.operator[data-v-d146d2d2],.theme-mode-light .token.url[data-v-d146d2d2]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-d146d2d2],.theme-mode-light .token.attr-value[data-v-d146d2d2],.theme-mode-light .token.keyword[data-v-d146d2d2]{color:#07a}.theme-mode-light .token.class-name[data-v-d146d2d2],.theme-mode-light .token.function[data-v-d146d2d2]{color:#dd4a68}.theme-mode-light .token.important[data-v-d146d2d2],.theme-mode-light .token.regex[data-v-d146d2d2],.theme-mode-light .token.variable[data-v-d146d2d2]{color:#e90}.theme-mode-light .token.bold[data-v-d146d2d2],.theme-mode-light .token.important[data-v-d146d2d2]{font-weight:700}.theme-mode-light .token.italic[data-v-d146d2d2]{font-style:italic}.theme-mode-light .token.entity[data-v-d146d2d2]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-d146d2d2],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-d146d2d2]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-d146d2d2]{--bodyBg:#1e1e22;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--textColor:#8c8c96;--textLightenColor:#0085ad;--borderColor:#2c2c3a;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-d146d2d2],.theme-mode-dark pre[class*=language-][data-v-d146d2d2]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-d146d2d2]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-d146d2d2],.theme-mode-dark pre[class*=language-][data-v-d146d2d2]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-d146d2d2]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-d146d2d2],.theme-mode-dark .token.cdata[data-v-d146d2d2],.theme-mode-dark .token.comment[data-v-d146d2d2],.theme-mode-dark .token.doctype[data-v-d146d2d2],.theme-mode-dark .token.prolog[data-v-d146d2d2]{color:#999}.theme-mode-dark .token.punctuation[data-v-d146d2d2]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-d146d2d2],.theme-mode-dark .token.deleted[data-v-d146d2d2],.theme-mode-dark .token.namespace[data-v-d146d2d2],.theme-mode-dark .token.tag[data-v-d146d2d2]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-d146d2d2]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-d146d2d2],.theme-mode-dark .token.function[data-v-d146d2d2],.theme-mode-dark .token.number[data-v-d146d2d2]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-d146d2d2],.theme-mode-dark .token.constant[data-v-d146d2d2],.theme-mode-dark .token.property[data-v-d146d2d2],.theme-mode-dark .token.symbol[data-v-d146d2d2]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-d146d2d2],.theme-mode-dark .token.builtin[data-v-d146d2d2],.theme-mode-dark .token.important[data-v-d146d2d2],.theme-mode-dark .token.keyword[data-v-d146d2d2],.theme-mode-dark .token.selector[data-v-d146d2d2]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-d146d2d2],.theme-mode-dark .token.char[data-v-d146d2d2],.theme-mode-dark .token.regex[data-v-d146d2d2],.theme-mode-dark .token.string[data-v-d146d2d2],.theme-mode-dark .token.variable[data-v-d146d2d2]{color:#7ec699}.theme-mode-dark .token.entity[data-v-d146d2d2],.theme-mode-dark .token.operator[data-v-d146d2d2],.theme-mode-dark .token.url[data-v-d146d2d2]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-d146d2d2],.theme-mode-dark .style .token.string[data-v-d146d2d2],.theme-mode-dark .token.entity[data-v-d146d2d2],.theme-mode-dark .token.operator[data-v-d146d2d2],.theme-mode-dark .token.url[data-v-d146d2d2]{background:none}.theme-mode-dark .token.bold[data-v-d146d2d2],.theme-mode-dark .token.important[data-v-d146d2d2]{font-weight:700}.theme-mode-dark .token.italic[data-v-d146d2d2]{font-style:italic}.theme-mode-dark .token.entity[data-v-d146d2d2]{cursor:help}.theme-mode-dark .token.inserted[data-v-d146d2d2]{color:green}.theme-mode-read[data-v-d146d2d2]{--bodyBg:#f5f5d5;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-d146d2d2],.theme-mode-read pre[class*=language-][data-v-d146d2d2]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-d146d2d2]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-d146d2d2],.theme-mode-read pre[class*=language-][data-v-d146d2d2]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-d146d2d2]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-d146d2d2],.theme-mode-read .token.cdata[data-v-d146d2d2],.theme-mode-read .token.comment[data-v-d146d2d2],.theme-mode-read .token.doctype[data-v-d146d2d2],.theme-mode-read .token.prolog[data-v-d146d2d2]{color:#999}.theme-mode-read .token.punctuation[data-v-d146d2d2]{color:#ccc}.theme-mode-read .token.attr-name[data-v-d146d2d2],.theme-mode-read .token.deleted[data-v-d146d2d2],.theme-mode-read .token.namespace[data-v-d146d2d2],.theme-mode-read .token.tag[data-v-d146d2d2]{color:#e2777a}.theme-mode-read .token.function-name[data-v-d146d2d2]{color:#6196cc}.theme-mode-read .token.boolean[data-v-d146d2d2],.theme-mode-read .token.function[data-v-d146d2d2],.theme-mode-read .token.number[data-v-d146d2d2]{color:#f08d49}.theme-mode-read .token.class-name[data-v-d146d2d2],.theme-mode-read .token.constant[data-v-d146d2d2],.theme-mode-read .token.property[data-v-d146d2d2],.theme-mode-read .token.symbol[data-v-d146d2d2]{color:#f8c555}.theme-mode-read .token.atrule[data-v-d146d2d2],.theme-mode-read .token.builtin[data-v-d146d2d2],.theme-mode-read .token.important[data-v-d146d2d2],.theme-mode-read .token.keyword[data-v-d146d2d2],.theme-mode-read .token.selector[data-v-d146d2d2]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-d146d2d2],.theme-mode-read .token.char[data-v-d146d2d2],.theme-mode-read .token.regex[data-v-d146d2d2],.theme-mode-read .token.string[data-v-d146d2d2],.theme-mode-read .token.variable[data-v-d146d2d2]{color:#7ec699}.theme-mode-read .token.entity[data-v-d146d2d2],.theme-mode-read .token.operator[data-v-d146d2d2],.theme-mode-read .token.url[data-v-d146d2d2]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-d146d2d2],.theme-mode-read .style .token.string[data-v-d146d2d2],.theme-mode-read .token.entity[data-v-d146d2d2],.theme-mode-read .token.operator[data-v-d146d2d2],.theme-mode-read .token.url[data-v-d146d2d2]{background:none}.theme-mode-read .token.bold[data-v-d146d2d2],.theme-mode-read .token.important[data-v-d146d2d2]{font-weight:700}.theme-mode-read .token.italic[data-v-d146d2d2]{font-style:italic}.theme-mode-read .token.entity[data-v-d146d2d2]{cursor:help}.theme-mode-read .token.inserted[data-v-d146d2d2]{color:green}.home-wrapper .banner[data-v-d146d2d2]{width:100%;min-height:450px;margin-top:3.6rem;color:#fff;position:relative;overflow:hidden}.home-wrapper .banner .banner-conent[data-v-d146d2d2]{max-width:1100px;margin:0 auto;position:relative;z-index:1;overflow:hidden}.home-wrapper .banner .banner-conent .hero[data-v-d146d2d2]{text-align:center;margin-top:3rem}.home-wrapper .banner .banner-conent .hero img[data-v-d146d2d2]{max-width:100%;max-height:240px;display:block;margin:2rem auto 1.5rem}.home-wrapper .banner .banner-conent .hero h1[data-v-d146d2d2]{margin:0;font-size:3.2rem}.home-wrapper .banner .banner-conent .hero .action[data-v-d146d2d2],.home-wrapper .banner .banner-conent .hero .description[data-v-d146d2d2]{margin:1.5rem auto}.home-wrapper .banner .banner-conent .hero .description[data-v-d146d2d2]{max-width:40rem;font-size:1.1rem;line-height:1.3;opacity:.9}.home-wrapper .banner .banner-conent .hero .action-button[data-v-d146d2d2]{display:inline-block;font-size:1.2rem;background-color:#11a8cd;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0f97b9;color:#fff}.home-wrapper .banner .banner-conent .hero .action-button[data-v-d146d2d2]:hover{background-color:#13bee8}.home-wrapper .banner .banner-conent .features[data-v-d146d2d2]{padding:2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home-wrapper .banner .banner-conent .feature[data-v-d146d2d2]{flex-grow:1;flex-basis:30%;max-width:30%;text-align:center}.home-wrapper .banner .banner-conent .feature a[data-v-d146d2d2]{color:inherit}.home-wrapper .banner .banner-conent .feature a .feature-img[data-v-d146d2d2]{width:10rem;height:10rem;animation:heart-d146d2d2 1.2s ease-in-out 0s infinite alternate;animation-play-state:paused}.home-wrapper .banner .banner-conent .feature a h2[data-v-d146d2d2]{font-weight:500;font-size:1.3rem;border-bottom:none;padding-bottom:0}.home-wrapper .banner .banner-conent .feature a p[data-v-d146d2d2]{opacity:.8;padding:0 .8rem}.home-wrapper .banner .banner-conent .feature:hover .feature-img[data-v-d146d2d2]{animation-play-state:running}.home-wrapper .banner .banner-conent .feature:hover h2[data-v-d146d2d2],.home-wrapper .banner .banner-conent .feature:hover p[data-v-d146d2d2]{color:#11a8cd}.home-wrapper .banner .slide-banner[data-v-d146d2d2]{margin-top:2rem}.home-wrapper .banner .slide-banner .banner-wrapper[data-v-d146d2d2]{position:relative}.home-wrapper .banner .slide-banner .slide-banner-scroll[data-v-d146d2d2]{min-height:1px;overflow:hidden}.home-wrapper .banner .slide-banner .slide-banner-wrapper[data-v-d146d2d2]{height:300px}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item[data-v-d146d2d2]{display:inline-block;height:300px;width:100%;text-align:center}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a[data-v-d146d2d2]{color:inherit}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a .feature-img[data-v-d146d2d2]{width:10rem;height:10rem}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a h2[data-v-d146d2d2]{font-size:1.1rem;font-weight:500;border-bottom:none;padding-bottom:0}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a p[data-v-d146d2d2]{opacity:.8;padding:0 .8rem}.home-wrapper .banner .slide-banner .docs-wrapper[data-v-d146d2d2]{position:absolute;bottom:25px;left:50%;transform:translateX(-50%)}.home-wrapper .banner .slide-banner .docs-wrapper .doc[data-v-d146d2d2]{display:inline-block;margin:0 4px;width:8px;height:8px;border-radius:50%;background:var(--textColor);opacity:.9}.home-wrapper .banner .slide-banner .docs-wrapper .doc.active[data-v-d146d2d2]{opacity:.5}.home-wrapper .banner.hide-banner[data-v-d146d2d2]{display:none}.home-wrapper .banner.hide-banner+.main-wrapper[data-v-d146d2d2]{margin-top:4.5rem}.home-wrapper .main-wrapper[data-v-d146d2d2]{margin-top:2rem}.home-wrapper .main-wrapper .main-left .card-box[data-v-d146d2d2]{margin-bottom:2rem}.home-wrapper .main-wrapper .main-left .pagination[data-v-d146d2d2]{margin-bottom:3rem}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-d146d2d2]{padding:0 2rem;overflow:hidden;border:none}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-d146d2d2]>:first-child{padding-top:2rem}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-d146d2d2]>:last-child{padding-bottom:2rem}.home-wrapper .main-wrapper .main-right .custom-html-box[data-v-d146d2d2]{padding:0;overflow:hidden}@media (max-width:1025px){.home-wrapper .banner .banner-conent .hero h1[data-v-d146d2d2]{font-size:2.5rem}.home-wrapper .banner .banner-conent .hero .description[data-v-d146d2d2]{font-size:1rem}.home-wrapper .banner .banner-conent .feature a h2[data-v-d146d2d2]{font-size:1.1rem}.home-wrapper .banner .banner-conent .feature a .feature-img[data-v-d146d2d2]{width:9rem;height:9rem}}@media (max-width:719px){.home-wrapper .banner .banner-conent .features[data-v-d146d2d2]{display:none!important}}@media (max-width:419px){.home-wrapper .banner-conent[data-v-d146d2d2]{padding-left:1.5rem;padding-right:1.5rem}.home-wrapper .banner-conent .hero img[data-v-d146d2d2]{max-height:210px;margin:2rem auto 1.2rem}.home-wrapper .banner-conent .hero h1[data-v-d146d2d2]{font-size:2rem}.home-wrapper .banner-conent .hero .action[data-v-d146d2d2],.home-wrapper .banner-conent .hero .description[data-v-d146d2d2],.home-wrapper .banner-conent .hero h1[data-v-d146d2d2]{margin:1.2rem auto}.home-wrapper .banner-conent .hero .description[data-v-d146d2d2]{font-size:1.2rem}.home-wrapper .banner-conent .hero .action-button[data-v-d146d2d2]{font-size:1rem;padding:.6rem 1.2rem}.home-wrapper .banner-conent .feature h2[data-v-d146d2d2]{font-size:1.25rem}}@media (max-width:719px){.theme-style-line .main-wrapper[data-v-d146d2d2]{margin-top:-1px}}@keyframes heart-d146d2d2{0%{transform:translate(0)}to{transform:translateY(8px)}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/colorui-document/assets/img/search.237d6f6a.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#11a8cd}.search-box .suggestions{background:#fff;min-width:500px;max-width:700px;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;border-radius:4px;cursor:pointer;width:100%}.search-box .suggestion a{display:block;white-space:normal;color:#415b75;width:100%}.search-box .suggestion a .parent-page-title{color:#fff;font-weight:600;background-color:#11a8cd;padding:5px}.search-box .suggestion a .suggestion-row{border-collapse:collapse;width:100%;display:table}.search-box .suggestion a .suggestion-row .page-title{width:35%;background:#f5f5f5;border:1px solid #eaecef;border-left:none;display:table-cell;text-align:right;padding:5px;font-weight:600}.search-box .suggestion a .suggestion-row .suggestion-content{font-weight:400;border:1px solid #eaecef;border-right:none;width:65%;display:table-cell;padding:5px}.search-box .suggestion a .suggestion-row .suggestion-content .highlight{text-decoration:underline}.search-box .suggestion a .suggestion-row .suggestion-content .header{font-weight:600}.search-box .suggestion.focused{background-color:#f3f4f5}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}@media (max-width:719px){.sidebar-button{display:block}}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (min-width:720px){.sidebar-button{width:40px;height:40px;display:inline-block;position:fixed;left:0;top:4.6rem;text-align:center;line-height:44px;margin:5px 8px;color:#888;border-radius:50%;padding:0;transition:all .2s}.sidebar-button:hover{background:#11a8cd;color:#fff;box-shadow:0 0 6px #11a8cd}.sidebar-button .icon{display:inline;width:1rem;height:1rem}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--textColor)}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid var(--borderColor);padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#11a8cd}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #11a8cd;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover{color:#11a8cd}.dropdown-wrapper .dropdown-title .link-title{display:none}.dropdown-wrapper .dropdown-title .title{display:inline-block!important}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--mainBg);padding:.6rem 0;border-bottom-color:var(--borderColor);border:1px solid var(--borderColor);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.nav-item .dropdown-title a.router-link-active,.nav-item .dropdown-title a:hover{margin-bottom:-2px;border-bottom:2px solid #13b9e2}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#11a8cd}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:959px){.nav-links .nav-item{margin-left:1.2rem}}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:var(--textColor)}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #13b9e2}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem;transition:transform .3s}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--textColor);position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}.hide-navbar .navbar{transform:translateY(-100%)}@media (max-width:959px){.navbar .site-name{display:none}}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:860px;padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block;float:left;margin:0 2rem .5rem 0}.page-edit .edit-link a{margin-right:.25rem}.page-edit .tags{float:left}.page-edit .tags a{margin:0 .8rem .5rem 0;display:inline-block;color:var(--textLightenColor);padding:.2rem .7rem;font-size:.9em;background-color:hsla(0,0%,50.2%,.08);border-radius:3px;opacity:.8}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:var(--textColor);opacity:.8}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:719px){.page-edit .edit-link,.page-edit .tags{margin-bottom:.5rem}.page-edit .last-updated{width:100%;font-size:.8em;text-align:left}}.page-nav{max-width:860px;padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--borderColor);padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page-nav-centre-wrap .page-nav-centre{position:fixed;top:50%;width:80px;height:70px;margin-top:-35px;outline:0;transition:all .2s;border-radius:3px;opacity:.55;z-index:99}@media (max-width:1340px){.page-nav-centre-wrap .page-nav-centre{width:50px}}@media (max-width:960px){.page-nav-centre-wrap .page-nav-centre{display:none}}.page-nav-centre-wrap .page-nav-centre:hover{background:hsla(0,0%,60%,.15);opacity:1}.page-nav-centre-wrap .page-nav-centre:hover .tooltip{display:block}.page-nav-centre-wrap .page-nav-centre:before{content:"";display:block;width:10px;height:10px;border-top:2px solid #999;border-right:2px solid #999;position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.page-nav-centre-wrap .page-nav-centre .tooltip{display:none;background:rgba(0,0,0,.5);color:#fff;padding:4px 8px;font-size:13px;border-radius:3px;position:fixed;max-width:200px;z-index:99}.page-nav-centre-wrap .page-nav-centre-prev{left:0}.page-nav-centre-wrap .page-nav-centre-prev:before{transform:rotate(-135deg)}.page-nav-centre-wrap .page-nav-centre-next{right:0}.page-nav-centre-wrap .page-nav-centre-next:before{transform:rotate(45deg)}.sidebar-open .page-nav-centre-wrap .page-nav-centre-prev{left:18rem}.no-sidebar .page-nav-centre-wrap .page-nav-centre-prev{left:0}.theme-mode-light[data-v-06970110]{--bodyBg:#f4f4f4;--customBlockBg:#f1f1f1;--textColor:#00323c;--borderColor:rgba(0,0,0,0.12)}.theme-mode-dark[data-v-06970110]{--bodyBg:#27272b;--customBlockBg:#27272b;--textColor:#9b9baa;--borderColor:#30363d}.theme-mode-read[data-v-06970110]{--bodyBg:#ececcc;--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963}.theme-style-line.theme-mode-light[data-v-06970110]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-06970110]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-06970110]{--bodyBg:#f5f5d5}.theme-mode-light[data-v-06970110]{--bodyBg:#fff;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-06970110],.theme-mode-light pre[class*=language-][data-v-06970110]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-06970110]::-moz-selection,.theme-mode-light code[class*=language-][data-v-06970110] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-06970110]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-06970110] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-06970110]::selection,.theme-mode-light code[class*=language-][data-v-06970110] ::selection,.theme-mode-light pre[class*=language-][data-v-06970110]::selection,.theme-mode-light pre[class*=language-][data-v-06970110] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-06970110],.theme-mode-light pre[class*=language-][data-v-06970110]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-06970110]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-06970110],.theme-mode-light pre[class*=language-][data-v-06970110]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-06970110]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-06970110],.theme-mode-light .token.comment[data-v-06970110],.theme-mode-light .token.doctype[data-v-06970110],.theme-mode-light .token.prolog[data-v-06970110]{color:#708090}.theme-mode-light .token.punctuation[data-v-06970110]{color:#999}.theme-mode-light .namespace[data-v-06970110]{opacity:.7}.theme-mode-light .token.boolean[data-v-06970110],.theme-mode-light .token.constant[data-v-06970110],.theme-mode-light .token.deleted[data-v-06970110],.theme-mode-light .token.number[data-v-06970110],.theme-mode-light .token.property[data-v-06970110],.theme-mode-light .token.symbol[data-v-06970110],.theme-mode-light .token.tag[data-v-06970110]{color:#905}.theme-mode-light .token.attr-name[data-v-06970110],.theme-mode-light .token.builtin[data-v-06970110],.theme-mode-light .token.char[data-v-06970110],.theme-mode-light .token.inserted[data-v-06970110],.theme-mode-light .token.selector[data-v-06970110],.theme-mode-light .token.string[data-v-06970110]{color:#690}.theme-mode-light .language-css .token.string[data-v-06970110],.theme-mode-light .style .token.string[data-v-06970110],.theme-mode-light .token.entity[data-v-06970110],.theme-mode-light .token.operator[data-v-06970110],.theme-mode-light .token.url[data-v-06970110]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-06970110],.theme-mode-light .token.attr-value[data-v-06970110],.theme-mode-light .token.keyword[data-v-06970110]{color:#07a}.theme-mode-light .token.class-name[data-v-06970110],.theme-mode-light .token.function[data-v-06970110]{color:#dd4a68}.theme-mode-light .token.important[data-v-06970110],.theme-mode-light .token.regex[data-v-06970110],.theme-mode-light .token.variable[data-v-06970110]{color:#e90}.theme-mode-light .token.bold[data-v-06970110],.theme-mode-light .token.important[data-v-06970110]{font-weight:700}.theme-mode-light .token.italic[data-v-06970110]{font-style:italic}.theme-mode-light .token.entity[data-v-06970110]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-06970110],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-06970110]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-06970110]{--bodyBg:#1e1e22;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--textColor:#8c8c96;--textLightenColor:#0085ad;--borderColor:#2c2c3a;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-06970110],.theme-mode-dark pre[class*=language-][data-v-06970110]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-06970110]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-06970110],.theme-mode-dark pre[class*=language-][data-v-06970110]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-06970110]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-06970110],.theme-mode-dark .token.cdata[data-v-06970110],.theme-mode-dark .token.comment[data-v-06970110],.theme-mode-dark .token.doctype[data-v-06970110],.theme-mode-dark .token.prolog[data-v-06970110]{color:#999}.theme-mode-dark .token.punctuation[data-v-06970110]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-06970110],.theme-mode-dark .token.deleted[data-v-06970110],.theme-mode-dark .token.namespace[data-v-06970110],.theme-mode-dark .token.tag[data-v-06970110]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-06970110]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-06970110],.theme-mode-dark .token.function[data-v-06970110],.theme-mode-dark .token.number[data-v-06970110]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-06970110],.theme-mode-dark .token.constant[data-v-06970110],.theme-mode-dark .token.property[data-v-06970110],.theme-mode-dark .token.symbol[data-v-06970110]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-06970110],.theme-mode-dark .token.builtin[data-v-06970110],.theme-mode-dark .token.important[data-v-06970110],.theme-mode-dark .token.keyword[data-v-06970110],.theme-mode-dark .token.selector[data-v-06970110]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-06970110],.theme-mode-dark .token.char[data-v-06970110],.theme-mode-dark .token.regex[data-v-06970110],.theme-mode-dark .token.string[data-v-06970110],.theme-mode-dark .token.variable[data-v-06970110]{color:#7ec699}.theme-mode-dark .token.entity[data-v-06970110],.theme-mode-dark .token.operator[data-v-06970110],.theme-mode-dark .token.url[data-v-06970110]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-06970110],.theme-mode-dark .style .token.string[data-v-06970110],.theme-mode-dark .token.entity[data-v-06970110],.theme-mode-dark .token.operator[data-v-06970110],.theme-mode-dark .token.url[data-v-06970110]{background:none}.theme-mode-dark .token.bold[data-v-06970110],.theme-mode-dark .token.important[data-v-06970110]{font-weight:700}.theme-mode-dark .token.italic[data-v-06970110]{font-style:italic}.theme-mode-dark .token.entity[data-v-06970110]{cursor:help}.theme-mode-dark .token.inserted[data-v-06970110]{color:green}.theme-mode-read[data-v-06970110]{--bodyBg:#f5f5d5;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-06970110],.theme-mode-read pre[class*=language-][data-v-06970110]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-06970110]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-06970110],.theme-mode-read pre[class*=language-][data-v-06970110]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-06970110]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-06970110],.theme-mode-read .token.cdata[data-v-06970110],.theme-mode-read .token.comment[data-v-06970110],.theme-mode-read .token.doctype[data-v-06970110],.theme-mode-read .token.prolog[data-v-06970110]{color:#999}.theme-mode-read .token.punctuation[data-v-06970110]{color:#ccc}.theme-mode-read .token.attr-name[data-v-06970110],.theme-mode-read .token.deleted[data-v-06970110],.theme-mode-read .token.namespace[data-v-06970110],.theme-mode-read .token.tag[data-v-06970110]{color:#e2777a}.theme-mode-read .token.function-name[data-v-06970110]{color:#6196cc}.theme-mode-read .token.boolean[data-v-06970110],.theme-mode-read .token.function[data-v-06970110],.theme-mode-read .token.number[data-v-06970110]{color:#f08d49}.theme-mode-read .token.class-name[data-v-06970110],.theme-mode-read .token.constant[data-v-06970110],.theme-mode-read .token.property[data-v-06970110],.theme-mode-read .token.symbol[data-v-06970110]{color:#f8c555}.theme-mode-read .token.atrule[data-v-06970110],.theme-mode-read .token.builtin[data-v-06970110],.theme-mode-read .token.important[data-v-06970110],.theme-mode-read .token.keyword[data-v-06970110],.theme-mode-read .token.selector[data-v-06970110]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-06970110],.theme-mode-read .token.char[data-v-06970110],.theme-mode-read .token.regex[data-v-06970110],.theme-mode-read .token.string[data-v-06970110],.theme-mode-read .token.variable[data-v-06970110]{color:#7ec699}.theme-mode-read .token.entity[data-v-06970110],.theme-mode-read .token.operator[data-v-06970110],.theme-mode-read .token.url[data-v-06970110]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-06970110],.theme-mode-read .style .token.string[data-v-06970110],.theme-mode-read .token.entity[data-v-06970110],.theme-mode-read .token.operator[data-v-06970110],.theme-mode-read .token.url[data-v-06970110]{background:none}.theme-mode-read .token.bold[data-v-06970110],.theme-mode-read .token.important[data-v-06970110]{font-weight:700}.theme-mode-read .token.italic[data-v-06970110]{font-style:italic}.theme-mode-read .token.entity[data-v-06970110]{cursor:help}.theme-mode-read .token.inserted[data-v-06970110]{color:green}.articleInfo-wrap[data-v-06970110]{max-width:860px}.theme-style-line .articleInfo-wrap .articleInfo[data-v-06970110]{padding-top:.5rem}.articleInfo-wrap[data-v-06970110]{position:relative;z-index:1;color:#888}.articleInfo-wrap .articleInfo[data-v-06970110]{overflow:hidden;font-size:.92rem}.articleInfo-wrap .articleInfo .breadcrumbs[data-v-06970110]{margin:0;padding:0;overflow:hidden;display:inline-block;line-height:2rem}@media (max-width:960px){.articleInfo-wrap .articleInfo .breadcrumbs[data-v-06970110]{width:100%}}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-06970110]{list-style-type:none;float:left;padding-right:5px}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-06970110]:after{content:"/";margin-left:5px;color:#999}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-06970110]:last-child:after{content:""}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-06970110]{color:#888}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-06970110]:before{font-size:.92rem}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-06970110]:hover{color:#11a8cd}.articleInfo-wrap .articleInfo .breadcrumbs li .icon-home[data-v-06970110]{text-decoration:none}.articleInfo-wrap .articleInfo .info[data-v-06970110]{float:right;line-height:32px}@media (max-width:960px){.articleInfo-wrap .articleInfo .info[data-v-06970110]{float:left}}.articleInfo-wrap .articleInfo .info div[data-v-06970110]{float:left;margin-left:20px;font-size:.8rem}@media (max-width:960px){.articleInfo-wrap .articleInfo .info div[data-v-06970110]{margin:0 20px 0 0}}.articleInfo-wrap .articleInfo .info div[data-v-06970110]:before{margin-right:3px}.articleInfo-wrap .articleInfo .info div a[data-v-06970110]{color:#888}.articleInfo-wrap .articleInfo .info div a[data-v-06970110]:hover{text-decoration:none}.articleInfo-wrap .articleInfo .info div a.beLink[data-v-06970110]:hover{color:#11a8cd;text-decoration:underline}.theme-mode-light[data-v-25eb0b2a]{--bodyBg:#f4f4f4;--customBlockBg:#f1f1f1;--textColor:#00323c;--borderColor:rgba(0,0,0,0.12)}.theme-mode-dark[data-v-25eb0b2a]{--bodyBg:#27272b;--customBlockBg:#27272b;--textColor:#9b9baa;--borderColor:#30363d}.theme-mode-read[data-v-25eb0b2a]{--bodyBg:#ececcc;--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963}.theme-style-line.theme-mode-light[data-v-25eb0b2a]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-25eb0b2a]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-25eb0b2a]{--bodyBg:#f5f5d5}.theme-mode-light[data-v-25eb0b2a]{--bodyBg:#fff;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-25eb0b2a],.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-25eb0b2a]::-moz-selection,.theme-mode-light code[class*=language-][data-v-25eb0b2a] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-25eb0b2a]::selection,.theme-mode-light code[class*=language-][data-v-25eb0b2a] ::selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a]::selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-25eb0b2a],.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-25eb0b2a],.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-25eb0b2a]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-25eb0b2a],.theme-mode-light .token.comment[data-v-25eb0b2a],.theme-mode-light .token.doctype[data-v-25eb0b2a],.theme-mode-light .token.prolog[data-v-25eb0b2a]{color:#708090}.theme-mode-light .token.punctuation[data-v-25eb0b2a]{color:#999}.theme-mode-light .namespace[data-v-25eb0b2a]{opacity:.7}.theme-mode-light .token.boolean[data-v-25eb0b2a],.theme-mode-light .token.constant[data-v-25eb0b2a],.theme-mode-light .token.deleted[data-v-25eb0b2a],.theme-mode-light .token.number[data-v-25eb0b2a],.theme-mode-light .token.property[data-v-25eb0b2a],.theme-mode-light .token.symbol[data-v-25eb0b2a],.theme-mode-light .token.tag[data-v-25eb0b2a]{color:#905}.theme-mode-light .token.attr-name[data-v-25eb0b2a],.theme-mode-light .token.builtin[data-v-25eb0b2a],.theme-mode-light .token.char[data-v-25eb0b2a],.theme-mode-light .token.inserted[data-v-25eb0b2a],.theme-mode-light .token.selector[data-v-25eb0b2a],.theme-mode-light .token.string[data-v-25eb0b2a]{color:#690}.theme-mode-light .language-css .token.string[data-v-25eb0b2a],.theme-mode-light .style .token.string[data-v-25eb0b2a],.theme-mode-light .token.entity[data-v-25eb0b2a],.theme-mode-light .token.operator[data-v-25eb0b2a],.theme-mode-light .token.url[data-v-25eb0b2a]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-25eb0b2a],.theme-mode-light .token.attr-value[data-v-25eb0b2a],.theme-mode-light .token.keyword[data-v-25eb0b2a]{color:#07a}.theme-mode-light .token.class-name[data-v-25eb0b2a],.theme-mode-light .token.function[data-v-25eb0b2a]{color:#dd4a68}.theme-mode-light .token.important[data-v-25eb0b2a],.theme-mode-light .token.regex[data-v-25eb0b2a],.theme-mode-light .token.variable[data-v-25eb0b2a]{color:#e90}.theme-mode-light .token.bold[data-v-25eb0b2a],.theme-mode-light .token.important[data-v-25eb0b2a]{font-weight:700}.theme-mode-light .token.italic[data-v-25eb0b2a]{font-style:italic}.theme-mode-light .token.entity[data-v-25eb0b2a]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-25eb0b2a],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-25eb0b2a]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-25eb0b2a]{--bodyBg:#1e1e22;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--textColor:#8c8c96;--textLightenColor:#0085ad;--borderColor:#2c2c3a;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-25eb0b2a],.theme-mode-dark pre[class*=language-][data-v-25eb0b2a]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-25eb0b2a]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-25eb0b2a],.theme-mode-dark pre[class*=language-][data-v-25eb0b2a]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-25eb0b2a]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-25eb0b2a],.theme-mode-dark .token.cdata[data-v-25eb0b2a],.theme-mode-dark .token.comment[data-v-25eb0b2a],.theme-mode-dark .token.doctype[data-v-25eb0b2a],.theme-mode-dark .token.prolog[data-v-25eb0b2a]{color:#999}.theme-mode-dark .token.punctuation[data-v-25eb0b2a]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-25eb0b2a],.theme-mode-dark .token.deleted[data-v-25eb0b2a],.theme-mode-dark .token.namespace[data-v-25eb0b2a],.theme-mode-dark .token.tag[data-v-25eb0b2a]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-25eb0b2a]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-25eb0b2a],.theme-mode-dark .token.function[data-v-25eb0b2a],.theme-mode-dark .token.number[data-v-25eb0b2a]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-25eb0b2a],.theme-mode-dark .token.constant[data-v-25eb0b2a],.theme-mode-dark .token.property[data-v-25eb0b2a],.theme-mode-dark .token.symbol[data-v-25eb0b2a]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-25eb0b2a],.theme-mode-dark .token.builtin[data-v-25eb0b2a],.theme-mode-dark .token.important[data-v-25eb0b2a],.theme-mode-dark .token.keyword[data-v-25eb0b2a],.theme-mode-dark .token.selector[data-v-25eb0b2a]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-25eb0b2a],.theme-mode-dark .token.char[data-v-25eb0b2a],.theme-mode-dark .token.regex[data-v-25eb0b2a],.theme-mode-dark .token.string[data-v-25eb0b2a],.theme-mode-dark .token.variable[data-v-25eb0b2a]{color:#7ec699}.theme-mode-dark .token.entity[data-v-25eb0b2a],.theme-mode-dark .token.operator[data-v-25eb0b2a],.theme-mode-dark .token.url[data-v-25eb0b2a]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-25eb0b2a],.theme-mode-dark .style .token.string[data-v-25eb0b2a],.theme-mode-dark .token.entity[data-v-25eb0b2a],.theme-mode-dark .token.operator[data-v-25eb0b2a],.theme-mode-dark .token.url[data-v-25eb0b2a]{background:none}.theme-mode-dark .token.bold[data-v-25eb0b2a],.theme-mode-dark .token.important[data-v-25eb0b2a]{font-weight:700}.theme-mode-dark .token.italic[data-v-25eb0b2a]{font-style:italic}.theme-mode-dark .token.entity[data-v-25eb0b2a]{cursor:help}.theme-mode-dark .token.inserted[data-v-25eb0b2a]{color:green}.theme-mode-read[data-v-25eb0b2a]{--bodyBg:#f5f5d5;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-25eb0b2a],.theme-mode-read pre[class*=language-][data-v-25eb0b2a]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-25eb0b2a]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-25eb0b2a],.theme-mode-read pre[class*=language-][data-v-25eb0b2a]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-25eb0b2a]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-25eb0b2a],.theme-mode-read .token.cdata[data-v-25eb0b2a],.theme-mode-read .token.comment[data-v-25eb0b2a],.theme-mode-read .token.doctype[data-v-25eb0b2a],.theme-mode-read .token.prolog[data-v-25eb0b2a]{color:#999}.theme-mode-read .token.punctuation[data-v-25eb0b2a]{color:#ccc}.theme-mode-read .token.attr-name[data-v-25eb0b2a],.theme-mode-read .token.deleted[data-v-25eb0b2a],.theme-mode-read .token.namespace[data-v-25eb0b2a],.theme-mode-read .token.tag[data-v-25eb0b2a]{color:#e2777a}.theme-mode-read .token.function-name[data-v-25eb0b2a]{color:#6196cc}.theme-mode-read .token.boolean[data-v-25eb0b2a],.theme-mode-read .token.function[data-v-25eb0b2a],.theme-mode-read .token.number[data-v-25eb0b2a]{color:#f08d49}.theme-mode-read .token.class-name[data-v-25eb0b2a],.theme-mode-read .token.constant[data-v-25eb0b2a],.theme-mode-read .token.property[data-v-25eb0b2a],.theme-mode-read .token.symbol[data-v-25eb0b2a]{color:#f8c555}.theme-mode-read .token.atrule[data-v-25eb0b2a],.theme-mode-read .token.builtin[data-v-25eb0b2a],.theme-mode-read .token.important[data-v-25eb0b2a],.theme-mode-read .token.keyword[data-v-25eb0b2a],.theme-mode-read .token.selector[data-v-25eb0b2a]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-25eb0b2a],.theme-mode-read .token.char[data-v-25eb0b2a],.theme-mode-read .token.regex[data-v-25eb0b2a],.theme-mode-read .token.string[data-v-25eb0b2a],.theme-mode-read .token.variable[data-v-25eb0b2a]{color:#7ec699}.theme-mode-read .token.entity[data-v-25eb0b2a],.theme-mode-read .token.operator[data-v-25eb0b2a],.theme-mode-read .token.url[data-v-25eb0b2a]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-25eb0b2a],.theme-mode-read .style .token.string[data-v-25eb0b2a],.theme-mode-read .token.entity[data-v-25eb0b2a],.theme-mode-read .token.operator[data-v-25eb0b2a],.theme-mode-read .token.url[data-v-25eb0b2a]{background:none}.theme-mode-read .token.bold[data-v-25eb0b2a],.theme-mode-read .token.important[data-v-25eb0b2a]{font-weight:700}.theme-mode-read .token.italic[data-v-25eb0b2a]{font-style:italic}.theme-mode-read .token.entity[data-v-25eb0b2a]{cursor:help}.theme-mode-read .token.inserted[data-v-25eb0b2a]{color:green}.theme-vdoing-content[data-v-25eb0b2a]{margin-bottom:3.6rem}.title-tag[data-v-25eb0b2a]{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}dd[data-v-25eb0b2a],dl[data-v-25eb0b2a]{margin:0}.column-wrapper[data-v-25eb0b2a]{margin-top:1rem;display:flex;padding-bottom:2rem;border-bottom:1px solid var(--borderColor)}.column-wrapper img[data-v-25eb0b2a]{width:80px;height:80px;border-radius:2px;margin-right:1rem}.column-wrapper .column-info .title[data-v-25eb0b2a]{font-size:1.6rem}.column-wrapper .column-info .description[data-v-25eb0b2a]{color:var(--textColor);opacity:.8;margin:.5rem 0}.catalogue-wrapper .catalogue-title[data-v-25eb0b2a]{font-size:1.45rem;margin:2rem 0}.catalogue-wrapper .catalogue-content dl[data-v-25eb0b2a]{margin-bottom:1.8rem}.catalogue-wrapper .catalogue-content dl.inline[data-v-25eb0b2a]{display:inline-block;width:50%;margin-bottom:1rem}@media (max-width:419px){.catalogue-wrapper .catalogue-content dl.inline[data-v-25eb0b2a]{width:100%}}.catalogue-wrapper .catalogue-content dl.inline a[data-v-25eb0b2a]{width:100%}.catalogue-wrapper .catalogue-content dl:not(.inline) dt[data-v-25eb0b2a]{margin-top:-3.6rem;padding-top:3.6rem}.catalogue-wrapper .catalogue-content dl dt[data-v-25eb0b2a]{font-size:1.1rem}.catalogue-wrapper .catalogue-content dl dt:hover .header-anchor[data-v-25eb0b2a]{opacity:1}.catalogue-wrapper .catalogue-content dl dd[data-v-25eb0b2a]{margin-top:.7rem;margin-left:1rem}.catalogue-wrapper .catalogue-content dl dd a[data-v-25eb0b2a]:not(.header-anchor){margin-bottom:.5rem;display:inline-block;width:50%}.catalogue-wrapper .catalogue-content dl dd a[data-v-25eb0b2a]:not(.header-anchor):hover{color:#ff5722;text-decoration:none}@media (max-width:720px){.catalogue-wrapper .catalogue-content dl dd a[data-v-25eb0b2a]:not(.header-anchor){width:100%}}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap[data-v-25eb0b2a]{margin:5px 0 8px;font-size:.95rem}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap>a[data-v-25eb0b2a]{padding-left:1rem;box-sizing:border-box}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap .sub-title[data-v-25eb0b2a]{margin-top:-3.6rem;padding-top:3.6rem;margin-bottom:6px;font-size:1rem}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap:hover .header-anchor[data-v-25eb0b2a]{opacity:1}.views-switch{position:fixed;top:calc(var(--navbar-height) + 50px);right:31px;width:2.2rem;height:2.2rem;line-height:2.2rem;border-radius:50%;box-shadow:0 2px 6px rgba(0,0,0,.15);margin-top:.9rem;text-align:center;cursor:pointer;transition:all .5s;background:var(--blurBg);z-index:9}.views-switch:hover{background:#11a8cd;box-shadow:0 0 15px #11a8cd}.views-switch:hover:before{color:#fff}.views-switch .select-box{margin:0;padding:.8rem 0;position:absolute;bottom:-2rem;right:2rem;background:var(--mainBg);border:1px solid var(--borderColor);width:120px;border-radius:6px;box-shadow:0 0 15px hsla(0,0%,100%,.2)}.views-switch .select-box li{list-style:none;line-height:2rem;font-size:.95rem}.views-switch .select-box li:hover{color:#11a8cd}.views-switch .select-box li.active{background-color:hsla(0,0%,58.8%,.2);color:#11a8cd}.docs-box{position:fixed;top:calc(var(--navbar-height) + 50px);right:72px;width:320px;height:627px;z-index:-1;background-image:url(https://www.uviewui.com/common/iPhone13.png);background-repeat:no-repeat;background-size:100%;padding:48px 13px 25px}.docs-box iframe{display:block;width:100%;height:627px;border-radius:10px 10px 22px 22px}.theme-style-line .right-menu-wrapper .right-menu-margin{border-left:1px solid var(--borderColor)}.right-menu-wrapper{width:425px;float:right;margin-right:-480px;position:sticky;top:0;font-size:.8rem}.right-menu-wrapper .right-menu-margin{margin-top:4.6rem;border-radius:3px;overflow:hidden}.right-menu-wrapper .right-menu-title{padding:10px 15px 0;background:var(--mainBg);font-size:1rem}.right-menu-wrapper .right-menu-title:after{content:"";display:block;width:100%;height:1px;background:var(--borderColor);margin-top:10px}.right-menu-wrapper .right-menu-content{max-height:80vh;position:relative;overflow:hidden;background:var(--mainBg);padding:4px 3px 4px 0}.right-menu-wrapper .right-menu-content::-webkit-scrollbar{width:3px;height:3px}.right-menu-wrapper .right-menu-content::-webkit-scrollbar-track-piece{background:none}.right-menu-wrapper .right-menu-content::-webkit-scrollbar-thumb:vertical{background-color:hsla(0,0%,49%,.3)}.right-menu-wrapper .right-menu-content:hover{overflow-y:auto;padding-right:0}.right-menu-wrapper .right-menu-content .right-menu-item{padding:4px 15px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;position:relative}.right-menu-wrapper .right-menu-content .right-menu-item.level2{font-size:.8rem}.right-menu-wrapper .right-menu-content .right-menu-item.level3{padding-left:27px}.right-menu-wrapper .right-menu-content .right-menu-item.level4{padding-left:37px}.right-menu-wrapper .right-menu-content .right-menu-item.level5{padding-left:47px}.right-menu-wrapper .right-menu-content .right-menu-item.level6{padding-left:57px}.right-menu-wrapper .right-menu-content .right-menu-item.active:before{content:"";position:absolute;top:5px;left:0;width:3px;height:14px;background:#11a8cd;border-radius:0 4px 4px 0}.right-menu-wrapper .right-menu-content .right-menu-item.active a{color:#11a8cd;opacity:1}.right-menu-wrapper .right-menu-content .right-menu-item a{color:var(--textColor);opacity:.75;display:inline-block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.right-menu-wrapper .right-menu-content .right-menu-item a:hover{opacity:1}.right-menu-wrapper .right-menu-content:hover{color:#11a8cd}.page>*{max-width:860px;margin:0 auto;padding:1rem 2.5rem 2rem}.page>:not(.footer){background:var(--mainBg);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);margin-bottom:1rem}@media (min-width:940px){.page>:not(.footer){border-radius:2px}}@media (max-width:959px){.page>*{padding:1rem 2rem}}@media (max-width:419px){.page>*{padding:1rem 1.5rem}}.page{padding-bottom:2rem;display:block}@media (max-width:719px){.page{padding-top:3.6rem}}@media (min-width:719px){.page{padding-top:5.1rem}}@media (min-width:719px){.theme-style-line .page{padding-top:3.6rem}}.theme-style-line .page>:not(.footer){box-shadow:0 0}@media (min-width:720px){.theme-style-line .page .placeholder{height:1.2rem}}.theme-vdoing-wrapper .content-wrapper{position:relative}.theme-vdoing-wrapper h1 .title-tag{height:1.5rem;line-height:1.5rem;border:1px solid #ff5722;color:#ff5722;font-size:1rem;padding:0 .4rem;border-radius:.2rem;margin-left:.5rem;transform:translateY(-.25rem);display:inline-block}.theme-vdoing-wrapper h1 img{margin-bottom:-.2rem;margin-right:.2rem;max-width:2.2rem;max-height:2.2rem}.theme-vdoing-wrapper{--linesColor:rgba(50,0,0,0.05)}.theme-vdoing-wrapper.bg-style-1{background-image:linear-gradient(90deg,var(--linesColor) 3%,transparent 0),linear-gradient(0deg,var(--linesColor) 3%,transparent 0);background-position:50%;background-size:20px 20px}.theme-vdoing-wrapper.bg-style-2{background-image:repeating-linear-gradient(0,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:30px 30px}.theme-vdoing-wrapper.bg-style-3{background-image:repeating-linear-gradient(90deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:30px 30px}.theme-vdoing-wrapper.bg-style-4{background-image:repeating-linear-gradient(-45deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:20px 20px}.theme-vdoing-wrapper.bg-style-5{background-image:repeating-linear-gradient(45deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:20px 20px}.theme-vdoing-wrapper.bg-style-6{background-image:radial-gradient(var(--linesColor) 1px,transparent 0);background-size:10px 10px}.theme-mode-dark .theme-vdoing-wrapper{--linesColor:hsla(0,0%,49%,0.05)}@media (min-width:720px) and (max-width:1279px){.have-rightmenu .page{padding-right:.8rem!important}}@media (max-width:1279px){.have-rightmenu .right-menu-wrapper{display:none}}@media (min-width:1280px){.have-rightmenu .sidebar .sidebar-sub-headers{display:none}}.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar,.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar-button{display:none}@media (min-width:720px){.theme-container.only-sidebarItem:not(.have-rightmenu) .page{padding-left:.8rem!important}}@media (max-width:719px){.theme-container.only-sidebarItem:not(.have-rightmenu) .page{padding-left:0!important}.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar,.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar-button{display:block}}@media (min-width:720px) and (max-width:1279px){.theme-container.only-sidebarItem.have-rightmenu .sidebar,.theme-container.only-sidebarItem.have-rightmenu .sidebar-button{display:block}}@media (min-width:1280px){.theme-container.only-sidebarItem.have-rightmenu .sidebar,.theme-container.only-sidebarItem.have-rightmenu .sidebar-button{display:none}}.categories-page .categories-wrapper{position:sticky;top:4.5rem;max-height:calc(100vh - 10rem);min-height:4.2rem}@media (max-width:719px){.categories-page .categories-wrapper{display:none}}.categories-page .categories-wrapper .categories{max-height:calc(100vh - 14rem);min-height:2.2rem;overflow-y:auto;transition:all .2s;position:relative}.categories-page .categories-wrapper .categories a{padding-right:1.8rem}.categories-page .categories-wrapper .categories a span{right:.4rem}.categories-page .categories-wrapper .categories::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.05)}.categories-page .categories-wrapper .categories::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.15)}.categories-page .categories-wrapper .categories:hover::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.1)}.categories-page .categories-wrapper .categories:hover::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25)}.categories-page .main-left .categories-wrapper{position:relative;top:0;padding:.9rem 1.5rem;margin-bottom:.9rem;max-height:15rem;border-radius:0;display:none}@media (max-width:719px){.categories-page .main-left .categories-wrapper{display:block}}.categories-page .main-left .categories-wrapper .categories{max-height:12.3rem}@media (max-width:719px){.theme-style-line .categories-page .main-left .categories-wrapper{margin-top:-.91rem;margin-bottom:-1px;padding:.9rem .2rem .5rem}}.tags-page .tags-wrapper{position:sticky;top:4.5rem;max-height:calc(100vh - 10rem);min-height:4.2rem}@media (max-width:719px){.tags-page .tags-wrapper{display:none}}.tags-page .tags-wrapper .tags{max-height:calc(100vh - 14rem);min-height:2.2rem;overflow-x:hidden;overflow-y:auto;transition:all .2s}.tags-page .tags-wrapper .tags::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.05)}.tags-page .tags-wrapper .tags::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.15)}.tags-page .tags-wrapper .tags:hover::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.1)}.tags-page .tags-wrapper .tags:hover::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25)}.tags-page .main-left .tags-wrapper{position:relative;top:0;padding:.9rem 1.5rem;margin-bottom:.9rem;max-height:15rem;border-radius:0;display:none}@media (max-width:719px){.tags-page .main-left .tags-wrapper{display:block}}.tags-page .main-left .tags-wrapper .tags{max-height:11.5rem}@media (max-width:719px){.theme-style-line .tags-page .main-left .tags-wrapper{margin-top:-.91rem;margin-bottom:-1px}}.archives-page .theme-vdoing-wrapper{max-width:860px;margin:0 auto;padding:1rem 2.5rem 2rem}.archives-page .theme-vdoing-wrapper:not(.footer){background:var(--mainBg);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);margin-bottom:1rem}@media (min-width:940px){.archives-page .theme-vdoing-wrapper:not(.footer){border-radius:2px}}@media (max-width:959px){.archives-page .theme-vdoing-wrapper{padding:1rem 2rem}}@media (max-width:419px){.archives-page .theme-vdoing-wrapper{padding:1rem 1.5rem}}.theme-style-line .archives-page .theme-vdoing-wrapper{box-shadow:0 0}.archives-page .theme-vdoing-wrapper{position:relative}@media (min-width:940px){.archives-page .theme-vdoing-wrapper{margin-top:1.5rem!important}}.archives-page .theme-vdoing-wrapper .count{text-align:right;margin-top:-2.5rem;font-size:.85rem;opacity:.8}.archives-page .theme-vdoing-wrapper li,.archives-page .theme-vdoing-wrapper ul{margin:0;padding:0}.archives-page .theme-vdoing-wrapper ul{margin-top:2rem}.archives-page .theme-vdoing-wrapper li{list-style:none}.archives-page .theme-vdoing-wrapper li.year{position:sticky;top:3.6rem;background:var(--mainBg);z-index:1}.archives-page .theme-vdoing-wrapper li.year:not(:first-child){margin-top:3.5rem}.archives-page .theme-vdoing-wrapper li h2{margin-bottom:.8rem;font-weight:400;padding:.5rem 0}.archives-page .theme-vdoing-wrapper li h2 span{font-size:.85rem;font-weight:300;float:right;margin-top:1rem}.archives-page .theme-vdoing-wrapper li a{display:block;color:var(--textColor);transition:padding .3s;padding:.5rem 2rem;line-height:1.2rem}.archives-page .theme-vdoing-wrapper li a:hover{padding-left:2.5rem;color:#11a8cd;background:#f9f9f9}@media (max-width:940px){.archives-page .theme-vdoing-wrapper li a{padding:.5rem 1rem;font-weight:400}.archives-page .theme-vdoing-wrapper li a:hover{padding-left:1.5rem}}.archives-page .theme-vdoing-wrapper li a span.date{opacity:.6;font-size:.85rem;font-weight:400;margin-right:.3rem}.archives-page .theme-vdoing-wrapper li a .title-tag{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}.archives-page .theme-vdoing-wrapper .loadmore{text-align:center;margin-top:1rem;opacity:.5}.theme-mode-dark .archives-page .theme-vdoing-wrapper li a:hover,.theme-mode-read .archives-page .theme-vdoing-wrapper li a:hover{background:var(--customBlockBg)}.hide-navbar .archives-page .theme-vdoing-wrapper li.year{top:0}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:1.01em;line-height:1.4;font-weight:700;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.98em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:var(--textColor);transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#11a8cd;border-left-color:#11a8cd}.sidebar-heading.clickable:hover{color:#11a8cd}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}.sidebar .sidebar-sub-headers .level4{padding-left:.2rem}.sidebar .sidebar-sub-headers .level5{padding-left:.4rem}.sidebar .sidebar-sub-headers .level6{padding-left:.6rem}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:var(--textColor);border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#11a8cd}a.sidebar-link.active{font-weight:600;color:#11a8cd;border-left-color:#11a8cd}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid var(--borderColor);padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}.sidebar .blogger{display:none;border-bottom:1px solid var(--borderColor)}.sidebar .blogger img{width:60px;height:60px;border-radius:5px;margin:.75rem 1rem}.sidebar .blogger .blogger-info{flex:1;padding:0 .3rem .3rem 0}.sidebar .blogger .blogger-info h3{margin:.95rem 0 .6rem;font-size:1.1rem}.sidebar .blogger .blogger-info .icons .iconfont{font-size:1.2rem;padding-right:.6rem;color:#777}.sidebar .sidebar-slot{margin-bottom:-.5rem;font-size:.85rem}.sidebar .sidebar-slot.sidebar-slot-top{padding:1.5rem 1.5rem 0}.sidebar .sidebar-slot.sidebar-slot-bottom{padding:0 1.5rem 1.5rem}@media (max-width:719px){.sidebar .blogger{display:flex}.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.yellowBorder{border-radius:5px;box-shadow:0 0 15px #ffe089!important}.buttons{position:fixed;right:2rem;bottom:2.5rem;z-index:11}@media (max-width:959px){.buttons{right:1rem;bottom:1.5rem}}.buttons .button{width:2.2rem;height:2.2rem;line-height:2.2rem;border-radius:50%;box-shadow:0 2px 6px rgba(0,0,0,.15);margin-top:.9rem;text-align:center;cursor:pointer;transition:all .5s;background:var(--blurBg)}.buttons .button.hover{background:#11a8cd;box-shadow:0 0 15px #11a8cd}.buttons .button.hover:before{color:#fff}@media (any-hover:hover){.buttons .button:hover{background:#11a8cd;box-shadow:0 0 15px #11a8cd}.buttons .button:hover:before{color:#fff}}.buttons .button .select-box{margin:0;padding:.8rem 0;position:absolute;bottom:0;right:1.5rem;background:var(--mainBg);border:1px solid var(--borderColor);width:120px;border-radius:6px;box-shadow:0 0 15px hsla(0,0%,100%,.2)}.buttons .button .select-box li{list-style:none;line-height:2rem;font-size:.95rem}.buttons .button .select-box li:hover{color:#11a8cd}.buttons .button .select-box li.active{background-color:hsla(0,0%,58.8%,.2);color:#11a8cd}.mode-enter-active,.mode-leave-active{transition:all .3s}.mode-enter,.mode-leave-to{opacity:0;transform:scale(.8)}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter,.fade-leave-to{opacity:0}.footer{padding:5rem 1.5rem 2.5rem;text-align:center;color:#666;box-sizing:border-box;font-size:.85rem;transition:all .2s ease}.footer>span{line-height:1.5rem}.footer .icons{margin-bottom:12px}.footer .icons .iconfont{padding:0 10px;font-size:1.3rem}.footer a{color:inherit}.footer a:hover{color:#11a8cd}@media (min-width:720px){.sidebar-open .footer{width:auto;padding-left:19.5rem}}@media (min-width:1520px){.have-rightmenu .footer{padding-right:426.5px}}.no-sidebar .footer{width:auto;padding-left:1.5rem}.body-bg{position:fixed;left:0;top:0;z-index:-999999;height:100vh;width:100vw;transition:background .5s}.theme-mode-light{--bodyBg:#f4f4f4;--customBlockBg:#f1f1f1;--textColor:#00323c;--borderColor:rgba(0,0,0,0.12)}.theme-mode-dark{--bodyBg:#27272b;--customBlockBg:#27272b;--textColor:#9b9baa;--borderColor:#30363d}.theme-mode-read{--bodyBg:#ececcc;--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963}.theme-style-line.theme-mode-light{--bodyBg:#fff}.theme-style-line.theme-mode-dark{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read{--bodyBg:#f5f5d5}.theme-mode-light{--bodyBg:#fff;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-],.theme-mode-light pre[class*=language-]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-]::-moz-selection,.theme-mode-light code[class*=language-] ::-moz-selection,.theme-mode-light pre[class*=language-]::-moz-selection,.theme-mode-light pre[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-]::selection,.theme-mode-light code[class*=language-] ::selection,.theme-mode-light pre[class*=language-]::selection,.theme-mode-light pre[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-],.theme-mode-light pre[class*=language-]{text-shadow:none}}.theme-mode-light pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-],.theme-mode-light pre[class*=language-]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata,.theme-mode-light .token.comment,.theme-mode-light .token.doctype,.theme-mode-light .token.prolog{color:#708090}.theme-mode-light .token.punctuation{color:#999}.theme-mode-light .namespace{opacity:.7}.theme-mode-light .token.boolean,.theme-mode-light .token.constant,.theme-mode-light .token.deleted,.theme-mode-light .token.number,.theme-mode-light .token.property,.theme-mode-light .token.symbol,.theme-mode-light .token.tag{color:#905}.theme-mode-light .token.attr-name,.theme-mode-light .token.builtin,.theme-mode-light .token.char,.theme-mode-light .token.inserted,.theme-mode-light .token.selector,.theme-mode-light .token.string{color:#690}.theme-mode-light .language-css .token.string,.theme-mode-light .style .token.string,.theme-mode-light .token.entity,.theme-mode-light .token.operator,.theme-mode-light .token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule,.theme-mode-light .token.attr-value,.theme-mode-light .token.keyword{color:#07a}.theme-mode-light .token.class-name,.theme-mode-light .token.function{color:#dd4a68}.theme-mode-light .token.important,.theme-mode-light .token.regex,.theme-mode-light .token.variable{color:#e90}.theme-mode-light .token.bold,.theme-mode-light .token.important{font-weight:700}.theme-mode-light .token.italic{font-style:italic}.theme-mode-light .token.entity{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted,.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark{--bodyBg:#1e1e22;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--textColor:#8c8c96;--textLightenColor:#0085ad;--borderColor:#2c2c3a;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-],.theme-mode-dark pre[class*=language-]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-],.theme-mode-dark pre[class*=language-]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment,.theme-mode-dark .token.cdata,.theme-mode-dark .token.comment,.theme-mode-dark .token.doctype,.theme-mode-dark .token.prolog{color:#999}.theme-mode-dark .token.punctuation{color:#ccc}.theme-mode-dark .token.attr-name,.theme-mode-dark .token.deleted,.theme-mode-dark .token.namespace,.theme-mode-dark .token.tag{color:#e2777a}.theme-mode-dark .token.function-name{color:#6196cc}.theme-mode-dark .token.boolean,.theme-mode-dark .token.function,.theme-mode-dark .token.number{color:#f08d49}.theme-mode-dark .token.class-name,.theme-mode-dark .token.constant,.theme-mode-dark .token.property,.theme-mode-dark .token.symbol{color:#f8c555}.theme-mode-dark .token.atrule,.theme-mode-dark .token.builtin,.theme-mode-dark .token.important,.theme-mode-dark .token.keyword,.theme-mode-dark .token.selector{color:#cc99cd}.theme-mode-dark .token.attr-value,.theme-mode-dark .token.char,.theme-mode-dark .token.regex,.theme-mode-dark .token.string,.theme-mode-dark .token.variable{color:#7ec699}.theme-mode-dark .token.entity,.theme-mode-dark .token.operator,.theme-mode-dark .token.url{color:#67cdcc}.theme-mode-dark .language-css .token.string,.theme-mode-dark .style .token.string,.theme-mode-dark .token.entity,.theme-mode-dark .token.operator,.theme-mode-dark .token.url{background:none}.theme-mode-dark .token.bold,.theme-mode-dark .token.important{font-weight:700}.theme-mode-dark .token.italic{font-style:italic}.theme-mode-dark .token.entity{cursor:help}.theme-mode-dark .token.inserted{color:green}.theme-mode-read{--bodyBg:#f5f5d5;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-],.theme-mode-read pre[class*=language-]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-],.theme-mode-read pre[class*=language-]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment,.theme-mode-read .token.cdata,.theme-mode-read .token.comment,.theme-mode-read .token.doctype,.theme-mode-read .token.prolog{color:#999}.theme-mode-read .token.punctuation{color:#ccc}.theme-mode-read .token.attr-name,.theme-mode-read .token.deleted,.theme-mode-read .token.namespace,.theme-mode-read .token.tag{color:#e2777a}.theme-mode-read .token.function-name{color:#6196cc}.theme-mode-read .token.boolean,.theme-mode-read .token.function,.theme-mode-read .token.number{color:#f08d49}.theme-mode-read .token.class-name,.theme-mode-read .token.constant,.theme-mode-read .token.property,.theme-mode-read .token.symbol{color:#f8c555}.theme-mode-read .token.atrule,.theme-mode-read .token.builtin,.theme-mode-read .token.important,.theme-mode-read .token.keyword,.theme-mode-read .token.selector{color:#cc99cd}.theme-mode-read .token.attr-value,.theme-mode-read .token.char,.theme-mode-read .token.regex,.theme-mode-read .token.string,.theme-mode-read .token.variable{color:#7ec699}.theme-mode-read .token.entity,.theme-mode-read .token.operator,.theme-mode-read .token.url{color:#67cdcc}.theme-mode-read .language-css .token.string,.theme-mode-read .style .token.string,.theme-mode-read .token.entity,.theme-mode-read .token.operator,.theme-mode-read .token.url{background:none}.theme-mode-read .token.bold,.theme-mode-read .token.important{font-weight:700}.theme-mode-read .token.italic{font-style:italic}.theme-mode-read .token.entity{cursor:help}.theme-mode-read .token.inserted{color:green}.custom-html-window{position:fixed;bottom:0;display:flex;overflow:hidden;font-weight:350}@media (max-width:960px){.custom-html-window{display:none}}.custom-html-window .custom-wrapper{position:relative;max-width:200px;max-height:400px}.custom-html-window .custom-wrapper .close-but{cursor:pointer;position:absolute;right:0;top:0;font-size:1.5rem;line-height:1.5rem;width:1.5rem;height:1.5rem;opacity:0;transition:all .2s}.custom-html-window .custom-wrapper .close-but:hover{opacity:.9}.custom-html-window .custom-wrapper:hover .close-but{opacity:.7}.custom-html-window.custom-html-window-lb{left:0;z-index:99}.custom-html-window.custom-html-window-lb>*{align-self:flex-end}.custom-html-window.custom-html-window-rb{right:80px;z-index:10;justify-content:flex-end}.custom-html-window.custom-html-window-rb>*{align-self:flex-end}.theme-mode-light[data-v-3396d6b6]{--bodyBg:#f4f4f4;--customBlockBg:#f1f1f1;--textColor:#00323c;--borderColor:rgba(0,0,0,0.12)}.theme-mode-dark[data-v-3396d6b6]{--bodyBg:#27272b;--customBlockBg:#27272b;--textColor:#9b9baa;--borderColor:#30363d}.theme-mode-read[data-v-3396d6b6]{--bodyBg:#ececcc;--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963}.theme-style-line.theme-mode-light[data-v-3396d6b6]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-3396d6b6]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-3396d6b6]{--bodyBg:#f5f5d5}.theme-mode-light[data-v-3396d6b6]{--bodyBg:#fff;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-3396d6b6],.theme-mode-light pre[class*=language-][data-v-3396d6b6]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-3396d6b6]::-moz-selection,.theme-mode-light code[class*=language-][data-v-3396d6b6] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-3396d6b6]::selection,.theme-mode-light code[class*=language-][data-v-3396d6b6] ::selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6]::selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-3396d6b6],.theme-mode-light pre[class*=language-][data-v-3396d6b6]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-3396d6b6]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-3396d6b6],.theme-mode-light pre[class*=language-][data-v-3396d6b6]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-3396d6b6]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-3396d6b6],.theme-mode-light .token.comment[data-v-3396d6b6],.theme-mode-light .token.doctype[data-v-3396d6b6],.theme-mode-light .token.prolog[data-v-3396d6b6]{color:#708090}.theme-mode-light .token.punctuation[data-v-3396d6b6]{color:#999}.theme-mode-light .namespace[data-v-3396d6b6]{opacity:.7}.theme-mode-light .token.boolean[data-v-3396d6b6],.theme-mode-light .token.constant[data-v-3396d6b6],.theme-mode-light .token.deleted[data-v-3396d6b6],.theme-mode-light .token.number[data-v-3396d6b6],.theme-mode-light .token.property[data-v-3396d6b6],.theme-mode-light .token.symbol[data-v-3396d6b6],.theme-mode-light .token.tag[data-v-3396d6b6]{color:#905}.theme-mode-light .token.attr-name[data-v-3396d6b6],.theme-mode-light .token.builtin[data-v-3396d6b6],.theme-mode-light .token.char[data-v-3396d6b6],.theme-mode-light .token.inserted[data-v-3396d6b6],.theme-mode-light .token.selector[data-v-3396d6b6],.theme-mode-light .token.string[data-v-3396d6b6]{color:#690}.theme-mode-light .language-css .token.string[data-v-3396d6b6],.theme-mode-light .style .token.string[data-v-3396d6b6],.theme-mode-light .token.entity[data-v-3396d6b6],.theme-mode-light .token.operator[data-v-3396d6b6],.theme-mode-light .token.url[data-v-3396d6b6]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-3396d6b6],.theme-mode-light .token.attr-value[data-v-3396d6b6],.theme-mode-light .token.keyword[data-v-3396d6b6]{color:#07a}.theme-mode-light .token.class-name[data-v-3396d6b6],.theme-mode-light .token.function[data-v-3396d6b6]{color:#dd4a68}.theme-mode-light .token.important[data-v-3396d6b6],.theme-mode-light .token.regex[data-v-3396d6b6],.theme-mode-light .token.variable[data-v-3396d6b6]{color:#e90}.theme-mode-light .token.bold[data-v-3396d6b6],.theme-mode-light .token.important[data-v-3396d6b6]{font-weight:700}.theme-mode-light .token.italic[data-v-3396d6b6]{font-style:italic}.theme-mode-light .token.entity[data-v-3396d6b6]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-3396d6b6],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-3396d6b6]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-3396d6b6]{--bodyBg:#1e1e22;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--textColor:#8c8c96;--textLightenColor:#0085ad;--borderColor:#2c2c3a;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-3396d6b6],.theme-mode-dark pre[class*=language-][data-v-3396d6b6]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-3396d6b6]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-3396d6b6],.theme-mode-dark pre[class*=language-][data-v-3396d6b6]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-3396d6b6]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-3396d6b6],.theme-mode-dark .token.cdata[data-v-3396d6b6],.theme-mode-dark .token.comment[data-v-3396d6b6],.theme-mode-dark .token.doctype[data-v-3396d6b6],.theme-mode-dark .token.prolog[data-v-3396d6b6]{color:#999}.theme-mode-dark .token.punctuation[data-v-3396d6b6]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-3396d6b6],.theme-mode-dark .token.deleted[data-v-3396d6b6],.theme-mode-dark .token.namespace[data-v-3396d6b6],.theme-mode-dark .token.tag[data-v-3396d6b6]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-3396d6b6]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-3396d6b6],.theme-mode-dark .token.function[data-v-3396d6b6],.theme-mode-dark .token.number[data-v-3396d6b6]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-3396d6b6],.theme-mode-dark .token.constant[data-v-3396d6b6],.theme-mode-dark .token.property[data-v-3396d6b6],.theme-mode-dark .token.symbol[data-v-3396d6b6]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-3396d6b6],.theme-mode-dark .token.builtin[data-v-3396d6b6],.theme-mode-dark .token.important[data-v-3396d6b6],.theme-mode-dark .token.keyword[data-v-3396d6b6],.theme-mode-dark .token.selector[data-v-3396d6b6]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-3396d6b6],.theme-mode-dark .token.char[data-v-3396d6b6],.theme-mode-dark .token.regex[data-v-3396d6b6],.theme-mode-dark .token.string[data-v-3396d6b6],.theme-mode-dark .token.variable[data-v-3396d6b6]{color:#7ec699}.theme-mode-dark .token.entity[data-v-3396d6b6],.theme-mode-dark .token.operator[data-v-3396d6b6],.theme-mode-dark .token.url[data-v-3396d6b6]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-3396d6b6],.theme-mode-dark .style .token.string[data-v-3396d6b6],.theme-mode-dark .token.entity[data-v-3396d6b6],.theme-mode-dark .token.operator[data-v-3396d6b6],.theme-mode-dark .token.url[data-v-3396d6b6]{background:none}.theme-mode-dark .token.bold[data-v-3396d6b6],.theme-mode-dark .token.important[data-v-3396d6b6]{font-weight:700}.theme-mode-dark .token.italic[data-v-3396d6b6]{font-style:italic}.theme-mode-dark .token.entity[data-v-3396d6b6]{cursor:help}.theme-mode-dark .token.inserted[data-v-3396d6b6]{color:green}.theme-mode-read[data-v-3396d6b6]{--bodyBg:#f5f5d5;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--textColor:#004050;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-3396d6b6],.theme-mode-read pre[class*=language-][data-v-3396d6b6]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-3396d6b6]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-3396d6b6],.theme-mode-read pre[class*=language-][data-v-3396d6b6]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-3396d6b6]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-3396d6b6],.theme-mode-read .token.cdata[data-v-3396d6b6],.theme-mode-read .token.comment[data-v-3396d6b6],.theme-mode-read .token.doctype[data-v-3396d6b6],.theme-mode-read .token.prolog[data-v-3396d6b6]{color:#999}.theme-mode-read .token.punctuation[data-v-3396d6b6]{color:#ccc}.theme-mode-read .token.attr-name[data-v-3396d6b6],.theme-mode-read .token.deleted[data-v-3396d6b6],.theme-mode-read .token.namespace[data-v-3396d6b6],.theme-mode-read .token.tag[data-v-3396d6b6]{color:#e2777a}.theme-mode-read .token.function-name[data-v-3396d6b6]{color:#6196cc}.theme-mode-read .token.boolean[data-v-3396d6b6],.theme-mode-read .token.function[data-v-3396d6b6],.theme-mode-read .token.number[data-v-3396d6b6]{color:#f08d49}.theme-mode-read .token.class-name[data-v-3396d6b6],.theme-mode-read .token.constant[data-v-3396d6b6],.theme-mode-read .token.property[data-v-3396d6b6],.theme-mode-read .token.symbol[data-v-3396d6b6]{color:#f8c555}.theme-mode-read .token.atrule[data-v-3396d6b6],.theme-mode-read .token.builtin[data-v-3396d6b6],.theme-mode-read .token.important[data-v-3396d6b6],.theme-mode-read .token.keyword[data-v-3396d6b6],.theme-mode-read .token.selector[data-v-3396d6b6]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-3396d6b6],.theme-mode-read .token.char[data-v-3396d6b6],.theme-mode-read .token.regex[data-v-3396d6b6],.theme-mode-read .token.string[data-v-3396d6b6],.theme-mode-read .token.variable[data-v-3396d6b6]{color:#7ec699}.theme-mode-read .token.entity[data-v-3396d6b6],.theme-mode-read .token.operator[data-v-3396d6b6],.theme-mode-read .token.url[data-v-3396d6b6]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-3396d6b6],.theme-mode-read .style .token.string[data-v-3396d6b6],.theme-mode-read .token.entity[data-v-3396d6b6],.theme-mode-read .token.operator[data-v-3396d6b6],.theme-mode-read .token.url[data-v-3396d6b6]{background:none}.theme-mode-read .token.bold[data-v-3396d6b6],.theme-mode-read .token.important[data-v-3396d6b6]{font-weight:700}.theme-mode-read .token.italic[data-v-3396d6b6]{font-style:italic}.theme-mode-read .token.entity[data-v-3396d6b6]{cursor:help}.theme-mode-read .token.inserted[data-v-3396d6b6]{color:green}.badge[data-v-3396d6b6]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-3396d6b6],.badge.tip[data-v-3396d6b6],.badge[data-v-3396d6b6]{background-color:#42b983}.badge.error[data-v-3396d6b6]{background-color:#da5961}.badge.warn[data-v-3396d6b6],.badge.warning[data-v-3396d6b6],.badge.yellow[data-v-3396d6b6]{background-color:#e7c000}.badge+.badge[data-v-3396d6b6]{margin-left:5px} \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/img/search.237d6f6a.svg b/docs/.vuepress/dist/assets/img/search.237d6f6a.svg new file mode 100644 index 0000000..18ed22a --- /dev/null +++ b/docs/.vuepress/dist/assets/img/search.237d6f6a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/10.abda041d.js b/docs/.vuepress/dist/assets/js/10.abda041d.js new file mode 100644 index 0000000..5dc188f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/10.abda041d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{333:function(t,a,s){"use strict";s.r(a);var n=s(7),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"文字大小"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#文字大小"}},[t._v("#")]),t._v(" 文字大小")]),t._v(" "),a("div",{staticClass:"language-css extra-class"},[a("pre",{pre:!0,attrs:{class:"language-css"}},[a("code",[t._v(".text-xsl 文字大小 60px 用于图标、数字等特大显示\n.text-sl 文字大小 40px 用于图标、数字等较大显示\n.text-xxl 文字大小 22px 用于金额数字等信息\n.text-xl 文字大小 18px 页面大标题,用于结果页等单一信息页\n.text-lg 文字大小 16px 页面小标题,首要层级显示内容\n.text-df 文字大小 14px 页面默认字号,用于摘要或阅读文本\n.text-sm 文字大小 12px 页面辅助信息,次级内容等\n.text-xs 文字大小 10px 说明文本,标签文字等关注度低的文字\n")])])]),a("h2",{attrs:{id:"文字颜色"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#文字颜色"}},[t._v("#")]),t._v(" 文字颜色")]),t._v(" "),a("div",{staticClass:"language-css extra-class"},[a("pre",{pre:!0,attrs:{class:"language-css"}},[a("code",[t._v(".text-red "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 嫣红 #e54d42 */")]),t._v("\n.text-orange "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 桔橙 #f37b1d */")]),t._v("\n.text-yellow "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 明黄 #fbbd08 */")]),t._v("\n.text-olive "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 橄榄 #8dc63f */")]),t._v("\n.text-green "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 森绿 #39b54a */")]),t._v("\n.text-cyan "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 天青 #1cbbb4 */")]),t._v("\n.text-blue "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 海蓝 #0081ff */")]),t._v("\n.text-purple "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 姹紫 #6739b6 */")]),t._v("\n.text-mauve "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 木槿 #9c26b0 */")]),t._v("\n.text-pink "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 桃粉 #e03997 */")]),t._v("\n.text-brown "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 棕褐 #a5673f */")]),t._v("\n.text-grey "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 玄灰 #8799a3 */")]),t._v("\n.text-gray "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 草灰 #aaaaaa */")]),t._v("\n.text-black "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 墨黑 #333333 */")]),t._v("\n.text-white "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* 雅白 #ffffff */")]),t._v("\n")])])]),a("h2",{attrs:{id:"文字阴影"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#文字阴影"}},[t._v("#")]),t._v(" 文字阴影")]),t._v(" "),a("div",{staticClass:"language-css extra-class"},[a("pre",{pre:!0,attrs:{class:"language-css"}},[a("code",[a("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".text-shadow")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* h-shadow 水平阴影的位置 v-shadow 垂直阴影的位置 blur 模糊的距离 color 阴影的颜色; */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-shadow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 3px 3px 4px "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("rgba")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("204"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" 69"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" 59"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" 0.2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"文字截断"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#文字截断"}},[t._v("#")]),t._v(" 文字截断")]),t._v(" "),a("blockquote",[a("p",[t._v("css 代码")])]),t._v(" "),a("div",{staticClass:"language-css extra-class"},[a("pre",{pre:!0,attrs:{class:"language-css"}},[a("code",[t._v(".text-cut 定义文字容器宽度,超出截断\n")])])]),a("blockquote",[a("p",[t._v("演示代码")])]),t._v(" "),a("div",{staticClass:"language-vue extra-class"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding bg-white"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-cut padding bg-grey radius"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value css language-css"}},[a("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("220px")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("我于杀戮之中绽放 ,亦如黎明中的花朵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"文字对齐"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#文字对齐"}},[t._v("#")]),t._v(" 文字对齐")]),t._v(" "),a("blockquote",[a("p",[t._v("css 代码")])]),t._v(" "),a("div",{staticClass:"language-css extra-class"},[a("pre",{pre:!0,attrs:{class:"language-css"}},[a("code",[t._v(".text-left 左对齐\n.text-center 居中对齐\n.text-right 右对齐\n")])])]),a("blockquote",[a("p",[t._v("演示代码")])]),t._v(" "),a("div",{staticClass:"language-vue extra-class"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding bg-white"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-left padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("我于杀戮之中绽放 ,亦如黎明中的花朵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-center padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("我于杀戮之中绽放 ,亦如黎明中的花朵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-right padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("我于杀戮之中绽放 ,亦如黎明中的花朵"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"特殊文字"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#特殊文字"}},[t._v("#")]),t._v(" 特殊文字")]),t._v(" "),a("blockquote",[a("p",[t._v("css 代码")])]),t._v(" "),a("div",{staticClass:"language-css extra-class"},[a("pre",{pre:!0,attrs:{class:"language-css"}},[a("code",[t._v(".text-price 价格文本,利用伪元素添加"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"¥"')]),t._v("符号\n.text-Abc 英文单词首字母大写\n.text-ABC 全部字母大写\n.text-abc 全部字母小写\n")])])]),a("blockquote",[a("p",[t._v("演示代码")])]),t._v(" "),a("div",{staticClass:"language-vue extra-class"},[a("pre",{pre:!0,attrs:{class:"language-vue"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("template")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding text-center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding-lr bg-white"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("solid-bottom padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("text")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-price"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("80.00"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v('价格文本,利用伪元素添加"¥"符号'),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding-lr bg-white margin-top"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("solid-bottom padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("text")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-Abc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("color Ui"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("英文单词首字母大写"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding-lr bg-white margin-top"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("solid-bottom padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("text")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-ABC"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("color Ui"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("全部字母大写"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding-lr bg-white margin-top"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("solid-bottom padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("text")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text-abc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("color Ui"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("view")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("全部字母小写"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/11.d6f4f259.js b/docs/.vuepress/dist/assets/js/11.d6f4f259.js new file mode 100644 index 0000000..e65dacf --- /dev/null +++ b/docs/.vuepress/dist/assets/js/11.d6f4f259.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{337:function(t,s,a){"use strict";a.r(s);var n=a(7),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("温馨提示")]),t._v(" "),s("p",[t._v("点击右侧图标页面,对应的图标,即可复制类名:"),s("code",[t._v("cuIcon-图标名称")])])]),t._v(" "),s("h2",{attrs:{id:"引入样式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#引入样式"}},[t._v("#")]),t._v(" 引入样式")]),t._v(" "),s("p",[t._v("编辑 "),s("code",[t._v("App.vue")]),t._v("文件在"),s("code",[t._v("\n\n\n\n# 使用自定义导航栏\n\n导航栏作为常用组件有做简单封装,当然你也可以直接复制代码结构自己修改,达到个性化目的。\n\nApp.vue 获得系统信息\n\nonLaunch: function() {\n uni.getSystemInfo({\n success: function(e) {\n // #ifndef MP\n Vue.prototype.StatusBar = e.statusBarHeight;\n if (e.platform == \'android\') {\n Vue.prototype.CustomBar = e.statusBarHeight + 50;\n } else {\n Vue.prototype.CustomBar = e.statusBarHeight + 45;\n };\n // #endif\n // #ifdef MP-WEIXIN\n Vue.prototype.StatusBar = e.statusBarHeight;\n let custom = wx.getMenuButtonBoundingClientRect();\n Vue.prototype.Custom = custom;\n Vue.prototype.CustomBar = custom.bottom + custom.top - e.statusBarHeight;\n // #endif\t\t\n // #ifdef MP-ALIPAY\n Vue.prototype.StatusBar = e.statusBarHeight;\n Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight;\n // #endif\n }\n })\n},\n\n\npages.json 配置取消系统导航栏\n\n"globalStyle": {\n "navigationStyle": "custom"\n},\n\n\n复制代码结构可以直接使用,注意全局变量的获取。\n\n使用封装,在main.js 引入 cu-custom 组件。\n\nimport cuCustom from \'./colorui/components/cu-custom.vue\'\nVue.component(\'cu-custom\',cuCustom)\n\n\npage.vue 页面可以直接调用了\n\n\n 返回\n 导航栏\n\n\n\n参数 作用 类型 默认值\nbgColor 背景颜色类名 String \'\'\nisBack 是否开启返回 Boolean false\nbgImage 背景图片路径 String \'\'\n\nSLOT块 作用\nbackText 返回时的文字\ncontent 中间区域\nright 右侧区域(小程序端可使用范围很窄!)\n\n\n# 使用原生小程序开发\n\n\n# 从现有项目开始\n\n下载源码解压获得/demo,复制目录下的 /colorui 文件夹到你的项目根目录\n\nApp.wxss` 引入关键Css `main.wxss` `icon.wxss\n@import "colorui/main.wxss";\n@import "colorui/icon.wxss";\n@import "app.css"; /* 你的项目css */\n....\n\n\n\n# 从新项目开始\n\n下载源码解压获得/template,复制/template并重命名为你的项目,导入到小程序开发工具既可以开始你的新项目了\n\n\n# 使用自定义导航栏\n\n导航栏作为常用组件有做简单封装,当然你也可以直接复制代码结构自己修改,达到个性化目的。\n\nApp.js 获得系统信息\n\nonLaunch: function() {\n wx.getSystemInfo({\n success: e => {\n this.globalData.StatusBar = e.statusBarHeight;\n let custom = wx.getMenuButtonBoundingClientRect();\n this.globalData.Custom = custom; \n this.globalData.CustomBar = custom.bottom + custom.top - e.statusBarHeight;\n }\n })\n},\n\n\nApp.json 配置取消系统导航栏,并全局引入组件\n\n"window": {\n "navigationStyle": "custom"\n},\n"usingComponents": {\n "cu-custom":"/colorui/components/cu-custom"\n}\n\n\npage.wxml 页面可以直接调用了\n\n\n 返回\n 导航栏\n\n\n\n参数 作用 类型 默认值\nbgColor 背景颜色类名 String \'\'\nisBack 是否开启返回 Boolean false\nisCustom 是否开启左侧胶囊 Boolean false\nbgImage 背景图片路径 String \'\'\n\nSLOT块 作用\nbackText 返回时的文字\ncontent 中间区域\nright 右侧区域(小程序端可使用范围很窄!)',normalizedContent:'# 素材\n\ncolorui在语雀有个群友共同在维护的知识库,里面有一些群友改的模板和ui素材供开发使用哦! 语雀-colorui群资源\n\n\n# 前言\n\ncolorui是一个css库!!!在你引入样式后可以根据class来调用组件,一些含有交互的操作我也有简单写,可以为你开发提供一些思路。\n\n\n# 交流\n\n微信群:加入微信群请先添加开发者微信,备注uniapp插件市场。qq群:240787041 或扫描二维码。\n\n\n\n\n# 使用uniapp开发\n\n\n# 开始\n\n下载源码解压获得/colorui-uniapp文件夹,复制目录下的 /colorui 文件夹到你的项目根目录\n\napp.vue` 引入关键css `main.css` `icon.css\n\n\n\n\n# 使用自定义导航栏\n\n导航栏作为常用组件有做简单封装,当然你也可以直接复制代码结构自己修改,达到个性化目的。\n\napp.vue 获得系统信息\n\nonlaunch: function() {\n uni.getsysteminfo({\n success: function(e) {\n // #ifndef mp\n vue.prototype.statusbar = e.statusbarheight;\n if (e.platform == \'android\') {\n vue.prototype.custombar = e.statusbarheight + 50;\n } else {\n vue.prototype.custombar = e.statusbarheight + 45;\n };\n // #endif\n // #ifdef mp-weixin\n vue.prototype.statusbar = e.statusbarheight;\n let custom = wx.getmenubuttonboundingclientrect();\n vue.prototype.custom = custom;\n vue.prototype.custombar = custom.bottom + custom.top - e.statusbarheight;\n // #endif\t\t\n // #ifdef mp-alipay\n vue.prototype.statusbar = e.statusbarheight;\n vue.prototype.custombar = e.statusbarheight + e.titlebarheight;\n // #endif\n }\n })\n},\n\n\npages.json 配置取消系统导航栏\n\n"globalstyle": {\n "navigationstyle": "custom"\n},\n\n\n复制代码结构可以直接使用,注意全局变量的获取。\n\n使用封装,在main.js 引入 cu-custom 组件。\n\nimport cucustom from \'./colorui/components/cu-custom.vue\'\nvue.component(\'cu-custom\',cucustom)\n\n\npage.vue 页面可以直接调用了\n\n\n 返回\n 导航栏\n\n\n\n参数 作用 类型 默认值\nbgcolor 背景颜色类名 string \'\'\nisback 是否开启返回 boolean false\nbgimage 背景图片路径 string \'\'\n\nslot块 作用\nbacktext 返回时的文字\ncontent 中间区域\nright 右侧区域(小程序端可使用范围很窄!)\n\n\n# 使用原生小程序开发\n\n\n# 从现有项目开始\n\n下载源码解压获得/demo,复制目录下的 /colorui 文件夹到你的项目根目录\n\napp.wxss` 引入关键css `main.wxss` `icon.wxss\n@import "colorui/main.wxss";\n@import "colorui/icon.wxss";\n@import "app.css"; /* 你的项目css */\n....\n\n\n\n# 从新项目开始\n\n下载源码解压获得/template,复制/template并重命名为你的项目,导入到小程序开发工具既可以开始你的新项目了\n\n\n# 使用自定义导航栏\n\n导航栏作为常用组件有做简单封装,当然你也可以直接复制代码结构自己修改,达到个性化目的。\n\napp.js 获得系统信息\n\nonlaunch: function() {\n wx.getsysteminfo({\n success: e => {\n this.globaldata.statusbar = e.statusbarheight;\n let custom = wx.getmenubuttonboundingclientrect();\n this.globaldata.custom = custom; \n this.globaldata.custombar = custom.bottom + custom.top - e.statusbarheight;\n }\n })\n},\n\n\napp.json 配置取消系统导航栏,并全局引入组件\n\n"window": {\n "navigationstyle": "custom"\n},\n"usingcomponents": {\n "cu-custom":"/colorui/components/cu-custom"\n}\n\n\npage.wxml 页面可以直接调用了\n\n\n 返回\n 导航栏\n\n\n\n参数 作用 类型 默认值\nbgcolor 背景颜色类名 string \'\'\nisback 是否开启返回 boolean false\niscustom 是否开启左侧胶囊 boolean false\nbgimage 背景图片路径 string \'\'\n\nslot块 作用\nbacktext 返回时的文字\ncontent 中间区域\nright 右侧区域(小程序端可使用范围很窄!)',charsets:{cjk:!0}},{title:"背景",frontmatter:{title:"背景",date:"2023-05-28T10:55:38.000Z",permalink:"/pages/basics/background",article:!1},regularPath:"/10.%E6%96%87%E6%A1%A3/20.%E5%9F%BA%E7%A1%80%E5%85%83%E7%B4%A0/20.%E8%83%8C%E6%99%AF.html",relativePath:"10.文档/20.基础元素/20.背景.md",key:"v-4dccd819",path:"/pages/basics/background/",headers:[{level:2,title:"深色背景",slug:"深色背景",normalizedTitle:"深色背景",charIndex:2},{level:2,title:"浅色背景",slug:"浅色背景",normalizedTitle:"浅色背景",charIndex:460},{level:2,title:"渐变背景",slug:"渐变背景",normalizedTitle:"渐变背景",charIndex:938},{level:2,title:"图片背景",slug:"图片背景",normalizedTitle:"图片背景",charIndex:1256},{level:2,title:"透明背景(文字层)",slug:"透明背景-文字层",normalizedTitle:"透明背景(文字层)",charIndex:1868}],headersStr:"深色背景 浅色背景 渐变背景 图片背景 透明背景(文字层)",content:'# 深色背景\n\n在 class 中加入 bg-Red|Orange|...\n\n.bg-red /* 嫣红 #e54d42 */\n.bg-orange /* 桔橙 #f37b1d */\n.bg-yellow /* 明黄 #fbbd08 */\n.bg-olive /* 橄榄 #8dc63f */\n.bg-green /* 森绿 #39b54a */\n.bg-cyan /* 天青 #1cbbb4 */\n.bg-blue /* 海蓝 #0081ff */\n.bg-purple /* 姹紫 #6739b6 */\n.bg-mauve /* 木槿 #9c26b0 */\n.bg-pink /* 桃粉 #e03997 */\n.bg-brown /* 棕褐 #a5673f */\n.bg-grey /* 玄灰 #8799a3 */\n.bg-gray /* 草灰 #aaaaaa */\n.bg-black /* 墨黑 #333333 */\n.bg-white /* 雅白 #ffffff */\n\n\n\n# 浅色背景\n\n在 class 中加入 bg-Red|Orange|... 在 class 中再加入 light\n\n.light .bg-red /* 嫣红 #e54d42 */\n.light .bg-orange /* 桔橙 #f37b1d */\n.light .bg-yellow /* 明黄 #fbbd08 */\n.light .bg-olive /* 橄榄 #8dc63f */\n.light .bg-green /* 森绿 #39b54a */\n.light .bg-cyan /* 天青 #1cbbb4 */\n.light .bg-blue /* 海蓝 #0081ff */\n.light .bg-purple /* 姹紫 #6739b6 */\n.light .bg-mauve /* 木槿 #9c26b0 */\n.light .bg-pink /* 桃粉 #e03997 */\n.light .bg-brown /* 棕褐 #a5673f */\n.light .bg-grey /* 玄灰 #8799a3 */\n\n\n\n# 渐变背景\n\n在 class 中加入 bg-gradual-red|orange|...\n\n.bg-gradual-red /* 魅红 #f43f3b - #ec008c */\n.bg-gradual-orange /* 鎏金 #ff9700 - #ed1c24 */\n.bg-gradual-green /* 翠柳 #39b54a - #8dc63f */\n.bg-gradual-blue /* 靛青 #0081ff - #1cbbb4 */\n.bg-gradual-purple /* 惑紫 #9000ff - #5e00ff */\n.bg-gradual-pink /* 霞彩 #ec008c - #6739b6 */\n\n\n\n# 图片背景\n\n在 class 中加入 bg-img bg-mask\n\n> css 代码\n\n.bg-img 把背景图片放大到适合元素容器的尺寸,图片比例不变,但是要注意,超出容器的部分可能会裁掉。\n.bg-mask 在背景图片加一层黑色遮罩\n\n.bg-shadeTop 背景图片加一层黑色遮罩上面开始\n.bg-shadeBottom 背景图片加一层黑色遮罩下面开始\n\n\n> 演示代码\n\n\n \n \n 钢铁之翼\n \n \n Only the guilty need fear me.\n \n \n\n\n\n\n# 透明背景(文字层)\n\n在 class 中加入 bg-shadeBottom|shadeTop\n\n> 演示代码\n\n\n \n 上面开始\n \n\n\n \n 下面开始\n \n\n',normalizedContent:'# 深色背景\n\n在 class 中加入 bg-red|orange|...\n\n.bg-red /* 嫣红 #e54d42 */\n.bg-orange /* 桔橙 #f37b1d */\n.bg-yellow /* 明黄 #fbbd08 */\n.bg-olive /* 橄榄 #8dc63f */\n.bg-green /* 森绿 #39b54a */\n.bg-cyan /* 天青 #1cbbb4 */\n.bg-blue /* 海蓝 #0081ff */\n.bg-purple /* 姹紫 #6739b6 */\n.bg-mauve /* 木槿 #9c26b0 */\n.bg-pink /* 桃粉 #e03997 */\n.bg-brown /* 棕褐 #a5673f */\n.bg-grey /* 玄灰 #8799a3 */\n.bg-gray /* 草灰 #aaaaaa */\n.bg-black /* 墨黑 #333333 */\n.bg-white /* 雅白 #ffffff */\n\n\n\n# 浅色背景\n\n在 class 中加入 bg-red|orange|... 在 class 中再加入 light\n\n.light .bg-red /* 嫣红 #e54d42 */\n.light .bg-orange /* 桔橙 #f37b1d */\n.light .bg-yellow /* 明黄 #fbbd08 */\n.light .bg-olive /* 橄榄 #8dc63f */\n.light .bg-green /* 森绿 #39b54a */\n.light .bg-cyan /* 天青 #1cbbb4 */\n.light .bg-blue /* 海蓝 #0081ff */\n.light .bg-purple /* 姹紫 #6739b6 */\n.light .bg-mauve /* 木槿 #9c26b0 */\n.light .bg-pink /* 桃粉 #e03997 */\n.light .bg-brown /* 棕褐 #a5673f */\n.light .bg-grey /* 玄灰 #8799a3 */\n\n\n\n# 渐变背景\n\n在 class 中加入 bg-gradual-red|orange|...\n\n.bg-gradual-red /* 魅红 #f43f3b - #ec008c */\n.bg-gradual-orange /* 鎏金 #ff9700 - #ed1c24 */\n.bg-gradual-green /* 翠柳 #39b54a - #8dc63f */\n.bg-gradual-blue /* 靛青 #0081ff - #1cbbb4 */\n.bg-gradual-purple /* 惑紫 #9000ff - #5e00ff */\n.bg-gradual-pink /* 霞彩 #ec008c - #6739b6 */\n\n\n\n# 图片背景\n\n在 class 中加入 bg-img bg-mask\n\n> css 代码\n\n.bg-img 把背景图片放大到适合元素容器的尺寸,图片比例不变,但是要注意,超出容器的部分可能会裁掉。\n.bg-mask 在背景图片加一层黑色遮罩\n\n.bg-shadetop 背景图片加一层黑色遮罩上面开始\n.bg-shadebottom 背景图片加一层黑色遮罩下面开始\n\n\n> 演示代码\n\n\n \n \n 钢铁之翼\n \n \n only the guilty need fear me.\n \n \n\n\n\n\n# 透明背景(文字层)\n\n在 class 中加入 bg-shadebottom|shadetop\n\n> 演示代码\n\n\n \n 上面开始\n \n\n\n \n 下面开始\n \n\n',charsets:{cjk:!0}},{title:"布局",frontmatter:{title:"布局",date:"2023-05-28T10:34:38.000Z",permalink:"/pages/basics/layout",article:!1},regularPath:"/10.%E6%96%87%E6%A1%A3/20.%E5%9F%BA%E7%A1%80%E5%85%83%E7%B4%A0/10.%E5%B8%83%E5%B1%80.html",relativePath:"10.文档/20.基础元素/10.布局.md",key:"v-bafaf27c",path:"/pages/basics/layout/",headers:[{level:2,title:"Flex布局",slug:"flex布局",normalizedTitle:"flex布局",charIndex:2},{level:3,title:"固定尺寸",slug:"固定尺寸",normalizedTitle:"固定尺寸",charIndex:36},{level:3,title:"比例布局",slug:"比例布局",normalizedTitle:"比例布局",charIndex:668},{level:3,title:"水平对齐",slug:"水平对齐",normalizedTitle:"水平对齐",charIndex:1453},{level:3,title:"垂直对齐",slug:"垂直对齐",normalizedTitle:"垂直对齐",charIndex:2714},{level:2,title:"Grid布局",slug:"grid布局",normalizedTitle:"grid布局",charIndex:3584},{level:3,title:"等分列",slug:"等分列",normalizedTitle:"等分列",charIndex:3595},{level:3,title:"等高",slug:"等高",normalizedTitle:"等高",charIndex:3901},{level:2,title:"辅助布局",slug:"辅助布局",normalizedTitle:"辅助布局",charIndex:4512},{level:3,title:"浮动",slug:"浮动",normalizedTitle:"浮动",charIndex:4521},{level:3,title:"内外边距",slug:"内外边距",normalizedTitle:"内外边距",charIndex:4740}],headersStr:"Flex布局 固定尺寸 比例布局 水平对齐 垂直对齐 Grid布局 等分列 等高 辅助布局 浮动 内外边距",content:'# Flex布局\n\n父级容器的 class 需要加入 flex\n\n\n# 固定尺寸\n\n> css\n\n.basis-xs 所占比例 20%\n.basis-sm 所占比例 40%\n.basis-sub 所占比例 50%\n.basis-lg 所占比例 60%\n.basis-xl 所占比例 80%\n\n\n> 演示代码\n\n\n xs(20%)\n \n sm(40%)\n \n sub(50%)\n lg(60%)\n xl(80%)\n\n\n\n\n# 比例布局\n\n> css\n\n.flex-sub 所占比例 1\n.flex-twice 所占比例 2\n.flex-treble 所占比例 3\n\n\n> 演示代码\n\n\x3c!-- 1:1 --\x3e\n\n 1\n 1\n\n\x3c!-- 1:2 --\x3e\n\n 1\n 2\n\n\x3c!-- 1:2:3 --\x3e\n\n 1\n 2\n 3\n\n\n\n\n# 水平对齐\n\n父容器的 class 中加入 justify-start|end|center|between|around\n\n> css\n\n.justify-start 对齐方式 从行首开始排列\n.justify-end 对齐方式 从行尾开始排列\n.justify-center 对齐方式 居中排列\n.justify-between 对齐方式 均匀排列每个元素,首个元素放置于起点,末尾元素放置于终点\n.justify-around 对齐方式 均匀排列每个元素,每个元素之间的间隔相等\n\n\n> 演示代码\n\n\n start\n start\n\n\n end\n end\n\n\n center\n center\n\n\n between\n between\n\n\n around\n around\n\n\n\n\n# 垂直对齐\n\n父容器的 class 中加入 align-start|end|center\n\n> css\n\n.align-start 对齐方式 元素位于容器的开头,弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。\n.align-end 对齐方式 元素位于容器的结尾,弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。\n.align-center 对齐方式 元素位于容器的中心,弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。\n\n\n> 演示代码\n\n\n ColorUi\n start\n\n\n ColorUi\n end\n\n\n ColorUi\n center\n\n\n\n\n# Grid布局\n\n\n# 等分列\n\nclass 加入 grid col-1|2|3|...\n\n> 演示代码\n\n\n {{indexs+1}}\n\n\n\n\n# 等高\n\n在 class 中加入 grid col-4|5|... grid-square\n\n\n \n\n\n + + diff --git a/docs/.vuepress/dist/pages/base/index.html b/docs/.vuepress/dist/pages/base/index.html new file mode 100644 index 0000000..beb13c2 --- /dev/null +++ b/docs/.vuepress/dist/pages/base/index.html @@ -0,0 +1,41 @@ + + + + + + 介绍 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/baseStart/index.html b/docs/.vuepress/dist/pages/baseStart/index.html new file mode 100644 index 0000000..5d8f367 --- /dev/null +++ b/docs/.vuepress/dist/pages/baseStart/index.html @@ -0,0 +1,108 @@ + + + + + + 快速使用 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/avatar/index.html b/docs/.vuepress/dist/pages/basics/avatar/index.html new file mode 100644 index 0000000..f38d1a8 --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/avatar/index.html @@ -0,0 +1,43 @@ + + + + + + 头像 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/background/index.html b/docs/.vuepress/dist/pages/basics/background/index.html new file mode 100644 index 0000000..6153c91 --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/background/index.html @@ -0,0 +1,102 @@ + + + + + + 背景 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/button/index.html b/docs/.vuepress/dist/pages/basics/button/index.html new file mode 100644 index 0000000..51970ae --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/button/index.html @@ -0,0 +1,77 @@ + + + + + + 按钮 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/icon/index.html b/docs/.vuepress/dist/pages/basics/icon/index.html new file mode 100644 index 0000000..3a47870 --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/icon/index.html @@ -0,0 +1,48 @@ + + + + + + 图标 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/layout/index.html b/docs/.vuepress/dist/pages/basics/layout/index.html new file mode 100644 index 0000000..7d00831 --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/layout/index.html @@ -0,0 +1,136 @@ + + + + + + 布局 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/loading/index.html b/docs/.vuepress/dist/pages/basics/loading/index.html new file mode 100644 index 0000000..549addf --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/loading/index.html @@ -0,0 +1,43 @@ + + + + + + 加载 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/progress/index.html b/docs/.vuepress/dist/pages/basics/progress/index.html new file mode 100644 index 0000000..1d6ba4b --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/progress/index.html @@ -0,0 +1,43 @@ + + + + + + 进度条 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/shadow/index.html b/docs/.vuepress/dist/pages/basics/shadow/index.html new file mode 100644 index 0000000..1d8b05f --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/shadow/index.html @@ -0,0 +1,43 @@ + + + + + + 边框阴影 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/tag/index.html b/docs/.vuepress/dist/pages/basics/tag/index.html new file mode 100644 index 0000000..a4a2965 --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/tag/index.html @@ -0,0 +1,43 @@ + + + + + + 标签 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/basics/text/index.html b/docs/.vuepress/dist/pages/basics/text/index.html new file mode 100644 index 0000000..840fa75 --- /dev/null +++ b/docs/.vuepress/dist/pages/basics/text/index.html @@ -0,0 +1,118 @@ + + + + + + 文本 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/bar/index.html b/docs/.vuepress/dist/pages/component/bar/index.html new file mode 100644 index 0000000..fa0687f --- /dev/null +++ b/docs/.vuepress/dist/pages/component/bar/index.html @@ -0,0 +1,43 @@ + + + + + + 操作条 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/card/index.html b/docs/.vuepress/dist/pages/component/card/index.html new file mode 100644 index 0000000..e64dfa9 --- /dev/null +++ b/docs/.vuepress/dist/pages/component/card/index.html @@ -0,0 +1,43 @@ + + + + + + 卡片 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/chat/index.html b/docs/.vuepress/dist/pages/component/chat/index.html new file mode 100644 index 0000000..163dc71 --- /dev/null +++ b/docs/.vuepress/dist/pages/component/chat/index.html @@ -0,0 +1,43 @@ + + + + + + 聊天 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/form/index.html b/docs/.vuepress/dist/pages/component/form/index.html new file mode 100644 index 0000000..90a4118 --- /dev/null +++ b/docs/.vuepress/dist/pages/component/form/index.html @@ -0,0 +1,43 @@ + + + + + + 表单 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/list/index.html b/docs/.vuepress/dist/pages/component/list/index.html new file mode 100644 index 0000000..0f7a57c --- /dev/null +++ b/docs/.vuepress/dist/pages/component/list/index.html @@ -0,0 +1,43 @@ + + + + + + 列表 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/modal/index.html b/docs/.vuepress/dist/pages/component/modal/index.html new file mode 100644 index 0000000..94e7fe8 --- /dev/null +++ b/docs/.vuepress/dist/pages/component/modal/index.html @@ -0,0 +1,43 @@ + + + + + + 模态框 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/nav/index.html b/docs/.vuepress/dist/pages/component/nav/index.html new file mode 100644 index 0000000..43d0016 --- /dev/null +++ b/docs/.vuepress/dist/pages/component/nav/index.html @@ -0,0 +1,43 @@ + + + + + + 导航栏 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/steps/index.html b/docs/.vuepress/dist/pages/component/steps/index.html new file mode 100644 index 0000000..44c9ef5 --- /dev/null +++ b/docs/.vuepress/dist/pages/component/steps/index.html @@ -0,0 +1,43 @@ + + + + + + 步骤条 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/swiper/index.html b/docs/.vuepress/dist/pages/component/swiper/index.html new file mode 100644 index 0000000..5825fba --- /dev/null +++ b/docs/.vuepress/dist/pages/component/swiper/index.html @@ -0,0 +1,43 @@ + + + + + + 轮播 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/component/timeline/index.html b/docs/.vuepress/dist/pages/component/timeline/index.html new file mode 100644 index 0000000..3d0d118 --- /dev/null +++ b/docs/.vuepress/dist/pages/component/timeline/index.html @@ -0,0 +1,43 @@ + + + + + + 时间轴 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/plugin/animation/index.html b/docs/.vuepress/dist/pages/plugin/animation/index.html new file mode 100644 index 0000000..95c9314 --- /dev/null +++ b/docs/.vuepress/dist/pages/plugin/animation/index.html @@ -0,0 +1,43 @@ + + + + + + 微动画 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/plugin/drawer/index.html b/docs/.vuepress/dist/pages/plugin/drawer/index.html new file mode 100644 index 0000000..b73a3bb --- /dev/null +++ b/docs/.vuepress/dist/pages/plugin/drawer/index.html @@ -0,0 +1,43 @@ + + + + + + 全屏抽屉 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/plugin/indexes/index.html b/docs/.vuepress/dist/pages/plugin/indexes/index.html new file mode 100644 index 0000000..b4daecd --- /dev/null +++ b/docs/.vuepress/dist/pages/plugin/indexes/index.html @@ -0,0 +1,43 @@ + + + + + + 索引动画 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/dist/pages/plugin/verticalnav/index.html b/docs/.vuepress/dist/pages/plugin/verticalnav/index.html new file mode 100644 index 0000000..4f1b01f --- /dev/null +++ b/docs/.vuepress/dist/pages/plugin/verticalnav/index.html @@ -0,0 +1,42 @@ + + + + + + 垂直导航 | ColorUI 使用文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/enhanceApp.js b/docs/.vuepress/enhanceApp.js new file mode 100644 index 0000000..e69de29 diff --git a/docs/.vuepress/public/img/colorui-logo.png b/docs/.vuepress/public/img/colorui-logo.png new file mode 100644 index 0000000..45636b4 Binary files /dev/null and b/docs/.vuepress/public/img/colorui-logo.png differ diff --git a/docs/.vuepress/public/img/course/same-domain-name/1-env-prod.png b/docs/.vuepress/public/img/course/same-domain-name/1-env-prod.png new file mode 100644 index 0000000..138b0c5 Binary files /dev/null and b/docs/.vuepress/public/img/course/same-domain-name/1-env-prod.png differ diff --git a/docs/.vuepress/public/img/course/same-domain-name/2-vue-config-js.png b/docs/.vuepress/public/img/course/same-domain-name/2-vue-config-js.png new file mode 100644 index 0000000..37ddf6b Binary files /dev/null and b/docs/.vuepress/public/img/course/same-domain-name/2-vue-config-js.png differ diff --git a/docs/.vuepress/public/img/course/same-domain-name/3-copy-yyladmin-public.png b/docs/.vuepress/public/img/course/same-domain-name/3-copy-yyladmin-public.png new file mode 100644 index 0000000..1412732 Binary files /dev/null and b/docs/.vuepress/public/img/course/same-domain-name/3-copy-yyladmin-public.png differ diff --git a/docs/.vuepress/public/img/course/same-domain-name/4-localhost-open.png b/docs/.vuepress/public/img/course/same-domain-name/4-localhost-open.png new file mode 100644 index 0000000..11c60a5 Binary files /dev/null and b/docs/.vuepress/public/img/course/same-domain-name/4-localhost-open.png differ diff --git a/docs/.vuepress/public/img/course/same-domain-name/5-pro-open.png b/docs/.vuepress/public/img/course/same-domain-name/5-pro-open.png new file mode 100644 index 0000000..9dff6db Binary files /dev/null and b/docs/.vuepress/public/img/course/same-domain-name/5-pro-open.png differ diff --git a/docs/.vuepress/public/img/dev/adminmenu.jpg b/docs/.vuepress/public/img/dev/adminmenu.jpg new file mode 100644 index 0000000..e9fd9aa Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminmenu.jpg differ diff --git a/docs/.vuepress/public/img/dev/adminmenu2.jpg b/docs/.vuepress/public/img/dev/adminmenu2.jpg new file mode 100644 index 0000000..eb45247 Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminmenu2.jpg differ diff --git a/docs/.vuepress/public/img/dev/adminrole.jpg b/docs/.vuepress/public/img/dev/adminrole.jpg new file mode 100644 index 0000000..78d1484 Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminrole.jpg differ diff --git a/docs/.vuepress/public/img/dev/adminwebapi.jpg b/docs/.vuepress/public/img/dev/adminwebapi.jpg new file mode 100644 index 0000000..4bded8e Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminwebapi.jpg differ diff --git a/docs/.vuepress/public/img/dev/adminweblogout.jpg b/docs/.vuepress/public/img/dev/adminweblogout.jpg new file mode 100644 index 0000000..46e98b2 Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminweblogout.jpg differ diff --git a/docs/.vuepress/public/img/dev/adminweblogout2.jpg b/docs/.vuepress/public/img/dev/adminweblogout2.jpg new file mode 100644 index 0000000..344eab5 Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminweblogout2.jpg differ diff --git a/docs/.vuepress/public/img/dev/adminwebpage.jpg b/docs/.vuepress/public/img/dev/adminwebpage.jpg new file mode 100644 index 0000000..f0c825c Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminwebpage.jpg differ diff --git a/docs/.vuepress/public/img/dev/adminwebrouter.jpg b/docs/.vuepress/public/img/dev/adminwebrouter.jpg new file mode 100644 index 0000000..9d016b7 Binary files /dev/null and b/docs/.vuepress/public/img/dev/adminwebrouter.jpg differ diff --git a/docs/.vuepress/public/img/dev/apidoc.jpg b/docs/.vuepress/public/img/dev/apidoc.jpg new file mode 100644 index 0000000..481eb0e Binary files /dev/null and b/docs/.vuepress/public/img/dev/apidoc.jpg differ diff --git a/docs/.vuepress/public/img/dev/composer1.png b/docs/.vuepress/public/img/dev/composer1.png new file mode 100644 index 0000000..416a5b4 Binary files /dev/null and b/docs/.vuepress/public/img/dev/composer1.png differ diff --git a/docs/.vuepress/public/img/dev/composer2.png b/docs/.vuepress/public/img/dev/composer2.png new file mode 100644 index 0000000..5b1bf40 Binary files /dev/null and b/docs/.vuepress/public/img/dev/composer2.png differ diff --git a/docs/.vuepress/public/img/dev/cxbk.jpg b/docs/.vuepress/public/img/dev/cxbk.jpg new file mode 100644 index 0000000..c16edd9 Binary files /dev/null and b/docs/.vuepress/public/img/dev/cxbk.jpg differ diff --git a/docs/.vuepress/public/img/dev/hosts1.png b/docs/.vuepress/public/img/dev/hosts1.png new file mode 100644 index 0000000..070d608 Binary files /dev/null and b/docs/.vuepress/public/img/dev/hosts1.png differ diff --git a/docs/.vuepress/public/img/dev/hosts2.png b/docs/.vuepress/public/img/dev/hosts2.png new file mode 100644 index 0000000..c70e38c Binary files /dev/null and b/docs/.vuepress/public/img/dev/hosts2.png differ diff --git a/docs/.vuepress/public/img/dev/hosts3.png b/docs/.vuepress/public/img/dev/hosts3.png new file mode 100644 index 0000000..c8e7680 Binary files /dev/null and b/docs/.vuepress/public/img/dev/hosts3.png differ diff --git a/docs/.vuepress/public/img/dev/hosts4.png b/docs/.vuepress/public/img/dev/hosts4.png new file mode 100644 index 0000000..62ddf39 Binary files /dev/null and b/docs/.vuepress/public/img/dev/hosts4.png differ diff --git a/docs/.vuepress/public/img/dev/install1.png b/docs/.vuepress/public/img/dev/install1.png new file mode 100644 index 0000000..8510e98 Binary files /dev/null and b/docs/.vuepress/public/img/dev/install1.png differ diff --git a/docs/.vuepress/public/img/dev/install2.png b/docs/.vuepress/public/img/dev/install2.png new file mode 100644 index 0000000..128519e Binary files /dev/null and b/docs/.vuepress/public/img/dev/install2.png differ diff --git a/docs/.vuepress/public/img/dev/php7-1.png b/docs/.vuepress/public/img/dev/php7-1.png new file mode 100644 index 0000000..d3c58e0 Binary files /dev/null and b/docs/.vuepress/public/img/dev/php7-1.png differ diff --git a/docs/.vuepress/public/img/dev/php7-2.png b/docs/.vuepress/public/img/dev/php7-2.png new file mode 100644 index 0000000..b83f8df Binary files /dev/null and b/docs/.vuepress/public/img/dev/php7-2.png differ diff --git a/docs/.vuepress/public/img/dev/phpStudy1.png b/docs/.vuepress/public/img/dev/phpStudy1.png new file mode 100644 index 0000000..17e2873 Binary files /dev/null and b/docs/.vuepress/public/img/dev/phpStudy1.png differ diff --git a/docs/.vuepress/public/img/dev/phpStudy2.png b/docs/.vuepress/public/img/dev/phpStudy2.png new file mode 100644 index 0000000..edc6f7a Binary files /dev/null and b/docs/.vuepress/public/img/dev/phpStudy2.png differ diff --git a/docs/.vuepress/public/img/dev/phpStudy3.png b/docs/.vuepress/public/img/dev/phpStudy3.png new file mode 100644 index 0000000..efd649f Binary files /dev/null and b/docs/.vuepress/public/img/dev/phpStudy3.png differ diff --git a/docs/.vuepress/public/img/dev/phpStudy4.png b/docs/.vuepress/public/img/dev/phpStudy4.png new file mode 100644 index 0000000..4cb8601 Binary files /dev/null and b/docs/.vuepress/public/img/dev/phpStudy4.png differ diff --git a/docs/.vuepress/public/img/favicon.ico b/docs/.vuepress/public/img/favicon.ico new file mode 100644 index 0000000..dd5d5ea Binary files /dev/null and b/docs/.vuepress/public/img/favicon.ico differ diff --git a/docs/.vuepress/public/img/hero-image.png b/docs/.vuepress/public/img/hero-image.png new file mode 100644 index 0000000..d70dce2 Binary files /dev/null and b/docs/.vuepress/public/img/hero-image.png differ diff --git a/docs/.vuepress/public/img/support/jz-wx.jpg b/docs/.vuepress/public/img/support/jz-wx.jpg new file mode 100644 index 0000000..8c5a105 Binary files /dev/null and b/docs/.vuepress/public/img/support/jz-wx.jpg differ diff --git a/docs/.vuepress/public/img/support/jz-wxzs.jpg b/docs/.vuepress/public/img/support/jz-wxzs.jpg new file mode 100644 index 0000000..c061d78 Binary files /dev/null and b/docs/.vuepress/public/img/support/jz-wxzs.jpg differ diff --git a/docs/.vuepress/public/img/support/jz-zfb.jpg b/docs/.vuepress/public/img/support/jz-zfb.jpg new file mode 100644 index 0000000..58a71a4 Binary files /dev/null and b/docs/.vuepress/public/img/support/jz-zfb.jpg differ diff --git a/docs/.vuepress/public/img/support/qq-group01.png b/docs/.vuepress/public/img/support/qq-group01.png new file mode 100644 index 0000000..133dcaa Binary files /dev/null and b/docs/.vuepress/public/img/support/qq-group01.png differ diff --git a/docs/.vuepress/styles/index.styl b/docs/.vuepress/styles/index.styl new file mode 100644 index 0000000..dc1b6f0 --- /dev/null +++ b/docs/.vuepress/styles/index.styl @@ -0,0 +1,96 @@ +.home-wrapper .banner .banner-conent .hero h1{ + font-size 2.8rem!important +} +// 文档中适配 +.page + letter-spacing: 0.08rem; + +table + width auto +.page >*:not(.footer),.card-box + box-shadow: none!important + +.page + @media (min-width $contentWidth + 80) + padding-top $navbarHeight!important +.home-wrapper .banner .banner-conent + padding 0 2.9rem + box-sizing border-box +.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a + h2 + margin-top 2rem + font-size 1.2rem!important + p + padding 0 1rem + +// 评论区颜色重置 +.gt-container + .gt-ico-tip + &::after + content: '。( Win + . ) or ( ⌃ + ⌘ + ␣ ) open Emoji' + color: #999 + .gt-meta + border-color var(--borderColor)!important + .gt-comments-null + color var(--textColor) + opacity .5 + .gt-header-textarea + color var(--textColor) + background rgba(180,180,180,0.1)!important + .gt-btn + border-color $accentColor!important + background-color $accentColor!important + .gt-btn-preview + background-color rgba(255,255,255,0)!important + color $accentColor!important + a + color $accentColor!important + .gt-svg svg + fill $accentColor!important + .gt-comment-content,.gt-comment-admin .gt-comment-content + background-color rgba(150,150,150,0.1)!important + &:hover + box-shadow 0 0 25px rgba(150,150,150,.5)!important + .gt-comment-body + color var(--textColor)!important + + +// qq徽章 +.qq + position: relative; +.qq::after + content: "可撩"; + background: $accentColor; + color:#fff; + padding: 0 5px; + border-radius: 10px; + font-size:12px; + position: absolute; + top: -4px; + right: -35px; + transform:scale(0.85); + +// demo模块图标颜色 +body .vuepress-plugin-demo-block__wrapper + &,.vuepress-plugin-demo-block__display + border-color rgba(160,160,160,.3) + .vuepress-plugin-demo-block__footer:hover + .vuepress-plugin-demo-block__expand::before + border-top-color: $accentColor !important; + border-bottom-color: $accentColor !important; + svg + fill: $accentColor !important; + + +// 全文搜索框 +.suggestions + overflow: auto + max-height: calc(100vh - 6rem) + @media (max-width: 719px) { + width: 90vw; + min-width: 90vw!important; + margin-right: -20px; + } + .highlight + color: $accentColor + font-weight: bold diff --git a/docs/.vuepress/styles/palette.styl b/docs/.vuepress/styles/palette.styl new file mode 100644 index 0000000..d98e697 --- /dev/null +++ b/docs/.vuepress/styles/palette.styl @@ -0,0 +1,62 @@ + +// 原主题变量已弃用,以下是vdoing使用的变量,你可以在这个文件内修改它们。 + +//***vdoing主题-变量***// + +// // 颜色 + +// $bannerTextColor = #fff // 首页banner区(博客标题)文本颜色 +// $accentColor = #11A8CD +// $arrowBgColor = #ccc +// $badgeTipColor = #42b983 +// $badgeWarningColor = darken(#ffe564, 35%) +// $badgeErrorColor = #DA5961 + +// // 布局 +// $navbarHeight = 3.6rem +// $sidebarWidth = 18rem +// $contentWidth = 860px +// $homePageWidth = 1100px +// $rightMenuWidth = 230px // 右侧菜单 + +// // 代码块 +// $lineNumbersWrapperWidth = 2.5rem + +// 浅色模式 +.theme-mode-light + --bodyBg: rgba(255,255,255,1) + --mainBg: rgba(255,255,255,1) + --sidebarBg: rgba(255,255,255,.8) + --blurBg: rgba(255,255,255,.9) + --textColor: #004050 + --textLightenColor: #0085AD + --borderColor: rgba(0,0,0,.15) + --codeBg: #f6f6f6 + --codeColor: #525252 + codeThemeLight() + +// 深色模式 +.theme-mode-dark + --bodyBg: rgba(30,30,34,1) + --mainBg: rgba(30,30,34,1) + --sidebarBg: rgba(30,30,34,.8) + --blurBg: rgba(30,30,34,.8) + --textColor: rgb(140,140,150) + --textLightenColor: #0085AD + --borderColor: #2C2C3A + --codeBg: #252526 + --codeColor: #fff + codeThemeDark() + +// 阅读模式 +.theme-mode-read + --bodyBg: rgba(245,245,213,1) + --mainBg: rgba(245,245,213,1) + --sidebarBg: rgba(245,245,213,.8) + --blurBg: rgba(245,245,213,.9) + --textColor: #004050 + --textLightenColor: #0085AD + --borderColor: rgba(0,0,0,.15) + --codeBg: #282c34 + --codeColor: #fff + codeThemeDark() diff --git a/docs/10.文档/10.快速开始/10.介绍.md b/docs/10.文档/10.快速开始/10.介绍.md new file mode 100644 index 0000000..8248510 --- /dev/null +++ b/docs/10.文档/10.快速开始/10.介绍.md @@ -0,0 +1,28 @@ +--- +title: 介绍 +date: 2023-05-28 09:51:38 +permalink: /pages/base +article: false +--- + +::: tip 温馨提示 +本文档并非是官方文档,而是本人自己经常使用 Color UI,但是又找不到一个满意的文档,不如自己搭建一个文档,自己使用方便的同时也方便大家使用 +::: + +## 基本介绍 + +Color UI 我想大家都知晓吧,我就不过多阐述了,是 **文晓港** 大佬开发的一款适应于H5、微信小程序、安卓、ios、支付宝的高颜值,高度自定义的 Css 组件库.,属于出道即巅峰的史诗级大作,众所周知,万物皆可 Color UI,很多人用 Color UI 做了不少精美的项目,我也一样,在此再次感谢作者。 + +[ColorUI Github地址](https://github.com/weilanwl/ColorUI) + +[ColorUI 插件市场](https://ext.dcloud.net.cn/plugin?id=239) + +## 文档说明 + +文档左侧目录,基础元素、交互组件、插件扩展分别对应,Color UI 底部对应的三个大模块,而三个模块下二级目录,也分别对应三个页面里的模块,点击目录右侧会跳转到对应的页面。 + +每一个页面,会分别将对应的代码块展示出来,部分对应的页面最下方点击**点此查看页面原代码**即可查看对应页面的完整代码。 + +### 视图/目录 切换 + +点击h5预览模板左上角的切换视图,可以切换目录/视图 diff --git a/docs/10.文档/10.快速开始/20.快速使用.md b/docs/10.文档/10.快速开始/20.快速使用.md new file mode 100644 index 0000000..4cf8b3c --- /dev/null +++ b/docs/10.文档/10.快速开始/20.快速使用.md @@ -0,0 +1,179 @@ +--- +title: 快速使用 +date: 2023-05-28 10:28:38 +permalink: /pages/baseStart +article: false +--- + + + +## 素材 + +ColorUI在语雀有个群友共同在维护的知识库,里面有一些群友改的模板和UI素材供开发使用哦! [语雀-ColorUI群资源](https://www.yuque.com/colorui) + +## 前言 + +ColorUI是一个css库!!!在你引入样式后可以根据class来调用组件,一些含有交互的操作我也有简单写,可以为你开发提供一些思路。 + +## 交流 + +微信群:加入微信群请先添加开发者微信,备注UniApp插件市场。QQ群:240787041 或扫描二维码。 + +[![img](https://camo.githubusercontent.com/f686814edb071f1cce9f0401a5fd487c4f64b5aa8e981f080b04f255e21199c9/68747470733a2f2f636f732e636f6c6f722d75692e636f6d2f7765622f6b6d346a732e706e67)](https://camo.githubusercontent.com/f686814edb071f1cce9f0401a5fd487c4f64b5aa8e981f080b04f255e21199c9/68747470733a2f2f636f732e636f6c6f722d75692e636f6d2f7765622f6b6d346a732e706e67) + +## 使用UniApp开发 + +### 开始 + +下载源码解压获得`/Colorui-UniApp`文件夹,复制目录下的 `/colorui` 文件夹到你的项目根目录 + +```vue +App.vue` 引入关键Css `main.css` `icon.css + +``` + +### 使用自定义导航栏 + +导航栏作为常用组件有做简单封装,当然你也可以直接复制代码结构自己修改,达到个性化目的。 + +`App.vue` 获得系统信息 + +```js +onLaunch: function() { + uni.getSystemInfo({ + success: function(e) { + // #ifndef MP + Vue.prototype.StatusBar = e.statusBarHeight; + if (e.platform == 'android') { + Vue.prototype.CustomBar = e.statusBarHeight + 50; + } else { + Vue.prototype.CustomBar = e.statusBarHeight + 45; + }; + // #endif + // #ifdef MP-WEIXIN + Vue.prototype.StatusBar = e.statusBarHeight; + let custom = wx.getMenuButtonBoundingClientRect(); + Vue.prototype.Custom = custom; + Vue.prototype.CustomBar = custom.bottom + custom.top - e.statusBarHeight; + // #endif + // #ifdef MP-ALIPAY + Vue.prototype.StatusBar = e.statusBarHeight; + Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight; + // #endif + } + }) +}, +``` + +`pages.json` 配置取消系统导航栏 + +```js +"globalStyle": { + "navigationStyle": "custom" +}, +``` + +复制代码结构可以直接使用,注意全局变量的获取。 + +使用封装,在`main.js` 引入 `cu-custom` 组件。 + +```js +import cuCustom from './colorui/components/cu-custom.vue' +Vue.component('cu-custom',cuCustom) +``` + +`page.vue` 页面可以直接调用了 + +```vue + + 返回 + 导航栏 + +``` + +| 参数 | 作用 | 类型 | 默认值 | +| ------- | ------------ | ------- | ------ | +| bgColor | 背景颜色类名 | String | '' | +| isBack | 是否开启返回 | Boolean | false | +| bgImage | 背景图片路径 | String | '' | + +| slot块 | 作用 | +| -------- | ---------------------------------- | +| backText | 返回时的文字 | +| content | 中间区域 | +| right | 右侧区域(小程序端可使用范围很窄!) | + +## 使用原生小程序开发 + +### 从现有项目开始 + +下载源码解压获得`/demo`,复制目录下的 `/colorui` 文件夹到你的项目根目录 + +``` +App.wxss` 引入关键Css `main.wxss` `icon.wxss +@import "colorui/main.wxss"; +@import "colorui/icon.wxss"; +@import "app.css"; /* 你的项目css */ +.... +``` + +### 从新项目开始 + +下载源码解压获得`/template`,复制`/template`并重命名为你的项目,导入到小程序开发工具既可以开始你的新项目了 + +### 使用自定义导航栏 + +导航栏作为常用组件有做简单封装,当然你也可以直接复制代码结构自己修改,达到个性化目的。 + +`App.js` 获得系统信息 + +``` +onLaunch: function() { + wx.getSystemInfo({ + success: e => { + this.globalData.StatusBar = e.statusBarHeight; + let custom = wx.getMenuButtonBoundingClientRect(); + this.globalData.Custom = custom; + this.globalData.CustomBar = custom.bottom + custom.top - e.statusBarHeight; + } + }) +}, +``` + +`App.json` 配置取消系统导航栏,并全局引入组件 + +``` +"window": { + "navigationStyle": "custom" +}, +"usingComponents": { + "cu-custom":"/colorui/components/cu-custom" +} +``` + +`page.wxml` 页面可以直接调用了 + +``` + + 返回 + 导航栏 + +``` + +| 参数 | 作用 | 类型 | 默认值 | +| -------- | ---------------- | ------- | ------ | +| bgColor | 背景颜色类名 | String | '' | +| isBack | 是否开启返回 | Boolean | false | +| isCustom | 是否开启左侧胶囊 | Boolean | false | +| bgImage | 背景图片路径 | String | '' | + +| slot块 | 作用 | +| -------- | ---------------------------------- | +| backText | 返回时的文字 | +| content | 中间区域 | +| right | 右侧区域(小程序端可使用范围很窄!) | diff --git a/docs/10.文档/20.基础元素/10.布局.md b/docs/10.文档/20.基础元素/10.布局.md new file mode 100644 index 0000000..dcf1876 --- /dev/null +++ b/docs/10.文档/20.基础元素/10.布局.md @@ -0,0 +1,193 @@ +--- +title: 布局 +date: 2023-05-28 10:34:38 +permalink: /pages/basics/layout +article: false +--- + +## Flex布局 +父级容器的 `class` 需要加入 `flex` + +### 固定尺寸 +> css +```css +.basis-xs 所占比例 20% +.basis-sm 所占比例 40% +.basis-sub 所占比例 50% +.basis-lg 所占比例 60% +.basis-xl 所占比例 80% +``` + +> 演示代码 +```vue + + xs(20%) + + sm(40%) + + sub(50%) + lg(60%) + xl(80%) + +``` + +### 比例布局 +> css +```css +.flex-sub 所占比例 1 +.flex-twice 所占比例 2 +.flex-treble 所占比例 3 +``` + +> 演示代码 +```vue + + + 1 + 1 + + + + 1 + 2 + + + + 1 + 2 + 3 + +``` + +### 水平对齐 +父容器的 class 中加入 `justify-start|end|center|between|around` + +> css +```css +.justify-start 对齐方式 从行首开始排列 +.justify-end 对齐方式 从行尾开始排列 +.justify-center 对齐方式 居中排列 +.justify-between 对齐方式 均匀排列每个元素,首个元素放置于起点,末尾元素放置于终点 +.justify-around 对齐方式 均匀排列每个元素,每个元素之间的间隔相等 +``` + +> 演示代码 +```vue + + start + start + + + end + end + + + center + center + + + between + between + + + around + around + +``` + +### 垂直对齐 +父容器的 class 中加入 `align-start|end|center` +> css +```css +.align-start 对齐方式 元素位于容器的开头,弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。 +.align-end 对齐方式 元素位于容器的结尾,弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。 +.align-center 对齐方式 元素位于容器的中心,弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。 +``` + +> 演示代码 +```vue + + ColorUi + start + + + ColorUi + end + + + ColorUi + center + +``` + +## Grid布局 + +### 等分列 +class 加入 `grid col-1|2|3|...` + +> 演示代码 +```vue + + {{indexs+1}} + +``` + +### 等高 +在 class 中加入 `grid col-4|5|... grid-square` + +```vue + + + + + +``` + +## 辅助布局 + +### 浮动 +在 class 加入 `fl|fr`,在父容器 class 加入 `cf` + +> 演示代码 +```vue + + ColorUi fl + ColorUi fr + +``` + +### 内外边距 +`size=xs|sm|默认|lg|xl`,属性后面没有跟上 size 就是默认 + +| 属性 | 值 | +| ---- | :--- | +| xs | `10upx` | +| sm | `20upx` | +| 默认 | `30upx` | +| lg | `40upx` | +| xl | `50upx` | + +| 内容 | css 属性 | +| ---- | :--- | +| 外边距 | `margin-{size}` | +| 内边距  | `padding-{size}` | +| 水平方向外边距 | `margin-lr-{size}` | +| 水平方向内边距 | `padding-lr-{size}` | +| 垂直方向外边距 | `margin-tb-{size}` | +| 垂直方向内边距 | `padding-tb-{size}` | +| 上外边距 | `margin-top-{size}` | +| 上内边距 | `padding-top-{size}` | +| 右外边距 | `margin-right-{size}` | +| 右内边距 | `padding-right-{size}` | +| 下外边距 | `margin-bottom-{size}` | +| 下内边距 | `padding-bottom-{size}` | +| 左外边距 | `margin-left-{size}` | +| 左内边距 | `padding-left-{size}` | \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/20.背景.md b/docs/10.文档/20.基础元素/20.背景.md new file mode 100644 index 0000000..69eea21 --- /dev/null +++ b/docs/10.文档/20.基础元素/20.背景.md @@ -0,0 +1,102 @@ +--- +title: 背景 +date: 2023-05-28 10:55:38 +permalink: /pages/basics/background +article: false +--- + +## 深色背景 +在 class 中加入 `bg-Red|Orange|...` + +```css +.bg-red /* 嫣红 #e54d42 */ +.bg-orange /* 桔橙 #f37b1d */ +.bg-yellow /* 明黄 #fbbd08 */ +.bg-olive /* 橄榄 #8dc63f */ +.bg-green /* 森绿 #39b54a */ +.bg-cyan /* 天青 #1cbbb4 */ +.bg-blue /* 海蓝 #0081ff */ +.bg-purple /* 姹紫 #6739b6 */ +.bg-mauve /* 木槿 #9c26b0 */ +.bg-pink /* 桃粉 #e03997 */ +.bg-brown /* 棕褐 #a5673f */ +.bg-grey /* 玄灰 #8799a3 */ +.bg-gray /* 草灰 #aaaaaa */ +.bg-black /* 墨黑 #333333 */ +.bg-white /* 雅白 #ffffff */ +``` + +## 浅色背景 +在 class 中加入 `bg-Red|Orange|...` +在 class 中再加入 `light` + +```css +.light .bg-red /* 嫣红 #e54d42 */ +.light .bg-orange /* 桔橙 #f37b1d */ +.light .bg-yellow /* 明黄 #fbbd08 */ +.light .bg-olive /* 橄榄 #8dc63f */ +.light .bg-green /* 森绿 #39b54a */ +.light .bg-cyan /* 天青 #1cbbb4 */ +.light .bg-blue /* 海蓝 #0081ff */ +.light .bg-purple /* 姹紫 #6739b6 */ +.light .bg-mauve /* 木槿 #9c26b0 */ +.light .bg-pink /* 桃粉 #e03997 */ +.light .bg-brown /* 棕褐 #a5673f */ +.light .bg-grey /* 玄灰 #8799a3 */ +``` + +## 渐变背景 +在 class 中加入 `bg-gradual-red|orange|...` + +```css +.bg-gradual-red /* 魅红 #f43f3b - #ec008c */ +.bg-gradual-orange /* 鎏金 #ff9700 - #ed1c24 */ +.bg-gradual-green /* 翠柳 #39b54a - #8dc63f */ +.bg-gradual-blue /* 靛青 #0081ff - #1cbbb4 */ +.bg-gradual-purple /* 惑紫 #9000ff - #5e00ff */ +.bg-gradual-pink /* 霞彩 #ec008c - #6739b6 */ +``` + +## 图片背景 +在 class 中加入 `bg-img bg-mask` + +> css 代码 +```css +.bg-img 把背景图片放大到适合元素容器的尺寸,图片比例不变,但是要注意,超出容器的部分可能会裁掉。 +.bg-mask 在背景图片加一层黑色遮罩 + +.bg-shadeTop 背景图片加一层黑色遮罩上面开始 +.bg-shadeBottom 背景图片加一层黑色遮罩下面开始 +``` + +> 演示代码 +```vue + + + + 钢铁之翼 + + + Only the guilty need fear me. + + + +``` + +## 透明背景(文字层) + +在 class 中加入 `bg-shadeBottom|shadeTop` + +> 演示代码 +```vue + + + 上面开始 + + + + + 下面开始 + + +``` \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/30.文本.md b/docs/10.文档/20.基础元素/30.文本.md new file mode 100644 index 0000000..2102ac1 --- /dev/null +++ b/docs/10.文档/20.基础元素/30.文本.md @@ -0,0 +1,120 @@ +--- +title: 文本 +date: 2023-05-28 14:05:38 +permalink: /pages/basics/text +article: false +--- + +## 文字大小 +```css +.text-xsl 文字大小 60px 用于图标、数字等特大显示 +.text-sl 文字大小 40px 用于图标、数字等较大显示 +.text-xxl 文字大小 22px 用于金额数字等信息 +.text-xl 文字大小 18px 页面大标题,用于结果页等单一信息页 +.text-lg 文字大小 16px 页面小标题,首要层级显示内容 +.text-df 文字大小 14px 页面默认字号,用于摘要或阅读文本 +.text-sm 文字大小 12px 页面辅助信息,次级内容等 +.text-xs 文字大小 10px 说明文本,标签文字等关注度低的文字 +``` + +## 文字颜色 +```css +.text-red /* 嫣红 #e54d42 */ +.text-orange /* 桔橙 #f37b1d */ +.text-yellow /* 明黄 #fbbd08 */ +.text-olive /* 橄榄 #8dc63f */ +.text-green /* 森绿 #39b54a */ +.text-cyan /* 天青 #1cbbb4 */ +.text-blue /* 海蓝 #0081ff */ +.text-purple /* 姹紫 #6739b6 */ +.text-mauve /* 木槿 #9c26b0 */ +.text-pink /* 桃粉 #e03997 */ +.text-brown /* 棕褐 #a5673f */ +.text-grey /* 玄灰 #8799a3 */ +.text-gray /* 草灰 #aaaaaa */ +.text-black /* 墨黑 #333333 */ +.text-white /* 雅白 #ffffff */ +``` + +## 文字阴影 +```css +.text-shadow { + /* h-shadow 水平阴影的位置 v-shadow 垂直阴影的位置 blur 模糊的距离 color 阴影的颜色; */ + text-shadow: 3px 3px 4px rgba(204, 69, 59, 0.2); +} +``` + +## 文字截断 +> css 代码 +```css +.text-cut 定义文字容器宽度,超出截断 +``` + +> 演示代码 +```vue + +``` + +## 文字对齐 +> css 代码 +```css +.text-left 左对齐 +.text-center 居中对齐 +.text-right 右对齐 +``` + +> 演示代码 +```vue + +``` + +## 特殊文字 +> css 代码 +```css +.text-price 价格文本,利用伪元素添加"¥"符号 +.text-Abc 英文单词首字母大写 +.text-ABC 全部字母大写 +.text-abc 全部字母小写 +``` + +> 演示代码 +```vue + +``` \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/40.图标.md b/docs/10.文档/20.基础元素/40.图标.md new file mode 100644 index 0000000..54df91b --- /dev/null +++ b/docs/10.文档/20.基础元素/40.图标.md @@ -0,0 +1,29 @@ +--- +title: 图标 +date: 2023-05-28 15:16:38 +permalink: /pages/basics/icon +article: false +--- + +::: tip 温馨提示 +点击右侧图标页面,对应的图标,即可复制类名:`cuIcon-图标名称` +::: + + + +## 引入样式 + +编辑 `App.vue`文件在` +``` + +## 使用语法 + +```html +<标签 class="cuIcon-图标名称"> +``` \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/50.按钮.md b/docs/10.文档/20.基础元素/50.按钮.md new file mode 100644 index 0000000..8dba525 --- /dev/null +++ b/docs/10.文档/20.基础元素/50.按钮.md @@ -0,0 +1,100 @@ +--- +title: 按钮 +date: 2023-05-28 15:20:38 +permalink: /pages/basics/button +article: false +--- + +## 按钮形状 +> css 代码 +```css +.cu-btn 默认   +.cu-btn round 圆角 +.cu-btn cuIcon 图标按钮 +``` + +> 演示代码 +```vue + + + + +``` + +## 按钮尺寸 + +> css 代码 +```css +.cu-btn sm 小尺寸 +.cu-btn 默认 +.cu-btn lg 大尺寸 +``` + +> 演示代码 +```vue + + + +``` + +## 按钮颜色 + +> css 代码 +```css +.bg-red 背景颜色 | .bg-... +.shadow 阴影 +``` + +> 演示代码 +```vue + +``` + +## 镂空按钮 +`.bg-` 换成 `.line-` + +```css +.lines-red|... 边框深(大) +.line-red|... 边框浅(小) +``` + +## 块状按钮 + +> css 代码 +```css +.cu-btn lg +``` + +> 演示代码 +```vue + + +``` + +## 无效状态 + +加上 `disabled` 属性即可 + +> 演示代码 +```vue + + +``` + +## 按钮加图标 +`button` 标签里加入**图标+文字**即可,需要加载状态,加上属性 `loading` + +> 演示代码 +```vue + + + +``` \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/60.标签.md b/docs/10.文档/20.基础元素/60.标签.md new file mode 100644 index 0000000..2ae9fdc --- /dev/null +++ b/docs/10.文档/20.基础元素/60.标签.md @@ -0,0 +1,14 @@ +--- +title: 标签 +date: 2023-05-28 15:20:38 +permalink: /pages/basics/tag +article: false +--- + +## 标签 + +::: details 点此查看页面源代码 +页面位置:`/pages/basics/tag` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/70.头像.md b/docs/10.文档/20.基础元素/70.头像.md new file mode 100644 index 0000000..d3e705b --- /dev/null +++ b/docs/10.文档/20.基础元素/70.头像.md @@ -0,0 +1,14 @@ +--- +title: 头像 +date: 2023-05-28 16:15:38 +permalink: /pages/basics/avatar +article: false +--- + +## 头像 + +::: details 点此查看页面源代码 +页面位置:`/pages/basics/avatar` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/80.进度条.md b/docs/10.文档/20.基础元素/80.进度条.md new file mode 100644 index 0000000..c0a319f --- /dev/null +++ b/docs/10.文档/20.基础元素/80.进度条.md @@ -0,0 +1,14 @@ +--- +title: 进度条 +date: 2023-05-28 16:16:38 +permalink: /pages/basics/progress +article: false +--- + +## 进度条 + +::: details 点此查看页面源代码 +页面位置:`/pages/basics/progress` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/90.边框阴影.md b/docs/10.文档/20.基础元素/90.边框阴影.md new file mode 100644 index 0000000..864acd7 --- /dev/null +++ b/docs/10.文档/20.基础元素/90.边框阴影.md @@ -0,0 +1,14 @@ +--- +title: 边框阴影 +date: 2023-05-28 15:20:38 +permalink: /pages/basics/shadow +article: false +--- + +## 边框阴影 + +::: details 点此查看页面源代码 +页面位置:`/pages/basics/shadow` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/20.基础元素/91.加载.md b/docs/10.文档/20.基础元素/91.加载.md new file mode 100644 index 0000000..f4e9bb1 --- /dev/null +++ b/docs/10.文档/20.基础元素/91.加载.md @@ -0,0 +1,14 @@ +--- +title: 加载 +date: 2023-05-28 15:20:38 +permalink: /pages/basics/loading +article: false +--- + +## 加载 + +::: details 点此查看页面源代码 +页面位置:`/pages/basics/loading` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/10.操作条.md b/docs/10.文档/30.交互组件/10.操作条.md new file mode 100644 index 0000000..cfc78a2 --- /dev/null +++ b/docs/10.文档/30.交互组件/10.操作条.md @@ -0,0 +1,14 @@ +--- +title: 操作条 +date: 2023-05-28 16:17:38 +permalink: /pages/component/bar +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/bar` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/20.导航栏.md b/docs/10.文档/30.交互组件/20.导航栏.md new file mode 100644 index 0000000..068a15c --- /dev/null +++ b/docs/10.文档/30.交互组件/20.导航栏.md @@ -0,0 +1,14 @@ +--- +title: 导航栏 +date: 2023-05-28 16:17:38 +permalink: /pages/component/nav +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/nav` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/30.列表.md b/docs/10.文档/30.交互组件/30.列表.md new file mode 100644 index 0000000..a2193fe --- /dev/null +++ b/docs/10.文档/30.交互组件/30.列表.md @@ -0,0 +1,14 @@ +--- +title: 列表 +date: 2023-05-28 16:17:38 +permalink: /pages/component/list +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/list` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/40.卡片.md b/docs/10.文档/30.交互组件/40.卡片.md new file mode 100644 index 0000000..140e8fa --- /dev/null +++ b/docs/10.文档/30.交互组件/40.卡片.md @@ -0,0 +1,14 @@ +--- +title: 卡片 +date: 2023-05-28 16:17:38 +permalink: /pages/component/card +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/card` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/50.表单.md b/docs/10.文档/30.交互组件/50.表单.md new file mode 100644 index 0000000..2fa6ba3 --- /dev/null +++ b/docs/10.文档/30.交互组件/50.表单.md @@ -0,0 +1,14 @@ +--- +title: 表单 +date: 2023-05-28 16:17:38 +permalink: /pages/component/form +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/form` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/60.时间轴.md b/docs/10.文档/30.交互组件/60.时间轴.md new file mode 100644 index 0000000..8ab2534 --- /dev/null +++ b/docs/10.文档/30.交互组件/60.时间轴.md @@ -0,0 +1,14 @@ +--- +title: 时间轴 +date: 2023-05-28 16:17:38 +permalink: /pages/component/timeline +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/timeline` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/70.聊天.md b/docs/10.文档/30.交互组件/70.聊天.md new file mode 100644 index 0000000..bc841f2 --- /dev/null +++ b/docs/10.文档/30.交互组件/70.聊天.md @@ -0,0 +1,14 @@ +--- +title: 聊天 +date: 2023-05-28 16:17:38 +permalink: /pages/component/chat +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/chat` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/80.轮播.md b/docs/10.文档/30.交互组件/80.轮播.md new file mode 100644 index 0000000..68a2454 --- /dev/null +++ b/docs/10.文档/30.交互组件/80.轮播.md @@ -0,0 +1,14 @@ +--- +title: 轮播 +date: 2023-05-28 16:17:38 +permalink: /pages/component/swiper +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/swiper` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/90.模态框.md b/docs/10.文档/30.交互组件/90.模态框.md new file mode 100644 index 0000000..4603788 --- /dev/null +++ b/docs/10.文档/30.交互组件/90.模态框.md @@ -0,0 +1,14 @@ +--- +title: 模态框 +date: 2023-05-28 16:17:38 +permalink: /pages/component/modal +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/modal` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/30.交互组件/91.步骤条.md b/docs/10.文档/30.交互组件/91.步骤条.md new file mode 100644 index 0000000..a1e64ab --- /dev/null +++ b/docs/10.文档/30.交互组件/91.步骤条.md @@ -0,0 +1,14 @@ +--- +title: 步骤条 +date: 2023-05-28 16:17:38 +permalink: /pages/component/steps +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/component/steps` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/40.插件扩展/10.索引列表.md b/docs/10.文档/40.插件扩展/10.索引列表.md new file mode 100644 index 0000000..0ff8c74 --- /dev/null +++ b/docs/10.文档/40.插件扩展/10.索引列表.md @@ -0,0 +1,14 @@ +--- +title: 索引动画 +date: 2023-05-28 16:17:38 +permalink: /pages/plugin/indexes +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/plugin/indexes` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/40.插件扩展/20.微动画.md b/docs/10.文档/40.插件扩展/20.微动画.md new file mode 100644 index 0000000..901d4aa --- /dev/null +++ b/docs/10.文档/40.插件扩展/20.微动画.md @@ -0,0 +1,14 @@ +--- +title: 微动画 +date: 2023-05-28 16:17:38 +permalink: /pages/plugin/animation +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/plugin/animation` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/40.插件扩展/30.全屏抽屉.md b/docs/10.文档/40.插件扩展/30.全屏抽屉.md new file mode 100644 index 0000000..5422021 --- /dev/null +++ b/docs/10.文档/40.插件扩展/30.全屏抽屉.md @@ -0,0 +1,14 @@ +--- +title: 全屏抽屉 +date: 2023-05-28 16:17:38 +permalink: /pages/plugin/drawer +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/plugin/drawer` +```vue +``` +::: \ No newline at end of file diff --git a/docs/10.文档/40.插件扩展/40.垂直导航.md b/docs/10.文档/40.插件扩展/40.垂直导航.md new file mode 100644 index 0000000..b0be1f6 --- /dev/null +++ b/docs/10.文档/40.插件扩展/40.垂直导航.md @@ -0,0 +1,14 @@ +--- +title: 垂直导航 +date: 2023-05-28 16:17:38 +permalink: /pages/plugin/verticalnav +article: false +--- + +## 操作条 + +::: details 点此查看页面源代码 +页面位置:`/pages/plugin/verticalnav` +```vue +``` +::: \ No newline at end of file diff --git a/docs/@pages/archivesPage.md b/docs/@pages/archivesPage.md new file mode 100644 index 0000000..c021f6b --- /dev/null +++ b/docs/@pages/archivesPage.md @@ -0,0 +1,6 @@ +--- +archivesPage: true +title: 归档 +permalink: /archives/ +article: false +--- \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..d7796de --- /dev/null +++ b/docs/index.md @@ -0,0 +1,8 @@ +--- +home: true +heroImage: /img/colorui-logo.png +heroText: ColorUI 使用文档 +tagline: ColorUI 使用文档 +actionText: 快速开始 → +actionLink: /pages/base/ +bannerBg: none # auto => 网格纹背景(有bodyBgImg时无背景),默认 | none => 无 | '大图地址' | background: 自定义背景样式 提示:可以到palette.style修改背景颜色$bannerTextColor变量 \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..c7c1a75 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "miadmindoc", + "version": "1.0.0", + "description": "MiAdmin document", + "license": "MIT", + "scripts": { + "dev": "vuepress dev docs", + "build": "vuepress build docs", + "deploy": "bash deploy.sh", + "updateTheme": "yarn remove vuepress-theme-vdoing && rm -rf node_modules && yarn && yarn add vuepress-theme-vdoing -D", + "editFm": "node utils/editFrontmatter.js" + }, + "dependencies": {}, + "devDependencies": { + "dayjs": "^1.9.7", + "inquirer": "^7.1.0", + "json2yaml": "^1.1.0", + "vuepress": "1.9.2", + "vuepress-plugin-baidu-tongji": "^1.0.1", + "vuepress-plugin-demo-block": "^0.7.2", + "vuepress-plugin-fulltext-search": "^2.2.1", + "vuepress-plugin-one-click-copy": "^1.0.2", + "vuepress-plugin-thirdparty-search": "^1.0.2", + "vuepress-plugin-zooming": "^1.1.7", + "vuepress-theme-vdoing": "^1.9.5", + "yamljs": "^0.3.0" + } +} \ No newline at end of file diff --git a/utils/config.yml b/utils/config.yml new file mode 100644 index 0000000..702ef35 --- /dev/null +++ b/utils/config.yml @@ -0,0 +1,14 @@ +# 批量添加和修改、删除front matter配置文件 + +# 需要批量处理的路径,docs文件夹内的文件夹 (数组。映射路径:docs/arr[0]/arr[1] ... ) +path: + - docs # 第一个成员必须是docs + +# 要删除的字段 (数组) +delete: + # - test + # - tags + +# 要添加、修改front matter的数据 (front matter中没有的数据则添加,已有的数据则覆盖) +data: + article: false \ No newline at end of file diff --git a/utils/editFrontmatter.js b/utils/editFrontmatter.js new file mode 100644 index 0000000..8c223f4 --- /dev/null +++ b/utils/editFrontmatter.js @@ -0,0 +1,92 @@ +/** + * 批量添加和修改front matter ,需要配置 ./config.yml 文件。 + */ +const fs = require('fs'); // 文件模块 +const path = require('path'); // 路径模块 +const matter = require('gray-matter'); // front matter解析器 https://github.com/jonschlinkert/gray-matter +const jsonToYaml = require('json2yaml') +const yamlToJs = require('yamljs') +const inquirer = require('inquirer') // 命令行操作 +const chalk = require('chalk') // 命令行打印美化 +const readFileList = require('./modules/readFileList'); +const { type, repairDate} = require('./modules/fn'); +const log = console.log + +const configPath = path.join(__dirname, 'config.yml') // 配置文件的路径 + +main(); + +/** + * 主体函数 + */ +async function main() { + + const promptList = [{ + type: "confirm", + message: chalk.yellow('批量操作frontmatter有修改数据的风险,确定要继续吗?'), + name: "edit", + }]; + let edit = true; + + await inquirer.prompt(promptList).then(answers => { + edit = answers.edit + }) + + if(!edit) { // 退出操作 + return + } + + const config = yamlToJs.load(configPath) // 解析配置文件的数据转为js对象 + + if (type(config.path) !== 'array') { + log(chalk.red('路径配置有误,path字段应该是一个数组')) + return + } + + if (config.path[0] !== 'docs') { + log(chalk.red("路径配置有误,path数组的第一个成员必须是'docs'")) + return + } + + const filePath = path.join(__dirname, '..', ...config.path); // 要批量修改的文件路径 + const files = readFileList(filePath); // 读取所有md文件数据 + + files.forEach(file => { + let dataStr = fs.readFileSync(file.filePath, 'utf8');// 读取每个md文件的内容 + const fileMatterObj = matter(dataStr) // 解析md文件的front Matter。 fileMatterObj => {content:'剔除frontmatter后的文件内容字符串', data:{}, ...} + let matterData = fileMatterObj.data; // 得到md文件的front Matter + + let mark = false + // 删除操作 + if (config.delete) { + if( type(config.delete) !== 'array' ) { + log(chalk.yellow('未能完成删除操作,delete字段的值应该是一个数组!')) + } else { + config.delete.forEach(item => { + if (matterData[item]) { + delete matterData[item] + mark = true + } + }) + + } + } + + // 添加、修改操作 + if (type(config.data) === 'object') { + Object.assign(matterData, config.data) // 将配置数据合并到front Matter对象 + mark = true + } + + // 有操作时才继续 + if (mark) { + if(matterData.date && type(matterData.date) === 'date') { + matterData.date = repairDate(matterData.date) // 修复时间格式 + } + const newData = jsonToYaml.stringify(matterData).replace(/\n\s{2}/g,"\n").replace(/"/g,"") + '---\r\n' + fileMatterObj.content; + fs.writeFileSync(file.filePath, newData); // 写入 + log(chalk.green(`update frontmatter:${file.filePath} `)) + } + + }) +} diff --git a/utils/modules/fn.js b/utils/modules/fn.js new file mode 100644 index 0000000..48cbbd1 --- /dev/null +++ b/utils/modules/fn.js @@ -0,0 +1,21 @@ +// 类型判断 +exports.type = function (o){ + var s = Object.prototype.toString.call(o) + return s.match(/\[object (.*?)\]/)[1].toLowerCase() +} + + // 修复date时区格式的问题 + exports.repairDate = function (date) { + date = new Date(date); + return `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; +} + +// 日期的格式 +exports.dateFormat = function (date) { + return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}` +} + +// 小于10补0 +function zero(d){ + return d.toString().padStart(2,'0') +} \ No newline at end of file diff --git a/utils/modules/readFileList.js b/utils/modules/readFileList.js new file mode 100644 index 0000000..8eb97c6 --- /dev/null +++ b/utils/modules/readFileList.js @@ -0,0 +1,43 @@ +/** + * 读取所有md文件数据 + */ +const fs = require('fs'); // 文件模块 +const path = require('path'); // 路径模块 +const docsRoot = path.join(__dirname, '..', '..', 'docs'); // docs文件路径 + +function readFileList(dir = docsRoot, filesList = []) { + const files = fs.readdirSync(dir); + files.forEach( (item, index) => { + let filePath = path.join(dir, item); + const stat = fs.statSync(filePath); + if (stat.isDirectory() && item !== '.vuepress') { + readFileList(path.join(dir, item), filesList); //递归读取文件 + } else { + if(path.basename(dir) !== 'docs'){ // 过滤docs目录级下的文件 + + const fileNameArr = path.basename(filePath).split('.') + let name = null, type = null; + if (fileNameArr.length === 2) { // 没有序号的文件 + name = fileNameArr[0] + type = fileNameArr[1] + } else if (fileNameArr.length === 3) { // 有序号的文件 + name = fileNameArr[1] + type = fileNameArr[2] + } else { // 超过两个‘.’的 + log(chalk.yellow(`warning: 该文件 "${filePath}" 没有按照约定命名,将忽略生成相应数据。`)) + return + } + if(type === 'md'){ // 过滤非md文件 + filesList.push({ + name, + filePath + }); + } + + } + } + }); + return filesList; +} + +module.exports = readFileList; \ No newline at end of file diff --git a/vdoing/LICENSE b/vdoing/LICENSE new file mode 100644 index 0000000..16d6732 --- /dev/null +++ b/vdoing/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-present gaoyi(Evan) Xu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vdoing/README.md b/vdoing/README.md new file mode 100644 index 0000000..9d54bed --- /dev/null +++ b/vdoing/README.md @@ -0,0 +1,7 @@ +# vuepress-theme-vdoing + +vuepress-theme-vdoing for vuepress + +一个基于VuePress的 知识管理兼博客 主题。 + +[More](https://github.com/xugaoyi/vuepress-theme-vdoing#readme). diff --git a/vdoing/components/AlgoliaSearchBox.vue b/vdoing/components/AlgoliaSearchBox.vue new file mode 100644 index 0000000..f191f35 --- /dev/null +++ b/vdoing/components/AlgoliaSearchBox.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/vdoing/components/ArchivesPage.vue b/vdoing/components/ArchivesPage.vue new file mode 100644 index 0000000..9ee64be --- /dev/null +++ b/vdoing/components/ArchivesPage.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/vdoing/components/ArticleInfo.vue b/vdoing/components/ArticleInfo.vue new file mode 100644 index 0000000..a7a2a07 --- /dev/null +++ b/vdoing/components/ArticleInfo.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/vdoing/components/BloggerBar.vue b/vdoing/components/BloggerBar.vue new file mode 100644 index 0000000..71ca215 --- /dev/null +++ b/vdoing/components/BloggerBar.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/vdoing/components/BodyBgImg.vue b/vdoing/components/BodyBgImg.vue new file mode 100644 index 0000000..97b6b55 --- /dev/null +++ b/vdoing/components/BodyBgImg.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/vdoing/components/Buttons.vue b/vdoing/components/Buttons.vue new file mode 100644 index 0000000..abf239d --- /dev/null +++ b/vdoing/components/Buttons.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/vdoing/components/Catalogue.vue b/vdoing/components/Catalogue.vue new file mode 100644 index 0000000..39dcb49 --- /dev/null +++ b/vdoing/components/Catalogue.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/vdoing/components/CategoriesBar.vue b/vdoing/components/CategoriesBar.vue new file mode 100644 index 0000000..b5a1bd5 --- /dev/null +++ b/vdoing/components/CategoriesBar.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/vdoing/components/CategoriesPage.vue b/vdoing/components/CategoriesPage.vue new file mode 100644 index 0000000..218a14d --- /dev/null +++ b/vdoing/components/CategoriesPage.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/vdoing/components/DropdownLink.vue b/vdoing/components/DropdownLink.vue new file mode 100644 index 0000000..7e8bd9e --- /dev/null +++ b/vdoing/components/DropdownLink.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/vdoing/components/DropdownTransition.vue b/vdoing/components/DropdownTransition.vue new file mode 100644 index 0000000..8b1b4b1 --- /dev/null +++ b/vdoing/components/DropdownTransition.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/vdoing/components/Footer.vue b/vdoing/components/Footer.vue new file mode 100644 index 0000000..1b5e5c0 --- /dev/null +++ b/vdoing/components/Footer.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/vdoing/components/Home.vue b/vdoing/components/Home.vue new file mode 100644 index 0000000..c22d81b --- /dev/null +++ b/vdoing/components/Home.vue @@ -0,0 +1,545 @@ + + + + + diff --git a/vdoing/components/MainLayout.vue b/vdoing/components/MainLayout.vue new file mode 100644 index 0000000..40dc89b --- /dev/null +++ b/vdoing/components/MainLayout.vue @@ -0,0 +1,64 @@ + + diff --git a/vdoing/components/NavLink.vue b/vdoing/components/NavLink.vue new file mode 100644 index 0000000..93feac7 --- /dev/null +++ b/vdoing/components/NavLink.vue @@ -0,0 +1,54 @@ + + + diff --git a/vdoing/components/NavLinks.vue b/vdoing/components/NavLinks.vue new file mode 100644 index 0000000..7be2ca3 --- /dev/null +++ b/vdoing/components/NavLinks.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/vdoing/components/Navbar.vue b/vdoing/components/Navbar.vue new file mode 100644 index 0000000..2fb8bda --- /dev/null +++ b/vdoing/components/Navbar.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/vdoing/components/Page.vue b/vdoing/components/Page.vue new file mode 100644 index 0000000..5d0865c --- /dev/null +++ b/vdoing/components/Page.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/vdoing/components/PageEdit.vue b/vdoing/components/PageEdit.vue new file mode 100644 index 0000000..c9ac0ef --- /dev/null +++ b/vdoing/components/PageEdit.vue @@ -0,0 +1,181 @@ + + + diff --git a/vdoing/components/PageNav.vue b/vdoing/components/PageNav.vue new file mode 100644 index 0000000..b6b2a86 --- /dev/null +++ b/vdoing/components/PageNav.vue @@ -0,0 +1,237 @@ + + + diff --git a/vdoing/components/Pagination.vue b/vdoing/components/Pagination.vue new file mode 100644 index 0000000..0a65cd0 --- /dev/null +++ b/vdoing/components/Pagination.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/vdoing/components/PostList.vue b/vdoing/components/PostList.vue new file mode 100644 index 0000000..6b32f95 --- /dev/null +++ b/vdoing/components/PostList.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/vdoing/components/RightMenu.vue b/vdoing/components/RightMenu.vue new file mode 100644 index 0000000..1ebbde3 --- /dev/null +++ b/vdoing/components/RightMenu.vue @@ -0,0 +1,262 @@ + + + + + diff --git a/vdoing/components/Sidebar.vue b/vdoing/components/Sidebar.vue new file mode 100644 index 0000000..5e5c9c0 --- /dev/null +++ b/vdoing/components/Sidebar.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/vdoing/components/SidebarButton.vue b/vdoing/components/SidebarButton.vue new file mode 100644 index 0000000..706adf1 --- /dev/null +++ b/vdoing/components/SidebarButton.vue @@ -0,0 +1,64 @@ + + + diff --git a/vdoing/components/SidebarGroup.vue b/vdoing/components/SidebarGroup.vue new file mode 100644 index 0000000..3ef66e2 --- /dev/null +++ b/vdoing/components/SidebarGroup.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/vdoing/components/SidebarLink.vue b/vdoing/components/SidebarLink.vue new file mode 100644 index 0000000..d1e524a --- /dev/null +++ b/vdoing/components/SidebarLink.vue @@ -0,0 +1,130 @@ + + + diff --git a/vdoing/components/SidebarLinks.vue b/vdoing/components/SidebarLinks.vue new file mode 100644 index 0000000..678c94b --- /dev/null +++ b/vdoing/components/SidebarLinks.vue @@ -0,0 +1,93 @@ + + + diff --git a/vdoing/components/TagsBar.vue b/vdoing/components/TagsBar.vue new file mode 100644 index 0000000..9f4072d --- /dev/null +++ b/vdoing/components/TagsBar.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/vdoing/components/TagsPage.vue b/vdoing/components/TagsPage.vue new file mode 100644 index 0000000..fdeab56 --- /dev/null +++ b/vdoing/components/TagsPage.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/vdoing/components/UpdateArticle.vue b/vdoing/components/UpdateArticle.vue new file mode 100644 index 0000000..ae0270f --- /dev/null +++ b/vdoing/components/UpdateArticle.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/vdoing/enhanceApp.js b/vdoing/enhanceApp.js new file mode 100644 index 0000000..d0166a0 --- /dev/null +++ b/vdoing/enhanceApp.js @@ -0,0 +1,47 @@ +// 解决代码选项卡无法加载的问题 +import Vue from 'vue' +import CodeBlock from "@theme/global-components/CodeBlock.vue" +import CodeGroup from "@theme/global-components/CodeGroup.vue" +// Register the Vue global component +Vue.component(CodeBlock) +Vue.component(CodeGroup) + +// 注:此文件在浏览器端运行 +import postsMixin from '@theme/mixins/posts' +export default ({ + Vue, // VuePress 正在使用的 Vue 构造函数 + options, // 附加到根实例的一些选项 + router, // 当前应用的路由实例 + siteData // 站点元数据 +}) => { + // 修复ISO8601时间格式为普通时间格式,以及添加作者信息 + siteData.pages.map(item => { + const { frontmatter: { date, author } } = item + if (typeof date === 'string' && date.charAt(date.length - 1) === 'Z') { + item.frontmatter.date = repairUTCDate(date) + } + if (author) { + item.author = author + } else { + if (siteData.themeConfig.author) { + item.author = siteData.themeConfig.author + } + } + }) + + // 将对文章数据的处理结果混入Vue实例 + Vue.mixin(postsMixin) +} + + +// 修复ISO8601时间格式为普通时间格式 +function repairUTCDate(date) { + if (!(date instanceof Date)) { + date = new Date(date) + } + return `${date.getUTCFullYear()}-${zero(date.getUTCMonth() + 1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; +} +// 小于10补0 +function zero(d) { + return d.toString().padStart(2, '0') +} diff --git a/vdoing/global-components/Badge.vue b/vdoing/global-components/Badge.vue new file mode 100644 index 0000000..c89600d --- /dev/null +++ b/vdoing/global-components/Badge.vue @@ -0,0 +1,44 @@ + + + diff --git a/vdoing/global-components/CodeBlock.vue b/vdoing/global-components/CodeBlock.vue new file mode 100644 index 0000000..50cf503 --- /dev/null +++ b/vdoing/global-components/CodeBlock.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/vdoing/global-components/CodeGroup.vue b/vdoing/global-components/CodeGroup.vue new file mode 100644 index 0000000..871c295 --- /dev/null +++ b/vdoing/global-components/CodeGroup.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/vdoing/index.js b/vdoing/index.js new file mode 100644 index 0000000..d40b863 --- /dev/null +++ b/vdoing/index.js @@ -0,0 +1,292 @@ +const path = require('path') +const setFrontmatter = require('./node_utils/setFrontmatter') +const getSidebarData = require('./node_utils/getSidebarData') +const { createPage, deletePage } = require('./node_utils/handlePage') +const chalk = require('chalk') // 命令行打印美化 +const yaml = require('js-yaml') // yaml转js +const log = console.log + +// md容器名 +const CARD_LIST = 'cardList' +const CARD_IMG_LIST = 'cardImgList' + +// siteConfig base 配置 +let base = '' + + +// Theme API. +module.exports = (options, ctx) => { + const { sourceDir, themeConfig, siteConfig } = ctx + + // base路径 + base = siteConfig.base || '' + + // 自动设置front matter + setFrontmatter(sourceDir, themeConfig) + + // 自动生成结构化侧边栏 + const sidebar = themeConfig.sidebar + if (sidebar === 'structuring' || sidebar && sidebar.mode === 'structuring') { + const collapsable = themeConfig.sidebar.collapsable === false ? false : true + const sidebarData = getSidebarData(sourceDir, collapsable) + if (sidebarData) { + themeConfig.sidebar = sidebarData + log(chalk.blue('tip ') + chalk.green('add sidebar data. 成功生成侧边栏数据。')) + } else { + themeConfig.sidebar = 'auto' + log(chalk.yellow('warning: fail to add sidebar data, switch to "auto". 未能添加侧边栏数据,将切换为“auto”。')) + } + } + + // 分类页 + if (themeConfig.category !== false) { + createPage(sourceDir, 'categoriesPage') + } else { + deletePage(sourceDir, 'categoriesPage') + } + + // 标签页 + if (themeConfig.tag !== false) { + createPage(sourceDir, 'tagsPage') + } else { + deletePage(sourceDir, 'tagsPage') + } + + // 归档页 + if (themeConfig.archive !== false) { + createPage(sourceDir, 'archivesPage') + } else { + deletePage(sourceDir, 'archivesPage') + } + + // resolve algolia + const isAlgoliaSearch = ( + themeConfig.algolia + || Object + .keys(siteConfig.locales && themeConfig.locales || {}) + .some(base => themeConfig.locales[base].algolia) + ) + + const enableSmoothScroll = themeConfig.smoothScroll === true + + return { + alias() { + return { + '@AlgoliaSearchBox': isAlgoliaSearch + ? path.resolve(__dirname, 'components/AlgoliaSearchBox.vue') + : path.resolve(__dirname, 'noopModule.js') + } + }, + + plugins: [ + ['@vuepress/active-header-links', options.activeHeaderLinks], + '@vuepress/search', + '@vuepress/plugin-nprogress', + ['smooth-scroll', enableSmoothScroll], + + ['container', { + type: 'note', + defaultTitle: { + '/': '笔记', + '/en/': 'NOTE' + } + }], + ['container', { + type: 'tip', + defaultTitle: { + '/': '提示', + '/en/': 'TIP' + } + }], + ['container', { + type: 'warning', + defaultTitle: { + '/': '注意', + '/en/': 'WARNING' + } + }], + ['container', { + type: 'danger', + defaultTitle: { + '/': '警告', + '/en/': 'WARNING' + } + }], + ['container', { + type: 'right', + defaultTitle: '' + }], + ['container', { + type: 'theorem', + before: info => `

${info}

`, + after: '
' + }], + ['container', { + type: 'details', + before: info => `
${info ? `${info}` : ''}\n`, + after: () => '
\n', + defaultTitle: { + '/': '点击查看', + '/en/': 'DETAILS' + } + }], + + // 内容居中容器 + ['container', { + type: 'center', + before: info => `
`, + after: () => '
' + }], + + // 卡片列表 + [ + 'container', + { + type: CARD_LIST, + render: (tokens, idx) => { + // tokens 是整个md文件的虚拟dom结构数组 + // idx 是tokens中':::' 所在的索引,而且是当前指定type的':::',分别有开始和结束两次的idx + // if (tokens[idx].nesting === 1) { // 开头的 ':::' 标记 + // } else { // 结束的 ':::' 标记 + // } + // 注意:修改这里面的代码后需要在md文件保存一下才会重新执行渲染 + return renderCardList(tokens, idx, CARD_LIST) + } + }, + ], + + // 图文卡片列表 + [ + 'container', + { + type: CARD_IMG_LIST, + render: (tokens, idx) => { + return renderCardList(tokens, idx, CARD_IMG_LIST) + } + }, + ], + + + ] + } +} + + +// 渲染md容器的卡片列表 +function renderCardList(tokens, idx, type) { + const END_TYPE = `container_${type}_close`, + _tokens$idx = tokens[idx], + nesting = _tokens$idx.nesting, + info = _tokens$idx.info; + + if (nesting === 1) { // 渲染开头的 ':::' 标记 + let yamlStr = ''; + + for (let i = idx; i < tokens.length; i++) { + let _tokens$i = tokens[i], + type = _tokens$i.type, + content = _tokens$i.content, + _info = _tokens$i.info; + if (type === END_TYPE) break; // 遇到结束的 ':::' 时 + if (!content) continue; + if (type === 'fence' && _info === 'yaml') { // 是代码块类型,并且是yaml代码 + yamlStr = content + } + } + + if (yamlStr) { // 正确解析出yaml字符串后 + const dataObj = yaml.safeLoad(yamlStr) // 将yaml字符串解析成js对象 + let dataList = [] + let config = {} + + if (dataObj) { // 正确解析出数据对象 + if (Array.isArray(dataObj)) { + dataList = dataObj + } else { + config = dataObj.config + dataList = dataObj.data + } + } + + if (dataList && dataList.length) { // 有列表数据 + + // 每行显示几个 + let row = Number(info.split(' ').pop()) + if (!row || row > 4 || row < 1) { + row = 3 // 默认 3 + } + + let listDOM = '' + if (type === CARD_LIST) { // 普通卡片列表 + listDOM = getCardListDOM(dataList, row, config) + } else if (type === CARD_IMG_LIST) { // 卡片图片列表 + listDOM = getCardImgListDOM(dataList, row, config) + } + + return `
${listDOM}
` + } + } + } else { // 渲染':::' 结尾 + return '
' + } +} + + +// 将数据解析成DOM结构 - 普通卡片列表 +function getCardListDOM(dataList, row, config) { + const { target = '_blank' } = config + let listDOM = '' + dataList.forEach(item => { + listDOM += ` + <${item.link ? 'a href="' + withBase(item.link) + '" target="' + target + '"' : 'span'} class="card-item ${row ? 'row-' + row : ''}" + style="${item.bgColor ? 'background-color:' + item.bgColor + ';--randomColor:' + item.bgColor + ';' : '--randomColor: var(--bodyBg);'}${item.textColor ? 'color:' + item.textColor + ';' : ''}" + > + ${item.avatar ? '' : ''} +
+

${item.name}

+

${item.desc}

+
+ + ` + }) + return listDOM +} + + +// 将数据解析成DOM结构 - 图文卡片列表 +function getCardImgListDOM(dataList, row, config) { + const { imgHeight = 'auto', objectFit = 'cover', lineClamp = 1, target = '_blank' } = config + + let listDOM = '' + dataList.forEach(item => { + listDOM += ` +
+ +
+ +
+
+

${item.name}

+ ${item.desc ? `

${item.desc}

` : ''} +
+ + ${item.avatar || item.author ? ``: ''} +
+
+ ` + }) + return listDOM +} + +// 添加base路径 +function withBase(path) { + if (!path) return ''; + if (base && path.charAt(0) === '/') { + return base + path.slice(1); + } else { + return path; + } +} diff --git a/vdoing/layouts/404.vue b/vdoing/layouts/404.vue new file mode 100644 index 0000000..c8b7672 --- /dev/null +++ b/vdoing/layouts/404.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/vdoing/layouts/Layout.vue b/vdoing/layouts/Layout.vue new file mode 100644 index 0000000..62dda70 --- /dev/null +++ b/vdoing/layouts/Layout.vue @@ -0,0 +1,382 @@ + + + + + diff --git a/vdoing/mixins/posts.js b/vdoing/mixins/posts.js new file mode 100644 index 0000000..2dec307 --- /dev/null +++ b/vdoing/mixins/posts.js @@ -0,0 +1,21 @@ +import { filterPosts, sortPosts, sortPostsByDate, groupPosts, categoriesAndTags } from '../util/postData' + +export default { + computed: { + $filterPosts () { // 过滤非文章页和首页的文章数据 + return filterPosts(this.$site.pages) + }, + $sortPosts () { // 按置顶和时间排序的文章数据 + return sortPosts(this.$filterPosts) + }, + $sortPostsByDate () { // 仅按时间排序的文章数据 + return sortPostsByDate(this.$filterPosts) + }, + $groupPosts () { // 按分类和标签分组的文章数据 + return groupPosts(this.$sortPosts) + }, + $categoriesAndTags () { // 所有分类和标签数据 + return categoriesAndTags(this.$groupPosts) + } + } +} diff --git a/vdoing/mixins/titleBadge.js b/vdoing/mixins/titleBadge.js new file mode 100644 index 0000000..224f0c0 --- /dev/null +++ b/vdoing/mixins/titleBadge.js @@ -0,0 +1,28 @@ +export default { + data () { + return { + badges: [ + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABGpJREFUSA3tVVtoXFUU3fvOI53UlmCaKIFmwEhsE7QK0ipFEdHEKpXaZGrp15SINsXUWvBDpBgQRKi0+KKoFeJHfZA+ED9KKoIU2gYD9UejTW4rVIzm0VSTziPzuNu1z507dibTTjL4U/DAzLn3nL3X2o91ziX6f9wMFdh6Jvbm9nNSV0msViVO6tN1Rm7NMu2OpeJ9lWBUTDxrJbYTS0hInuwciu9eLHlFxCLCZEk3MegsJmZ5K/JD6t7FkFdEvGUo1g7qJoG3MHImqRIn8/nzY1K9UPKKiJmtnUqHVE3Gbuay6vJE/N2FEmuxFjW2nUuE0yQXRRxLiTUAzs36zhZvOXJPdX850EVnnLZkB8prodQoM5JGj7Xk2mvC7JB8tG04Ef5PiXtG0UtxupRQSfTnBoCy554x18yJHI6I+G5Eru4LHmPJZEQsrvPUbMiA8G/WgMK7w7I+ez7++o2ANfbrjvaOl1tFMs+htG3IrZH9/hDX1Pr8Tc0UvH8tcX29KzAgIGcEkINyW5BF9x891hw6VYqgJHEk0huccS7vh3C6gTiODL+26huuBtbct8eZnqLML8PkxGYpuPZBqtqwkSjgc4mB5gbgig5i+y0UDK35LMxXisn9xQtK+nd26gTIHsHe/oblK/b29fUmN/8Y+9jAQrnBp56m1LcDlDp9irKTExSKduXJVWSqdBMA08pEJnEIOB3FPPMybu/oeV8zFeYN3xx576Q6RH+VmplE4ncQV5v+5rzSoyOU7PuEAg8g803PwBJ0CExno/jcMbN8tONYeOmHiuUNryvm3fRUy4tMPVLdAGkUhNWuggGrJcXPv+ouCjz0MKUHz1J2/E8IC9nqTabcxgaBYM0hPhD5Y65FsbxRQKxCQrDjDctW7PUM3HuZunFyifSAqEfuzCp48Il24luWUWZoyJCaPR82jE0+kFA643wRFVni4RYSq3ohJO2pZ7B5dO4xkDWbEpossJPLSrPjYID8rS2UHTlvyNxqIGsg674XJJ7vnh5L7PNwC4hh2sjCI96mzszOTpxLF0T7l88Yz7lAuK6OnL8gXLOnTvpzSb22YG8W7us3jSebFHeeqnXRG1vt+MoUM84LQIBmMsCTAcOauTh0T0l0neQK7m2bLMt2mGxU3HYssS0J2cdv5wljlPsrIuZLAG/2DOZIXgCYT8uMGZN+e2kSirfxZOPCsC0f24nTZzspnVn9VePS1Z5vubmAGGXG8ZFno9Hel0yfA5ZPhF7Dh972BQJ2qCpgH67lmWtBYbvk6sz02wjky2vXyz0XErP/kFB619js1BtwfOV4OPRqOQBjy3Qbk18vigUPPSD5ceHnwck7W9bhAqZdd7SuG7w4/P2F/GaJh8c7e9qgow+Q7cGBo+98WsLkuktFqiZabtXuQTu/Y5ETbR0v7tNSFnvrmu6pjdoan2KjMu8q/Hmj1EfCO2ZGfEIbIXKUlw8qaX9/b2oeSJmFksSeT/Fn0V3nSypChh4Gjh74ybO9aeZ/AN2dwciu2/MhAAAAAElFTkSuQmCC', + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABH1JREFUSA3tVl1oHFUUPmdmd2ltklqbpJDiNnXFmgbFktho7YMPNiJSSZM0+CAYSkUELVhM6YuwIPpgoOKDqOBDC0XE2CQoNtQXBUFTTcCi+Wlh1V2TQExsUzcltd3M9Tt3ZjZzZ2fT+OJTL8yeM+eee757fmeJbq//KQL8X3DUSFOcfr7cRsRtxNQMWueeVzOkaITIGqQHNg5y8+jNW9ldM7A6nTpAjuolUikAwq7CE3WcM2RRDz+XGVgN3FptU/aUSlvq9Pa3iZ1+sgAqJyyAFqkipd9dqiwHF3P65YycLWc/6sqGrvoEoIp6DOFaX5h6+dnfjkWprwqsPk0dUGq5vySwDImC10KxFHgGL1SWoc92O3eVht09qdXNH11I2SsTsJYqMWzihqGMi+A+Garf3BAuuLI5oGlULyNfyB/HYNujwktOfRrMr5t77NmevqaUopx0grnKAyvVpmwUDB4x6FPXuGvYLTDwWsejwgtgkYKPqRJg8SV6xaiZ3ZTppGneS4yfH5/66fZSDHv+QZci/+h5c5UHtpy67JUqGppM0sh0Nc1dW6/N1W5Yoqat8/TU/VnadmdeW2PLLSyh0cvxBs3KbqTmwYPpxN4do/mzE8nEpvX/UMu2Wbp74zUAK5q6WkHns7V0eWkdPbPzd3rxkTGybadYySumVzhcaJFbs5UrEkQ/+CK8gF5dnh/6ciIZ73gwQ927L1IitoxKLXYP3SjYdOrHHfTZhRRlFyrorafPk20B3HPD1y2G3qKZME5Jcf3t/HUC13/8tSd++vqFveMUTwAUxSUFI1QekR1+bIze3D9MF2aq6cPvG72CgnldWCFqyRw3lwH8ZMerjTD9ElRO7Gv44wNpC90aASqGfVlz/Rx17srQ57/UU26hkhQqUB7dBR71WmzQhHUnblGmVOEw0jhbV1n9OlXUDCIRGaNV5Jp43N516fN7JmnTHdfp7Hgy0luO4aMhtkLL8Bi3bUWYvzh5Mn1dTxrL6QmGuRhGL/TiTTxRoEdTszSaq9GR0NGA3KdkOz3hqSV3MIDhQ5IVX/Ivx3umBti2es2h4eZby7x8br1rkf7Mo90AqC8aQ3sJeNzqFRu+vSANAQe3PL7l0HGOAdwDCeZYvNKeoZp1Qfs6Aipndh86HmFRi0LAnEO47wsqM6cdfjh3jBPUzhZy7nvlUfFsamED1VQt6aISHVymXZ/B2aCtIG8AI8xfobj2d3en1wWVhOeHELKmLQ1s211s88comkv4UCwWyF787mJdYXtNfhKAXVqnKTq8QZvGAGGOfaTo5pGZ/PwbUCr5+DPr/1J92JNHr9aOl/F3iI5+O1nfybsGxoimvZ3ViWSluDITw3P37mypheDIPY0tw7+O/5ApbkYw+zpfaUVu32Pi98+defdUhEpZkRFq0aqyNh9FuL9hpYbEm6iwi0z2REd09ZmyENEbuhjDWzKvZXTqKYaBIr3tt5kuPtQBZFvEUwHt60vfCNu41XsksH9Ij1BMMz1Y0OOunHNShFIP5868g5zeXmuLwL9T4b6Q2+KejgAAAABJRU5ErkJggg==', + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABKFJREFUSA3tVl1oFVcQnrMbrak3QUgkya1akpJYcrUtIqW1JvFBE9LiQ5v6JmJpolbMg32rVrhgoYK0QiMY6i9Y6EMaW5D+xFJaTYItIuK2Kr3+BJNwkxBj05sQY3b3nM6cs2dv9t7NT/vQJw/sndk5M/PNzJkzewGerP+pAmy+ON8lLzUJgA8ZYxYIYZmGYRnctDaWvJJAmTtfP1pvXsBCCPP8QFcCaRkZYACgDZFO4stNIcBCajEOlmmC9XpJ9bAGCaPaPmzPl32dvLSVu3BWCTQs0XQQ6g0DYgwLIoAZbBCdW/i+781o1VVlm/410mw4h06Y7bIPHNyWDyL4FHkX03Q8SrzNhZTZriieckWt7cL6MM85YcLpsi/7O9/iXFT6MswI0DmmpkSaJ0qLxFIm3+i1THHB3zmBH3PYx9CcykcLOeQVVa7QtdxTgQgEleX2AjHYfwA+2ddV77ruGoJUbhGDI09YSNXyMpUt5ylOzxgbUmtOp7NmbNt8v3arjTBfYELmLUV+M+nSawNNAUqpT3ClJWg5I3BLT+cGW/DXNGCa6tx1aakCGEigArTn4TDIPdrXXYKCZNrHLMCOEPvHBlLQ99s9eHB7EB6NTki73CVPQ2F5MSx/uRQixfmq7rK0wYD8w8E905bnPDfwoWs/rfv93NWN/ZfvwsLIU7A09gxECyISeGJkHAau98L97tuw7NXnoPyNF8FcYGLGKsOs0mN3OEyec9esGW/ZEl945dTP34wlR2FZVQWU1q0Cw8Tr7p+hgLLNL0FPxx/Q35mA8aEUrH6nCgwEl0tn7wUiZYJnNRh6DK4UH/k0lfyrsBKdPVv/AriGIQcEDQZ65LBAGe2Rzui9Ybjz7XUppz1/uKBbyVPGkN3ZAeC6hr0x7Nr38N5+EqkoOm17xpoqR9ohQF55ERSvr4Dkr3chNfC3DMzGJlNBElW8w9nsGQvhNGIzDkXzCg8cLK951xHsFBlTJspJNi3ZFIMF2AeDV3q8DNOB+YHi6QTrChDIWDBRi5U5f+ZMfJLu3ccrqxtdxk4SKH336LFxSmkqefwU5T8fhdSdQf9IVKD6aNiwI/hnmcAZ91isYMJIaCUCx9W098+LgruikeTqzqqxKPUwqJyCPJiyemVVZBOijDGjD38Os0jOiSPL1z3SPjXNANbiNPXAdzTfukjjuknNBbyz3nwgTd3AVFqUJ5hpHlq9MveLnWwttUfoygBmvVjuikxND3znrhsELnZk7k+OjIGxeNEkomyLVta0xxn+HZhjBc4YZ/AFjHjz9u3xRZl2BN4aq9nFwWh16IrQ1aHHEd3j1+4/dB9OtH4e29A2H1DyHQRmOSfQZ1Fy7MHBTGB6J/Djq6p3OxyO2cB+4Car7v/o3GXgfAkj23+x9ID1Teoamo/SXcbvSf2PX7Vc8DdCmE1vN9di+32P9/5YR3vLnhCVGUWBjEkr3yh4H8v9CzmsbdhzOKzsJKM90iFdaTMjRPhGVsakRvOaRidljo6H6G7j+ctrJpsP+4COhDIl0La2+FS4+5mlocBaXY5QnGZysIBYoeSsl5qQzrSj/cgNrfuEzlWBfwA+EjrZyWUvpAAAAABJRU5ErkJggg==' + ], + currentBadge: '' + } + }, + created () { + if (this.$themeConfig.titleBadgeIcons) { + this.badges = this.$themeConfig.titleBadgeIcons + } + this.currentBadge = this.getBadge() + }, + watch: { + '$route.path' () { + this.currentBadge = this.getBadge() + } + }, + methods: { + getBadge () { + return this.badges[Math.floor(Math.random() * this.badges.length)] + } + } +} diff --git a/vdoing/node_utils/getSidebarData.js b/vdoing/node_utils/getSidebarData.js new file mode 100644 index 0000000..ab52ffd --- /dev/null +++ b/vdoing/node_utils/getSidebarData.js @@ -0,0 +1,185 @@ +const fs = require('fs'); // 文件模块 +const path = require('path'); // 路径模块 +const chalk = require('chalk') // 命令行打印美化 +const matter = require('gray-matter'); // front matter解析器 +const log = console.log + +let catalogueData = {}; // 目录页数据 + +/** + * 生成侧边栏数据 + * @param {String} sourceDir .md文件所在源目录(一般是docs目录) + * @param {Boolean} collapsable 是否可折叠 + */ +function createSidebarData(sourceDir, collapsable) { + const sidebarData = {}; + const tocs = readTocs(sourceDir); + tocs.forEach(toc => { // toc是每个目录的绝对路径 + + if (toc.substr(-6) === '_posts') { // 碎片化文章 + + // 注释说明:碎片化文章不需要生成结构化侧边栏 2020.05.01 + // const sidebarArr = mapTocToPostSidebar(toc); + // sidebarData[`/${path.basename(toc)}/`] = sidebarArr + + } else { + const sidebarObj = mapTocToSidebar(toc, collapsable); + if (!sidebarObj.sidebar.length) { + log(chalk.yellow(`warning: 该目录 "${toc}" 内部没有任何文件或文件序号出错,将忽略生成对应侧边栏`)) + return; + } + sidebarData[`/${path.basename(toc)}/`] = sidebarObj.sidebar + sidebarData.catalogue = sidebarObj.catalogueData + } + }) + + return sidebarData +} + +module.exports = createSidebarData; + + +/** + * 读取指定目录下的文件绝对路径 + * @param {String} root 指定的目录 +*/ +function readTocs(root) { + const result = []; + const files = fs.readdirSync(root); // 读取目录,返回数组,成员是root底下所有的目录名 (包含文件夹和文件) + files.forEach(name => { + const file = path.resolve(root, name); // 将路径或路径片段的序列解析为绝对路径 + if (fs.statSync(file).isDirectory() && name !== '.vuepress' && name !== '@pages') { // 是否为文件夹目录,并排除.vuepress文件夹 + result.push(file); + } + }) + return result; +} + + +/** + * 将碎片化文章目录(_posts)映射为对应的侧边栏配置数据 + * @param {String} root + */ +function mapTocToPostSidebar(root) { + let postSidebar = [] // 碎片化文章数据 + const files = fs.readdirSync(root); // 读取目录(文件和文件夹),返回数组 + + files.forEach(filename => { + const file = path.resolve(root, filename); // 方法:将路径或路径片段的序列解析为绝对路径 + const stat = fs.statSync(file); // 文件信息 + + const fileNameArr = filename.split('.'); + if (fileNameArr.length > 2) { + log(chalk.yellow(`warning: 该文件 "${file}" 在_posts文件夹中,不应有序号,且文件名中间不应有'.'`)) + return + } + if (stat.isDirectory()) { // 是文件夹目录 + // log(chalk.yellow(`warning: 该目录 "${file}" 内文件无法生成侧边栏,_posts文件夹里面不能有二级目录。`)) + return + } + + let [title, type] = filename.split('.'); + if (type !== 'md') { + log(chalk.yellow(`warning: 该文件 "${file}" 非.md格式文件,不支持该文件类型`)) + return; + } + + const contentStr = fs.readFileSync(file, 'utf8') // 读取md文件内容,返回字符串 + const { data } = matter(contentStr, {}) // 解析出front matter数据 + const { permalink = '', titleTag = '' } = data || {} + if (data.title) { + title = data.title + } + const item = [filename, title, permalink] + if (titleTag) { + item.push(titleTag) + } + postSidebar.push(item); // [<路径>, <标题>, <永久链接>, ] + }) + + return postSidebar +} + + +/** + * 将目录映射为对应的侧边栏配置数据 + * @param {String} root + * @param {Boolean} collapsable + * @param {String} prefix + */ + +function mapTocToSidebar(root, collapsable, prefix = '') { + let sidebar = []; // 结构化文章侧边栏数据 + const files = fs.readdirSync(root); // 读取目录(文件和文件夹),返回数组 + + files.forEach(filename => { + const file = path.resolve(root, filename); // 方法:将路径或路径片段的序列解析为绝对路径 + const stat = fs.statSync(file); // 文件信息 + if (filename === '.DS_Store') { // 过滤.DS_Store文件 + return + } + // let [order, title, type] = filename.split('.'); + + const fileNameArr = filename.split('.') + const isDir = stat.isDirectory() + let order = '', title = '', type = ''; + if (fileNameArr.length === 2) { + order = fileNameArr[0]; + title = fileNameArr[1]; + } else { + const firstDotIndex = filename.indexOf('.'); + const lastDotIndex = filename.lastIndexOf('.'); + order = filename.substring(0, firstDotIndex); + type = filename.substring(lastDotIndex + 1); + if (isDir) { + title = filename.substring(firstDotIndex + 1); + } else { + title = filename.substring(firstDotIndex + 1, lastDotIndex); + } + } + + order = parseInt(order, 10); + if (isNaN(order) || order < 0) { + log(chalk.yellow(`warning: 该文件 "${file}" 序号出错,请填写正确的序号`)) + return; + } + if (sidebar[order]) { // 判断序号是否已经存在 + log(chalk.yellow(`warning: 该文件 "${file}" 的序号在同一级别中重复出现,将会被覆盖`)) + } + if (isDir) { // 是文件夹目录 + sidebar[order] = { + title, + collapsable, // 是否可折叠,默认true + children: mapTocToSidebar(file, collapsable, prefix + filename + '/').sidebar // 子栏路径添加前缀 + } + } else { // 是文件 + if (type !== 'md') { + log(chalk.yellow(`warning: 该文件 "${file}" 非.md格式文件,不支持该文件类型`)) + return; + } + const contentStr = fs.readFileSync(file, 'utf8') // 读取md文件内容,返回字符串 + const { data } = matter(contentStr, {}) // 解析出front matter数据 + const { permalink = '', titleTag = '' } = data || {} + + // 目录页对应的永久链接,用于给面包屑提供链接 + const { pageComponent } = data + if (pageComponent && pageComponent.name === "Catalogue") { + catalogueData[title] = permalink + } + + if (data.title) { + title = data.title + } + const item = [prefix + filename, title, permalink] + if (titleTag) item.push(titleTag) + sidebar[order] = item; // [<路径>, <标题>, <永久链接>, ] + + } + }) + + sidebar = sidebar.filter(item => item !== null && item !== undefined); + return { + sidebar, + catalogueData + }; +} diff --git a/vdoing/node_utils/handlePage.js b/vdoing/node_utils/handlePage.js new file mode 100644 index 0000000..5268653 --- /dev/null +++ b/vdoing/node_utils/handlePage.js @@ -0,0 +1,82 @@ +// 生成或删除页面(分类页、标签页、归档页...) + +const fs = require('fs'); // 文件模块 +const path = require('path'); // 路径模块 +const chalk = require('chalk') // 命令行打印美化 +const { type } = require('./modules/fn'); +const log = console.log + +function createPage (sourceDir, page) { + const dirPath = path.join(sourceDir, '@pages') // 生成的文件夹路径 + + // 文件夹不存在时 + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath) // 创建文件夹 + } + + const pagePath = path.join(dirPath, `${page}.md`) // 生成的文件路径 + + // 文件已经存在时跳出 + if (fs.existsSync(pagePath)) { + return + } + + // 注意:反引号字符串的格式会映射到文件 + let content = '' + if (page.indexOf('categories') > -1) { + content = `--- +categoriesPage: true +title: 分类 +permalink: /categories/ +article: false +---` + } else if (page.indexOf('tags') > -1) { + content = `--- +tagsPage: true +title: 标签 +permalink: /tags/ +article: false +---` + } else if (page.indexOf('archives') > -1) { + content = `--- +archivesPage: true +title: 归档 +permalink: /archives/ +article: false +---` + } + + if (content) { + fs.writeFileSync(pagePath, content) + log(chalk.blue('tip ') + chalk.green(`create page(生成页面): ${pagePath}`)) + } +} + +// 删除页面文件 +function deletePage (sourceDir, page) { + const dirPath = path.join(sourceDir, '@pages') // 文件夹路径 + const pagePath = path.join(dirPath, `${page}.md`) // 文件路径 + + // 文件是否存在 + if (fs.existsSync(pagePath)) { + fs.unlinkSync(pagePath) + log(chalk.blue('tip ') + chalk.green(`delete page(删除页面): ${pagePath}`)) + } + deleteDir(dirPath) +} + +// 删除文件夹 +function deleteDir (dirPath) { + if (fs.existsSync(dirPath)) { + const files = fs.readdirSync(dirPath) + if (type(files) === 'array' && files.length === 0) { + fs.rmdirSync(dirPath) + log(chalk.blue('tip ') + chalk.green(`delete dir(删除目录): ${dirPath}`)) + } + } +} + +module.exports = { + createPage, + deletePage +} diff --git a/vdoing/node_utils/modules/fn.js b/vdoing/node_utils/modules/fn.js new file mode 100644 index 0000000..1528498 --- /dev/null +++ b/vdoing/node_utils/modules/fn.js @@ -0,0 +1,21 @@ +// 类型判断 +exports.type = function (o) { + var s = Object.prototype.toString.call(o) + return s.match(/\[object (.*?)\]/)[1].toLowerCase() +} + +// 修复date时区格式的问题 +exports.repairDate = function (date) { + date = new Date(date); + return `${date.getUTCFullYear()}-${zero(date.getUTCMonth() + 1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; +} + +// 日期的格式 +exports.dateFormat = function (date) { + return `${date.getFullYear()}-${zero(date.getMonth() + 1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}` +} + +// 小于10补0 +function zero (d) { + return d.toString().padStart(2, '0') +} diff --git a/vdoing/node_utils/modules/readFileList.js b/vdoing/node_utils/modules/readFileList.js new file mode 100644 index 0000000..4e8d20d --- /dev/null +++ b/vdoing/node_utils/modules/readFileList.js @@ -0,0 +1,45 @@ +/** + * 读取所有md文件数据 + */ +const fs = require('fs'); // 文件模块 +const path = require('path'); // 路径模块 +const chalk = require('chalk') // 命令行打印美化 +const log = console.log + +function readFileList(dir, filesList = []) { + const files = fs.readdirSync(dir); + files.forEach((item, index) => { + let filePath = path.join(dir, item); + const stat = fs.statSync(filePath); + if (stat.isDirectory() && item !== '.vuepress' && item !== '@pages') { + readFileList(path.join(dir, item), filesList); //递归读取文件 + } else { + if (path.basename(dir) !== 'docs') { // 过滤docs目录级下的文件 + + const filename = path.basename(filePath) + const fileNameArr = filename.split('.') + const firstDotIndex = filename.indexOf('.'); + const lastDotIndex = filename.lastIndexOf('.'); + + let name = null, type = null; + if (fileNameArr.length === 2) { // 没有序号的文件 + name = fileNameArr[0] + type = fileNameArr[1] + } else if (fileNameArr.length >= 3) { // 有序号的文件(或文件名中间有'.') + name = filename.substring(firstDotIndex + 1, lastDotIndex) + type = filename.substring(lastDotIndex + 1) + } + + if (type === 'md') { // 过滤非md文件 + filesList.push({ + name, + filePath + }); + } + } + } + }); + return filesList; +} + +module.exports = readFileList; diff --git a/vdoing/node_utils/setFrontmatter.js b/vdoing/node_utils/setFrontmatter.js new file mode 100644 index 0000000..e3a5716 --- /dev/null +++ b/vdoing/node_utils/setFrontmatter.js @@ -0,0 +1,172 @@ +const fs = require('fs'); // 文件模块 +const matter = require('gray-matter'); // FrontMatter解析器 https://github.com/jonschlinkert/gray-matter +const jsonToYaml = require('json2yaml') +const chalk = require('chalk') // 命令行打印美化 +// const arg = process.argv.splice(2)[0]; // 获取命令行传入的参数 +const readFileList = require('./modules/readFileList'); +const { type, repairDate, dateFormat } = require('./modules/fn'); +const log = console.log +const path = require('path'); +const os = require('os'); + +const PREFIX = '/pages/' + +/** + * 给.md文件设置frontmatter(标题、日期、永久链接等数据) + */ +function setFrontmatter(sourceDir, themeConfig) { + const { category: isCategory, tag: isTag, categoryText = '随笔', extendFrontmatter } = themeConfig + const files = readFileList(sourceDir) // 读取所有md文件数据 + // 扩展自定义生成frontmatter + const extendFrontmatterStr = extendFrontmatter ? + jsonToYaml.stringify(extendFrontmatter) + .replace(/\n\s{2}/g, "\n") + .replace(/"|---\n/g, "") + : ''; + + files.forEach(file => { + let dataStr = fs.readFileSync(file.filePath, 'utf8');// 读取每个md文件内容 + + // fileMatterObj => {content:'剔除frontmatter后的文件内容字符串', data:{}, ...} + const fileMatterObj = matter(dataStr, {}); + + if (Object.keys(fileMatterObj.data).length === 0) { // 未定义FrontMatter数据 + const stat = fs.statSync(file.filePath); + const dateStr = dateFormat( + getBirthtime(stat) + ); // 文件的创建时间 + const categories = getCategories( + file, + categoryText + ); + + let cateLabelStr = ''; + categories.forEach(item => { + cateLabelStr += os.EOL + ' - ' + item + }); + + let cateStr = ''; + if (!(isCategory === false)) { + cateStr = os.EOL + 'categories:' + cateLabelStr + }; + + // 注意下面这些反引号字符串的格式会映射到文件 + const tagsStr = isTag === false ? '' : ` +tags: + - `; + + const fmData = `--- +title: ${file.name} +date: ${dateStr} +permalink: ${getPermalink()}${file.filePath.indexOf('_posts') > -1 ? os.EOL + 'sidebar: auto' : ''}${cateStr}${tagsStr} +${extendFrontmatterStr}---`; + + fs.writeFileSync(file.filePath, `${fmData}${os.EOL}${fileMatterObj.content}`); // 写入 + log(chalk.blue('tip ') + chalk.green(`write frontmatter(写入frontmatter):${file.filePath} `)) + + } else { // 已有FrontMatter + let matterData = fileMatterObj.data; + let hasChange = false; + + // 已有FrontMatter,但是没有title、date、permalink、categories、tags数据的 + if (!matterData.hasOwnProperty('title')) { // 标题 + matterData.title = file.name; + hasChange = true; + } + + if (!matterData.hasOwnProperty('date')) { // 日期 + const stat = fs.statSync(file.filePath); + matterData.date = dateFormat(getBirthtime(stat)); + hasChange = true; + } + + if (!matterData.hasOwnProperty('permalink')) { // 永久链接 + matterData.permalink = getPermalink(); + hasChange = true; + } + + if (file.filePath.indexOf('_posts') > -1 && !matterData.hasOwnProperty('sidebar')) { // auto侧边栏,_posts文件夹特有 + matterData.sidebar = "auto"; + hasChange = true; + } + + if (!matterData.hasOwnProperty('pageComponent') && matterData.article !== false) { // 是文章页才添加分类和标签 + if (isCategory !== false && !matterData.hasOwnProperty('categories')) { // 分类 + matterData.categories = getCategories(file, categoryText) + hasChange = true; + } + if (isTag !== false && !matterData.hasOwnProperty('tags')) { // 标签 + matterData.tags = ['']; + hasChange = true; + } + } + + // 扩展自动生成frontmatter的字段 + if (type(extendFrontmatter) === 'object') { + Object.keys(extendFrontmatter).forEach(keyName => { + if (!matterData.hasOwnProperty(keyName)) { + matterData[keyName] = extendFrontmatter[keyName] + hasChange = true; + } + }) + } + + if (hasChange) { + if (matterData.date && type(matterData.date) === 'date') { + matterData.date = repairDate(matterData.date) // 修复时间格式 + } + const newData = jsonToYaml.stringify(matterData).replace(/\n\s{2}/g, "\n").replace(/"/g, "") + '---' + os.EOL + fileMatterObj.content; + fs.writeFileSync(file.filePath, newData); // 写入 + log(chalk.blue('tip ') + chalk.green(`write frontmatter(写入frontmatter):${file.filePath} `)) + } + + } + }) +} + +// 获取分类数据 +function getCategories(file, categoryText) { + let categories = [] + + if (file.filePath.indexOf('_posts') === -1) { + // 不在_posts文件夹 + let filePathArr = file.filePath.split(path.sep) // path.sep用于兼容不同系统下的路径斜杠 + filePathArr.pop() + + let ind = filePathArr.indexOf('docs') + if (ind !== -1) { + while (filePathArr[++ind] !== undefined) { + const item = filePathArr[ind] + const firstDotIndex = item.indexOf('.'); + categories.push(item.substring(firstDotIndex + 1) || '') // 获取分类 + // categories.push(filePathArr[ind].split('.').pop()) // 获取分类 + } + } + } else { + // 碎片化文章的分类生成 + const matchResult = file.filePath.match(/_posts\/(\S*)\//); + const resultStr = matchResult ? matchResult[1] : '' + const resultArr = resultStr.split('/').filter(Boolean) + + if (resultArr.length) { + categories.push(...resultArr) + } else { + categories.push(categoryText) + } + } + return categories +} + +// 获取文件创建时间 +function getBirthtime(stat) { + // 在一些系统下无法获取birthtime属性的正确时间,使用atime代替 + return stat.birthtime.getFullYear() != 1970 ? stat.birthtime : stat.atime +} + +// 定义永久链接数据 +function getPermalink() { + return `${PREFIX + (Math.random() + Math.random()).toString(16).slice(2, 8)}/` +} + + +module.exports = setFrontmatter; diff --git a/vdoing/noopModule.js b/vdoing/noopModule.js new file mode 100644 index 0000000..b1c6ea4 --- /dev/null +++ b/vdoing/noopModule.js @@ -0,0 +1 @@ +export default {} diff --git a/vdoing/package.json b/vdoing/package.json new file mode 100644 index 0000000..ff17100 --- /dev/null +++ b/vdoing/package.json @@ -0,0 +1,55 @@ +{ + "name": "vuepress-theme-vdoing", + "version": "1.12.8", + "description": "Vdoing theme for VuePress. 一个基于VuePress的知识管理兼博客主题。", + "author": { + "name": "gaoyi(Evan) Xu" + }, + "homepage": "https://github.com/xugaoyi/vuepress-theme-vdoing#readme", + "bugs": { + "url": "https://github.com/xugaoyi/vuepress-theme-vdoing/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/xugaoyi/vuepress-theme-vdoing.git" + }, + "keywords": [ + "documentation", + "vue", + "vuepress", + "generator", + "theme", + "blog" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "Evan xu", + "email": "894072666@qq.com" + } + ], + "dependencies": { + "@better-scroll/core": "^2.0.0-beta.6", + "@better-scroll/slide": "^2.0.0-beta.6", + "@vuepress/plugin-active-header-links": "^1.2.0", + "@vuepress/plugin-nprogress": "^1.2.0", + "@vuepress/plugin-search": "^1.2.0", + "chalk": "^4.0.0", + "docsearch.js": "^2.5.2", + "good-storage": "^1.1.1", + "js-yaml": "^3.13.1", + "json2yaml": "^1.1.0", + "lodash": "^4.17.15", + "stylus": "^0.54.5", + "stylus-loader": "^3.0.2", + "vuepress-plugin-container": "^2.0.2", + "vuepress-plugin-smooth-scroll": "^0.0.3" + }, + "devDependencies": { + "@vuepress/types": "^1.9.5" + }, + "engines": { + "node": ">=14.17.0" + } +} diff --git a/vdoing/styles/arrow.styl b/vdoing/styles/arrow.styl new file mode 100644 index 0000000..20bffc0 --- /dev/null +++ b/vdoing/styles/arrow.styl @@ -0,0 +1,22 @@ +@require './config' + +.arrow + display inline-block + width 0 + height 0 + &.up + border-left 4px solid transparent + border-right 4px solid transparent + border-bottom 6px solid $arrowBgColor + &.down + border-left 4px solid transparent + border-right 4px solid transparent + border-top 6px solid $arrowBgColor + &.right + border-top 4px solid transparent + border-bottom 4px solid transparent + border-left 6px solid $arrowBgColor + &.left + border-top 4px solid transparent + border-bottom 4px solid transparent + border-right 6px solid $arrowBgColor diff --git a/vdoing/styles/code-theme.styl b/vdoing/styles/code-theme.styl new file mode 100644 index 0000000..922a67c --- /dev/null +++ b/vdoing/styles/code-theme.styl @@ -0,0 +1,274 @@ +// 适合浅色背景 //@import '~prismjs/themes/prism.css' +codeThemeLight() + code[class*="language-"], + pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, + code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; + } + + pre[class*="language-"]::selection, pre[class*="language-"] ::selection, + code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; + } + + @media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #f5f2f0; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: slategray; + } + + .token.punctuation { + color: #999; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.boolean, + .token.number, + .token.constant, + .token.symbol, + .token.deleted { + color: #905; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #690; + } + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); + } + + .token.atrule, + .token.attr-value, + .token.keyword { + color: #07a; + } + + .token.function, + .token.class-name { + color: #DD4A68; + } + + .token.regex, + .token.important, + .token.variable { + color: #e90; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } + + // 行高亮颜色 + div[class*="language-"] + .highlight-lines + .highlighted + background-color rgba(200, 200, 200, 40%) + &.line-numbers-mode + .highlight-lines .highlighted + &:before + background-color rgba(200, 200, 200, 40%) + + +// 适合深色背景 // @import '~prismjs/themes/prism-tomorrow.css' +codeThemeDark() + code[class*="language-"], + pre[class*="language-"] { + color: #ccc; + background: none; + text-shadow: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #2d2d2d; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.block-comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #999; + } + + .token.punctuation { + color: #ccc; + } + + .token.tag, + .token.attr-name, + .token.namespace, + .token.deleted { + color: #e2777a; + } + + .token.function-name { + color: #6196cc; + } + + .token.boolean, + .token.number, + .token.function { + color: #f08d49; + } + + .token.property, + .token.class-name, + .token.constant, + .token.symbol { + color: #f8c555; + } + + .token.selector, + .token.important, + .token.atrule, + .token.keyword, + .token.builtin { + color: #cc99cd; + } + + .token.string, + .token.char, + .token.attr-value, + .token.regex, + .token.variable { + color: #7ec699; + } + + .token.operator, + .token.entity, + .token.url { + color: #67cdcc; + } + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string { + background: none; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } + + .token.inserted { + color: green; + } diff --git a/vdoing/styles/code.styl b/vdoing/styles/code.styl new file mode 100644 index 0000000..36206af --- /dev/null +++ b/vdoing/styles/code.styl @@ -0,0 +1,142 @@ +body {$contentClass} + code + color var(--textLightenColor) + padding 0.25rem 0.5rem + margin 0 + font-size 0.9em + // background-color rgba(27,31,35,0.05) + background-color rgba(100,100,100,0.08) + border-radius 3px + .token + &.deleted + color #EC5975 + &.inserted + color $accentColor + +body {$contentClass} + pre, pre[class*="language-"] + line-height 1.4 + padding 1.25rem 1.5rem + margin 0.85rem 0 + background-color $codeBgColor + border-radius 6px + overflow auto + code + // color #fff + color var(--codeColor) + padding 0 + background-color transparent + border-radius 0 + +div[class*="language-"] + position relative + // background-color $codeBgColor + background-color var(--codeBg) + border-radius 6px + .highlight-lines + user-select none + padding-top 1.3rem + position absolute + top 0 + left 0 + width 100% + line-height 1.4 + .highlighted + background-color rgba(0, 0, 0, 30%) + pre, pre[class*="language-"] + background transparent + position relative !important + z-index 1 + &::before + position absolute + z-index 3 + top 0.8em + right 1em + font-size 0.8rem + color rgba(150,150,150,.7) + // color rgba(255, 255, 255, 0.4) + &:not(.line-numbers-mode) + .line-numbers-wrapper + display none + &.line-numbers-mode + .highlight-lines .highlighted + position relative + &:before + content ' ' + position absolute + z-index 3 + left 0 + top 0 + display block + width $lineNumbersWrapperWidth + height 100% + background-color rgba(0, 0, 0, 30%) + pre + padding-left $lineNumbersWrapperWidth + 1 rem + vertical-align middle + .line-numbers-wrapper + position absolute + top 0 + width $lineNumbersWrapperWidth + text-align center + // color rgba(255, 255, 255, 0.3) + color rgba(127, 127, 127, .5) + padding 1.25rem 0 + line-height 1.4 + br + user-select none + .line-number + position relative + z-index 4 + user-select none + font-size 0.85em + &::after + content '' + position absolute + z-index 2 + top 0 + left 0 + width $lineNumbersWrapperWidth + height 100% + border-radius 6px 0 0 6px + // border-right 1px solid rgba(0, 0, 0, 66%) + // background-color $codeBgColor + border-right 1px solid var(--borderColor) + background-color var(--codeBg) + + +for lang in $codeLang + div{'[class~="language-' + lang + '"]'} + &:before + content ('' + lang) + +div[class~="language-javascript"] + &:before + content "js" + +div[class~="language-typescript"] + &:before + content "ts" + +div[class~="language-markup"] + &:before + content "html" + +div[class~="language-markdown"] + &:before + content "md" + +div[class~="language-json"]:before + content "json" + +div[class~="language-ruby"]:before + content "rb" + +div[class~="language-python"]:before + content "py" + +div[class~="language-bash"]:before + content "sh" + +div[class~="language-php"]:before + content "php" diff --git a/vdoing/styles/config.styl b/vdoing/styles/config.styl new file mode 100644 index 0000000..fa973ff --- /dev/null +++ b/vdoing/styles/config.styl @@ -0,0 +1 @@ +$contentClass = '.theme-vdoing-content' diff --git a/vdoing/styles/custom-blocks.styl b/vdoing/styles/custom-blocks.styl new file mode 100644 index 0000000..e212779 --- /dev/null +++ b/vdoing/styles/custom-blocks.styl @@ -0,0 +1,87 @@ +.custom-block + .custom-block-title + font-weight 600 + margin-bottom .2rem + p + margin 0 + &.tip, &.warning, &.danger, &.note + padding .5rem 1.5rem + border-left-width .5rem + border-left-style solid + margin 1rem 0 + &.tip + background-color #f3f5f7 + border-color #42b983 + color darken(#42b983, 50%) + &.warning + background-color #FFF7D0 + border-color darken(#ffe564, 35%) + color darken(#ffe564, 70%) + .custom-block-title + color darken(#ffe564, 50%) + a + color var(--textColor) + &.danger + background-color #ffe6e6 + border-color darken(red, 20%) + color darken(red, 70%) + .custom-block-title + color darken(red, 40%) + a + color var(--textColor) + &.note + background-color #E8F5FA + border-color #157BAE + color darken(#157BAE, 40%) + &.right + color var(--textColor) + font-size 0.9rem + text-align right + &.theorem + margin 1rem 0 + padding .8rem 1.5rem + border-radius 2px + background-color var(--customBlockBg) + .title + font-weight bold + margin .5rem 0 + &.details + display block + position relative + border-radius 2px + margin 1em 0 + padding 1.6em + background-color var(--customBlockBg) + p + margin .8rem 0 + h4 + margin-top 0 + figure, p + &:last-child + margin-bottom 0 + padding-bottom 0 + summary + outline none + cursor pointer + &:hover + color $accentColor + +// 深色模式适配 +.theme-mode-dark + .custom-block + &.warning + background-color rgba(255, 247, 208, .2) + color darken(#ffe564, 35%) + .custom-block-title + color darken(#ffe564, 15%) + &.tip + background-color rgba(243, 245, 247, .2) + color darken(#42b983, 0%) + &.danger + background-color rgba(255, 230, 230, .4) + color darken(red, 50%) + a + color $accentColor + &.note + background-color rgba(243, 245, 247, .2) + color darken(#157BAE, 0%) diff --git a/vdoing/styles/index.styl b/vdoing/styles/index.styl new file mode 100644 index 0000000..f27a48e --- /dev/null +++ b/vdoing/styles/index.styl @@ -0,0 +1,318 @@ +// 引入字体图标 +@import '//at.alicdn.com/t/font_1678482_4tbhmh589x.css' + +@require './config' +@require './code' +@require './custom-blocks' +@require './arrow' +@require './wrapper' +@require './toc' +@require './markdown-container' + + +html, body + padding 0 + margin 0 + +body + font-family -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif + -webkit-font-smoothing antialiased + -moz-osx-font-smoothing grayscale + -webkit-tap-highlight-color transparent + font-size 16px + color $textColor + background var(--bodyBg) + +// 去掉黄色边框 +a,input,button + outline: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-focus-ring-color: rgba(0, 0, 0, 0); +// 滚动条样式 +@media (min-width: $MQMobile) + ::-webkit-scrollbar + width:6px; + height:5px; + ::-webkit-scrollbar-track-piece + background-color:rgba(0,0,0,.15) + -webkit-border-radius:3px + ::-webkit-scrollbar-thumb:vertical + height:5px; + background-color:rgba(0,0,0,.28) + -webkit-border-radius:3px + ::-webkit-scrollbar-thumb:horizontal + width:5px; + background-color:rgba(0,0,0,.28) + -webkit-border-radius:3px + + +.card-box // 卡片 + border-radius 5px + background var(--mainBg) + box-shadow 0px 0px 4px 0 rgba(0,0,0,.1) + transition box-shadow .5s + &:hover + box-shadow 0 1px 15px 0 rgba(0,0,0,.1) + +.theme-style-line + @media (max-width: 719px) + margin-left: -1px; + margin-right: -1px; + .card-box + box-shadow 0 0 + border: 1px solid var(--borderColor) + +.blur // 模糊滤镜 + backdrop-filter saturate(200%) blur(20px) + +.custom-page // 自定义页面 + min-height calc(100vh - 3.6rem) + padding-top $navbarHeight + padding-bottom .9rem + .theme-vdoing-wrapper + margin 0 auto + +// 默认的搜索框样式重置 +body .search-box + input + background-color transparent + color var(--textColor) + border 1px solid var(--borderColor, #ccc) + @media (max-width: $MQNarrow) + border-color transparent + + + +.page + transition padding .2s ease + padding-left .8rem + +.navbar + position fixed + z-index 20 + top 0 + left 0 + right 0 + height $navbarHeight + background-color var(--blurBg) + box-sizing border-box + box-shadow 0 2px 5px rgba(0,0,0,.06) + +.sidebar-mask + position fixed + z-index 12 + top 0 + left 0 + width 100vw + height 100vh + display none + +.sidebar-hover-trigger + display none + position: fixed + z-index 12 + top ($navbarHeight + 4.5rem) + left 0 + bottom 0 + width 24px + +.sidebar + font-size 16px + background-color var(--sidebarBg) + width $sidebarWidth + position fixed + z-index 13 + margin 0 + top $navbarHeight + left 0 + bottom 0 + box-sizing border-box + border-right 1px solid var(--borderColor) + overflow-y auto + transform translateX(-100%) + transition transform .2s + @media (max-width: $MQMobile) + background-color var(--mainBg) + + +{$contentClass}:not(.custom) + word-wrap break-word + @extend $wrapper + > *:first-child + // margin-top $navbarHeight // 内容第一个元素的top距离 + + a:hover + text-decoration underline + + p.demo + padding 1rem 1.5rem + border 1px solid #ddd + border-radius 4px + + img + max-width 100% + +{$contentClass}.custom + padding 0 + margin 0 + + img + max-width 100% + +a + font-weight 500 + color $accentColor + text-decoration none + +p a code + font-weight 400 + color $accentColor + +kbd + background #eee + border solid 0.15rem #ddd + border-bottom solid 0.25rem #ddd + border-radius 0.15rem + padding 0 0.15em + +blockquote + font-size 1rem + opacity .75 + border-left .2rem solid rgba(100,100,100,.3) + margin 1rem 0 + padding .25rem 0 .25rem 1rem + + & > p + margin 0 + +ul, ol + padding-left 1.2em + +strong + font-weight 600 + +h1, h2, h3, h4, h5, h6 + font-weight 600 + line-height 1.25 + + {$contentClass}:not(.custom) > & + margin-top (0.5rem - $navbarHeight) + padding-top ($navbarHeight + 1rem) + margin-bottom 0 + + &:first-child + // margin-top -1.5rem + margin-bottom 1rem + + + p, + pre, + .custom-block + margin-top 2rem + + &:focus .header-anchor, + &:hover .header-anchor + opacity: 1 + + +// 没有h1标签时 +p,pre,.custom-block + {$contentClass}:not(.custom) > & + &:first-child + margin-top 2rem + + +h1 + font-size 1.9rem + {$contentClass}:not(.custom) > & // 页面内容的首个h1标签隐藏 + &:first-child + display none + +h2 + font-size 1.5rem + padding-bottom .3rem + border-bottom 1px solid var(--borderColor) + +h3 + font-size 1.35rem + +.page + h4 + font-size 1.25rem + h5 + font-size 1.15rem + h6 + font-size 1.05rem + +a.header-anchor + font-size 0.85em + float left + margin-left -0.87em + padding-right 0.23em + margin-top 0.125em + opacity 0 + + &:focus, + &:hover + text-decoration none + +code, kbd, .line-number + font-family source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace + +p, ul, ol + line-height 1.7 + +hr + border 0 + border-top 1px solid var(--borderColor) + +table + border-collapse collapse + margin 1rem 0 + overflow-x: auto + width 100% + display inline-table + @media (max-width: $MQMobile) + display block +tr + border-top 1px solid var(--borderColor) + + &:nth-child(2n) + background-color rgba(150,150,150,0.1) + +th, td + border 1px solid var(--borderColor) + padding .6em 1em + @media (max-width: $MQMobile) + padding .3em .5em + a + word-break break-all + +.theme-container + // background var(--mainBg) + color var(--textColor) + min-height 100vh + &.sidebar-open + .sidebar-mask + display: block + + &.no-navbar + {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6 + margin-top 1.5rem + padding-top 0 + + .sidebar + top 0 + + +@media (min-width: ($MQMobile + 1px)) + .theme-container.no-sidebar + .sidebar + display none + + .page + padding-left 0 + +@require 'mobile.styl' + +// 打印时的样式 +@media print + .navbar,.sidebar,.buttons + display: none + .page + padding-top: 0 !important diff --git a/vdoing/styles/markdown-container.styl b/vdoing/styles/markdown-container.styl new file mode 100644 index 0000000..9f9e0bc --- /dev/null +++ b/vdoing/styles/markdown-container.styl @@ -0,0 +1,211 @@ +// markdown容器样式 + +// 居中容器 +.center-container + text-align: center + +h1, h2, h3, h4, h5, h6 + .center-container > & + margin-top (0.5rem - $navbarHeight) + padding-top ($navbarHeight + 1rem) + margin-bottom 0 + a.header-anchor + float none + padding-right: 0 + margin-left: -.9rem + + +// 普通卡片列表 +.cardListContainer + margin .7rem 0 + &>:not(.card-list) + display none + .card-list + margin -0.35rem + display: flex; + flex-wrap: wrap; + align-items: flex-start; + .card-item + width calc(100%/3 - .7rem) + margin .35rem + background var(--bodyBg) + border-radius 3px + color var(--textColor) + display flex + box-shadow 1px 1px 2px 0 rgba(0,0,0,.06) + transition all .4s + &:hover + text-decoration none + box-shadow: 0 10px 20px -10px var(--randomColor, rgba(0,0,0,0.15)); + transform: translateY(-3px) scale(1.01, 1.01) + img + // transform rotate(8deg) scale(1.1, 1.1) + box-shadow 3px 2px 7px rgba(0, 0, 0, 0.15) + div p + text-shadow 3px 2px 5px rgba(0, 0, 0, 0.15) + img + width 60px + height 60px + border-radius 50% + border 2px solid #fff + margin 1rem + margin-right 0 + box-shadow 3px 2px 5px rgba(0, 0, 0, 0.08) + transition all .4s + div + flex 1 + display inline-block + float right + padding 1rem 0 + p + margin 0 + padding 0 1rem + transition text-shadow .4s + text-align center + .name + margin .2rem 0 .3rem 0 + .desc + font-size .8rem + line-height 1.1rem + opacity .8 + margin-bottom .2rem + .card-item.row-1 + width calc(100% - .7rem) + img + margin-left 2rem + .card-item.row-2 + width calc(100%/2 - .7rem) + img + margin-left 1.5rem + .card-item.row-3 + width calc(100%/3 - .7rem) + .card-item.row-4 + width calc(100%/4 - .7rem) + +// 图文卡片列表 +.cardImgListContainer + margin 1rem 0 + &>:not(.card-list) + display none + .card-list + margin -0.5rem + display: flex; + flex-wrap: wrap; + align-items: flex-start; + .card-item + width calc(100%/3 - 1rem) + margin .5rem + background var(--mainBg) + border 1px solid rgba(0,0,0,0.1) + box-sizing: border-box + border-radius 3px + overflow hidden + color var(--textColor) + box-shadow 2px 2px 10px rgba(0,0,0,.04) + display flex + flex-direction: column; + justify-content: flex-start; + align-items: stretch; + align-content: stretch; + transition: all .4s + &:hover + box-shadow 1px 1px 20px rgba(0,0,0,.1) + transform: translateY(-3px) + .box-img + overflow hidden + position relative + background #eee + img + display block + width 100% + height 100% + transition: all .3s + // &:hover + // img + // transform: scale(1.1, 1.1) + // opacity .75 + a + color var(--textColor) + transition: color .3s + &:hover + // color $accentColor + text-decoration none + .box-info + padding: .8rem 1rem + p + margin 0 + .desc + margin-top: .3rem + opacity .8 + font-size: .9rem + line-height: 1.1rem + overflow: hidden; + white-space: normal; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + .box-footer + overflow hidden + padding: .8rem 1rem + border-top: 1px solid rgba(0,0,0,0.1) + img + width 1.8rem + height 1.8rem + border-radius 50% + float left + span + line-height 1.8rem + float left + margin-left: .6rem + font-size: .8rem + .card-item.row-1 + width calc(100% - 1rem) + .card-item.row-2 + width calc(100%/2 - 1rem) + .card-item.row-3 + width calc(100%/3 - 1rem) + .card-item.row-4 + width calc(100%/4 - 1rem) + +.theme-mode-dark + .cardImgListContainer + .card-list + .card-item + border-color: var(--borderColor) + .box-footer + border-color: var(--borderColor) + +// 卡片列表的响应 +@media (max-width: 900px) + .cardListContainer + .card-list + .card-item.row-4 + width calc(100%/3 - .7rem) + .cardImgListContainer + .card-list + .card-item.row-4 + width calc(100%/3 - 1rem) + +@media (max-width: 720px) + .cardListContainer + .card-list + .card-item.row-3, .card-item.row-4 + width calc(100%/2 - .7rem) + img + margin-left 1.5rem + .cardImgListContainer + .card-list + .card-item.row-3, .card-item.row-4 + width calc(100%/2 - 1rem) + +@media (max-width: 500px) + .cardListContainer + .card-list + .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4 + width calc(100% - .7rem) + img + margin-left 1.5rem + .cardImgListContainer + .card-list + .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4 + width calc(100% - 1rem) diff --git a/vdoing/styles/mobile.styl b/vdoing/styles/mobile.styl new file mode 100644 index 0000000..030405d --- /dev/null +++ b/vdoing/styles/mobile.styl @@ -0,0 +1,101 @@ +@require './config' + +$mobileSidebarWidth = $sidebarWidth * 0.9 + +// narrow desktop / iPad +@media (max-width: $MQNarrow) + .sidebar + font-size 15px + +@media (max-width: $MQMobile) + .sidebar + width $sidebarWidth * 0.95 + +@media (min-width: ($MQMobile + 1px)) and (max-width: $MQNarrow) + .sidebar + width $mobileSidebarWidth + .theme-container + &.sidebar-open + .page + padding-left ($mobileSidebarWidth + .8rem)!important + +// wide mobile +@media (max-width: $MQMobile) + .sidebar + top 0 + height 100vh + padding-top $navbarHeight + transform translateX(-100%) + transition transform .2s ease + .page + padding-left 0 + .theme-container + &.sidebar-open + .sidebar + transform translateX(0) + .sidebar-mask // 蒙版在小屏中才能显示 + display block + &.no-navbar + .sidebar + padding-top: 0 + +// narrow mobile +@media (max-width: $MQMobileNarrow) + h1 + font-size 1.9rem + {$contentClass} + div[class*="language-"] + margin 0.85rem -1.5rem + border-radius 0 + +// 侧边栏显示隐藏的适配 +@media (min-width: ($MQMobile + 1px)) // 720px + .theme-container + .sidebar-hover-trigger + display: block + .sidebar-hover-trigger:hover ~ .sidebar + transform translateX(0) + z-index: 100 + + &:not(.sidebar-open) + .sidebar-hover-trigger ~ .sidebar:hover + transform translateX(0) + z-index: 100 + + &.sidebar-open + .sidebar-mask + display: none + .sidebar + transform translateX(0) + .sidebar-button + left $sidebarWidth + .page + padding-left ($sidebarWidth + .8rem) + padding-right .8rem + .sidebar-hover-trigger + display: none + + &.have-rightmenu + .page + padding-right ($rightMenuWidth + 20rem) + &.no-sidebar + .page + padding-left 0!important + .sidebar-hover-trigger + display: none + + &.hide-navbar + .sidebar-hover-trigger + top 4.5rem + .sidebar + top 0 + + @media (max-width: $MQNarrow) + .theme-container + &.sidebar-open:not(.on-sidebar) + .sidebar-button + $mobileSidebarWidth = $sidebarWidth * 0.7 + left $mobileSidebarWidth + .theme-container.no-sidebar + .sidebar-button + display none diff --git a/vdoing/styles/palette.styl b/vdoing/styles/palette.styl new file mode 100644 index 0000000..988423c --- /dev/null +++ b/vdoing/styles/palette.styl @@ -0,0 +1,96 @@ +// 主题调色板 + +// 原主题预设变量 +// 颜色 +// $accentColor = #3eaf7c +// $textColor = #2c3e50 +// $borderColor = #eaecef +// $codeBgColor = #282c34 +// $arrowBgColor = #ccc +// $badgeTipColor = #42b983 +// $badgeWarningColor = darken(#ffe564, 35%) +// $badgeErrorColor = #DA5961 +// 布局 +// $navbarHeight = 3.6rem +// $sidebarWidth = 20rem +// $contentWidth = 740px +// $homePageWidth = 960px +// 代码块 +// $lineNumbersWrapperWidth = 3.5rem + + +@require './code-theme' + +//***vdoing主题-变量***// + +// 颜色 + +$bannerTextColor = #fff // 首页banner区(博客标题)文本颜色 +$accentColor = #11A8CD +$activeColor = #ff5722 +$arrowBgColor = #ccc +// 放弃使用 +// $badgeTipColor = #42b983 +// $badgeWarningColor = darken(#ffe564, 35%) +// $badgeErrorColor = #DA5961 + +// 布局 +$navbarHeight = 3.6rem +$sidebarWidth = 18rem +$contentWidth = 860px +$homePageWidth = 1100px +$rightMenuWidth = 425px // 右侧菜单 + +// 代码块 +$lineNumbersWrapperWidth = 2.5rem + +// 浅色模式 +.theme-mode-light + --bodyBg: #f4f4f4 + --mainBg: rgba(255,255,255,1) + --sidebarBg: rgba(255,255,255,.8) + --blurBg: rgba(255,255,255,.9) + --customBlockBg: #f1f1f1 + --textColor: #00323c + --textLightenColor: #0085AD + --borderColor: rgba(0,0,0,.12) + --codeBg: #f6f6f6 + --codeColor: #525252 + codeThemeLight() + +// 深色模式 +.theme-mode-dark + --bodyBg: rgb(39,39,43) + --mainBg: rgba(30,30,34,1) + --sidebarBg: rgba(30,30,34,.8) + --blurBg: rgba(30,30,34,.8) + --customBlockBg: rgb(39,39,43) + --textColor: rgb(155,155,170) + --textLightenColor: #0085AD + // --borderColor: #2C2C3A + --borderColor: #30363d + --codeBg: #252526 + --codeColor: #fff + codeThemeDark() + +// 阅读模式 +.theme-mode-read + --bodyBg: rgb(236,236,204) + --mainBg: rgba(245,245,213,1) + --sidebarBg: rgba(245,245,213,.8) + --blurBg: rgba(245,245,213,.9) + --customBlockBg: rgb(236,236,204) + --textColor: #704214 + --textLightenColor: #996633 + --borderColor: rgba(0,0,0,.15) + --codeBg: #282c34 + --codeColor: #fff + codeThemeDark() + +// 背景色整体一致 +.theme-style-line.theme-mode-light + --bodyBg: rgba(255,255,255,1) +.theme-style-line.theme-mode-dark + --bodyBg: rgba(30,30,34,1) +.theme-style-line.theme-mode-read + --bodyBg: rgba(245,245,213,1) diff --git a/vdoing/styles/toc.styl b/vdoing/styles/toc.styl new file mode 100644 index 0000000..d3e7106 --- /dev/null +++ b/vdoing/styles/toc.styl @@ -0,0 +1,3 @@ +.table-of-contents + .badge + vertical-align middle diff --git a/vdoing/styles/wrapper.styl b/vdoing/styles/wrapper.styl new file mode 100644 index 0000000..eacda78 --- /dev/null +++ b/vdoing/styles/wrapper.styl @@ -0,0 +1,17 @@ +$vdoing-wrapper + max-width $contentWidth + margin 0 auto + padding 1rem 2.5rem 2rem 2.5rem + &:not(.footer) + background var(--mainBg) + box-shadow 0 1px 2px 0 rgba(0,0,0,.1) + // box-shadow 0 0 3px 0 rgba(0,0,0,.1) + margin-bottom 1rem + @media (min-width $contentWidth + 80) + border-radius 2px + @media (max-width: $MQNarrow) + padding 1rem 2rem + @media (max-width: $MQMobileNarrow) + padding 1rem 1.5rem +$wrapper + max-width $contentWidth diff --git a/vdoing/templates/dev.html b/vdoing/templates/dev.html new file mode 100644 index 0000000..2c53351 --- /dev/null +++ b/vdoing/templates/dev.html @@ -0,0 +1,11 @@ + + + + + + + + +
+ + \ No newline at end of file diff --git a/vdoing/templates/ssr.html b/vdoing/templates/ssr.html new file mode 100644 index 0000000..db2fb63 --- /dev/null +++ b/vdoing/templates/ssr.html @@ -0,0 +1,18 @@ + + + + + + {{ title }} + + {{{ userHeadTags }}} + {{{ pageMeta }}} + {{{ canonicalLink }}} + {{{ renderResourceHints() }}} + {{{ renderStyles() }}} + + + + {{{ renderScripts() }}} + + diff --git a/vdoing/types/index.ts b/vdoing/types/index.ts new file mode 100644 index 0000000..98c7e12 --- /dev/null +++ b/vdoing/types/index.ts @@ -0,0 +1,181 @@ +import { DefaultThemeConfig } from '@vuepress/types' + +type NoSidebar4DefaultThemeConfig = Omit // 忽略sidebar属性 + +/** + * Vdoing主题配置类型 + * @see https://doc.xugaoyi.com/ + */ +export interface VdoingThemeConfig extends NoSidebar4DefaultThemeConfig { + /** + * 是否打开分类功能. Enable classification + * @default true + */ + category?: boolean; + + /** + * 是否打开标签功能. Enable tag + * @default true + */ + tag?: boolean; + + /** + * 是否打开归档功能. Enable archive + * @default true + */ + archive?: boolean; + + /** + * 碎片化文章(_posts文件夹的文章)预设生成的分类值 + * @default '随笔' + */ + categoryText?: string; + + /** + * 页面风格 + * @default 'card' + */ + pageStyle?: 'card' | 'line'; + + /** + * body背景大图链接。单张图片 string | 多张图片 string[], 多张图片时每隔15秒换一张。 + * @default '' + */ + bodyBgImg?: string | string[]; + + /** + * body背景图透明度,选值 0.1 ~ 1.0 + * @default 0.5 + */ + bodyBgImgOpacity?: 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1; + + + /** + * body当多张背景图时,设置切换时间,默认15s + * @default 15 + */ + bodyBgImgInterval?: number; + + /** + * 是否显示文章标题前的图标 + * @default true + */ + titleBadge?: boolean; + + /** + * 文章标题前图标的地址 + * @default <内置图标> + */ + titleBadgeIcons?: string[]; + + /** + * 文章内容块的背景风格. 1 方格 | 2 横线 | 3 竖线 | 4 左斜线 | 5 右斜线 | 6 点状 + * @default + */ + contentBgStyle?: 1 | 2 | 3 | 4 | 5 | 6; + + /** + * 最近更新栏. showToArticle 是否显示到文章页底部,默认true。 moreArticle “更多文章”跳转的页面,默认'/archives' + * @default {showToArticle: true, moreArticle: '/archives'} + */ + updateBar?: { + showToArticle: boolean, + moreArticle?: '/archives' | string + }; + + /** + * 宽屏时是否显示右侧文章大纲栏 (屏宽小于1300px下无论如何都不显示) + * @default true + */ + rightMenuBar?: boolean; + + /** + * 初始状态是否打开左侧边栏 (注:这里只是决定收起还是展开侧边栏) + * @default true + */ + sidebarOpen?: boolean; + + /** + * 是否显示快捷翻页按钮 + * @default true + */ + pageButton?: boolean; + + /** + * 默认外观模式 + * @default 'auto' + */ + defaultMode?: 'auto' | 'light' | 'dark' | 'read'; + + /** + * 侧边栏配置 + */ + sidebar?: + | 'structuring' + | { mode: 'structuring', collapsable: Boolean } + | DefaultThemeConfig['sidebar'] + + /** + * 文章默认的作者信息 + */ + author?: string | { name: string, link?: string } + + /** + * 博主信息 (显示在首页侧边栏) + */ + blogger?: { + avatar: string, + name: string, + slogan?: string, + } + + /** + * 社交图标 (显示于博主信息栏和页脚栏) + * @内置图标-see:https://doc.xugaoyi.com/pages/a20ce8/#social + */ + social?: { + iconfontCssFile?: string, + icons: { + iconClass: string, + title: string, + link: string, + }[] + } + + /** + * 页脚信息 + */ + footer?: { + createYear: number, + copyrightInfo: string + } + + /** + * 扩展自动生成frontmatter。 + * 说明:当md文件的frontmatter不存在相应的字段时将自动添加。不会覆盖已有的数据。 + */ + extendFrontmatter?: { + [key: string]: any + } + + /** + * 自定义hmtl(广告)模块 + * @see: https://doc.xugaoyi.com/pages/a20ce8/#htmlmodules + */ + htmlModules?: { + homeSidebarB?: string, + sidebarT?: string, + sidebarB?: string, + pageT?: string, + pageB?: string, + pageTshowMode?: 'article' | 'custom', + pageBshowMode?: 'article' | 'custom', + windowLB?: string, + windowRB?: string, + } + + /** + * 兼容其他未列举配置项 + */ + [key: string]: any; +} diff --git a/vdoing/util/index.js b/vdoing/util/index.js new file mode 100644 index 0000000..a623585 --- /dev/null +++ b/vdoing/util/index.js @@ -0,0 +1,292 @@ +export const hashRE = /#.*$/ +export const extRE = /\.(md|html)$/ +export const endingSlashRE = /\/$/ +export const outboundRE = /^[a-z]+:/i + +export function normalize(path) { + return decodeURI(path) + .replace(hashRE, '') + .replace(extRE, '') +} + +export function getHash(path) { + const match = path && path.match(hashRE) + if (match) { + return match[0] + } +} + +export function isExternal(path) { + return outboundRE.test(path) +} + +export function isMailto(path) { + return /^mailto:/.test(path) +} + +export function isTel(path) { + return /^tel:/.test(path) +} + +export function ensureExt(path) { + if (isExternal(path)) { + return path + } + if (!path) return '404' + const hashMatch = path.match(hashRE) + const hash = hashMatch ? hashMatch[0] : '' + const normalized = normalize(path) + + if (endingSlashRE.test(normalized)) { + return path + } + return normalized + '.html' + hash +} + +export function isActive(route, path) { + const routeHash = route.hash + const linkHash = getHash(path) + if (linkHash && routeHash !== linkHash) { + return false + } + const routePath = normalize(route.path) + const pagePath = normalize(path) + return routePath === pagePath +} + +export function resolvePage(pages, rawPath, base) { + if (isExternal(rawPath)) { + return { + type: 'external', + path: rawPath + } + } + if (base) { + rawPath = resolvePath(rawPath, base) + } + const path = normalize(rawPath) + for (let i = 0; i < pages.length; i++) { + if (normalize(pages[i].regularPath) === path) { + return Object.assign({}, pages[i], { + type: 'page', + path: ensureExt(pages[i].path) + }) + } + } + console.error(`[vuepress] No matching page found for sidebar item "${rawPath}"`) + return {} +} + +function resolvePath(relative, base, append) { + const firstChar = relative.charAt(0) + if (firstChar === '/') { + return relative + } + + if (firstChar === '?' || firstChar === '#') { + return base + relative + } + + const stack = base.split('/') + + // remove trailing segment if: + // - not appending + // - appending to trailing slash (last segment is empty) + if (!append || !stack[stack.length - 1]) { + stack.pop() + } + + // resolve relative path + const segments = relative.replace(/^\//, '').split('/') + for (let i = 0; i < segments.length; i++) { + const segment = segments[i] + if (segment === '..') { + stack.pop() + } else if (segment !== '.') { + stack.push(segment) + } + } + + // ensure leading slash + if (stack[0] !== '') { + stack.unshift('') + } + + return stack.join('/') +} + +/** + * @param { Page } page + * @param { string } regularPath + * @param { SiteData } site + * @param { string } localePath + * @returns { SidebarGroup } + */ +export function resolveSidebarItems(page, regularPath, site, localePath) { + const { pages, themeConfig } = site + + const localeConfig = localePath && themeConfig.locales + ? themeConfig.locales[localePath] || themeConfig + : themeConfig + + const pageSidebarConfig = page.frontmatter.sidebar || localeConfig.sidebar || themeConfig.sidebar + if (pageSidebarConfig === 'auto') { + return resolveHeaders(page) + } + + const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar + if (!sidebarConfig) { + return [] + } else { + const { base, config } = resolveMatchingConfig(regularPath, sidebarConfig) + if (config === 'auto') { + return resolveHeaders(page) + } + return config + ? config.map(item => resolveItem(item, pages, base)) + : [] + } +} + +/** + * @param { Page } page + * @returns { SidebarGroup } + */ +function resolveHeaders(page) { + const headers = groupHeaders(page.headers || []) + return [{ + type: 'group', + collapsable: false, + title: page.title, + path: null, + children: headers.map(h => ({ + type: 'auto', + title: h.title, + basePath: page.path, + path: page.path + '#' + h.slug, + children: h.children || [] + })) + }] +} + +export function groupHeaders(headers) { + // group h3s under h2 + headers = headers.map(h => Object.assign({}, h)) + let lastH2 + headers.forEach(h => { + if (h.level === 2) { + lastH2 = h + } else if (lastH2) { + (lastH2.children || (lastH2.children = [])).push(h) + } + }) + return headers.filter(h => h.level === 2) +} + +export function resolveNavLinkItem(linkItem) { + return Object.assign(linkItem, { + type: linkItem.items && linkItem.items.length ? 'links' : 'link' + }) +} + +/** + * @param { Route } route + * @param { Array | Array | [link: string]: SidebarConfig } config + * @returns { base: string, config: SidebarConfig } + */ +export function resolveMatchingConfig(regularPath, config) { + if (Array.isArray(config)) { + return { + base: '/', + config: config + } + } + for (const base in config) { + if (ensureEndingSlash(regularPath).indexOf(encodeURI(base)) === 0) { + return { + base, + config: config[base] + } + } + } + return {} +} + +function ensureEndingSlash(path) { + return /(\.html|\/)$/.test(path) + ? path + : path + '/' +} + +function resolveItem(item, pages, base, groupDepth = 1) { + if (typeof item === 'string') { + return resolvePage(pages, item, base) + } else if (Array.isArray(item)) { + return Object.assign(resolvePage(pages, item[0], base), { + title: item[1] + }) + } else { + if (groupDepth > 3) { + console.error( + '[vuepress] detected a too deep nested sidebar group.' + ) + } + const children = item.children || [] + if (children.length === 0 && item.path) { + return Object.assign(resolvePage(pages, item.path, base), { + title: item.title + }) + } + return { + type: 'group', + path: item.path, + title: item.title, + sidebarDepth: item.sidebarDepth, + initialOpenGroupIndex: item.initialOpenGroupIndex, + children: children.map(child => resolveItem(child, pages, base, groupDepth + 1)), + collapsable: item.collapsable !== false + } + } +} + + +// 类型判断 +export function type(o) { + const s = Object.prototype.toString.call(o) + return s.match(/\[object (.*?)\]/)[1].toLowerCase() +} + +// 日期格式化(只获取年月日) +export function dateFormat(date) { + if (!(date instanceof Date)) { + date = new Date(date) + } + return `${date.getUTCFullYear()}-${zero(date.getUTCMonth() + 1)}-${zero(date.getUTCDate())}` +} + +// 小于10补0 +export function zero(d) { + return d.toString().padStart(2, '0') +} + +// 获取时间的时间戳 +export function getTimeNum(post) { + let dateStr = post.frontmatter.date || post.lastUpdated || new Date() + let date = new Date(dateStr) + if (date == "Invalid Date" && dateStr) { // 修复new Date()在Safari下出现Invalid Date的问题 + date = new Date(dateStr.replace(/-/g, '/')) + } + return date.getTime() +} + +// 比对时间 +export function compareDate(a, b) { + return getTimeNum(b) - getTimeNum(a) +} + +// 将特殊符号编码(应用于url) +export function encodeUrl(str) { + str = str + '' + str = str.replace(/ |((?=[\x21-\x7e]+)[^A-Za-z0-9])/g, '-') + return str +} diff --git a/vdoing/util/postData.js b/vdoing/util/postData.js new file mode 100644 index 0000000..91eba96 --- /dev/null +++ b/vdoing/util/postData.js @@ -0,0 +1,108 @@ +import { type, compareDate } from './index' + +/** + * 过滤非文章页 + * @param {Array} posts 所有文章数据 + */ +export function filterPosts (posts) { + posts = posts.filter(item => { + const { frontmatter: { pageComponent, article, home } } = item + return !(pageComponent || article === false || home === true) // 存在页面组件、article字段为false,以及首页 + }) + return posts +} + +/** + * 按置顶和时间排序 + * @param {Array} posts 过滤非文章页之后的文章数据 + */ +export function sortPosts (posts) { + posts.sort((prev, next) => { + const prevSticky = prev.frontmatter.sticky + const nextSticky = next.frontmatter.sticky + if (prevSticky && nextSticky) { + return prevSticky == nextSticky ? compareDate(prev, next) : (prevSticky - nextSticky) + } else if (prevSticky && !nextSticky) { + return -1 + } else if (!prevSticky && nextSticky) { + return 1 + } + return compareDate(prev, next) + }) + return posts +} + +/** + * 按时间排序 + * @param {Array} posts 过滤非文章页之后的文章数据 + */ +export function sortPostsByDate (posts) { + posts.sort((prev, next) => { + return compareDate(prev, next) + }) + return posts +} + +/** + * 按分类和标签分组 + * @param {Array} posts 按时间排序之后的文章数据 + */ +export function groupPosts (posts) { + const categoriesObj = {} + const tagsObj = {} + + for (let i = 0, postsL = posts.length; i < postsL; i++) { + const { frontmatter: { categories, tags } } = posts[i] + if (type(categories) === 'array') { + categories.forEach(item => { + if (item) { // 分类值是有效的 + if (!categoriesObj[item]) { + categoriesObj[item] = [] + } + categoriesObj[item].push(posts[i]) + } + }) + } + if (type(tags) === 'array') { + tags.forEach(item => { + if (item) { // 标签值是有效的 + if (!tagsObj[item]) { + tagsObj[item] = [] + } + tagsObj[item].push(posts[i]) + } + }) + } + } + return { + categories: categoriesObj, + tags: tagsObj + } +} + +/** + * 获取所有分类和标签 + * @param {Object} groupPosts 按分类和标签分组之后的文章数据 + */ +export function categoriesAndTags (groupPosts) { + const categoriesArr = [] + const tagsArr = [] + + for (let key in groupPosts.categories) { + categoriesArr.push({ + key, + length: groupPosts.categories[key].length + }) + } + + for (let key in groupPosts.tags) { + tagsArr.push({ + key, + length: groupPosts.tags[key].length + }) + } + return { + categories: categoriesArr, + tags: tagsArr + } +}