<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>煮雪话河山</title>
  
  <subtitle>如月之恒，如日之升</subtitle>
  <link href="https://blog.cent1pedee.top/atom.xml" rel="self"/>
  
  <link href="https://blog.cent1pedee.top/"/>
  <updated>2025-02-23T02:44:08.239Z</updated>
  <id>https://blog.cent1pedee.top/</id>
  
  <author>
    <name>煮雪话河山</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Vue项目准备工作</title>
    <link href="https://blog.cent1pedee.top/posts/517785ce.html"/>
    <id>https://blog.cent1pedee.top/posts/517785ce.html</id>
    <published>2025-01-08T15:41:28.000Z</published>
    <updated>2025-02-23T02:44:08.239Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Vue项目准备工作"><a href="#Vue项目准备工作" class="headerlink" title="Vue项目准备工作"></a>Vue项目准备工作</h1><p>在一个新的Vue项目开始之前，有一些准备工作是十分必要的，一个清晰、易于扩展的项目结构能帮助团队协作，并确保随着项目增大，不会出现难以维护的混乱代码。</p><h2 id="安装创建项目"><a href="#安装创建项目" class="headerlink" title="安装创建项目"></a>安装创建项目</h2><h3 id="1-安装Node-js"><a href="#1-安装Node-js" class="headerlink" title="1. 安装Node.js"></a>1. 安装Node.js</h3><p>Vue.js依赖于Node.js和npm（Node包管理器）。你可以从<a href="https://nodejs.org/zh-cn">Node.js官网</a>下载并安装最新版本的Node.js，这将同时安装npm。</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment"># 检查Node.js版本</span></span><br><span class="line">node -v</span><br><span class="line"></span><br><span class="line"><span class="comment"># 检查npm版本</span></span><br><span class="line">npm -v</span><br></pre></td></tr></table></figure><p>推荐使用<code>pnpm</code>进行后续步骤的安装以及使用，pnpm 本质上就是一个包管理器，这一点跟 npm&#x2F;yarn 没有区别，但它有两个很关键的优势：</p><ul><li>包安装速度极快</li><li>磁盘空间利用非常高效</li></ul><p>它的安装也非常简单：</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npm i -g pnpm</span><br></pre></td></tr></table></figure><h3 id="2-创建一个Vue应用"><a href="#2-创建一个Vue应用" class="headerlink" title="2. 创建一个Vue应用"></a>2. 创建一个Vue应用</h3><p>确保你安装了最新版本的 <a href="https://nodejs.org/zh-cn">Node.js</a>，并且你的当前工作目录正是打算创建项目的目录。在命令行中运行以下命令：</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pnpm create vue@latest</span><br></pre></td></tr></table></figure><p>这一指令将会安装并执行 <a href="https://github.com/vuejs/create-vue">create-vue</a>，它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 <a href="https://www.tslang.cn/">TypeScript</a> 和测试支持之类的可选功能提示：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">✔ Project name: … &lt;your-project-name&gt;</span><br><span class="line">✔ Add TypeScript? … No / Yes</span><br><span class="line">✔ Add JSX Support? … No / Yes</span><br><span class="line">✔ Add Vue Router for Single Page Application development? … No / Yes</span><br><span class="line">✔ Add Pinia for state management? … No / Yes</span><br><span class="line">✔ Add Vitest for Unit testing? … No / Yes</span><br><span class="line">✔ Add an End-to-End Testing Solution? … No / Cypress / Nightwatch / Playwright</span><br><span class="line">✔ Add ESLint for code quality? … No / Yes</span><br><span class="line">✔ Add Prettier for code formatting? … No / Yes</span><br><span class="line">✔ Add Vue DevTools 7 extension for debugging? (experimental) … No / Yes</span><br><span class="line"></span><br><span class="line">Scaffolding project in ./&lt;your-project-name&gt;...</span><br><span class="line">Done.</span><br></pre></td></tr></table></figure><p>在项目被创建后，通过以下步骤安装依赖并启动开发服务器：</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">cd</span> &lt;your-project-name&gt;</span><br><span class="line">pnpm install</span><br><span class="line">pnpm run dev</span><br></pre></td></tr></table></figure><h3 id="3-项目结构"><a href="#3-项目结构" class="headerlink" title="3. 项目结构"></a>3. 项目结构</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">my-project</span><br><span class="line">├── node_modules/    # 项目依赖</span><br><span class="line">├── public/          # 公共资源</span><br><span class="line">├── src/             # 源代码</span><br><span class="line">│   ├── api/         # 接口api</span><br><span class="line">│   ├── assets/      # 静态资源</span><br><span class="line">│   ├── router/      # Vue路由</span><br><span class="line">│   ├── components/  # Vue组件</span><br><span class="line">│   ├── utils/       # 全局工具函数</span><br><span class="line">│   ├── views/       # 视图文件</span><br><span class="line">│   ├── App.vue      # 根组件</span><br><span class="line">│   ├── main.js      # 入口文件</span><br><span class="line">├── .gitignore       # Git忽略文件</span><br><span class="line">├── package.json     # 项目配置文件</span><br><span class="line">├── README.md        # 项目说明文件</span><br></pre></td></tr></table></figure><h2 id="项目配置"><a href="#项目配置" class="headerlink" title="项目配置"></a>项目配置</h2><h3 id="1-调整项目目录"><a href="#1-调整项目目录" class="headerlink" title="1. 调整项目目录"></a>1. 调整项目目录</h3><p>默认生成的目录结构不满足我们的开发需求，因此需要做一些自定义改动。主要是两个工作：</p><ul><li>删除初始化的默认文件</li><li>修改剩余代码内容</li><li>新增调整我们需要的目录结构</li><li>拷贝初始化资源文件，安装预处理器插件</li></ul><h4 id="1-1-删除多余文件"><a href="#1-1-删除多余文件" class="headerlink" title="1.1 删除多余文件"></a>1.1 删除多余文件</h4><h4 id="1-2-修改文件内容"><a href="#1-2-修改文件内容" class="headerlink" title="1.2 修改文件内容"></a>1.2 修改文件内容</h4><p><code>src/router/index.js</code></p><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; createRouter, createWebHistory &#125; <span class="keyword">from</span> <span class="string">&#x27;vue-router&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> router = <span class="title function_">createRouter</span>(&#123;</span><br><span class="line">  <span class="attr">history</span>: <span class="title function_">createWebHistory</span>(<span class="keyword">import</span>.<span class="property">meta</span>.<span class="property">env</span>.<span class="property">BASE_URL</span>),</span><br><span class="line">  <span class="attr">routes</span>: []</span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> router</span><br></pre></td></tr></table></figure><p><code>src/App.vue</code></p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&lt;script setup&gt;&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;template&gt;</span><br><span class="line">  &lt;div&gt;</span><br><span class="line">    &lt;router-view&gt;&lt;/router-view&gt;</span><br><span class="line">  &lt;/div&gt;</span><br><span class="line">&lt;/template&gt;</span><br><span class="line"></span><br><span class="line">&lt;style scoped&gt;&lt;/style&gt;</span><br></pre></td></tr></table></figure><p><code>src/main.js</code></p><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; createApp &#125; <span class="keyword">from</span> <span class="string">&#x27;vue&#x27;</span></span><br><span class="line"><span class="keyword">import</span> &#123; createPinia &#125; <span class="keyword">from</span> <span class="string">&#x27;pinia&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> <span class="title class_">App</span> <span class="keyword">from</span> <span class="string">&#x27;./App.vue&#x27;</span></span><br><span class="line"><span class="keyword">import</span> router <span class="keyword">from</span> <span class="string">&#x27;./router&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> app = <span class="title function_">createApp</span>(<span class="title class_">App</span>)</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">use</span>(<span class="title function_">createPinia</span>())</span><br><span class="line">app.<span class="title function_">use</span>(router)</span><br><span class="line">app.<span class="title function_">mount</span>(<span class="string">&#x27;#app&#x27;</span>)</span><br></pre></td></tr></table></figure><h4 id="1-3-新增目录-api-utils"><a href="#1-3-新增目录-api-utils" class="headerlink" title="1.3 新增目录 &#x2F;api &#x2F;utils"></a>1.3 新增目录 &#x2F;api &#x2F;utils</h4><h4 id="1-4-引入样式"><a href="#1-4-引入样式" class="headerlink" title="1.4 引入样式"></a>1.4 引入样式</h4><p>将项目需要的全局样式 和 图片文件，复制到 assets 文件夹中,  并将全局样式在main.js中引入</p><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> <span class="string">&#x27;@/assets/main.scss&#x27;</span></span><br></pre></td></tr></table></figure><h3 id="2-选择并配置代码风格与规范"><a href="#2-选择并配置代码风格与规范" class="headerlink" title="2. 选择并配置代码风格与规范"></a>2. 选择并配置代码风格与规范</h3><p>为了确保团队中的每个开发者都有一致的代码风格，避免低质量代码和不一致的代码格式，配置 <em>ESlint</em> 来检查代码质量并使用 <em>Prittier</em> 自动格式化代码，使用 <em>Husky</em> 来自动触发 Git 提交前的检查。</p><h4 id="2-1-ESLint-Prettier-配置代码风格"><a href="#2-1-ESLint-Prettier-配置代码风格" class="headerlink" title="2.1 ESLint &amp; Prettier 配置代码风格"></a>2.1 ESLint &amp; Prettier 配置代码风格</h4><p><strong>环境同步：</strong></p><ol><li><strong>安装了插件 ESlint，开启保存自动修复</strong></li><li><strong>禁用了插件 Prettier，并关闭保存自动格式化</strong></li></ol><figure class="highlight jsx"><table><tr><td class="code"><pre><span class="line"><span class="comment">// ESlint插件 + Vscode配置 实现自动格式化修复</span></span><br><span class="line"><span class="string">&quot;editor.codeActionsOnSave&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;source.fixAll&quot;</span>: <span class="string">&#x27;always&#x27;</span></span><br><span class="line">&#125;,</span><br><span class="line"><span class="string">&quot;editor.formatOnSave&quot;</span>: <span class="literal">false</span>,</span><br></pre></td></tr></table></figure><p><strong>配置文件 eslint.config.js</strong></p><ol><li><p>Prettier 风格配置 <a href="https://prettier.io/docs/en/options.html">https://prettier.io</a></p><ul><li>单引号</li><li>不使用分号</li><li>每行宽度至多80字符</li><li>不加对象|数组最后逗号</li><li>换行符号不限制（win mac 不一致）</li></ul></li><li><p>vue组件名称多单词组成（忽略index.vue）</p></li><li><p>props解构（关闭）</p></li></ol><figure class="highlight jsx"><table><tr><td class="code"><pre><span class="line"><span class="attr">rules</span>: &#123;</span><br><span class="line">  <span class="string">&#x27;prettier/prettier&#x27;</span>: [</span><br><span class="line">    <span class="string">&#x27;warn&#x27;</span>,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">singleQuote</span>: <span class="literal">true</span>, <span class="comment">// 单引号</span></span><br><span class="line">      <span class="attr">semi</span>: <span class="literal">false</span>, <span class="comment">// 无分号</span></span><br><span class="line">      <span class="attr">printWidth</span>: <span class="number">100</span>, <span class="comment">// 每行宽度至多 100 字符</span></span><br><span class="line">      <span class="attr">trailingComma</span>: <span class="string">&#x27;none&#x27;</span>, <span class="comment">// 不加对象/数组最后的逗号</span></span><br><span class="line">      <span class="attr">endOfLine</span>: <span class="string">&#x27;auto&#x27;</span> <span class="comment">// 换行符自动检测（Windows 和 Unix 系统兼容）</span></span><br><span class="line">    &#125;</span><br><span class="line">  ],</span><br><span class="line">  <span class="string">&#x27;vue/multi-word-component-names&#x27;</span>: [</span><br><span class="line">    <span class="string">&#x27;warn&#x27;</span>,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">ignores</span>: [<span class="string">&#x27;index&#x27;</span>] <span class="comment">// 忽略 index.vue 的多词名称校验</span></span><br><span class="line">    &#125;</span><br><span class="line">  ],</span><br><span class="line">  <span class="string">&#x27;vue/no-setup-props-destructure&#x27;</span>: <span class="string">&#x27;off&#x27;</span>, <span class="comment">// 允许 props 解构</span></span><br><span class="line">  <span class="string">&#x27;no-undef&#x27;</span>: <span class="string">&#x27;error&#x27;</span> <span class="comment">// 未定义变量报错</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="2-2-基于-husky-的代码检查工作流"><a href="#2-2-基于-husky-的代码检查工作流" class="headerlink" title="2.2 基于 husky 的代码检查工作流"></a>2.2 基于 husky 的代码检查工作流</h4><p>husky 是一个 git hooks 工具  ( git的钩子工具，可以在特定时机执行特定的命令 )</p><p><strong>husky 配置</strong></p><ol><li><p>git初始化 git init</p></li><li><p>初始化 husky 工具配置  <a href="https://typicode.github.io/husky/">https://typicode.github.io/husky/</a></p></li></ol><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pnpm dlx husky-init &amp;&amp; pnpm install</span><br></pre></td></tr></table></figure><ol start="3"><li>修改 .husky&#x2F;pre-commit 文件</li></ol><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pnpm lint</span><br></pre></td></tr></table></figure><p><strong>问题：</strong> 默认进行的是全量检查，耗时问题，历史问题。</p><h4 id="2-3-lint-staged-配置"><a href="#2-3-lint-staged-配置" class="headerlink" title="2.3 lint-staged 配置"></a>2.3 lint-staged 配置</h4><ol><li>安装</li></ol><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pnpm i lint-staged -D</span><br></pre></td></tr></table></figure><ol start="2"><li>配置 <code>package.json</code></li></ol><figure class="highlight jsx"><table><tr><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  <span class="comment">// ... 省略 ...</span></span><br><span class="line">  <span class="string">&quot;lint-staged&quot;</span>: &#123;</span><br><span class="line">    <span class="string">&quot;*.&#123;js,ts,vue&#125;&quot;</span>: [</span><br><span class="line">      <span class="string">&quot;eslint --fix&quot;</span></span><br><span class="line">    ]</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">  <span class="string">&quot;scripts&quot;</span>: &#123;</span><br><span class="line">    <span class="comment">// ... 省略 ...</span></span><br><span class="line">    <span class="string">&quot;lint-staged&quot;</span>: <span class="string">&quot;lint-staged&quot;</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>修改 .husky&#x2F;pre-commit 文件</li></ol><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pnpm lint-staged</span><br></pre></td></tr></table></figure><h3 id="3-Pinia-构建用户仓库和持久化"><a href="#3-Pinia-构建用户仓库和持久化" class="headerlink" title="3. Pinia - 构建用户仓库和持久化"></a>3. Pinia - 构建用户仓库和持久化</h3><p><code>官方文档</code>：<a href="https://prazdevs.github.io/pinia-plugin-persistedstate/zh/">https://prazdevs.github.io/pinia-plugin-persistedstate/zh/</a></p><h4 id="3-1-安装使用配置插件"><a href="#3-1-安装使用配置插件" class="headerlink" title="3.1 安装使用配置插件"></a>3.1 安装使用配置插件</h4><ul><li>安装插件 pinia-plugin-persistedstate</li></ul><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pnpm add pinia-plugin-persistedstate -D</span><br></pre></td></tr></table></figure><ul><li>使用 main.js</li></ul><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> persist <span class="keyword">from</span> <span class="string">&#x27;pinia-plugin-persistedstate&#x27;</span></span><br><span class="line">...</span><br><span class="line">app.<span class="title function_">use</span>(<span class="title function_">createPinia</span>().<span class="title function_">use</span>(persist))</span><br></pre></td></tr></table></figure><ul><li>配置 stores&#x2F;user.js （这里以用户Token为例子）</li></ul><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; defineStore &#125; <span class="keyword">from</span> <span class="string">&#x27;pinia&#x27;</span></span><br><span class="line"><span class="keyword">import</span> &#123; ref &#125; <span class="keyword">from</span> <span class="string">&#x27;vue&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 用户模块</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> useUserStore = <span class="title function_">defineStore</span>(</span><br><span class="line">  <span class="string">&#x27;big-user&#x27;</span>,</span><br><span class="line">  <span class="function">() =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">const</span> token = <span class="title function_">ref</span>(<span class="string">&#x27;&#x27;</span>) <span class="comment">// 定义 token</span></span><br><span class="line">    <span class="keyword">const</span> <span class="title function_">setToken</span> = (<span class="params">t</span>) =&gt; (token.<span class="property">value</span> = t) <span class="comment">// 设置 token</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> &#123; token, setToken &#125;</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;</span><br><span class="line">    <span class="attr">persist</span>: <span class="literal">true</span> <span class="comment">// 持久化</span></span><br><span class="line">  &#125;</span><br><span class="line">)</span><br></pre></td></tr></table></figure><h4 id="3-2-配置仓库统一管理"><a href="#3-2-配置仓库统一管理" class="headerlink" title="3.2 配置仓库统一管理"></a>3.2 配置仓库统一管理</h4><p>将所有的<code>Pinia模块</code>集中在<code>store/index.js</code>中，可以作为状态管理的入口文件。通过这种方式，可以快速找到所有的状态管理逻辑，提高代码的可维护性和清晰度。</p><ul><li><code>src/main.js</code>:</li></ul><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; createApp &#125; <span class="keyword">from</span> <span class="string">&#x27;vue&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> <span class="title class_">App</span> <span class="keyword">from</span> <span class="string">&#x27;./App.vue&#x27;</span></span><br><span class="line"><span class="keyword">import</span> router <span class="keyword">from</span> <span class="string">&#x27;./router&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> pinia <span class="keyword">from</span> <span class="string">&#x27;@/stores/index&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> <span class="string">&#x27;@/assets/main.scss&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> app = <span class="title function_">createApp</span>(<span class="title class_">App</span>)</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">use</span>(pinia)</span><br><span class="line">app.<span class="title function_">use</span>(router)</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">mount</span>(<span class="string">&#x27;#app&#x27;</span>)</span><br></pre></td></tr></table></figure><ul><li><code>src/stores/index.js</code></li></ul><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; createPinia &#125; <span class="keyword">from</span> <span class="string">&#x27;pinia&#x27;</span></span><br><span class="line"><span class="keyword">import</span> persist <span class="keyword">from</span> <span class="string">&#x27;pinia-plugin-persistedstate&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> pinia = <span class="title function_">createPinia</span>()</span><br><span class="line">pinia.<span class="title function_">use</span>(persist)</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> pinia</span><br><span class="line"></span><br><span class="line"><span class="comment">//接收模块的所有按需导出</span></span><br><span class="line"><span class="comment">//等价于</span></span><br><span class="line"><span class="comment">// import &#123; useUserStore &#125; from &#x27;./modules/user&#x27;</span></span><br><span class="line"><span class="comment">// export &#123; useUserStore &#125;</span></span><br><span class="line"><span class="keyword">export</span> * <span class="keyword">from</span> <span class="string">&#x27;./modules/user&#x27;</span></span><br></pre></td></tr></table></figure><p>至此，您已经完成了Pinia仓库的统一管理，现在由<code>stores/index.js</code>统一导出，导入路径统一<code>./stores</code>，仓库维护在 <code>src/stores/modules</code>中</p><h3 id="4-Axios-数据交互"><a href="#4-Axios-数据交互" class="headerlink" title="4. Axios - 数据交互"></a>4. Axios - 数据交互</h3><p>大多数情况下都会使用<code>axios</code>来请求后端接口，一般都会对axios进行一些配置（比如：配置基础地址等等），一般项目开发中，对axios进行基本的二次封装，单独封装到一个模块中，便于使用</p><ul><li>1.安装<code>axios</code></li></ul><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pnpm add axios</span><br></pre></td></tr></table></figure><ul><li>2.新建<code>utils/request.js</code>封装<code>axios</code>模块</li></ul><p>利用<a href="http://www.axios-js.com/zh-cn/docs/#axios-create-config"><code>axios.create</code></a>来创建一个自定义的<code>axios</code>来使用：</p><figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> axios <span class="keyword">from</span> <span class="string">&#x27;axios&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> baseURL = <span class="string">&#x27;api基地址&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> instance = axios.<span class="title function_">create</span>(&#123;</span><br><span class="line">  <span class="comment">// TODO 1. 基础地址，超时时间</span></span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line">instance.<span class="property">interceptors</span>.<span class="property">request</span>.<span class="title function_">use</span>(</span><br><span class="line">  <span class="function">(<span class="params">config</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="comment">// TODO 2. 携带token</span></span><br><span class="line">    <span class="keyword">return</span> config</span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="function">(<span class="params">err</span>) =&gt;</span> <span class="title class_">Promise</span>.<span class="title function_">reject</span>(err)</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line">instance.<span class="property">interceptors</span>.<span class="property">response</span>.<span class="title function_">use</span>(</span><br><span class="line">  <span class="function">(<span class="params">res</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="comment">// TODO 3. 处理业务失败</span></span><br><span class="line">    <span class="comment">// TODO 4. 摘取核心响应数据</span></span><br><span class="line">    <span class="keyword">return</span> res</span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="function">(<span class="params">err</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="comment">// TODO 5. 处理401错误</span></span><br><span class="line">    <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">reject</span>(err)</span><br><span class="line">  &#125;</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> instance</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Vue项目准备工作&quot;&gt;&lt;a href=&quot;#Vue项目准备工作&quot; class=&quot;headerlink&quot; title=&quot;Vue项目准备工作&quot;&gt;&lt;/a&gt;Vue项目准备工作&lt;/h1&gt;&lt;p&gt;在一个新的Vue项目开始之前，有一些准备工作是十分必要的，一个清晰、易于扩展的项目结</summary>
      
    
    
    
    <category term="软件学习" scheme="https://blog.cent1pedee.top/categories/%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="Vue" scheme="https://blog.cent1pedee.top/tags/Vue/"/>
    
    <category term="学习笔记" scheme="https://blog.cent1pedee.top/tags/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>Hexo美化：本站日志创建及配置</title>
    <link href="https://blog.cent1pedee.top/posts/bda0f2db.html"/>
    <id>https://blog.cent1pedee.top/posts/bda0f2db.html</id>
    <published>2024-10-28T20:37:27.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>最近在鱼塘水群，有些萌萌哒新人问到了怎么实现<strong>本站日志</strong>这个功能。<strong>本站日志</strong>的目的正是为了记录我在学习和开发过程中所做的每一项尝试与成就。这不仅是对自己努力的见证，也是希望能为其他开发者提供灵感和参考。通过这份日志，我希望能与大家共同探讨、学习与进步。</p><p>本文以本站使用的主题 <code>anzhiyu</code> 主题为例，介绍如何为主题添加<strong>本站日志</strong>，当然目前是处于一个及其简陋的版本，很多地方或许达不到各位的审美标准，请各位大佬多多包容。</p><h1 id="样式预览"><a href="#样式预览" class="headerlink" title="样式预览"></a>样式预览</h1><details class="folding-tag" cyan open><summary> 本站日志预览 </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://img.cent1pedee.top/img/build.png"></p>              </div>            </details><h1 id="实现方式"><a href="#实现方式" class="headerlink" title="实现方式"></a>实现方式</h1><h2 id="1-配置文件"><a href="#1-配置文件" class="headerlink" title="1. 配置文件"></a>1. 配置文件</h2><ul><li>在 <code>_config.anzhiyu.yml</code> 下的 <code>menu:</code> 添加 <code>本站日志: /update/ || xxx</code> , xxx 为你所想添加的图标，也可去掉。</li></ul><figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="string">关于:</span></span><br><span class="line">  <span class="string">关于本人:</span> <span class="string">/about/</span> <span class="string">||</span> <span class="string">anzhiyu-icon-paper-plane</span></span><br><span class="line">  <span class="string">闲言碎语:</span> <span class="string">/essay/</span> <span class="string">||</span> <span class="string">anzhiyu-icon-lightbulb</span></span><br><span class="line">  <span class="string">本站日志:</span> <span class="string">/update/</span> <span class="string">||</span> <span class="string">xxx</span></span><br></pre></td></tr></table></figure><h2 id="2-Pug-文件修改"><a href="#2-Pug-文件修改" class="headerlink" title="2. Pug 文件修改"></a>2. Pug 文件修改</h2><ul><li>在 <code>themes/anzhiyu/layout/page.pug</code> 中添加以下内容</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">when &#x27;update&#x27;</span><br><span class="line">  include includes/page/update.pug</span><br></pre></td></tr></table></figure><div class="note info modern"><p>注意，Pug 文件的缩进十分严格，在 Pug 中，缩进用于表示层级结构。</p></div><h2 id="3-添加-update-pug-文件"><a href="#3-添加-update-pug-文件" class="headerlink" title="3. 添加 update.pug 文件"></a>3. 添加 update.pug 文件</h2><ul><li>在 <code>themes/anzhiyu/layout/includes/page</code>下新建<code>update.pug</code>文件，并添加以下内容：</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">#update</span><br><span class="line">  if site.data.update</span><br><span class="line">    each i in site.data.update</span><br><span class="line">      .author-content.author-content-item.UpdatePage.single(style = `background: url($&#123;i.top_background&#125;) left 37% / cover no-repeat !important;`)</span><br><span class="line">        .card-content</span><br><span class="line">          .author-content-item-tips=i.class_name</span><br><span class="line">          span.author-content-item-title=i.description</span><br><span class="line">          .content-bottom</span><br><span class="line">            .tips=i.tip</span><br><span class="line">          .banner-button-group</span><br><span class="line">            a.banner-button(href=i.buttonLink)</span><br><span class="line">              i.anzhiyufont.anzhiyu-icon-arrow-circle-right(style=&#x27;font-size: 1.3rem&#x27;)</span><br><span class="line">              span.banner-button-text=i.buttonText</span><br><span class="line"></span><br><span class="line">  #article-container</span><br><span class="line">    != page.content</span><br></pre></td></tr></table></figure><div class="note info modern"><p>注意，Pug 文件的缩进十分严格，在 Pug 中，缩进用于表示层级结构。</p></div><h2 id="4-添加-update-yml-文件"><a href="#4-添加-update-yml-文件" class="headerlink" title="4. 添加 update.yml 文件"></a>4. 添加 update.yml 文件</h2><ul><li>在 <code>source/_data</code> 下新建 <code>update.yml</code> 文件，并添加以下内容：</li></ul><figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">top_background:</span> <span class="string">&quot;https://xxxxxx.png&quot;</span></span><br><span class="line">  <span class="attr">class_name:</span> <span class="string">&quot;Update Class 1&quot;</span></span><br><span class="line">  <span class="attr">description:</span> <span class="string">&quot;Description of the first update&quot;</span></span><br><span class="line">  <span class="attr">tip:</span> <span class="string">&quot;Tip for the first update&quot;</span></span><br><span class="line">  <span class="attr">buttonLink:</span> <span class="string">&quot;http://link_to_update1.com&quot;</span></span><br><span class="line">  <span class="attr">buttonText:</span> <span class="string">&quot;More&quot;</span></span><br></pre></td></tr></table></figure><div class="note info modern"><p><strong>top_background</strong> 请自行替换为自己所喜欢的壁纸。</p></div><h2 id="5-新建-Update-页面"><a href="#5-新建-Update-页面" class="headerlink" title="5. 新建 Update 页面"></a>5. 新建 Update 页面</h2><p>使用 <code>Hexo new page update</code> 命令新建页面，并在 <code>Front-matter</code> 中添加 <code>type: update</code>。</p><h2 id="6-大功告成"><a href="#6-大功告成" class="headerlink" title="6. 大功告成"></a>6. 大功告成</h2><p>此时你已经完成了 <strong>本站日志</strong> 的创建，<strong>如果需要添加内容，只需在 update 文件目录下的 index.md</strong>中添加即可，页面支持 Markdown 格式，同时也支持 <code>anzhiyu</code> 主题下的外挂标签。你可以通过顶部的关于下的本站日志浏览完成后的效果，也可以通过下面的外挂链接浏览。</p><div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://blog.cent1pedee.top/update/">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">本站日志</div>            <div class="tag-link-sitename">煮雪话河山</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;最近在鱼塘水群，有些萌萌哒新人问到了怎么实现&lt;strong&gt;本站日志&lt;/strong&gt;这个功能。&lt;strong&gt;本站日志&lt;/strong&gt;的</summary>
      
    
    
    
    
    <category term="Hexo" scheme="https://blog.cent1pedee.top/tags/Hexo/"/>
    
    <category term="美化" scheme="https://blog.cent1pedee.top/tags/%E7%BE%8E%E5%8C%96/"/>
    
    <category term="日志" scheme="https://blog.cent1pedee.top/tags/%E6%97%A5%E5%BF%97/"/>
    
  </entry>
  
  <entry>
    <title>Hexo零成本方案：搭建Umami统计工具</title>
    <link href="https://blog.cent1pedee.top/posts/9374da7d.html"/>
    <id>https://blog.cent1pedee.top/posts/9374da7d.html</id>
    <published>2024-08-31T21:26:00.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>从早前的 LNMP 、OneinStack 到 XZ Utils ，再到现在的 Staticfile 、BootCDN ；供应链攻击总是让人猝不及防。七月中旬，糖果屋群突然就传来了51La被投毒的消息，而这也是我决定使用Umami的前提因素。但秉持着白嫖至上原则，因此写下了这篇文章。</p><p>本文以本站使用的主题 <code>anzhiyu</code> 为例，结合以下教程，手把手从零教你开始搭建Umami。</p><div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://zhuanlan.zhihu.com/p/639179454">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">零成本自建一个统计网站</div>            <div class="tag-link-sitename">蔡任弘</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div><div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://zexwoo.blog/posts/tutorials/build-umami/">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">如何不花一分钱搭建 Umami 统计工具</div>            <div class="tag-link-sitename">ZexWoo's Blog</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div><h1 id="什么是Umami？"><a href="#什么是Umami？" class="headerlink" title="什么是Umami？"></a>什么是Umami？</h1><p><strong>Umami</strong> 是一个开源的网站访问统计工具，它可以作为<strong>Google Analytics</strong>的替代品。<strong>Umami</strong>专注于隐私保护，提供简洁直观的用户界面，并且允许用户自托管，这意味着你可以将数据保存在自己的服务器上，从而更好地控制数据安全和隐私。</p><h1 id="食用方法"><a href="#食用方法" class="headerlink" title="食用方法"></a>食用方法</h1><h2 id="1、创建数据库"><a href="#1、创建数据库" class="headerlink" title="1、创建数据库"></a>1、创建数据库</h2><p>首先在 <a href="https://supabase.com/">Supabase</a>创建一个数据库。</p><details class="folding-tag" cyan open><summary> Supabase </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/071d4a22159e6f6d7e891.png" alt="png"></p>              </div>            </details><ul><li>创建步骤略过，请自行操作</li></ul><p>之后进入到创建项目的页面，按照相关的要求填写，名字、数据库密码后续需要使用。点击下面的 Generate a password 将生成的密码复制下来保存。</p><p>待项目创建完毕，点击项目管理，点击数据库，找到 <code>Connection string</code> 中的URL栏目，复制内容，将 <code>[YOUR-PASSWORD]</code> 替换成前面所生成的密码，将括号去掉，就生成了一个新的链接。</p><details class="folding-tag" cyan open><summary> Supabase </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/7ef6c44320528364a54a8.png" alt="png"></p>              </div>            </details><ul><li>至此，您已经完成了该平台的操作。</li></ul><h2 id="2、Vercel部署Umami"><a href="#2、Vercel部署Umami" class="headerlink" title="2、Vercel部署Umami"></a>2、Vercel部署Umami</h2><p>从github上Fork <a href="https://github.com/umami-software/umami">umami-softwareumami</a> 并import到Vercel中。</p><p>环境配置分别添加 <code>DATABASE_URL</code> 和 <code>HASH_SALT</code>。前者是上一步在Supabase复制的 URL，记得替换自己的 Password，并且在最后加上 <code>?pgbouncer=true</code> ；后者需要自己随意生成一长串字符串，最后点击 Deploy。</p><ul><li>绑定完域名后即可访问您的统计网站。</li></ul><h2 id="3、使用Umami"><a href="#3、使用Umami" class="headerlink" title="3、使用Umami"></a>3、使用Umami</h2><p>通过上面的操作步骤基本上就创建好一个属于自己的统计网站，通过绑定的域名进入网站。默认的用户名和密码分别是<code>admin</code>和<code>Umami</code>。(建议先行更改用户名及密码)</p><details class="folding-tag" cyan open><summary> Umami </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://pic4.zhimg.com/80/v2-b94f07f48b4c0051371ec2b319016eed_720w.webp" alt="webg"></p>              </div>            </details><ul><li>添加之后点击编辑，点击跟踪代码，复制这串代码，并将这段代码添加到您的网站中，这里演示的是 <code>anzhiyu</code> 主题，请根据自己的主题进行修改。</li></ul><figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">inject:</span></span><br><span class="line">  <span class="attr">head:</span></span><br><span class="line">    <span class="comment"># 自定义css</span></span><br><span class="line">    <span class="comment"># - &lt;link rel=&quot;stylesheet&quot; href=&quot;/css/custom.css&quot; media=&quot;defer&quot; onload=&quot;this.media=&#x27;all&#x27;&quot;&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">defer</span> <span class="string">src=&quot;XXXXXXX&quot;</span> <span class="string">data-website-id=&quot;XXX&quot;&gt;&lt;/script&gt;</span> <span class="comment"># Umami访问统计</span></span><br></pre></td></tr></table></figure><h2 id="4、大功告成"><a href="#4、大功告成" class="headerlink" title="4、大功告成"></a>4、大功告成</h2><p>到这时候已经安装完毕，您可以通过自行搭建的统计网站查看网站的数据。</p><p>同时，您也可以通过Umami的共享链接进行分享</p><details class="folding-tag" cyan open><summary> Umami </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/5152e97c86ab1e27814d8.png" alt="png"></p>              </div>            </details><div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://umami.cent1pedee.top/share/Rpntkz885tx7emUz/blog.cent1pedee.top">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">Umami共享</div>            <div class="tag-link-sitename">煮雪话河山</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;从早前的 LNMP 、OneinStack 到 XZ Utils ，再到现在的 Staticfile 、BootCDN ；供应链攻击总是让人</summary>
      
    
    
    
    
    <category term="Hexo" scheme="https://blog.cent1pedee.top/tags/Hexo/"/>
    
    <category term="Umami" scheme="https://blog.cent1pedee.top/tags/Umami/"/>
    
    <category term="教程" scheme="https://blog.cent1pedee.top/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>Hexo美化：个性化鼠标指针样式</title>
    <link href="https://blog.cent1pedee.top/posts/c57f6a8e.html"/>
    <id>https://blog.cent1pedee.top/posts/c57f6a8e.html</id>
    <published>2023-11-21T11:30:27.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<div class="note blue anzhiyufont anzhiyu-icon-bullhorn disabled"><p>该方法通过外部引入，无需修改主题源文件</p></div><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>当我们使用电脑进行日常操作时，鼠标指针是我们与计算机界面直接交互的关键元素之一。然而，在大多数情况下，我们使用的鼠标指针样式都是统一的，这往往会导致视觉疲劳和操作困难。因此，个性化鼠标指针样式的重要性愈发凸显。定制化的鼠标指针不仅可以提升用户体验，也能够在繁忙的工作中带来更高的效率和愉悦感。随着个性化需求的不断增长，个性化鼠标指针样式已经成为了提升用户体验的重要途径之一。</p><p>文以本站使用的主题 <code>anzhiyu</code> 为例，我将用最易操作的方式更改本站鼠标指针样式。</p><h1 id="样式预览"><a href="#样式预览" class="headerlink" title="样式预览"></a>样式预览</h1><details class="folding-tag" cyan open><summary> 鼠标指针样式预览 </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://cdn.jsdelivr.net/gh/kaix2301/pictures/img202201071208706.cur"></p><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://cdn.jsdelivr.net/gh/kaix2301/pictures/img202201071205091.cur"></p>              </div>            </details><h1 id="实现方式"><a href="#实现方式" class="headerlink" title="实现方式"></a>实现方式</h1><ul><li>在<code>themes/anzhiyu/source/_layout/</code>里，新建文件cursor.styl，内容如下</li></ul><figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line"><span class="selector-tag">body</span> &#123;</span><br><span class="line"><span class="attribute">cursor</span>: <span class="built_in">url</span>(https://cdn.jsdelivr.net/gh/kaix2301/pictures/img202201071208706.cur), auto;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-tag">a</span> &#123;</span><br><span class="line"><span class="attribute">cursor</span>: <span class="built_in">url</span>(https://cdn.jsdelivr.net/gh/kaix2301/pictures/img202201071205091.cur), auto<span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="大功告成"><a href="#大功告成" class="headerlink" title="大功告成"></a>大功告成</h1><p>到这时候，如果你的文件路径正确，可以执行Hexo的三连命令来查看效果了！</p><ul><li>部分教程链接：<div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://kainote.top/2022/01/07/hexo%E8%87%AA%E5%AE%9A%E4%B9%89%E9%BC%A0%E6%A0%87%E6%8C%87%E9%92%88%E6%A0%B7%E5%BC%8F/">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">hexo自定义鼠标指针样式</div>            <div class="tag-link-sitename">kai</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note blue anzhiyufont anzhiyu-icon-bullhorn disabled&quot;&gt;&lt;p&gt;该方法通过外部引入，无需修改主题源文件&lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;header</summary>
      
    
    
    
    
    <category term="Hexo" scheme="https://blog.cent1pedee.top/tags/Hexo/"/>
    
    <category term="美化" scheme="https://blog.cent1pedee.top/tags/%E7%BE%8E%E5%8C%96/"/>
    
    <category term="指针" scheme="https://blog.cent1pedee.top/tags/%E6%8C%87%E9%92%88/"/>
    
  </entry>
  
  <entry>
    <title>Hexo美化：个性化主题加载页设计方案</title>
    <link href="https://blog.cent1pedee.top/posts/576038b4.html"/>
    <id>https://blog.cent1pedee.top/posts/576038b4.html</id>
    <published>2023-11-13T09:06:01.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<div class="note blue anzhiyufont anzhiyu-icon-bullhorn disabled"><p>该方法需要对源码进行一定程度上的修改，在修改代码前请务必备份一份在本地</p></div><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>Hexo是一款快速、简洁且高效的静态博客框架，它的加载页是展示个人品牌和风格的重要组成部分。通过定制加载页，你可以为你的网站增添个性化的风格，提升用户体验，以及传达特定的信息。</p><p>本文以本站使用的主题 <code>anzhiyu</code> 为例，在本教程中，我们将深入探讨如何更换Hexo加载页，从简单的概念到具体的实施步骤，帮助你轻松地定制属于自己的加载页。</p><ul><li><p><strong>加载页的作用</strong>：加载页是指在网页加载完成之前显示的页面，通常用于展示品牌标识、加载进度和欢迎信息。它不仅可以提升用户体验，还可以传达网站的特色和个性。</p></li><li><p><strong>加载页设计的考虑因素</strong>：在定制加载页时，需要考虑网站的整体风格和目标受众。加载页应该与主题风格一致，同时尽量简洁明了，以保持用户的注意力和耐心。</p></li></ul><p>原教程中使用的是<code>butterfly</code>主题，本教程将以<code>anzhiyu</code>的格式进行更改。在此，感谢<strong>百里飞洋</strong>整合并提供了详细的配置教程，以及<strong>小旦</strong>为本站首页效果提供了宝贵的帮助。他们的博客链接如下：</p><div class="site-card-group"><a class="site-card" href="https://blog.meta-code.top/" data-title=星河滚烫，无问西东><div class="wrapper cover"><img class="cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://img.cent1pedee.top/img/meta-code-siteshot.png"/></div><div class="info"><img class="flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://avatars.githubusercontent.com/u/81922999?v=4"/><span class="site-title">kouseki</span></div></a><a class="site-card" href="https://satera.cn" data-title=SNTube Studio><div class="wrapper cover"><img class="cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/09/16/65052aa7c13c9.png"/></div><div class="info"><img class="flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://satera.cn/img/logo.png"/><span class="site-title">satera</span></div></a></div><h1 id="样式预览"><a href="#样式预览" class="headerlink" title="样式预览"></a>样式预览</h1><details class="folding-tag" cyan open><summary> 首页加载预览效果 </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://img.cent1pedee.top/img/Loading.gif"></p>              </div>            </details><h1 id="操作步骤"><a href="#操作步骤" class="headerlink" title="操作步骤"></a>操作步骤</h1><h2 id="1、新建文件"><a href="#1、新建文件" class="headerlink" title="1、新建文件"></a>1、新建文件</h2><ul><li>在<code>themes/anzhiyu/layout/includes/loading/</code>里，新建文件wizard.pug，内容如下</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">#loading-box</span><br><span class="line">  .loading-left-bg</span><br><span class="line">  .loading-right-bg</span><br><span class="line">  .wizard-scene</span><br><span class="line">    .wizard-objects</span><br><span class="line">      .wizard-square</span><br><span class="line">      .wizard-circle</span><br><span class="line">      .wizard-triangle</span><br><span class="line">    .wizard</span><br><span class="line">      .wizard-body</span><br><span class="line">      .wizard-right-arm</span><br><span class="line">        .wizard-right-hand</span><br><span class="line">      .wizard-left-arm</span><br><span class="line">        .wizard-left-hand</span><br><span class="line">      .wizard-head</span><br><span class="line">        .wizard-beard</span><br><span class="line">        .wizard-face</span><br><span class="line">          .wizard-adds</span><br><span class="line">        .wizard-hat</span><br><span class="line">          .wizard-hat-of-the-hat</span><br><span class="line">          .wizard-four-point-star.--first</span><br><span class="line">          .wizard-four-point-star.--second</span><br><span class="line">          .wizard-four-point-star.--third</span><br><span class="line"></span><br><span class="line">script.</span><br><span class="line">  const preloader = &#123;</span><br><span class="line">    endLoading: () =&gt; &#123;</span><br><span class="line">      document.getElementById(&#x27;loading-box&#x27;).classList.add(&quot;loaded&quot;);</span><br><span class="line">    &#125;,</span><br><span class="line">    initLoading: () =&gt; &#123;</span><br><span class="line">      document.getElementById(&#x27;loading-box&#x27;).classList.remove(&quot;loaded&quot;)</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">  window.addEventListener(&#x27;load&#x27;,()=&gt; &#123; preloader.endLoading() &#125;)</span><br><span class="line">  setTimeout(function()&#123;preloader.endLoading();&#125;,10000)</span><br></pre></td></tr></table></figure><h2 id="2、修改index-pug"><a href="#2、修改index-pug" class="headerlink" title="2、修改index.pug"></a>2、修改index.pug</h2><ul><li>找到<code>themes/anzhiyu/layout/includes/loading/</code>的<code>index.pug</code>文件，并替换文件内容</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">if theme.preloader.source === 1</span><br><span class="line">  include ./fullpage-loading.pug</span><br><span class="line">else if theme.preloader.source === 2</span><br><span class="line">  include ./pace.pug</span><br><span class="line">else if theme.preloader.source === 3</span><br><span class="line">  include ./fullpage-loading.pug</span><br><span class="line">  include ./pace.pug</span><br><span class="line">else </span><br><span class="line">  include ./wizard.pug</span><br></pre></td></tr></table></figure><h2 id="3、修改loading-styl"><a href="#3、修改loading-styl" class="headerlink" title="3、修改loading.styl"></a>3、修改loading.styl</h2><ul><li>找到<code>themes/anzhiyu/source/css/_global/</code>,拷贝一份<code>loading.styl</code>并重命名为<code>default.styl</code></li><li>为了便于后续管理,在此目录下新建<code>load_style</code>文件夹，将<code>default.styl</code>放入<code>load_style</code>文件夹中</li><li>修改<code>loading.styl</code>文件，并替换以下内容</li></ul><figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line"><span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">&#x27;preloader.enable&#x27;</span>)</span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">&#x27;preloader.source&#x27;</span>) == <span class="string">&#x27;1&#x27;</span></span><br><span class="line">    <span class="keyword">@import</span> <span class="string">&#x27;./personalized/_load_style/default.styl&#x27;</span></span><br><span class="line">  <span class="keyword">else</span> <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">&#x27;preloader.source&#x27;</span>) == <span class="string">&#x27;2&#x27;</span></span><br><span class="line">    <span class="keyword">@import</span> <span class="string">&#x27;./personalized/_load_style/default.styl&#x27;</span></span><br><span class="line">  <span class="keyword">else</span> <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">&#x27;preloader.source&#x27;</span>) == <span class="string">&#x27;3&#x27;</span></span><br><span class="line">    <span class="keyword">@import</span> <span class="string">&#x27;./personalized/_load_style/default.styl&#x27;</span></span><br><span class="line">  <span class="keyword">else</span></span><br><span class="line">    <span class="keyword">@import</span> <span class="string">&#x27;./personalized/_load_style/wizard.styl&#x27;</span></span><br></pre></td></tr></table></figure><h2 id="4、新建wizard-styl"><a href="#4、新建wizard-styl" class="headerlink" title="4、新建wizard.styl"></a>4、新建wizard.styl</h2><ul><li>找到<code>themes/anzhiyu/source/css/_global/load_style/</code>并新建一个<code>wizard.styl</code>，内容如下</li></ul><figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line"><span class="selector-class">.loading-bg</span></span><br><span class="line">  <span class="attribute">position</span> fixed</span><br><span class="line">  <span class="attribute">z-index</span> <span class="number">1000</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">50%</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">100%</span></span><br><span class="line">  <span class="attribute">background</span> <span class="built_in">var</span>(--anzhiyu-card-bg)</span><br><span class="line">  </span><br><span class="line"><span class="selector-id">#loading-box</span></span><br><span class="line">  <span class="selector-class">.loading-left-bg</span></span><br><span class="line">    <span class="keyword">@extend</span> <span class="selector-class">.loading-bg</span></span><br><span class="line">    <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">  <span class="selector-class">.loading-right-bg</span></span><br><span class="line">    <span class="keyword">@extend</span> <span class="selector-class">.loading-bg</span></span><br><span class="line">    <span class="attribute">right</span> <span class="number">0</span></span><br><span class="line">  &amp;<span class="selector-class">.loaded</span></span><br><span class="line">    <span class="attribute">z-index</span> -<span class="number">1000</span></span><br><span class="line">    <span class="selector-class">.loading-left-bg</span></span><br><span class="line">      <span class="attribute">transition</span> all <span class="number">1.0s</span></span><br><span class="line">      <span class="attribute">transform</span> <span class="built_in">translate</span>(-<span class="number">100%</span>, <span class="number">0</span>)</span><br><span class="line">    <span class="selector-class">.loading-right-bg</span></span><br><span class="line">      <span class="attribute">transition</span> all <span class="number">1.0s</span></span><br><span class="line">      <span class="attribute">transform</span> <span class="built_in">translate</span>(<span class="number">100%</span>, <span class="number">0</span>)</span><br><span class="line">      </span><br><span class="line"><span class="selector-id">#loading-box</span></span><br><span class="line">  <span class="attribute">position</span> fixed</span><br><span class="line">  <span class="attribute">z-index</span> <span class="number">1000</span></span><br><span class="line">  <span class="attribute">display</span> -webkit-box</span><br><span class="line">  <span class="attribute">display</span> flex</span><br><span class="line">  -webkit-box-align center</span><br><span class="line">  <span class="attribute">align-items</span> center</span><br><span class="line">  -webkit-box-pack center</span><br><span class="line">  <span class="attribute">justify-content</span> center</span><br><span class="line">  -webkit-box-orient vertical</span><br><span class="line">  -webkit-box-<span class="attribute">direction</span> normal</span><br><span class="line">  <span class="attribute">flex-direction</span> column</span><br><span class="line">  <span class="attribute">flex-wrap</span> wrap</span><br><span class="line">  <span class="attribute">width</span> <span class="number">100vw</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">100vh</span></span><br><span class="line">  <span class="attribute">overflow</span> hidden</span><br><span class="line"></span><br><span class="line">  &amp;<span class="selector-class">.loaded</span></span><br><span class="line">    <span class="selector-class">.wizard-scene</span></span><br><span class="line">      <span class="attribute">display</span> none</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-scene</span></span><br><span class="line">  <span class="attribute">position</span> fixed</span><br><span class="line">  <span class="attribute">z-index</span> <span class="number">1001</span></span><br><span class="line">  <span class="attribute">display</span> -webkit-box</span><br><span class="line">  <span class="attribute">display</span> flex</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard</span></span><br><span class="line">  <span class="attribute">position</span> relative</span><br><span class="line">  <span class="attribute">width</span> <span class="number">190px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">240px</span></span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-body</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">bottom</span> <span class="number">0</span></span><br><span class="line">  <span class="attribute">left</span> <span class="number">68px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">100px</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">60px</span></span><br><span class="line">  <span class="attribute">background</span> <span class="number">#3f64ce</span></span><br><span class="line">  <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">    <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">bottom</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">left</span> <span class="number">20px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">100px</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">60px</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#3f64ce</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">skewX</span>(<span class="number">14deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">skewX</span>(<span class="number">14deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-right-arm</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">bottom</span> <span class="number">74px</span></span><br><span class="line">  <span class="attribute">left</span> <span class="number">110px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">44px</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">90px</span></span><br><span class="line">  <span class="attribute">background</span> <span class="number">#3f64ce</span></span><br><span class="line">  <span class="attribute">border-radius</span> <span class="number">22px</span></span><br><span class="line">  -webkit-<span class="attribute">transform-origin</span> <span class="number">16px</span> <span class="number">22px</span></span><br><span class="line">  <span class="attribute">transform-origin</span> <span class="number">16px</span> <span class="number">22px</span></span><br><span class="line">  -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">  <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">  -webkit-<span class="attribute">animation</span> right_arm <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="attribute">animation</span> right_arm <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="selector-class">.right-hand</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">right</span> <span class="number">8px</span></span><br><span class="line">    <span class="attribute">bottom</span> <span class="number">8px</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">30px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">30px</span></span><br><span class="line">    <span class="attribute">border-radius</span> <span class="number">50%</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">    -webkit-<span class="attribute">transform-origin</span> center center</span><br><span class="line">    <span class="attribute">transform-origin</span> center center</span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    -webkit-<span class="attribute">animation</span> right_hand <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">    <span class="attribute">animation</span> right_hand <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="selector-class">.wizard-right-hand</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">      <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">right</span> <span class="number">0px</span></span><br><span class="line">      <span class="attribute">top</span> -<span class="number">8px</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">15px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">30px</span></span><br><span class="line">      <span class="attribute">border-radius</span> <span class="number">10px</span></span><br><span class="line">      <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">      -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">      <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">      -webkit-<span class="attribute">animation</span> right_finger <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">      <span class="attribute">animation</span> right_finger <span class="number">10s</span> ease-in-out infinite</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-left-arm</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">bottom</span> <span class="number">74px</span></span><br><span class="line">  <span class="attribute">left</span> <span class="number">26px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">44px</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">70px</span></span><br><span class="line">  <span class="attribute">background</span> <span class="number">#3f64ce</span></span><br><span class="line">  <span class="attribute">border-bottom-left-radius</span> <span class="number">8px</span></span><br><span class="line">  -webkit-<span class="attribute">transform-origin</span> <span class="number">60px</span> <span class="number">26px</span></span><br><span class="line">  <span class="attribute">transform-origin</span> <span class="number">60px</span> <span class="number">26px</span></span><br><span class="line">  -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">  <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">  -webkit-<span class="attribute">animation</span> left_arm <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="attribute">animation</span> left_arm <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="selector-class">.wizard-left-hand</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">left</span> -<span class="number">18px</span></span><br><span class="line">    <span class="attribute">top</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">18px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">30px</span></span><br><span class="line">    <span class="attribute">border-top-left-radius</span> <span class="number">35px</span></span><br><span class="line">    <span class="attribute">border-bottom-left-radius</span> <span class="number">35px</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">      <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">right</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">top</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">30px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">15px</span></span><br><span class="line">      <span class="attribute">border-radius</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">      -webkit-<span class="attribute">transform-origin</span> right bottom</span><br><span class="line">      <span class="attribute">transform-origin</span> right bottom</span><br><span class="line">      -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">      <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">      -webkit-<span class="attribute">animation</span> left_finger <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">      <span class="attribute">animation</span> left_finger <span class="number">10s</span> ease-in-out infinite</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-head</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">top</span> <span class="number">0</span></span><br><span class="line">  <span class="attribute">left</span> <span class="number">14px</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">160px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">210px</span></span><br><span class="line">  -webkit-<span class="attribute">transform-origin</span> center center</span><br><span class="line">  <span class="attribute">transform-origin</span> center center</span><br><span class="line">  -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">  <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">  -webkit-<span class="attribute">animation</span> head <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="attribute">animation</span> head <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="selector-class">.wizard-beard</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">bottom</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">left</span> <span class="number">38px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">106px</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">80px</span></span><br><span class="line">    <span class="attribute">border-bottom-right-radius</span> <span class="number">55%</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#ffffff</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">      <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">top</span> <span class="number">16px</span></span><br><span class="line">      <span class="attribute">left</span> -<span class="number">10px</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">40px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">border-radius</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">background</span> <span class="number">#ffffff</span></span><br><span class="line">  <span class="selector-class">.wizard-face</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">bottom</span> <span class="number">76px</span></span><br><span class="line">    <span class="attribute">left</span> <span class="number">38px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">30px</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">60px</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::before</span></span><br><span class="line">      <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">top</span> <span class="number">0px</span></span><br><span class="line">      <span class="attribute">left</span> <span class="number">40px</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">40px</span></span><br><span class="line">      <span class="attribute">border-bottom-right-radius</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">border-bottom-left-radius</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">      <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">top</span> <span class="number">16px</span></span><br><span class="line">      <span class="attribute">left</span> -<span class="number">10px</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">50px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">border-radius</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">border-bottom-right-radius</span> <span class="number">0px</span></span><br><span class="line">      <span class="attribute">background</span> <span class="number">#ffffff</span></span><br><span class="line">    <span class="selector-class">.wizard-adds</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">top</span> <span class="number">0px</span></span><br><span class="line">      <span class="attribute">left</span> -<span class="number">10px</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">40px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">border-radius</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">      <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">        <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">        <span class="attribute">position</span> absolute</span><br><span class="line">        <span class="attribute">top</span> <span class="number">5px</span></span><br><span class="line">        <span class="attribute">left</span> <span class="number">80px</span></span><br><span class="line">        <span class="attribute">width</span> <span class="number">15px</span></span><br><span class="line">        <span class="attribute">height</span> <span class="number">20px</span></span><br><span class="line">        <span class="attribute">border-bottom-right-radius</span> <span class="number">20px</span></span><br><span class="line">        <span class="attribute">border-top-right-radius</span> <span class="number">20px</span></span><br><span class="line">        <span class="attribute">background</span> <span class="number">#f1c5b4</span></span><br><span class="line">  <span class="selector-class">.wizard-hat</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">bottom</span> <span class="number">106px</span></span><br><span class="line">    <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">160px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">20px</span></span><br><span class="line">    <span class="attribute">border-radius</span> <span class="number">20px</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#3f64ce</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::before</span></span><br><span class="line">      <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">top</span> -<span class="number">70px</span></span><br><span class="line">      <span class="attribute">left</span> <span class="number">50%</span></span><br><span class="line">      -webkit-<span class="attribute">transform</span> <span class="built_in">translatex</span>(-<span class="number">50%</span>)</span><br><span class="line">      <span class="attribute">transform</span> <span class="built_in">translatex</span>(-<span class="number">50%</span>)</span><br><span class="line">      <span class="attribute">width</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">border-style</span> solid</span><br><span class="line">      <span class="attribute">border-width</span> <span class="number">0</span> <span class="number">34px</span> <span class="number">70px</span> <span class="number">50px</span></span><br><span class="line">      <span class="attribute">border-color</span> transparent transparent <span class="number">#3f64ce</span> transparent</span><br><span class="line">    <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">      <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">top</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">160px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">20px</span></span><br><span class="line">      <span class="attribute">background</span> <span class="number">#3f64ce</span></span><br><span class="line">      <span class="attribute">border-radius</span> <span class="number">20px</span></span><br><span class="line">    <span class="selector-class">.wizard-hat-of-the-hat</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">bottom</span> <span class="number">78px</span></span><br><span class="line">      <span class="attribute">left</span> <span class="number">79px</span></span><br><span class="line">      <span class="attribute">width</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">border-style</span> solid</span><br><span class="line">      <span class="attribute">border-width</span> <span class="number">0</span> <span class="number">25px</span> <span class="number">25px</span> <span class="number">19px</span></span><br><span class="line">      <span class="attribute">border-color</span> transparent transparent <span class="number">#3f64ce</span> transparent</span><br><span class="line">      <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">        <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">        <span class="attribute">position</span> absolute</span><br><span class="line">        <span class="attribute">top</span> <span class="number">6px</span></span><br><span class="line">        <span class="attribute">left</span> -<span class="number">4px</span></span><br><span class="line">        <span class="attribute">width</span> <span class="number">35px</span></span><br><span class="line">        <span class="attribute">height</span> <span class="number">10px</span></span><br><span class="line">        <span class="attribute">border-radius</span> <span class="number">10px</span></span><br><span class="line">        <span class="attribute">border-bottom-left-radius</span> <span class="number">0px</span></span><br><span class="line">        <span class="attribute">background</span> <span class="number">#3f64ce</span></span><br><span class="line">        -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">40deg</span>)</span><br><span class="line">        <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">40deg</span>)</span><br><span class="line">    <span class="selector-class">.wizard-four-point-star</span></span><br><span class="line">      <span class="attribute">position</span> absolute</span><br><span class="line">      <span class="attribute">width</span> <span class="number">12px</span></span><br><span class="line">      <span class="attribute">height</span> <span class="number">12px</span></span><br><span class="line">      <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">        -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">156.66deg</span>) <span class="built_in">skew</span>(<span class="number">45deg</span>)</span><br><span class="line">        <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">156.66deg</span>) <span class="built_in">skew</span>(<span class="number">45deg</span>)</span><br><span class="line">      &amp;.<span class="attr">--first</span></span><br><span class="line">        <span class="attribute">bottom</span> <span class="number">28px</span></span><br><span class="line">        <span class="attribute">left</span> <span class="number">46px</span></span><br><span class="line">      &amp;.<span class="attr">--second</span></span><br><span class="line">        <span class="attribute">bottom</span> <span class="number">40px</span></span><br><span class="line">        <span class="attribute">left</span> <span class="number">80px</span></span><br><span class="line">      &amp;.<span class="attr">--third</span></span><br><span class="line">        <span class="attribute">bottom</span> <span class="number">15px</span></span><br><span class="line">        <span class="attribute">left</span> <span class="number">108px</span></span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-head</span> <span class="selector-class">.wizard-hat</span> <span class="selector-class">.wizard-four-point-star</span><span class="selector-pseudo">::after</span>, <span class="selector-class">.wizard-head</span> <span class="selector-class">.wizard-hat</span> <span class="selector-class">.wizard-four-point-star</span><span class="selector-pseudo">::before</span></span><br><span class="line">  <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">background</span> <span class="number">#ffffff</span></span><br><span class="line">  <span class="attribute">display</span> block</span><br><span class="line">  <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">141.4213%</span></span><br><span class="line">  <span class="attribute">top</span> <span class="number">0</span></span><br><span class="line">  <span class="attribute">bottom</span> <span class="number">0</span></span><br><span class="line">  <span class="attribute">border-radius</span> <span class="number">10%</span></span><br><span class="line">  -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">66.66deg</span>) <span class="built_in">skewX</span>(<span class="number">45deg</span>)</span><br><span class="line">  <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">66.66deg</span>) <span class="built_in">skewX</span>(<span class="number">45deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-objects</span></span><br><span class="line">  <span class="attribute">position</span> relative</span><br><span class="line">  <span class="attribute">width</span> <span class="number">200px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">240px</span></span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-square</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">bottom</span> -<span class="number">60px</span></span><br><span class="line">  <span class="attribute">left</span> -<span class="number">5px</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">120px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">120px</span></span><br><span class="line">  <span class="attribute">border-radius</span> <span class="number">50%</span></span><br><span class="line">  -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  -webkit-<span class="attribute">animation</span> path_square <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="attribute">animation</span> path_square <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">    <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">top</span> <span class="number">10px</span></span><br><span class="line">    <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">50px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">50px</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#9ab3f5</span></span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-circle</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">bottom</span> <span class="number">10px</span></span><br><span class="line">  <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">100px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">100px</span></span><br><span class="line">  <span class="attribute">border-radius</span> <span class="number">50%</span></span><br><span class="line">  -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  -webkit-<span class="attribute">animation</span> path_circle <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="attribute">animation</span> path_circle <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">    <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">bottom</span> -<span class="number">10px</span></span><br><span class="line">    <span class="attribute">left</span> <span class="number">25px</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">50px</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">50px</span></span><br><span class="line">    <span class="attribute">border-radius</span> <span class="number">50%</span></span><br><span class="line">    <span class="attribute">background</span> <span class="number">#c56183</span></span><br><span class="line"></span><br><span class="line"><span class="selector-class">.wizard-triangle</span></span><br><span class="line">  <span class="attribute">position</span> absolute</span><br><span class="line">  <span class="attribute">bottom</span> -<span class="number">62px</span></span><br><span class="line">  <span class="attribute">left</span> -<span class="number">10px</span></span><br><span class="line">  <span class="attribute">width</span> <span class="number">110px</span></span><br><span class="line">  <span class="attribute">height</span> <span class="number">110px</span></span><br><span class="line">  <span class="attribute">border-radius</span> <span class="number">50%</span></span><br><span class="line">  -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  -webkit-<span class="attribute">animation</span> path_triangle <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="attribute">animation</span> path_triangle <span class="number">10s</span> ease-in-out infinite</span><br><span class="line">  <span class="selector-pseudo">&amp;::after</span></span><br><span class="line">    <span class="attribute">content</span> <span class="string">&quot;&quot;</span></span><br><span class="line">    <span class="attribute">position</span> absolute</span><br><span class="line">    <span class="attribute">top</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">right</span> -<span class="number">10px</span></span><br><span class="line">    <span class="attribute">width</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">height</span> <span class="number">0</span></span><br><span class="line">    <span class="attribute">border-style</span> solid</span><br><span class="line">    <span class="attribute">border-width</span> <span class="number">0</span> <span class="number">28px</span> <span class="number">48px</span> <span class="number">28px</span></span><br><span class="line">    <span class="attribute">border-color</span> transparent transparent <span class="number">#89beb3</span> transparent</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/** 10s animation - 10% = 1s */</span></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> right_arm</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">20deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">20deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">26deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">26deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">9deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">9deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">74deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">74deg</span>)</span><br><span class="line">  <span class="number">62%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> right_arm</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">20deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">20deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">26deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">26deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">9deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">9deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">28deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">74deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">74deg</span>)</span><br><span class="line">  <span class="number">62%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">70deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> left_arm</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">17deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">17deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">74deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">74deg</span>)</span><br><span class="line">  <span class="number">62%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> left_arm</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">17deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">17deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">18deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">74deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">74deg</span>)</span><br><span class="line">  <span class="number">62%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">70deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> right_hand</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">20deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">20deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">60%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> right_hand</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">20deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">20deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">60deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">60%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">40deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> right_finger</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> none</span><br><span class="line">    <span class="attribute">transform</span> none</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> none</span><br><span class="line">    <span class="attribute">transform</span> none</span><br><span class="line">  <span class="number">60%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> right_finger</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> none</span><br><span class="line">    <span class="attribute">transform</span> none</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> none</span><br><span class="line">    <span class="attribute">transform</span> none</span><br><span class="line">  <span class="number">60%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">16px</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> left_finger</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> left_finger</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">15%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">20%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">8deg</span>)</span><br><span class="line">  <span class="number">25%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">30%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">  <span class="number">35%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">40%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">45%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">1</span>) <span class="built_in">rotate</span>(<span class="number">6deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">scaleX</span>(<span class="number">0</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> head</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">0px</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">0px</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">56%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> head</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(<span class="number">7deg</span>)</span><br><span class="line">  <span class="number">50%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">0px</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translatex</span>(<span class="number">0px</span>) <span class="built_in">rotate</span>(<span class="number">0deg</span>)</span><br><span class="line">  <span class="number">56%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">3deg</span>)</span><br><span class="line"><span class="comment">/** 10s animation - 10% = 1s */</span></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> path_circle</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">55%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  <span class="number">63%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> path_circle</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">5deg</span>)</span><br><span class="line">  <span class="number">55%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">100px</span>) <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">  <span class="number">63%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> path_square</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">55%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">  <span class="number">57%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">  <span class="number">63%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> path_square</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">55%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">  <span class="number">57%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">155px</span>) <span class="built_in">translatex</span>(-<span class="number">15px</span>) <span class="built_in">rotate</span>(-<span class="number">350deg</span>)</span><br><span class="line">  <span class="number">63%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@-webkit-keyframes</span> path_triangle</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">55%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">  <span class="number">63%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> path_triangle</span><br><span class="line">  <span class="number">0%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(<span class="number">0</span>)</span><br><span class="line">  <span class="number">10%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">10deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">10deg</span>)</span><br><span class="line">  <span class="number">55%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">  <span class="number">58%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">translateY</span>(-<span class="number">172px</span>) <span class="built_in">translatex</span>(<span class="number">10px</span>) <span class="built_in">rotate</span>(-<span class="number">365deg</span>)</span><br><span class="line">  <span class="number">63%</span></span><br><span class="line">    -webkit-<span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br><span class="line">    <span class="attribute">transform</span> <span class="built_in">rotate</span>(-<span class="number">360deg</span>)</span><br></pre></td></tr></table></figure><h2 id="5、修改主题配置文件"><a href="#5、修改主题配置文件" class="headerlink" title="5、修改主题配置文件"></a>5、修改主题配置文件</h2><ul><li>在主题配置文件中找到<code>preloader</code>,修改如下</li></ul><figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Loading Animation (加载动画)</span></span><br><span class="line"><span class="attr">preloader:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># source</span></span><br><span class="line">  <span class="comment"># 1. fullpage-loading</span></span><br><span class="line">  <span class="comment"># 2. pace (progress bar)</span></span><br><span class="line">  <span class="comment"># 3. all</span></span><br><span class="line">  <span class="comment"># 4. wizard(custom)</span></span><br><span class="line">  <span class="attr">source:</span> <span class="number">4</span></span><br><span class="line">  <span class="comment"># pace theme (see https://codebyzach.github.io/pace/)</span></span><br><span class="line">  <span class="attr">pace_css_url:</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">xxx</span> <span class="comment"># 自定加载动画义头像</span></span><br></pre></td></tr></table></figure><h2 id="6、大功告成"><a href="#6、大功告成" class="headerlink" title="6、大功告成"></a>6、大功告成</h2><p>到这时候，如果你的文件配置正确，可以执行Hexo的三连命令来查看效果了！</p><ul><li>改动参考<div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://blog.meta-code.top/2022/06/18/2022-73/">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">【Hexo博客】自定义Butterfly主题 Loading 加载动画</div>            <div class="tag-link-sitename">百里飞洋</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note blue anzhiyufont anzhiyu-icon-bullhorn disabled&quot;&gt;&lt;p&gt;该方法需要对源码进行一定程度上的修改，在修改代码前请务必备份一份在本地&lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前</summary>
      
    
    
    
    
    <category term="Hexo" scheme="https://blog.cent1pedee.top/tags/Hexo/"/>
    
    <category term="美化" scheme="https://blog.cent1pedee.top/tags/%E7%BE%8E%E5%8C%96/"/>
    
    <category term="加载页" scheme="https://blog.cent1pedee.top/tags/%E5%8A%A0%E8%BD%BD%E9%A1%B5/"/>
    
  </entry>
  
  <entry>
    <title>Hexo美化：自适应切换渐进式加载首页图</title>
    <link href="https://blog.cent1pedee.top/posts/f730aac1.html"/>
    <id>https://blog.cent1pedee.top/posts/f730aac1.html</id>
    <published>2023-10-21T11:48:57.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<div class="note blue anzhiyufont anzhiyu-icon-bullhorn disabled"><p>该方法通过外部引入，无需修改主题源文件</p></div><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>随着互联网技术的发展，越来越多的人选择使用静态博客来展示自己的个人风格和内容。在一个偶然的机会下，我接触了<strong>Hexo</strong>静态博客的搭建与使用，并且对其进行了美化。</p><p>本文以本站使用的主题 <code>anzhiyu</code> 为例，介绍了如何为首页顶部图配置渐进式加载。渐进式加载是一种优化网页性能和用户体验的技术，它可以让图片在加载过程中逐渐显示出清晰度，从而避免了图片加载缓慢或失败时出现的空白或占位符。这个方法同样适用于一图流的博客背景，因此我们只需要更改部分代码即可实现本站首页效果。为了方便读者的阅读和参考，本文将详细描述操作步骤，并提供相关的截图和示例。在此，我要感谢<strong>石头姐</strong>提供了详细的配置教程，以及<strong>小旦</strong>为本站首页效果提供了宝贵的帮助。他们的博客链接如下：</p><div class="site-card-group"><a class="site-card" href="https://blog.kouseki.cn/" data-title=愿岁并谢，与友长兮><div class="wrapper cover"><img class="cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://blog.kouseki.cn/imgs/siteshot.webp"/></div><div class="info"><img class="flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://blog.kouseki.cn/imgs/avatar.webp"/><span class="site-title">kouseki</span></div></a><a class="site-card" href="https://satera.cn" data-title=SNTube Studio><div class="wrapper cover"><img class="cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/09/16/65052aa7c13c9.png"/></div><div class="info"><img class="flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://satera.cn/img/logo.png"/><span class="site-title">satera</span></div></a></div><p>通过本文的介绍，我希望能够帮助更多的<strong>Hexo</strong>用户实现渐进式加载的效果，提升博客的美观性和性能。</p><h1 id="样式预览"><a href="#样式预览" class="headerlink" title="样式预览"></a>样式预览</h1><details class="folding-tag" cyan open><summary> 渐进式加载预览效果 </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/09/28/6515293424689.gif"></p>              </div>            </details><ul><li>原理是先加载小图文件并进行高斯模糊处理，在大图加载完成后再对大图进行加载。</li></ul><h1 id="操作步骤"><a href="#操作步骤" class="headerlink" title="操作步骤"></a>操作步骤</h1><h2 id="1、新建文件"><a href="#1、新建文件" class="headerlink" title="1、新建文件"></a>1、新建文件</h2><ul><li>新建文件<code>themes/anzhiyu/source/js/imgloaded.js</code>新增以下内容，并按照注释调整照片路径</li></ul><div class="tabs" id="json"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="json-1">首页顶部图渐进式加载</button><button type="button" class="tab " data-href="json-2">首页一图流渐进式加载</button></ul><div class="tab-contents"><div class="tab-item-content active" id="json-1"><figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 首页头图加载优化</span></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * @description 实现medium的渐进加载背景的效果</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line">class ProgressiveLoad <span class="punctuation">&#123;</span></span><br><span class="line">    constructor(smallSrc<span class="punctuation">,</span> largeSrc) <span class="punctuation">&#123;</span></span><br><span class="line">      this.smallSrc = smallSrc;</span><br><span class="line">      this.largeSrc = largeSrc;</span><br><span class="line">      this.initTpl();</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  </span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * @description 生成ui模板</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    initTpl() <span class="punctuation">&#123;</span></span><br><span class="line">      this.container = document.createElement(&#x27;div&#x27;);</span><br><span class="line">      this.smallStage = document.createElement(&#x27;div&#x27;);</span><br><span class="line">      this.largeStage = document.createElement(&#x27;div&#x27;);</span><br><span class="line">      this.smallImg = new Image();</span><br><span class="line">      this.largeImg = new Image();</span><br><span class="line">      this.container.className = &#x27;pl-container&#x27;;</span><br><span class="line">      this.smallStage.className = &#x27;pl-img pl-blur&#x27;;</span><br><span class="line">      this.largeStage.className = &#x27;pl-img&#x27;;</span><br><span class="line">      this.container.appendChild(this.smallStage);</span><br><span class="line">      this.container.appendChild(this.largeStage);</span><br><span class="line">      this.smallImg.onload = this._onSmallLoaded.bind(this);</span><br><span class="line">      this.largeImg.onload = this._onLargeLoaded.bind(this);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  </span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * @description 加载背景</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    progressiveLoad() <span class="punctuation">&#123;</span></span><br><span class="line">      this.smallImg.src = this.smallSrc;</span><br><span class="line">      this.largeImg.src = this.largeSrc;</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  </span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * @description 大图加载完成</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    _onLargeLoaded() <span class="punctuation">&#123;</span></span><br><span class="line">      this.largeStage.classList.add(&#x27;pl-visible&#x27;);</span><br><span class="line">      this.largeStage.style.backgroundImage = `url(&#x27;$<span class="punctuation">&#123;</span>this.largeSrc<span class="punctuation">&#125;</span>&#x27;)`;</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  </span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * @description 小图加载完成</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    _onSmallLoaded() <span class="punctuation">&#123;</span></span><br><span class="line">      this.smallStage.classList.add(&#x27;pl-visible&#x27;);</span><br><span class="line">      this.smallStage.style.backgroundImage = `url(&#x27;$<span class="punctuation">&#123;</span>this.smallSrc<span class="punctuation">&#125;</span>&#x27;)`;</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line">  </span><br><span class="line">  const executeLoad = (config<span class="punctuation">,</span> target) =&gt; <span class="punctuation">&#123;</span></span><br><span class="line">    console.log(&#x27;执行渐进背景替换&#x27;);</span><br><span class="line">    const isMobile = window.matchMedia(&#x27;(max-width<span class="punctuation">:</span> <span class="number">767</span>px)&#x27;).matches;</span><br><span class="line">    const loader = new ProgressiveLoad(</span><br><span class="line">      isMobile ? config.mobileSmallSrc <span class="punctuation">:</span> config.smallSrc<span class="punctuation">,</span></span><br><span class="line">      isMobile ? config.mobileLargeSrc <span class="punctuation">:</span> config.largeSrc</span><br><span class="line">    );</span><br><span class="line">    <span class="comment">// 和背景图颜色保持一致，防止高斯模糊后差异较大</span></span><br><span class="line">    if (target.children<span class="punctuation">[</span><span class="number">0</span><span class="punctuation">]</span>) <span class="punctuation">&#123;</span></span><br><span class="line">      target.insertBefore(loader.container<span class="punctuation">,</span> target.children<span class="punctuation">[</span><span class="number">0</span><span class="punctuation">]</span>);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">    loader.progressiveLoad();</span><br><span class="line">  <span class="punctuation">&#125;</span>;</span><br><span class="line">  </span><br><span class="line">  const config = <span class="punctuation">&#123;</span></span><br><span class="line">    smallSrc<span class="punctuation">:</span> &#x27;/img/xiaotu.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 小图链接 尽可能配置小于100k的图片</span></span><br><span class="line">    largeSrc<span class="punctuation">:</span> &#x27;/img/tu.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 大图链接 最终显示的图片</span></span><br><span class="line">    mobileSmallSrc<span class="punctuation">:</span> &#x27;/img/sjxt.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 手机端小图链接 尽可能配置小于100k的图片</span></span><br><span class="line">    mobileLargeSrc<span class="punctuation">:</span> &#x27;/img/sjdt.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 手机端大图链接 最终显示的图片</span></span><br><span class="line">    enableRoutes<span class="punctuation">:</span> <span class="punctuation">[</span>&#x27;/&#x27;<span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#125;</span>;</span><br><span class="line"></span><br><span class="line">  function initProgressiveLoad(config) <span class="punctuation">&#123;</span></span><br><span class="line">    const target = document.getElementById(&#x27;page-header&#x27;);</span><br><span class="line">    if (target &amp;&amp; target.classList.contains(&#x27;full_page&#x27;)) <span class="punctuation">&#123;</span></span><br><span class="line">      executeLoad(config<span class="punctuation">,</span> target);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line">  </span><br><span class="line">  function onPJAXComplete(config) <span class="punctuation">&#123;</span></span><br><span class="line">    const target = document.getElementById(&#x27;page-header&#x27;);</span><br><span class="line">    if (target &amp;&amp; target.classList.contains(&#x27;full_page&#x27;)) <span class="punctuation">&#123;</span></span><br><span class="line">      initProgressiveLoad(config);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">  document.addEventListener(<span class="string">&quot;DOMContentLoaded&quot;</span><span class="punctuation">,</span> function() <span class="punctuation">&#123;</span></span><br><span class="line">    initProgressiveLoad(config);</span><br><span class="line">  <span class="punctuation">&#125;</span>);</span><br><span class="line">  </span><br><span class="line">  document.addEventListener(<span class="string">&quot;pjax:complete&quot;</span><span class="punctuation">,</span> function() <span class="punctuation">&#123;</span></span><br><span class="line">    onPJAXComplete(config);</span><br><span class="line">  <span class="punctuation">&#125;</span>);</span><br><span class="line">  </span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="json-2"><figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 首页一图流加载优化</span></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * @description 实现medium的渐进加载背景的效果</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line">(function() <span class="punctuation">&#123;</span></span><br><span class="line">  class ProgressiveLoad <span class="punctuation">&#123;</span></span><br><span class="line">    constructor(smallSrc<span class="punctuation">,</span> largeSrc) <span class="punctuation">&#123;</span></span><br><span class="line">      this.smallSrc = smallSrc;</span><br><span class="line">      this.largeSrc = largeSrc;</span><br><span class="line">      this.initTpl();</span><br><span class="line">      this.container.addEventListener(&#x27;animationend&#x27;<span class="punctuation">,</span> () =&gt; <span class="punctuation">&#123;</span></span><br><span class="line">        this.smallStage.style.display = &#x27;none&#x27;; </span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span> <span class="punctuation">&#123;</span>once<span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">&#125;</span>);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">    initTpl() <span class="punctuation">&#123;</span></span><br><span class="line">      this.container = document.createElement(&#x27;div&#x27;);</span><br><span class="line">      this.smallStage = document.createElement(&#x27;div&#x27;);</span><br><span class="line">      this.largeStage = document.createElement(&#x27;div&#x27;);</span><br><span class="line">      this.smallImg = new Image();</span><br><span class="line">      this.largeImg = new Image();</span><br><span class="line">      this.container.className = &#x27;pl-container&#x27;;</span><br><span class="line">      this.smallStage.className = &#x27;pl-img pl-blur&#x27;;</span><br><span class="line">      this.largeStage.className = &#x27;pl-img&#x27;;</span><br><span class="line">      this.container.appendChild(this.smallStage);</span><br><span class="line">      this.container.appendChild(this.largeStage);</span><br><span class="line">      this.smallImg.onload = this._onSmallLoaded.bind(this);</span><br><span class="line">      this.largeImg.onload = this._onLargeLoaded.bind(this);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">    progressiveLoad() <span class="punctuation">&#123;</span></span><br><span class="line">      this.smallImg.src = this.smallSrc;</span><br><span class="line">      this.largeImg.src = this.largeSrc;</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">    _onLargeLoaded() <span class="punctuation">&#123;</span></span><br><span class="line">      this.largeStage.classList.add(&#x27;pl-visible&#x27;);</span><br><span class="line">      this.largeStage.style.backgroundImage = `url(&#x27;$<span class="punctuation">&#123;</span>this.largeSrc<span class="punctuation">&#125;</span>&#x27;)`;</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">    _onSmallLoaded() <span class="punctuation">&#123;</span></span><br><span class="line">      this.smallStage.classList.add(&#x27;pl-visible&#x27;);</span><br><span class="line">      this.smallStage.style.backgroundImage = `url(&#x27;$<span class="punctuation">&#123;</span>this.smallSrc<span class="punctuation">&#125;</span>&#x27;)`;</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">  const executeLoad = (config<span class="punctuation">,</span> target) =&gt; <span class="punctuation">&#123;</span></span><br><span class="line">    console.log(&#x27;执行渐进背景替换&#x27;);</span><br><span class="line">    const isMobile = window.matchMedia(&#x27;(max-width<span class="punctuation">:</span> <span class="number">767</span>px)&#x27;).matches;</span><br><span class="line">    const loader = new ProgressiveLoad(</span><br><span class="line">      isMobile ? config.mobileSmallSrc <span class="punctuation">:</span> config.smallSrc<span class="punctuation">,</span></span><br><span class="line">      isMobile ? config.mobileLargeSrc <span class="punctuation">:</span> config.largeSrc</span><br><span class="line">    );</span><br><span class="line">    if (target.children<span class="punctuation">[</span><span class="number">0</span><span class="punctuation">]</span>) <span class="punctuation">&#123;</span></span><br><span class="line">      target.insertBefore(loader.container<span class="punctuation">,</span> target.children<span class="punctuation">[</span><span class="number">0</span><span class="punctuation">]</span>);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">    loader.progressiveLoad();</span><br><span class="line">  <span class="punctuation">&#125;</span>;</span><br><span class="line"></span><br><span class="line">  const ldconfig = <span class="punctuation">&#123;</span></span><br><span class="line">    light<span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">  smallSrc<span class="punctuation">:</span> &#x27;/img/bg2_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//浅色模式 小图链接 尽可能配置小于100k的图片 </span></span><br><span class="line">  largeSrc<span class="punctuation">:</span> &#x27;/img/bg2.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//浅色模式 大图链接 最终显示的图片</span></span><br><span class="line">  mobileSmallSrc<span class="punctuation">:</span> &#x27;/img/bg2_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端浅色小图链接 尽可能配置小于100k的图片</span></span><br><span class="line">  mobileLargeSrc<span class="punctuation">:</span> &#x27;/img/bg2.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端浅色大图链接 最终显示的图片</span></span><br><span class="line">  enableRoutes<span class="punctuation">:</span> <span class="punctuation">[</span>&#x27;/&#x27;<span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">dark<span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">  smallSrc<span class="punctuation">:</span> &#x27;/img/bg1_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//深色模式 小图链接 尽可能配置小于100k的图片 </span></span><br><span class="line">  largeSrc<span class="punctuation">:</span> &#x27;/img/bg1.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//深色模式 大图链接 最终显示的图片</span></span><br><span class="line">  mobileSmallSrc<span class="punctuation">:</span> &#x27;/img/bg1_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端深色模式小图链接 尽可能配置小于100k的图片</span></span><br><span class="line">  mobileLargeSrc<span class="punctuation">:</span> &#x27;/img/bg1.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端深色大图链接 最终显示的图片</span></span><br><span class="line">  enableRoutes<span class="punctuation">:</span> <span class="punctuation">[</span>&#x27;/&#x27;<span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"><span class="punctuation">&#125;</span>;</span><br><span class="line"></span><br><span class="line">    const getCurrentTheme = () =&gt; <span class="punctuation">&#123;</span></span><br><span class="line">      return document.documentElement.getAttribute(&#x27;data-theme&#x27;); </span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">    const onThemeChange = () =&gt; <span class="punctuation">&#123;</span></span><br><span class="line">      const currentTheme = getCurrentTheme();</span><br><span class="line">      const config = ldconfig<span class="punctuation">[</span>currentTheme<span class="punctuation">]</span>;</span><br><span class="line">      initProgressiveLoad(config);</span><br><span class="line">      document.addEventListener(<span class="string">&quot;DOMContentLoaded&quot;</span><span class="punctuation">,</span> function() <span class="punctuation">&#123;</span></span><br><span class="line">        initProgressiveLoad(config);</span><br><span class="line">      <span class="punctuation">&#125;</span>);</span><br><span class="line">    </span><br><span class="line">      document.addEventListener(<span class="string">&quot;pjax:complete&quot;</span><span class="punctuation">,</span> function() <span class="punctuation">&#123;</span></span><br><span class="line">        onPJAXComplete(config);</span><br><span class="line">      <span class="punctuation">&#125;</span>);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">    let initTheme = getCurrentTheme();</span><br><span class="line">    let initConfig = ldconfig<span class="punctuation">[</span>initTheme<span class="punctuation">]</span>;</span><br><span class="line">    initProgressiveLoad(initConfig);</span><br><span class="line"></span><br><span class="line">  const observer = new MutationObserver(mutations =&gt; <span class="punctuation">&#123;</span></span><br><span class="line">    mutations.forEach(mutation =&gt; <span class="punctuation">&#123;</span></span><br><span class="line">      if (mutation.attributeName === <span class="string">&quot;data-theme&quot;</span> &amp;&amp; location.pathname === &#x27;/&#x27;) <span class="punctuation">&#123;</span></span><br><span class="line">        onThemeChange();</span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span>);</span><br><span class="line">  <span class="punctuation">&#125;</span>);</span><br><span class="line">  </span><br><span class="line">  observer.observe(document.documentElement<span class="punctuation">,</span> <span class="punctuation">&#123;</span></span><br><span class="line">    attributes<span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    attributeFilter<span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;data-theme&quot;</span><span class="punctuation">]</span>  </span><br><span class="line">  <span class="punctuation">&#125;</span>);</span><br><span class="line"></span><br><span class="line">  function initProgressiveLoad(config) <span class="punctuation">&#123;</span></span><br><span class="line">    const container = document.querySelector(&#x27;.pl-container&#x27;);</span><br><span class="line">    if (container) <span class="punctuation">&#123;</span></span><br><span class="line">      container.remove();</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">    const target = document.getElementById(&#x27;page-header&#x27;);</span><br><span class="line">    if (target &amp;&amp; target.classList.contains(&#x27;full_page&#x27;)) <span class="punctuation">&#123;</span></span><br><span class="line">      executeLoad(config<span class="punctuation">,</span> target);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">  function onPJAXComplete(config) <span class="punctuation">&#123;</span></span><br><span class="line">    const target = document.getElementById(&#x27;page-header&#x27;);</span><br><span class="line">    if (target &amp;&amp; target.classList.contains(&#x27;full_page&#x27;)) <span class="punctuation">&#123;</span></span><br><span class="line">      initProgressiveLoad(config);</span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line"><span class="punctuation">&#125;</span>)();</span><br><span class="line"></span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><ul><li>新建文件<code>themes/anzhiyu/source/css/imgloaded.css</code>新增以下内容，并按照注释自行决定调整内容</li></ul><div class="tabs" id="css"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="css-1">首页顶部图渐进式加载</button><button type="button" class="tab " data-href="css-2">首页一图流渐进式加载</button></ul><div class="tab-contents"><div class="tab-item-content active" id="css-1"><figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* 首页头图加载 */</span>  </span><br><span class="line"><span class="selector-class">.pl-container</span> &#123;  </span><br><span class="line">  <span class="attribute">width</span>: <span class="number">100%</span>;  </span><br><span class="line">  <span class="attribute">height</span>: <span class="number">100%</span>;  </span><br><span class="line">  <span class="attribute">position</span>: relative;  <span class="comment">/* 一图流这里改fixed */</span>  </span><br><span class="line">  <span class="comment">/* 一图流这里加z-index: -2; */</span> </span><br><span class="line">  <span class="attribute">overflow</span>: hidden;  </span><br><span class="line">  <span class="attribute">will-change</span>: transform; <span class="comment">/* 添加性能优化 */</span>  </span><br><span class="line">  <span class="comment">/* blur-to-clear模糊动画2s */</span></span><br><span class="line">  <span class="attribute">animation</span>: blur-to-clear <span class="number">2s</span> <span class="built_in">cubic-bezier</span>(.<span class="number">62</span>,.<span class="number">21</span>,.<span class="number">25</span>,<span class="number">1</span>) <span class="number">0s</span> <span class="number">1</span> normal backwards running, scale <span class="number">1.5s</span> <span class="built_in">cubic-bezier</span>(.<span class="number">62</span>,.<span class="number">21</span>,.<span class="number">25</span>,<span class="number">1</span>) <span class="number">0s</span> <span class="number">1</span> both;  </span><br><span class="line">&#125;  </span><br><span class="line"><span class="selector-class">.pl-img</span> &#123;  </span><br><span class="line">  <span class="attribute">width</span>: <span class="number">100%</span>;  </span><br><span class="line">  <span class="attribute">height</span>: <span class="number">100%</span>;  </span><br><span class="line">  <span class="attribute">position</span>: absolute;  </span><br><span class="line">  <span class="attribute">background-position</span>: center;  </span><br><span class="line">  <span class="attribute">background-size</span>: cover;  </span><br><span class="line">  <span class="attribute">background-repeat</span>: no-repeat;  </span><br><span class="line">  <span class="attribute">opacity</span>: <span class="number">0</span>;  </span><br><span class="line">  <span class="attribute">transition</span>: opacity <span class="number">1s</span>;  </span><br><span class="line">&#125;  </span><br><span class="line">  </span><br><span class="line"><span class="keyword">@keyframes</span> blur-to-clear &#123;  </span><br><span class="line">  <span class="number">0%</span> &#123;  </span><br><span class="line">    <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">50px</span>);  </span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">1</span>;  </span><br><span class="line">  &#125;  </span><br><span class="line">  <span class="number">100%</span> &#123;  </span><br><span class="line">    <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">0</span>);  </span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">1</span>;  </span><br><span class="line">  &#125;  </span><br><span class="line">&#125;  </span><br><span class="line">  </span><br><span class="line"><span class="keyword">@keyframes</span> scale &#123;  </span><br><span class="line">  <span class="number">0%</span> &#123;  </span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1.5</span>) <span class="built_in">translateZ</span>(<span class="number">0</span>);  </span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">0</span>;  </span><br><span class="line">  &#125;  </span><br><span class="line">  <span class="selector-tag">to</span> &#123;  </span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1</span>) <span class="built_in">translateZ</span>(<span class="number">0</span>);  </span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">1</span>;  </span><br><span class="line">  &#125;  </span><br><span class="line">&#125;  </span><br><span class="line">  </span><br><span class="line"><span class="selector-class">.pl-visible</span> &#123;  </span><br><span class="line">  <span class="attribute">opacity</span>: <span class="number">1</span>;  </span><br><span class="line">&#125;  </span><br><span class="line">  </span><br><span class="line"><span class="selector-class">.pl-blur</span> &#123;  </span><br><span class="line">  <span class="comment">/* 小图锯齿多，增加高斯模糊 */</span>  </span><br><span class="line">  <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">50px</span>);  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="css-2"><figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* 首页头图加载 */</span></span><br><span class="line"><span class="selector-class">.pl-container</span> &#123;</span><br><span class="line">  <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line">  <span class="attribute">height</span>: <span class="number">100%</span>;</span><br><span class="line">  <span class="attribute">z-index</span>: -<span class="number">2</span>;</span><br><span class="line">  <span class="attribute">position</span>: fixed;</span><br><span class="line">  <span class="attribute">overflow</span>: hidden;</span><br><span class="line">  <span class="attribute">will-change</span>: transform; <span class="comment">/* 添加性能优化 */</span></span><br><span class="line">  <span class="attribute">animation</span>: blur-to-clear <span class="number">2s</span> <span class="built_in">cubic-bezier</span>(.<span class="number">62</span>,.<span class="number">21</span>,.<span class="number">25</span>,<span class="number">1</span>) <span class="number">0s</span> <span class="number">1</span> normal backwards running, scale <span class="number">1.5s</span> <span class="built_in">cubic-bezier</span>(.<span class="number">62</span>,.<span class="number">21</span>,.<span class="number">25</span>,<span class="number">1</span>) <span class="number">0s</span> <span class="number">1</span> both;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.pl-img</span> &#123;</span><br><span class="line">  <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line">  <span class="attribute">height</span>: <span class="number">100%</span>;</span><br><span class="line">  <span class="attribute">position</span>: absolute;</span><br><span class="line">  <span class="attribute">background-position</span>: center;</span><br><span class="line">  <span class="attribute">background-size</span>: cover;</span><br><span class="line">  <span class="attribute">background-repeat</span>: no-repeat;</span><br><span class="line">  <span class="attribute">opacity</span>: <span class="number">0</span>;</span><br><span class="line">  <span class="attribute">transition</span>: opacity <span class="number">1s</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> blur-to-clear &#123;</span><br><span class="line">  <span class="number">0%</span> &#123;</span><br><span class="line">    <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">50px</span>);</span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">1</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="number">100%</span> &#123;</span><br><span class="line">    <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">0</span>);</span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">1</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> scale &#123;</span><br><span class="line">  <span class="number">0%</span> &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1.5</span>) <span class="built_in">translateZ</span>(<span class="number">0</span>);</span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">0</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="selector-tag">to</span> &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1</span>) <span class="built_in">translateZ</span>(<span class="number">0</span>);</span><br><span class="line">    <span class="attribute">opacity</span>: <span class="number">1</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.pl-visible</span> &#123;</span><br><span class="line">  <span class="attribute">opacity</span>: <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.pl-blur</span> &#123;</span><br><span class="line">  <span class="comment">/* 小图锯齿多，增加高斯模糊 */</span></span><br><span class="line">  <span class="attribute">filter</span>: <span class="built_in">blur</span>(<span class="number">50px</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="2、引入文件"><a href="#2、引入文件" class="headerlink" title="2、引入文件"></a>2、引入文件</h2><ul><li>在<code>_config.anzhiyu.yml</code>主题配置文件下<code>inject</code>配置项中<code>head</code>和<code>bottom</code>处</li><li>分别引入<code>imgloaded.css</code>和<code>imgloaded.js</code>文件</li></ul><figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">inject:</span>  </span><br><span class="line">  <span class="attr">head:</span>  </span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/css/imgloaded.css?1&quot;&gt;</span>  </span><br><span class="line">  </span><br><span class="line">  <span class="attr">bottom:</span>  </span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">async</span> <span class="string">data-pjax</span> <span class="string">src=&quot;/js/imgloaded.js?1&quot;&gt;&lt;/script&gt;</span> <span class="comment"># 首页图片渐进式加载</span></span><br></pre></td></tr></table></figure><h2 id="3、配置图片"><a href="#3、配置图片" class="headerlink" title="3、配置图片"></a>3、配置图片</h2><ul><li>为了使用顶部图功能，你必须在主题配置文件中设置<code>top_image</code>为<code>true</code>。然后，你可以在<code>top_image_url</code>中留空或者填写任意字符串，因为这个值不会影响图片的显示。图片的加载和渲染是由js文件实现的，所以你不需要在配置文件中提供图片的源地址。</li></ul><figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># The banner image of home page</span></span><br><span class="line"><span class="attr">index_img:</span> <span class="string">&quot;background: url() top / cover no-repeat&quot;</span></span><br></pre></td></tr></table></figure><ul><li>在<code>imgloaded.js</code>中的73到76行（或是83到86行）修改以下示例的部分</li><li>若是首页一图流渐进式加载的<code>imgloaded.js</code>则修改56到71行</li></ul><div class="tabs" id="imgloaded.js"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="imgloaded.js-1">首页顶部图渐进式加载</button><button type="button" class="tab " data-href="imgloaded.js-2">首页一图流渐进式加载</button></ul><div class="tab-contents"><div class="tab-item-content active" id="imgloaded.js-1"><figure class="highlight json"><table><tr><td class="code"><pre><span class="line">const config = <span class="punctuation">&#123;</span>  </span><br><span class="line">  smallSrc<span class="punctuation">:</span> &#x27;/img/xiaotu.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 小图链接 尽可能配置小于100k的图片  </span></span><br><span class="line">  largeSrc<span class="punctuation">:</span> &#x27;/img/tu.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 大图链接 最终显示的图片  </span></span><br><span class="line">  mobileSmallSrc<span class="punctuation">:</span> &#x27;/img/sjxt.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 手机端小图链接 尽可能配置小于100k的图片  </span></span><br><span class="line">  mobileLargeSrc<span class="punctuation">:</span> &#x27;/img/sjdt.jpg&#x27;<span class="punctuation">,</span> <span class="comment">// 手机端大图链接 最终显示的图片  </span></span><br><span class="line">  enableRoutes<span class="punctuation">:</span> <span class="punctuation">[</span>&#x27;/&#x27;<span class="punctuation">]</span><span class="punctuation">,</span>  </span><br><span class="line">  <span class="punctuation">&#125;</span>;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="imgloaded.js-2"><figure class="highlight json"><table><tr><td class="code"><pre><span class="line">const ldconfig = <span class="punctuation">&#123;</span></span><br><span class="line">    light<span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    smallSrc<span class="punctuation">:</span> &#x27;/img/bg2_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//浅色模式 小图链接 尽可能配置小于100k的图片 </span></span><br><span class="line">    largeSrc<span class="punctuation">:</span> &#x27;/img/bg2.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//浅色模式 大图链接 最终显示的图片</span></span><br><span class="line">    mobileSmallSrc<span class="punctuation">:</span> &#x27;/img/bg2_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端浅色小图链接 尽可能配置小于100k的图片</span></span><br><span class="line">    mobileLargeSrc<span class="punctuation">:</span> &#x27;/img/bg2.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端浅色大图链接 最终显示的图片</span></span><br><span class="line">    enableRoutes<span class="punctuation">:</span> <span class="punctuation">[</span>&#x27;/&#x27;<span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    dark<span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    smallSrc<span class="punctuation">:</span> &#x27;/img/bg1_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//深色模式 小图链接 尽可能配置小于100k的图片 </span></span><br><span class="line">    largeSrc<span class="punctuation">:</span> &#x27;/img/bg1.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//深色模式 大图链接 最终显示的图片</span></span><br><span class="line">    mobileSmallSrc<span class="punctuation">:</span> &#x27;/img/bg1_80kbver.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端深色模式小图链接 尽可能配置小于100k的图片</span></span><br><span class="line">    mobileLargeSrc<span class="punctuation">:</span> &#x27;/img/bg1.jpg&#x27;<span class="punctuation">,</span> <span class="comment">//手机端深色大图链接 最终显示的图片</span></span><br><span class="line">    enableRoutes<span class="punctuation">:</span> <span class="punctuation">[</span>&#x27;/&#x27;<span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"><span class="punctuation">&#125;</span>;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="4、图片懒加载配置修改"><a href="#4、图片懒加载配置修改" class="headerlink" title="4、图片懒加载配置修改"></a>4、图片懒加载配置修改</h2><ul><li>本文的这一部分是根据<strong>小旦</strong>的概括而写的，作者在此注明出处。</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">lazyload:</span><br><span class="line">  enable: true</span><br><span class="line">  field: post # site/post</span><br><span class="line">  placeholder:</span><br><span class="line">  blur: true</span><br><span class="line">  progressive: true</span><br></pre></td></tr></table></figure><h2 id="5、大功告成"><a href="#5、大功告成" class="headerlink" title="5、大功告成"></a>5、大功告成</h2><p>到这时候，如果你的图片文件配置正确，可以执行Hexo的三连命令来查看效果了！</p><ul><li>部分教程链接：<div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://blog.kouseki.cn/posts/4f72.html">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">首页背景图渐进式加载，解决卡顿难题</div>            <div class="tag-link-sitename">铭心石刻</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div><div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://satera.cn/posts/6a8fb549/">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">Kouseki式首页背景图渐进式加载 · 改</div>            <div class="tag-link-sitename">小旦</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note blue anzhiyufont anzhiyu-icon-bullhorn disabled&quot;&gt;&lt;p&gt;该方法通过外部引入，无需修改主题源文件&lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;header</summary>
      
    
    
    
    
    <category term="Hexo" scheme="https://blog.cent1pedee.top/tags/Hexo/"/>
    
    <category term="美化" scheme="https://blog.cent1pedee.top/tags/%E7%BE%8E%E5%8C%96/"/>
    
    <category term="背景" scheme="https://blog.cent1pedee.top/tags/%E8%83%8C%E6%99%AF/"/>
    
  </entry>
  
  <entry>
    <title>Git基础命令速查表：简明指南</title>
    <link href="https://blog.cent1pedee.top/posts/6e3d8d51.html"/>
    <id>https://blog.cent1pedee.top/posts/6e3d8d51.html</id>
    <published>2023-09-25T23:53:30.000Z</published>
    <updated>2025-02-23T02:44:08.239Z</updated>
    
    <content type="html"><![CDATA[<p>Git部分基础知识转载自<a href="https://learn.microsoft.com/zh-cn/devops/develop/git/what-is-git">Microsoft DevOps 什么是Git?</a></p><p>Git基础命令速查，以便后续快速使用Git命令</p><hr><h1 id="什么是Git"><a href="#什么是Git" class="headerlink" title="什么是Git?"></a>什么是Git?</h1><p>Git 已成为版本控制的全球标准。 那么，它到底是什么？</p><p>Git 是分布式版本控制系统，这意味着项目的本地克隆是完整的版本控制存储库。 通过这些功能齐全的本地存储库，无论脱机还是远程都能轻松工作。 开发人员在本地提交工作，然后将存储库的副本与服务器上的副本同步。 这种范例不同于集中式版本控制，后者要求客户端必须先与服务器同步代码，然后才能创建新版代码。</p><p>Git 的灵活性和受欢迎程度使其成为任何团队的绝佳选择。 许多开发人员和大学毕业生已经知道如何使用 Git。 Git 的用户社区已创建资源来训练开发人员和 Git 的受欢迎程度，以便在需要时轻松获取帮助。 几乎每个开发环境都有 Git 支持和 Git 命令行工具在每个主要操作系统上实现。</p><h1 id="Git基础知识"><a href="#Git基础知识" class="headerlink" title="Git基础知识"></a>Git基础知识</h1><p>每次保存工作时，Git 都会创建提交。 提交是某个时间点所有文件的快照。 如果文件未从一个提交更改为下一个提交，Git 将使用以前存储的文件。 此设计不同于存储文件的初始版本并随时间推移保留增量记录的其他系统。</p><div class="img-wrap"><div class="img-bg"><img class="img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://learn.microsoft.com/zh-cn/devops/_img/linear_straight_line.png"/></div></div><p>提交创建指向其他提交的链接，形成开发历史记录的图。 可以将代码还原到以前的提交，检查文件如何从一个提交更改为下一个提交，并查看更改的位置和时间等信息。 提交通过提交内容的唯一加密哈希在 Git 中标识。 由于所有内容都经过哈希处理，因此在未检测到 Git 的情况下无法进行更改、丢失信息或损坏文件。</p><h2 id="分支"><a href="#分支" class="headerlink" title="分支"></a>分支</h2><p>每个开发人员将更改保存到自己的本地代码存储库。 因此，根据同一提交，可能会进行许多不同的更改。 Git 提供了用于隔离更改并在以后将它们重新合并在一起的工具。 分支是用于工作的轻型指针，可管理此分离。 在分支中创建的工作完成后，可以合并回团队的主分支（或主干）。</p><div class="img-wrap"><div class="img-bg"><img class="img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://learn.microsoft.com/zh-cn/devops/_img/branching_line.png"/></div></div><h2 id="文件和提交"><a href="#文件和提交" class="headerlink" title="文件和提交"></a>文件和提交</h2><p>Git 中的文件处于以下三种状态之一：已修改、暂存或提交。 首次修改文件时，更改仅存在于工作目录中。 它们尚不属于提交或开发历史记录。 开发人员必须 暂存 提交中要包含的已更改文件。 暂存区域包含下一个提交中要包括的所有更改。 开发人员对暂存文件感到满意后，文件将打包为 提交 ，其中包含描述更改的内容的消息。 此提交将成为开发历史记录的一部分。</p><div class="img-wrap"><div class="img-bg"><img class="img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://learn.microsoft.com/zh-cn/devops/_img/file_status_lifecycle.2.png"/></div></div><p>暂存允许开发人员选择要在提交中保存的文件更改，以便将大型更改分解为一系列较小的提交。 通过减少提交范围，可以更轻松地查看提交历史记录以查找特定文件更改。</p><h2 id="Git的优势"><a href="#Git的优势" class="headerlink" title="Git的优势"></a>Git的优势</h2><h3 id="同时开发"><a href="#同时开发" class="headerlink" title="同时开发"></a>同时开发</h3><p>每个人都有自己的本地代码副本，并且可以在自己的分支上同时工作。 Git 脱机工作，因为几乎所有操作都是本地操作。</p><h3 id="更快的版本"><a href="#更快的版本" class="headerlink" title="更快的版本"></a>更快的版本</h3><p>分支允许灵活且同时进行开发。 主分支包含发布的稳定、高质量的代码。 功能分支包含正在进行的工作，这些工作在完成后合并到主分支中。 通过将发布分支与正在进行的开发分开，可以更轻松地管理稳定的代码并更快地交付更新。</p><h3 id="内置集成"><a href="#内置集成" class="headerlink" title="内置集成"></a>内置集成</h3><p>由于它的受欢迎程度，Git 集成到大多数工具和产品中。 每个主要 IDE 都有内置的 Git 支持，许多工具都支持持续集成、持续部署、自动测试、工作项跟踪、指标和报告功能与 Git 集成。 此集成简化了日常工作流。</p><h3 id="强大的社区支持"><a href="#强大的社区支持" class="headerlink" title="强大的社区支持"></a>强大的社区支持</h3><p>Git 是开源的，已成为版本控制的事实标准。 团队利用的工具和资源并不短缺。 与其他版本控制系统相比，社区对 Git 的支持量使得在需要时可以轻松获取帮助。</p><h3 id="Git与任何团队合作"><a href="#Git与任何团队合作" class="headerlink" title="Git与任何团队合作"></a>Git与任何团队合作</h3><p>通过鼓励协作、强制实施策略、自动化流程以及提高工作的可见性和可追溯性，将 Git 与源代码管理工具配合使用可以提高团队的工作效率。 团队可以针对各个工具进行版本控制、工作项跟踪以及持续集成和部署。 或者，他们可以选择一个解决方案，例如<a href="https://github.com/">GitHub</a>或<a href="https://azure.microsoft.com/zh-cn/products/devops/repos/">Azure DevOps</a> ，该解决方案支持所有这些任务。</p><h3 id="拉取请求"><a href="#拉取请求" class="headerlink" title="拉取请求"></a>拉取请求</h3><p>在将代码更改合并到主分支之前，请使用<a href="https://learn.microsoft.com/zh-cn/devops/develop/git/git-pull-requests">拉取请求</a>与团队讨论代码更改。 拉取请求中的讨论对于确保代码质量并提高团队的知识非常重要。 GitHub 和 Azure DevOps 等平台提供了丰富的拉取请求体验，开发人员可以浏览文件更改、留下批注、检查提交、查看生成和投票以批准代码。</p><h3 id="分支策略"><a href="#分支策略" class="headerlink" title="分支策略"></a>分支策略</h3><p>Teams 可以将 GitHub 和 Azure DevOps 配置为在整个团队中强制实施一致的工作流和流程。 他们可以设置<a href="https://learn.microsoft.com/zh-cn/azure/devops/repos/git/branch-policies?view=azure-devops&tabs=browser">分支策略</a>，以确保拉取请求满足完成前的要求。 分支策略通过防止直接推送、要求审阅者并确保干净生成来保护重要分支。</p><h1 id="常用Git命令清单"><a href="#常用Git命令清单" class="headerlink" title="常用Git命令清单"></a>常用Git命令清单</h1><p>在开始使用Git之前，我们需要先安装Git软件。Git是一个分布式版本控制系统，支持在Linux&#x2F;Unix、Solaris、Mac和Windows等多个平台上运行。</p><p>你可以从git-scm.com&#x2F;downloads这个网站下载适合你操作系统的Git安装包。如果你的系统是Windows，你可以访问npm.taobao.org&#x2F;mirrors&#x2F;git来下载安装Git。安装Git后，你还需要进行一些配置来使其正常工作。</p><p>以上是使用Git前需要安装Git软件的概述，具体的安装和配置过程可以参考菜鸟教程（runoob.com）上的相关指南。</p><p>以下Git命令转载自稀土掘金<a href="https://juejin.cn/post/7133507623399194661#heading-4"><strong>奇想派</strong></a>，侵权请联系站长删除。</p><h2 id="创建仓库命令"><a href="#创建仓库命令" class="headerlink" title="创建仓库命令"></a>创建仓库命令</h2><ul><li><p><code>git init</code>: 初始化仓库就是在当前目录下创建一个.git目录，用于存储Git所需的元数据和文件版本记录。该目录包含了objects、refs&#x2F;head、refs&#x2F;tags和模板文件等基本部分。</p></li><li><p><code>git clone [url]</code>: 拷贝一份远程仓库，也就是下载一个项目和它的整个代码历史。</p></li></ul><h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><ul><li><p><code>git config --list</code>: 显示当前的Git配置</p></li><li><p><code>git config -e [--global]</code>: 编辑Git配置文件</p></li><li><p><code>git config [--global] user.name &quot;[name]&quot; / git config [--global] user.email &quot;[email address]&quot;</code>: 设置提交代码时的用户信息</p></li></ul><h2 id="增加-删除文件"><a href="#增加-删除文件" class="headerlink" title="增加&#x2F;删除文件"></a>增加&#x2F;删除文件</h2><ul><li><p><code>git add [file1] [file2] ...</code>: 添加指定文件到暂存区</p></li><li><p><code>git add [dir]</code>: 添加指定目录到暂存区，包括子目录</p></li><li><p><code>git add .</code>: 添加当前目录的所有文件到暂存区</p></li><li><p><code>git add -p</code>: 添加每个变化前，都会要求确认，对于同一个文件的多处变化，可以实现分次提交</p></li><li><p><code>git rm [file1] [file2] ...</code>: 删除工作区文件，并且将这次删除放入暂存区</p></li><li><p><code>git rm --cached [file]</code>: 停止追踪指定文件，但该文件会保留在工作区</p></li><li><p><code>git mv [file-original] [file-renamed]</code>: 改名文件，并且将这个改名放入暂存区</p></li></ul><h2 id="代码提交"><a href="#代码提交" class="headerlink" title="代码提交"></a>代码提交</h2><ul><li><p><code>git commit -m [message]</code>: 提交暂存区到仓库区</p></li><li><p><code>git commit [file1] [file2] ... -m [message]</code>: 提交暂存区的指定文件到仓库区</p></li><li><p><code>git commit -a</code>: 提交工作区自上次commit之后的变化，直接到仓库区</p></li><li><p><code>git commit -v</code>: 提交时显示所有diff信息</p></li><li><p><code>git commit --amend -m [message]</code>: 使用一次新的commit，替代上一次提交。如果代码没有任何新变化，则用来改写上一次commit的提交信息</p></li><li><p><code>git commit --amend [file1] [file2] ...</code>: 重做上一次commit，并包括指定文件的新变化</p></li></ul><h2 id="分支-1"><a href="#分支-1" class="headerlink" title="分支"></a>分支</h2><ul><li><p><code>git branch</code>: 列出所有本地分支</p></li><li><p><code>git branch -r</code>: 列出所有远程分支</p></li><li><p><code>git branch -a</code>: 列出所有本地分支和远程分支</p></li><li><p><code>git branch [branch-name]</code>: 新建一个分支，但依然停留在当前分支</p></li><li><p><code>git checkout -b [branch]</code>: 新建一个分支，并切换到该分支</p></li><li><p><code>git branch [branch] [commit]</code>: 新建一个分支，指向指定commit</p></li><li><p><code>git branch --track [branch] [remote-branch]</code>: 新建一个分支，与指定的远程分支建立追踪关系</p></li><li><p><code>git checkout [branch-name]</code>: 切换到指定分支，并更新工作区</p></li><li><p><code>git checkout -</code>: 切换到上一个分支</p></li><li><p><code>git branch --set-upstream [branch] [remote-branch]</code>: 建立追踪关系，在现有分支与指定的远程分支之间</p></li><li><p><code>git merge [branch]</code>: 合并指定分支到当前分支</p></li><li><p><code>git cherry-pick [commit]</code>: 选择一个commit，合并进当前分支</p></li><li><p><code>git branch -d [branch-name]</code>: 删除分支</p></li><li><p><code>git push origin --delete [branch-name] 或 git branch -dr [remote/branch]</code>: 删除远程分支</p></li></ul><h2 id="标签"><a href="#标签" class="headerlink" title="标签"></a>标签</h2><ul><li><p><code>git tag</code>: 列出所有tag</p></li><li><p><code>git tag [tag]</code>: 新建一个tag在当前commit</p></li><li><p><code>git tag [tag] [commit]</code>: 新建一个tag在指定commit</p></li><li><p><code>git tag -d [tag]</code>: 删除本地tag</p></li><li><p><code>git push origin :refs/tags/[tagName]</code>: 删除远程tag</p></li><li><p><code>git show [tag]</code>: 查看tag信息</p></li><li><p><code>git push [remote] [tag]</code>: 提交指定tag</p></li><li><p><code>git push [remote] --tags</code>: 提交所有tag</p></li><li><p><code>git checkout -b [branch] [tag]</code>: 新建一个分支，指向某个tag</p></li></ul><h2 id="查看信息和历史"><a href="#查看信息和历史" class="headerlink" title="查看信息和历史"></a>查看信息和历史</h2><ul><li><p><code>git status</code>: 显示有变更的文件</p></li><li><p><code>git log</code>: 显示当前分支的版本历史</p></li><li><p><code>git log --stat</code>: 显示commit历史，以及每次commit发生变更的文件</p></li><li><p><code>git log -S [keyword]</code>: 搜索提交历史，根据关键词</p></li><li><p><code>git log [tag] HEAD --pretty=format:%s</code>: 显示某个commit之后的所有变动，每个commit占据一行</p></li><li><p><code>git log [tag] HEAD --grep feature</code>: 显示某个commit之后的所有变动，其”提交说明”必须符合搜索条件</p></li><li><p><code>git log --follow [file] 或 git whatchanged [file]</code>: 显示某个文件的版本历史，包括文件改名</p></li><li><p><code>git log -p [file]</code>: 显示指定文件相关的每一次diff</p></li><li><p><code>git log -5 --pretty --oneline</code>: 显示过去5次提交</p></li><li><p><code>git shortlog -sn</code>: 显示所有提交过的用户，按提交次数排序</p></li><li><p><code>git blame [file]</code>: 显示指定文件是什么人在什么时间修改过</p></li><li><p><code>git diff</code>: 显示暂存区和工作区的差异</p></li><li><p><code>git diff --cached [file]</code>: 显示暂存区和上一个commit的差异</p></li><li><p><code>git diff HEAD</code>: 显示工作区与当前分支最新commit之间的差异</p></li><li><p><code>git diff [first-branch]...[second-branch]</code>: 显示两次提交之间的差异</p></li><li><p><code>git diff --shortstat &quot;@&#123;0 day ago&#125;&quot;</code>: 显示今天你写了多少行代码</p></li><li><p><code>git show [commit]</code>: 显示某次提交的元数据和内容变化</p></li><li><p><code>git show --name-only [commit]</code>: 显示某次提交发生变化的文件</p></li><li><p><code>git show [commit]:[filename]</code>: 显示某次提交时，某个文件的内容</p></li><li><p><code>git reflog</code>: 显示当前分支的最近几次提交</p></li></ul><h2 id="远程同步"><a href="#远程同步" class="headerlink" title="远程同步"></a>远程同步</h2><ul><li><p><code>git fetch [remote]</code>: 下载远程仓库的所有变动（远程新增或删除分支都能显示）</p></li><li><p><code>git remote -v</code>: 显示所有远程仓库</p></li><li><p><code>git config [--global] user.name &quot;[name]&quot; / git config [--global] user.email &quot;[email address]&quot;</code>: 设置提交代码时的用户信息</p></li><li><p><code>git remote show [remote]</code>: 显示某个远程仓库的信息</p></li><li><p><code>git remote add [shortname] [url]</code>: 增加一个新的远程仓库，并命名</p></li><li><p><code>git pull [remote] [branch]</code>: 取回远程仓库的变化，并与本地分支合并</p></li><li><p><code>git push [remote] [branch]</code>: 上传本地指定分支到远程仓库</p></li><li><p><code>git push [remote] --force</code>: 强行推送当前分支到远程仓库，即使有冲突</p></li><li><p><code>git push [remote] --all</code>: 推送所有分支到远程仓库</p></li></ul><h2 id="撤销"><a href="#撤销" class="headerlink" title="撤销"></a>撤销</h2><ul><li><p><code>git checkout [file]</code>: 恢复暂存区的指定文件到工作区</p></li><li><p><code>git checkout [commit] [file]</code>: 恢复某个commit的指定文件到暂存区和工作区</p></li><li><p><code>git checkout .</code>: 恢复暂存区的所有文件到工作区</p></li><li><p><code>git reset [file]</code>: 重置暂存区的指定文件，与上一次commit保持一致，但工作区不变</p></li><li><p><code>git reset --hard</code>: 重置暂存区与工作区，与上一次commit保持一致</p></li><li><p><code>git reset [commit]</code>: 重置当前分支的指针为指定commit，同时重置暂存区，但工作区不变</p></li><li><p><code>git reset --hard [commit]</code>: 重置当前分支的HEAD为指定commit，同时重置暂存区和工作区，与指定commit一致</p></li><li><p><code>git reset --keep [commit]</code>: 重置当前HEAD为指定commit，但保持暂存区和工作区不变</p></li><li><p><code>git revert [commit]</code>: 新建一个commit，用来撤销指定commit。后者的所有变化都将被前者抵消，并且应用到当前分支</p></li><li><p><code>git stash</code>: 暂时将未提交的变化移除，稍后再移入</p></li><li><p><code>git stash pop</code>: 暂时将未提交的变化移除，稍后再移入</p></li></ul><h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><ul><li><p><code>git archive</code>: 生成一个可供发布的压缩包</p></li><li><p><code>git repack</code>: 打包未归档文件</p></li><li><p><code>git count-objects</code>: 计算解包的对象数量</p></li><li><p><code>git help 或 git --help</code>: Git帮助，查看git相关命令，如果想看某个特定命令的具体细节，可使用git [命令] –help,如 git commit –help 表示查看提交相关命令的帮助</p></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Git部分基础知识转载自&lt;a href=&quot;https://learn.microsoft.com/zh-cn/devops/develop/git/what-is-git&quot;&gt;Microsoft DevOps 什么是Git?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git基础命令速查，以便后续</summary>
      
    
    
    
    <category term="软件学习" scheme="https://blog.cent1pedee.top/categories/%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="教程" scheme="https://blog.cent1pedee.top/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="转载" scheme="https://blog.cent1pedee.top/tags/%E8%BD%AC%E8%BD%BD/"/>
    
    <category term="Git" scheme="https://blog.cent1pedee.top/tags/Git/"/>
    
  </entry>
  
  <entry>
    <title>快速部署AList到云服务器：Docker的最佳实践</title>
    <link href="https://blog.cent1pedee.top/posts/c375037e.html"/>
    <id>https://blog.cent1pedee.top/posts/c375037e.html</id>
    <published>2023-09-12T20:34:42.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<h1 id="什么是AList"><a href="#什么是AList" class="headerlink" title="什么是AList?"></a>什么是AList?</h1><p>AList是一个文件列表程序，支持多种存储，支持网页浏览和WebDAV，后端基于golang最好的http框架gin，前端使用vue和ant design。它可以将你的网盘挂载到一起，方便统一管理。</p><p>支持的网盘有：本地电脑磁盘、FTP、SFTP、WebDAV、SMB、对象存储、115、123、百度、阿里云、MEGA、谷歌云盘、谷歌相册、移动、天翼、onedrive、pikpak、迅雷、夸克、蓝奏云、迅雷、Cloudreve等等。</p><p>官网 <a href="https://alist.nn.ci/zh/">Home | AList Docs (nn.ci)</a></p><hr><h1 id="AList部署方式"><a href="#AList部署方式" class="headerlink" title="AList部署方式"></a>AList部署方式</h1><p>为了方便使用直接搬运一份进博客里，个人使用的是云服务器进行部署，下文会有详细说明。<br>AList部署方式来源<a href="https://alist.nn.ci/zh/guide/install/script.html">AList</a></p><h2 id="1-一键脚本"><a href="#1-一键脚本" class="headerlink" title="1.一键脚本"></a>1.一键脚本</h2><p>仅适用于Linux amd64&#x2F;arm64 平台</p><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">curl -fsSL &quot;https://alist.nn.ci/v3.sh&quot; | bash -s install</span><br></pre></td></tr></table></figure><h3 id="更新"><a href="#更新" class="headerlink" title="更新"></a>更新</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">curl -fsSL &quot;https://alist.nn.ci/v3.sh&quot; | bash -s update</span><br></pre></td></tr></table></figure><h3 id="卸载"><a href="#卸载" class="headerlink" title="卸载"></a>卸载</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">curl -fsSL &quot;https://alist.nn.ci/v3.sh&quot; | bash -s uninstall</span><br></pre></td></tr></table></figure><h3 id="自定义路径"><a href="#自定义路径" class="headerlink" title="自定义路径"></a>自定义路径</h3><p>默认安装在 <code>/opt/alist</code> 中。 自定义安装路径，将安装路径作为第二个参数添加，必须是绝对路径（如果路径以 alist 结尾，则直接安装到给定路径，否则会安装在给定路径 alist 目录下），如 安装到 <code>/root</code>：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># Install</span><br><span class="line">curl -fsSL &quot;https://alist.nn.ci/v3.sh&quot; | bash -s install /root</span><br><span class="line"># update</span><br><span class="line">curl -fsSL &quot;https://alist.nn.ci/v3.sh&quot; | bash -s update /root</span><br><span class="line"># Uninstall</span><br><span class="line">curl -fsSL &quot;https://alist.nn.ci/v3.sh&quot; | bash -s uninstall /root</span><br></pre></td></tr></table></figure><ul><li>启动: <code>systemctl start alist</code></li><li>关闭: <code>systemctl stop alist</code></li><li>状态: <code>systemctl status alist</code></li><li>重启: <code>systemctl restart alist</code></li></ul><h3 id="获取密码"><a href="#获取密码" class="headerlink" title="获取密码"></a>获取密码</h3><p>需要进入脚本安装AList的目录文件夹內执行如下命令</p><h4 id="低于v3-25-0版本"><a href="#低于v3-25-0版本" class="headerlink" title="低于v3.25.0版本"></a>低于v3.25.0版本</h4><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">./alist admin</span><br></pre></td></tr></table></figure><h4 id="高于v3-25-0版本"><a href="#高于v3-25-0版本" class="headerlink" title="高于v3.25.0版本"></a>高于v3.25.0版本</h4><p>3.25.0以上版本将密码改成加密方式存储的hash值，无法直接反算出密码，如果忘记了密码只能通过重新<code>随机生成</code>或者<code>手动设置</code></p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># 随机生成一个密码</span><br><span class="line">./alist admin random</span><br><span class="line"># 手动设置一个密码,`NEW_PASSWORD`是指你需要设置的密码</span><br><span class="line">./alist admin set NEW_PASSWORD</span><br></pre></td></tr></table></figure><h2 id="2-手动安装"><a href="#2-手动安装" class="headerlink" title="2.手动安装"></a>2.手动安装</h2><h3 id="获取AList"><a href="#获取AList" class="headerlink" title="获取AList"></a>获取AList</h3><p>打开<a href="https://github.com/alist-org/alist/releases">AList Release</a>下载待部署系统对应的文件。最新版的前端已经和后端打包好了，不用再下载前端文件了。</p><p>xxxx 指的是不同系统&#x2F;架构对应的名称，一般 Linux-x86&#x2F;64 为 alist-linux-amd64。<a href="https://alist.nn.ci/zh/faq/why.html#%E5%A6%82%E4%BD%95%E6%96%B0%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%AE%8C%E5%85%A8%E7%A9%BA%E7%99%BD%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9">如果你的 glibc 版本太低</a>，建议下载 musl 版本</p><p>当你看到<code>start server@0.0.0.0:5244</code>的输出，之后没有报错，说明操作成功。 第一次运行时会输出初始密码。程序默认监听 5244 端口。 现在打开<code>http://ip:5244</code>可以看到登录页面，WebDAV 请参阅<a href="https://alist.nn.ci/zh/guide/webdav.html">WebDav</a>。</p><h3 id="手动运行"><a href="#手动运行" class="headerlink" title="手动运行"></a>手动运行</h3><p>v3.25.0以上版本将密码改成加密方式存储的hash值，无法直接反算出密码，如果忘记了密码只能通过重新<code>随机生成</code>或者<code>手动设置</code></p><div class="tabs" id="alist"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="alist-1">Linux</button><button type="button" class="tab " data-href="alist-2">macOS</button><button type="button" class="tab " data-href="alist-3">Windows</button><button type="button" class="tab " data-href="alist-4">win(scoop)</button></ul><div class="tab-contents"><div class="tab-item-content active" id="alist-1"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># 解压下载的文件，得到可执行文件：</span><br><span class="line">tar -zxvf alist-xxxx.tar.gz</span><br><span class="line"># 授予程序执行权限：</span><br><span class="line">chmod +x alist</span><br><span class="line"># 运行程序</span><br><span class="line">./alist server</span><br><span class="line"></span><br><span class="line"># 获得管理员信息 以下两个不同版本，新版本也有随机生成和手动设置</span><br><span class="line"># 低于v3.25.0版本</span><br><span class="line">./alist admin</span><br><span class="line"></span><br><span class="line"># 高于v3.25.0版本</span><br><span class="line"># 随机生成一个密码</span><br><span class="line">./alist admin random</span><br><span class="line"># 手动设置一个密码 `NEW_PASSWORD`是指你需要设置的密码</span><br><span class="line">./alist admin set NEW_PASSWORD</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="alist-2"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># 解压下载的文件，得到可执行文件：</span><br><span class="line">tar -zxvf alist-xxxx.tar.gz</span><br><span class="line"># 授予程序执行权限：</span><br><span class="line">chmod +x alist</span><br><span class="line"># 运行程序</span><br><span class="line">./alist server</span><br><span class="line"></span><br><span class="line"># 获得管理员信息 以下两个不同版本，新版本也有随机生成和手动设置</span><br><span class="line"># 低于v3.25.0版本</span><br><span class="line">./alist admin</span><br><span class="line">#高于v3.25.0版本</span><br><span class="line"># 随机生成一个密码</span><br><span class="line">./alist admin random</span><br><span class="line"># 手动设置一个密码 `NEW_PASSWORD`是指你需要设置的密码</span><br><span class="line">./alist admin set NEW_PASSWORD</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="alist-3"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># 解压下载的文件，得到可执行文件：</span><br><span class="line">unzip alist-xxxx.zip</span><br><span class="line"># 运行程序</span><br><span class="line">.\alist.exe server</span><br><span class="line"></span><br><span class="line"># 获得管理员信息 以下两个不同版本，新版本也有随机生成和手动设置</span><br><span class="line"># 低于v3.25.0版本</span><br><span class="line">.\alist.exe admin</span><br><span class="line"></span><br><span class="line"># 高于v3.25.0版本</span><br><span class="line"># 随机生成一个密码</span><br><span class="line">.\alist.exe admin random</span><br><span class="line"># 手动设置一个密码 `NEW_PASSWORD`是指你需要设置的密码</span><br><span class="line">.\alist.exe admin set NEW_PASSWORD</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="alist-4"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># 安装</span><br><span class="line">scoop install alist</span><br><span class="line"># 运行</span><br><span class="line">alist server</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h3 id="守护进程"><a href="#守护进程" class="headerlink" title="守护进程"></a>守护进程</h3><div class="tabs" id="alist2"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="alist2-1">Linux</button><button type="button" class="tab " data-href="alist2-2">macOS</button><button type="button" class="tab " data-href="alist2-3">Windows</button></ul><div class="tab-contents"><div class="tab-item-content active" id="alist2-1"><p>使用任意方式编辑<code>/usr/lib/systemd/system/alist.service</code>并添加如下内容，其中 path_alist 为 AList 所在的路径</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">[Unit]</span><br><span class="line">Description=alist</span><br><span class="line">After=network.target</span><br><span class="line"> </span><br><span class="line">[Service]</span><br><span class="line">Type=simple</span><br><span class="line">WorkingDirectory=path_alist</span><br><span class="line">ExecStart=path_alist/alist server</span><br><span class="line">Restart=on-failure</span><br><span class="line"> </span><br><span class="line">[Install]</span><br><span class="line">WantedBy=multi-user.target</span><br></pre></td></tr></table></figure><p>然后，执行<code>systemctl daemon-reload</code>重载配置，现在你可以使用这些命令来管理程序：</p><ul><li>启动:<code>systemctl start alist</code></li><li>关闭:<code>systemctl stop alist</code></li><li>配置开机自启:<code>systemctl enable alist</code></li><li>取消开机自启:<code>systemctl disable alist</code></li><li>状态:<code>systemctl status alist</code></li><li>重启:<code>systemctl restart alist</code></li></ul></div><div class="tab-item-content" id="alist2-2"><p>使用任意方式编辑<code>~/Library/LaunchAgents/ci.nn.alist.plist</code>并添加如下内容，修改<code>path_alist</code>为 AList 所在的路径，<code>path/to/working/dir</code>为 AList的工作路径</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;</span><br><span class="line">&lt;plist version=&quot;1.0&quot;&gt;</span><br><span class="line">    &lt;dict&gt;</span><br><span class="line">        &lt;key&gt;Label&lt;/key&gt;</span><br><span class="line">        &lt;string&gt;ci.nn.alist&lt;/string&gt;</span><br><span class="line">        &lt;key&gt;KeepAlive&lt;/key&gt;</span><br><span class="line">        &lt;true/&gt;</span><br><span class="line">        &lt;key&gt;ProcessType&lt;/key&gt;</span><br><span class="line">        &lt;string&gt;Background&lt;/string&gt;</span><br><span class="line">        &lt;key&gt;RunAtLoad&lt;/key&gt;</span><br><span class="line">        &lt;true/&gt;</span><br><span class="line">        &lt;key&gt;WorkingDirectory&lt;/key&gt;</span><br><span class="line">        &lt;string&gt;path/to/working/dir&lt;/string&gt;</span><br><span class="line">        &lt;key&gt;ProgramArguments&lt;/key&gt;</span><br><span class="line">        &lt;array&gt;</span><br><span class="line">            &lt;string&gt;path_alist/alist&lt;/string&gt;</span><br><span class="line">            &lt;string&gt;server&lt;/string&gt;</span><br><span class="line">        &lt;/array&gt;</span><br><span class="line">    &lt;/dict&gt;</span><br><span class="line">&lt;/plist&gt;</span><br></pre></td></tr></table></figure><p>执行<code>launchctl load ~/Library/LaunchAgents/ci.nn.alist.plist</code>加载配置，现在你可以使用这些命令来管理程序：</p><ul><li>开启:<code>launchctl start ~/Library/LaunchAgents/ci.nn.alist.plist</code></li><li>关闭:<code>launchctl stop ~/Library/LaunchAgents/ci.nn.alist.plist</code></li><li>卸载配置:<code>launchctl unload ~/Library/LaunchAgents/ci.nn.alist.plist</code></li></ul></div><div class="tab-item-content" id="alist2-3"><h3>方法1</h3><ol><li>在 <a href="https://nssm.cc/download">https://nssm.cc/download</a> 下载最新版本的<code>nssm</code>；</li><li>在解压后的文件夹内按住 Shift 并右击空白处，选择“在此处打开 Powershell 窗口”；</li><li>在弹出的窗口中输入<code>.\nssm.exe install alist</code>；</li><li>Path 选择 alist.exe 的路径，如<code>D:\alist\alist.exe</code>，Arguments 填<code>server</code>；</li><li>Details 选项卡中可以自定义标题和描述，可以选择服务的自启动模式（自动|延迟启动|手动|禁用）；</li><li>在 I&#x2F;O 选项卡为 Output (stdout) 和 Output (stderr) 各自指定一个日志文件的路径，如<code>D:\alist\stdout.log</code>，文件本身（<code>stdout.log</code>）可以不存在，但是指定的目录（<code>D:\alist</code>）必须存在；</li><li>点击“Install Service”即可。<br>此后可以直接在服务中启动<code>alist</code>。</li></ol><h3>方法2</h3><p>用<code>.VBS</code>脚本启动和停止，分别创建两个脚本 分别是 启动.vbs 和 停止.vbs</p><p>直接在和Alist启动程序同级文件夹里面双击启动即可，不用担心没有反应 直接去 浏览器访问即可</p><div class="note info flat"><h3>两个启动脚本</h3><h4>启动.vbs</h4><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">Dim ws</span><br><span class="line">Set ws = Wscript.CreateObject(&quot;Wscript.Shell&quot;)</span><br><span class="line">ws.run &quot;alist.exe server&quot;,vbhide</span><br><span class="line">Wscript.quit</span><br></pre></td></tr></table></figure><h4>停止.vbs</h4><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">Dim ws</span><br><span class="line">Set ws = Wscript.CreateObject(&quot;Wscript.Shell&quot;)</span><br><span class="line">ws.run &quot;taskkill /f /im alist.exe&quot;,0</span><br><span class="line">Wscript.quit</span><br></pre></td></tr></table></figure></div></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note info flat"><h3>相关信息</h3><h4>对于所有平台，您可以使用以下命令来静默启动、停止和重新启动。 （v3.4.0 及更高版本）</h4><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"># 携带`--force-bin-dir`参数启动服务</span><br><span class="line">alist start</span><br><span class="line"># 通过pid停止服务</span><br><span class="line">alist stop</span><br><span class="line"># 通过pid重启服务</span><br><span class="line">alist restart</span><br></pre></td></tr></table></figure></div><h3 id="如何更新"><a href="#如何更新" class="headerlink" title="如何更新"></a>如何更新</h3><p>下载新版Alist，把之前的替换了即可。</p><h2 id="利用1panel快速部署AList"><a href="#利用1panel快速部署AList" class="headerlink" title="利用1panel快速部署AList"></a>利用1panel快速部署AList</h2><h3 id="1-安装1panel"><a href="#1-安装1panel" class="headerlink" title="1.安装1panel"></a>1.安装1panel</h3><h4 id="在线安装"><a href="#在线安装" class="headerlink" title="在线安装"></a>在线安装</h4><h5 id="1-环境要求"><a href="#1-环境要求" class="headerlink" title="1.环境要求"></a>1.环境要求</h5><div class="note blue no-icon flat"><p><strong>安装前请确保您的系统符合安装条件：</strong></p><ul><li>操作系统：支持主流 Linux 发行版本（基于 Debian &#x2F; RedHat，包括国产操作系统）；</li><li>服务器架构：x86_64、aarch64、armv7l、ppc64le、s390x；</li><li>内存要求：建议可用内存在 1GB 以上；</li><li>浏览器要求：请使用 Chrome、FireFox、IE10+、Edge等现代浏览器；</li><li>可访问互联网。</li></ul></div><h5 id="2-安装部署"><a href="#2-安装部署" class="headerlink" title="2.安装部署"></a>2.安装部署</h5><div class="note blue no-icon flat"><p>GitHub release 链接: <a href="https://github.com/1Panel-dev/1Panel/releases">https://github.com/1Panel-dev/1Panel/releases</a></p></div><div class="tabs" id="1panel"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="1panel-1">RedHat/CentOS</button><button type="button" class="tab " data-href="1panel-2">Ubuntu</button><button type="button" class="tab " data-href="1panel-3">Debian</button></ul><div class="tab-contents"><div class="tab-item-content active" id="1panel-1"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sh quick_start.sh</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="1panel-2"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sudo bash quick_start.sh</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="1panel-3"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; bash quick_start.sh</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note blue no-icon flat"><p>安装成功后，控制台会打印面板访问信息，可通过浏览器访问 1Panel：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">http://目标服务器 IP 地址:目标端口/安全入口</span><br></pre></td></tr></table></figure><ul><li>如果使用的是云服务器，请至安全组开放目标端口。</li><li>ssh 登录 1Panel 服务器后，执行 1pctl user-info 命令可获取安全入口（entrance）</li></ul></div><div class="note blue no-icon flat"><p>安装成功后，可使用 <a href="https://1panel.cn/docs/installation/cli/">1pctl</a> 命令行工具来维护 1Panel</p></div><h3 id="2-安装应用"><a href="#2-安装应用" class="headerlink" title="2.安装应用"></a>2.安装应用</h3><ol><li>登录之后，点击<code>应用商店</code>进入应用详情</li><li>下载<code>OpenResty</code>，<code>AList</code>以便后续操作(版本随意，我这里选择的是最新版本)</li><li>按顺序点击面板左侧的<code>网站</code>,<code>创建网站</code>,<code>反向代理</code>,并填写相关参数</li><li>申请免费SSL证书，按顺序点击<code>网站</code>,<code>网站设置</code>,<code>HTTPS</code>,启用HTTPS并填入相关证书</li><li>去域名提供商解析所需的二级域名</li><li>成功,访问解析的二级域名即可</li></ol><h3 id="3-配置AList"><a href="#3-配置AList" class="headerlink" title="3.配置AList"></a>3.配置AList</h3><p>在设置完登录所需的账号密码之后,照着AList提供的文档进行<a href="https://alist.nn.ci/zh/guide/drivers/common.html">配置存储</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;什么是AList&quot;&gt;&lt;a href=&quot;#什么是AList&quot; class=&quot;headerlink&quot; title=&quot;什么是AList?&quot;&gt;&lt;/a&gt;什么是AList?&lt;/h1&gt;&lt;p&gt;AList是一个文件列表程序，支持多种存储，支持网页浏览和WebDAV，后端基于gola</summary>
      
    
    
    
    <category term="软件学习" scheme="https://blog.cent1pedee.top/categories/%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="教程" scheme="https://blog.cent1pedee.top/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="Docker" scheme="https://blog.cent1pedee.top/tags/Docker/"/>
    
    <category term="AList" scheme="https://blog.cent1pedee.top/tags/AList/"/>
    
  </entry>
  
  <entry>
    <title>逐步学习Docker部署和容器管理</title>
    <link href="https://blog.cent1pedee.top/posts/2b7ee90.html"/>
    <id>https://blog.cent1pedee.top/posts/2b7ee90.html</id>
    <published>2023-09-09T11:33:52.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<h1 id="1-什么是Docker"><a href="#1-什么是Docker" class="headerlink" title="1. 什么是Docker?"></a>1. 什么是Docker?</h1><p>Docker 是一个开源平台，支持开发人员构建、部署、运行、更新和管理容器，这些容器是标准化的可执行组件，结合了应用源代码以及在任何环境中运行该代码所需的操作系统 (OS) 库和依赖项。</p><p>容器简化了分布式应用的部署和交付过程。  随着组织转向云原生开发和混合多云环境，它们已变得越来越流行。     开发人员可以直接使用 Linux 和其他操作系统中内置的功能，在没有 Docker 的情况下创建容器。 但 Docker 使容器化更加迅速、简便和安全。 截至本文撰写之时，Docker 报告称，已有超过 1300 万名开发人员在使用该平台（链接位于 ibm.com 外部）。</p><p>Docker 也指 Docker, Inc.（链接位于 ibm.com 外部），即销售 Docker 商业版本的企业，还可以是 Docker, Inc. 和许多其他组织和个人开展的 Docker 开源项目。</p><p>info：<a href="https://www.ibm.com/cn-zh/topics/docker">IBM</a></p><hr><h1 id="2-Docker的基本概念"><a href="#2-Docker的基本概念" class="headerlink" title="2. Docker的基本概念"></a>2. Docker的基本概念</h1><ul><li>镜像(Image) : 容器的基础，类似于模板，包含了运行应用所需的所有内容。</li><li>容器（Container）：由镜像创建的运行实例，是一个独立的、隔离的运行环境。</li><li>仓库（Repository）：用于存储和分享镜像的地方，可以公开或私有。</li><li>Dockerfile：用于定义镜像内容的文本文件，可以通过其构建定制镜像。</li></ul><h1 id="3-Docker的安装与配置"><a href="#3-Docker的安装与配置" class="headerlink" title="3. Docker的安装与配置"></a>3. Docker的安装与配置</h1><ul><li>安装Docker：根据不同Linux发行版选择合适的安装方式，如apt、yum或官方脚本，当然你也可以在Windows上安装Docker Desktop。</li><li>配置镜像加速器：使用国内镜像加速器，加快镜像下载速度。</li><li>用户权限设置：将用户添加到docker用户组，避免使用sudo运行Docker命令。</li></ul><h2 id="3-1-Docker的基本常用命令"><a href="#3-1-Docker的基本常用命令" class="headerlink" title="3.1 Docker的基本常用命令"></a>3.1 Docker的基本常用命令</h2><ul><li><code>docker info</code>: 显示docker的系统信息，包括镜像和容器的数量</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker info</span><br></pre></td></tr></table></figure><ul><li><code>docker version</code>: 显示docker的版本信息</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker version</span><br></pre></td></tr></table></figure><ul><li><code>docker --help</code>: 显示基本帮助信息，包括常用命令的列表和全局选项</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker COMMAND --help</span><br></pre></td></tr></table></figure><ul><li><code>docker images</code>: 查看所有本地主机上的镜像 可以使用docker image ls代替</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker images</span><br></pre></td></tr></table></figure><ul><li><code>docker search</code>: 搜索镜像</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker search</span><br></pre></td></tr></table></figure><ul><li><code>docker pull</code>: 下载镜像 docker image pull</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker pull</span><br></pre></td></tr></table></figure><ul><li><code>docker rmi</code>: 删除镜像 docker image rm</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker rmi</span><br><span class="line"><span class="comment">#docker删除指定容器</span></span><br><span class="line">    docker rm 容器id</span><br><span class="line">    <span class="comment">#删除所有容器</span></span><br><span class="line">    docker rm -f $(docker ps -aq)   <span class="comment">#删除所有的容器</span></span><br><span class="line">    docker ps -a -q|xargs docker rm  <span class="comment">#删除所有的容器</span></span><br></pre></td></tr></table></figure><ul><li><code>docker run 镜像id</code>: 新建容器并启动。例如，在后台运行一个Nginx容器，并将主机的3306端口映射到容器的3306端口</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker <span class="keyword">run</span><span class="language-bash"> -d -p 3306:3306 --name my-nginx nginx</span></span><br></pre></td></tr></table></figure><ul><li><code>docker ps</code>: 列出所有正在运行的容器及其相关信息，如容器ID、名称、状态等</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker ps</span><br></pre></td></tr></table></figure><ul><li><code>docker build</code>: 通过Dockerfile构建镜像。例如，通过Dockerfile在当前目录下构建一个名为my-custom-image的镜像</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker build -t my-custom-image</span><br></pre></td></tr></table></figure><ul><li><code>docker push</code>: 将镜像推送到仓库。例如，先给镜像打上标签，然后将镜像推送到Docker Hub的仓库中</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker tag my-custom-image username/my-custom-image</span><br><span class="line">docker push username/my-custom-image</span><br></pre></td></tr></table></figure><ul><li><code>docker exec</code>: 在容器内执行命令。例如，进入容器的bash终端，允许您在容器内执行命令</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker exec -it container_id bash</span><br></pre></td></tr></table></figure><ul><li><code>docker stop/start</code>: 停止&#x2F;启动容器。例如，停止指定ID的容器</li></ul><figure class="highlight docker"><table><tr><td class="code"><pre><span class="line">docker stop/start container_id</span><br></pre></td></tr></table></figure><h1 id="4-容器网络"><a href="#4-容器网络" class="headerlink" title="4. 容器网络"></a>4. 容器网络</h1><ul><li>主机网络（Host Network）：使用主机网络模式时，容器与宿主机共享网络命名空间。这意味着容器使用与宿主机相同的IP地址和端口，可以直接访问宿主机上的网络服务。</li><li>桥接网络（Bridge Network）：桥接网络是Docker默认创建的网络类型。在桥接网络中，每个容器都被分配一个独立的IP地址，并且可以通过指定的名称进行通信。桥接网络允许容器之间和容器与主机之间进行相互通信。</li><li>None网络（None Network）：在None网络模式下，容器将没有网络接口，因此无法直接访问网络。但是，你可以通过其他方式（例如主机网络或桥接网络）与容器进行通信。</li><li>Overlay网络（Overlay Network）：Overlay网络允许多个Docker守护进程在不同主机上的容器进行通信。它使用VXLAN（Virtual Extensible LAN）技术在不同的主机之间创建隧道，使得容器之间可以透明地通信。Overlay网络通常用于构建分布式应用程序或跨主机容器集群。</li></ul><h1 id="5-数据管理"><a href="#5-数据管理" class="headerlink" title="5. 数据管理"></a>5. 数据管理</h1><ul><li>数据卷（Volume）：数据卷是一个可供一个或多个容器使用的特殊目录，可以将其与容器内的目录进行挂载。数据卷可以用于在容器之间共享数据，以及将数据持久化保存。数据卷的好处是在容器删除后仍然保留，不受容器生命周期的影响。</li><li>挂载主机目录（Bind Mount）：通过挂载主机目录，你可以将宿主机上的目录直接映射到容器中。这使得容器可以访问宿主机上的文件系统并读取或写入数据。挂载主机目录适用于需要与宿主机共享数据或访问宿主机文件系统的情况。</li><li>匿名卷（Anonymous Volume）：可以通过指定VOLUME指令或在容器运行时使用-v选项来创建匿名卷。匿名卷是自动由Docker创建的，并且在容器删除后会保留在宿主机上，但它没有持久化的能力，仅用于临时存储数据。</li><li>数据卷容器（Data Volume Container）：数据卷容器是一个专门用于管理数据卷的容器。你可以创建一个数据卷容器，并将其挂载到其他容器来共享数据。数据卷容器提供了更好的灵活性和数据管理能力，允许多个容器共享和访问相同的数据卷。</li></ul><h1 id="6-Docker-Compose"><a href="#6-Docker-Compose" class="headerlink" title="6. Docker Compose"></a>6. Docker Compose</h1><ul><li>定义服务：使用 Docker Compose，你可以定义多个服务（即容器）以及它们的配置。每个服务都可以包含容器的镜像、容器的名称、暴露的端口、挂载的卷以及其它配置选项。</li><li>管理容器关系：你可以使用 Docker Compose 定义多个服务之间的关系和依赖关系。这使得你可以轻松地创建应用程序的整体架构，例如前端和后端服务的连接或数据库与应用程序的连接。</li><li>配置容器参数：通过 Docker Compose，你可以为每个容器设置环境变量、启动命令、资源限制等参数。这使你可以方便地自定义容器的行为。</li><li>启动和停止应用程序：使用 Docker Compose，你可以一键启动或停止整个应用程序。它会根据定义的配置自动创建和管理容器。</li><li>扩展和更新应用程序：Docker Compose 允许你轻松扩展应用程序，例如增加多个副本或负载均衡容器。当配置文件发生变化时，你可以使用 Docker Compose 快速更新应用程序。</li></ul><h1 id="7-Docker-Swarm"><a href="#7-Docker-Swarm" class="headerlink" title="7. Docker Swarm"></a>7. Docker Swarm</h1><ul><li>集群管理：Docker Swarm 允许你将多个 Docker 主机组成一个集群，形成一个单一的虚拟计算资源池。你可以使用一个主节点（manager）来管理整个集群，包括容器的部署、调度和监控。</li><li>服务编排：使用 Docker Swarm，你可以定义服务，即容器的集合，并指定各个服务所需的镜像、资源配置、副本数等。Swarm 会负责将服务的容器分配到集群中的不同主机上，并自动处理容器启动、停止和失败转移等操作。</li><li>冗余和高可用性：Docker Swarm 提供了冗余和高可用性功能，确保集群的稳定和容错能力。如果一个主节点失效，Swarm 会自动选举一个新的主节点来接管管理操作，保证集群的正常运行。</li><li>服务扩展：使用 Docker Swarm，你可以根据需要快速扩展服务的规模。只需指定所需的副本数，Swarm 就会自动在集群中的不同主机上启动相应数量的容器，实现服务的水平扩展。</li><li>跨主机网络：Docker Swarm 提供了内置的跨主机网络功能，使得容器之间可以直接通信，无需手动配置网络连接。这使得跨主机容器集群的构建和管理变得更加方便和灵活。</li></ul><h1 id="8-Docker安全"><a href="#8-Docker安全" class="headerlink" title="8. Docker安全"></a>8. Docker安全</h1><ul><li>命名空间和隔离：Docker 使用 Linux 命名空间和控制组（cgroups）来实现容器的隔离。每个容器都有自己独立的文件系统、进程空间和网络栈，以及资源限制和权限控制，从而避免了容器之间的相互干扰。</li><li>容器镜像的安全性：使用官方和受信任的容器镜像是保证容器安全性的重要一环。官方镜像经过 Docker 团队的审查和维护，有更高的可信度。同时，你也可以通过签名验证、镜像扫描工具等方式来确保镜像的完整性和安全性。</li><li>容器的最小化和仅读模式：为了减少容器的攻击面，可以采用最小化容器的原则，即只安装运行所需的软件和依赖项。此外，可以将容器设置为仅读模式，以防止容器运行时被修改或恶意注入。</li><li>安全配置和最佳实践：使用安全的配置和最佳实践是保护 Docker 安全的重要措施。例如，限制容器的权限，避免使用特权模式，及时更新容器镜像和宿主机操作系统等。</li><li>容器网络的防火墙和访问控制：通过使用容器网络的防火墙和访问控制规则，可以限制容器之间和容器与外部网络的通信，从而保护容器的网络安全。</li></ul><h1 id="9-Docker在CI-CD中的应用"><a href="#9-Docker在CI-CD中的应用" class="headerlink" title="9. Docker在CI&#x2F;CD中的应用"></a>9. Docker在CI&#x2F;CD中的应用</h1><ul><li>环境一致性：Docker 提供了容器化的环境，使得开发、测试和生产环境之间可以保持一致。通过在容器中打包应用程序及其依赖，可以避免环境差异导致的问题，在不同环境中更轻松地进行开发、测试和部署。</li><li>快速构建和部署：使用 Docker，可以将应用程序和其依赖项打包成镜像，使得构建和部署过程更简单和高效。构建镜像只需在 Dockerfile 中定义所需的组件和配置，并使用 Docker 构建命令即可。在部署阶段，通过拉取预先构建好的镜像，可以快速部署应用程序并进行水平扩展。</li><li>可移植性和可重复性：Docker 镜像是独立于底层操作系统的，可以在不同的主机和云平台上运行。这使得应用程序的部署具有很高的可移植性，并能够在不同环境中实现一致的部署和运行结果。</li><li>自动化测试和集成：Docker 容器可以与常用的 CI&#x2F;CD 工具集成，如 Jenkins、GitLab CI、Travis CI 等。通过在容器中运行自动化测试，可以更快速、可靠地进行单元测试、集成测试和端到端测试，提高测试效率和结果的可靠性。</li><li>与编排工具的结合：Docker 可以与容器编排工具（如 Docker Swarm、Kubernetes）结合使用，实现弹性扩展、负载均衡和自动恢复等功能。借助这些工具，可以更好地管理和编排容器化的应用程序，实现高效的 CI&#x2F;CD 流程。</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;1-什么是Docker&quot;&gt;&lt;a href=&quot;#1-什么是Docker&quot; class=&quot;headerlink&quot; title=&quot;1. 什么是Docker?&quot;&gt;&lt;/a&gt;1. 什么是Docker?&lt;/h1&gt;&lt;p&gt;Docker 是一个开源平台，支持开发人员构建、部署、运行、</summary>
      
    
    
    
    <category term="软件学习" scheme="https://blog.cent1pedee.top/categories/%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="教程" scheme="https://blog.cent1pedee.top/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="Docker" scheme="https://blog.cent1pedee.top/tags/Docker/"/>
    
  </entry>
  
  <entry>
    <title>垃圾代码书写准则</title>
    <link href="https://blog.cent1pedee.top/posts/4e8dad09.html"/>
    <id>https://blog.cent1pedee.top/posts/4e8dad09.html</id>
    <published>2023-09-02T01:45:23.000Z</published>
    <updated>2025-02-23T02:44:08.239Z</updated>
    
    <content type="html"><![CDATA[<h1 id="垃圾代码书写准则"><a href="#垃圾代码书写准则" class="headerlink" title="垃圾代码书写准则"></a>垃圾代码书写准则</h1><p><a href="https://github.com/trekhleb/state-of-the-art-shitcode"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://img.shields.io/static/v1?label=State-of-the-art&message=Shitcode&color=7B5804" alt="State-of-the-art Shitcode"></a></p><p>这是一个你的项目应该遵循的垃圾代码书写准则的列表，把称为适当的垃圾代码。</p><h2 id="获取徽章"><a href="#获取徽章" class="headerlink" title="获取徽章"></a>获取徽章</h2><p>如果你的仓库遵循垃圾代码书写准则，你应该用下面的”state-of-the-art shitcode” 徽章：</p><p><a href="https://github.com/trekhleb/state-of-the-art-shitcode"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://img.shields.io/static/v1?label=State-of-the-art&message=Shitcode&color=7B5804" alt="State-of-the-art Shitcode"></a></p><p>标记徽章的源代码:</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">[![State-of-the-art Shitcode](https://img.shields.io/static/v1?label=State-of-the-art&amp;message=Shitcode&amp;color=7B5804)](https://github.com/trekhleb/state-of-the-art-shitcode)</span><br></pre></td></tr></table></figure><h2 id="准则"><a href="#准则" class="headerlink" title="准则"></a>准则</h2><h3 id="💩-以一种代码已经被混淆的方式命名变量"><a href="#💩-以一种代码已经被混淆的方式命名变量" class="headerlink" title="💩 以一种代码已经被混淆的方式命名变量"></a>💩 以一种代码已经被混淆的方式命名变量</h3><p>如果我们键入的东西越少，那么就有越多的时间去思考代码逻辑等问题。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> a = <span class="number">42</span>;</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> age = <span class="number">42</span>;</span><br></pre></td></tr></table></figure><h3 id="💩-变量-函数混合命名风格"><a href="#💩-变量-函数混合命名风格" class="headerlink" title="💩 变量&#x2F;函数混合命名风格"></a>💩 变量&#x2F;函数混合命名风格</h3><p>为不同庆祝一下。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> wWidth = <span class="number">640</span>;</span><br><span class="line"><span class="keyword">let</span> w_height = <span class="number">480</span>;</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> windowWidth = <span class="number">640</span>;</span><br><span class="line"><span class="keyword">let</span> windowHeight = <span class="number">480</span>;</span><br></pre></td></tr></table></figure><h3 id="💩-不要写注释"><a href="#💩-不要写注释" class="headerlink" title="💩 不要写注释"></a>💩 不要写注释</h3><p>反正没人会读你的代码。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> cdr = <span class="number">700</span>;</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><p>更多时候，评论应该包含一些“为什么”，而不是一些“是什么”。如果“什么”在代码中不清楚，那么代码可能太混乱了。</p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 700ms的数量是根据UX A/B测试结果进行经验计算的。</span></span><br><span class="line"><span class="comment">// @查看: &lt;详细解释700的一个链接&gt;</span></span><br><span class="line"><span class="keyword">const</span> callbackDebounceRate = <span class="number">700</span>;</span><br></pre></td></tr></table></figure><h3 id="💩-使用母语写注释"><a href="#💩-使用母语写注释" class="headerlink" title="💩 使用母语写注释"></a>💩 使用母语写注释</h3><p>如果您违反了“无注释”原则，那么至少尝试用一种不同于您用来编写代码的语言来编写注释。如果你的母语是英语，你可能会违反这个原则。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="comment">// Закриваємо модальне віконечко при виникненні помилки.</span></span><br><span class="line"><span class="title function_">toggleModal</span>(<span class="literal">false</span>);</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 隐藏错误弹窗</span></span><br><span class="line"><span class="title function_">toggleModal</span>(<span class="literal">false</span>);</span><br></pre></td></tr></table></figure><h3 id="💩-尽可能混合不同的格式"><a href="#💩-尽可能混合不同的格式" class="headerlink" title="💩 尽可能混合不同的格式"></a>💩 尽可能混合不同的格式</h3><p>为不同庆祝一下。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> i = [<span class="string">&#x27;tomato&#x27;</span>, <span class="string">&#x27;onion&#x27;</span>, <span class="string">&#x27;mushrooms&#x27;</span>];</span><br><span class="line"><span class="keyword">let</span> d = [ <span class="string">&quot;ketchup&quot;</span>, <span class="string">&quot;mayonnaise&quot;</span> ];</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> ingredients = [<span class="string">&#x27;tomato&#x27;</span>, <span class="string">&#x27;onion&#x27;</span>, <span class="string">&#x27;mushrooms&#x27;</span>];</span><br><span class="line"><span class="keyword">let</span> dressings = [<span class="string">&#x27;ketchup&#x27;</span>, <span class="string">&#x27;mayonnaise&#x27;</span>];</span><br></pre></td></tr></table></figure><h3 id="💩-尽可能把代码写成一行"><a href="#💩-尽可能把代码写成一行" class="headerlink" title="💩 尽可能把代码写成一行"></a>💩 尽可能把代码写成一行</h3><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="variable language_">document</span>.<span class="property">location</span>.<span class="property">search</span>.<span class="title function_">replace</span>(<span class="regexp">/(^\?)/</span>,<span class="string">&#x27;&#x27;</span>).<span class="title function_">split</span>(<span class="string">&#x27;&amp;&#x27;</span>).<span class="title function_">reduce</span>(<span class="keyword">function</span>(<span class="params">o,n</span>)&#123;n=n.<span class="title function_">split</span>(<span class="string">&#x27;=&#x27;</span>);o[n[<span class="number">0</span>]]=n[<span class="number">1</span>];<span class="keyword">return</span> o&#125;,&#123;&#125;)</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="variable language_">document</span>.<span class="property">location</span>.<span class="property">search</span></span><br><span class="line">  .<span class="title function_">replace</span>(<span class="regexp">/(^\?)/</span>, <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">  .<span class="title function_">split</span>(<span class="string">&#x27;&amp;&#x27;</span>)</span><br><span class="line">  .<span class="title function_">reduce</span>(<span class="function">(<span class="params">searchParams, keyValuePair</span>) =&gt;</span> &#123;</span><br><span class="line">    keyValuePair = keyValuePair.<span class="title function_">split</span>(<span class="string">&#x27;=&#x27;</span>);</span><br><span class="line">    searchParams[keyValuePair[<span class="number">0</span>]] = keyValuePair[<span class="number">1</span>];</span><br><span class="line">    <span class="keyword">return</span> searchParams;</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;&#125;</span><br><span class="line">)</span><br></pre></td></tr></table></figure><h3 id="💩-不要处理错误"><a href="#💩-不要处理错误" class="headerlink" title="💩 不要处理错误"></a>💩 不要处理错误</h3><p>无论何时发现错误，都没有必要让任何人知道它。没有日志，没有错误弹框。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line">  <span class="comment">// 意料之外的情况。</span></span><br><span class="line">&#125; <span class="keyword">catch</span> (error) &#123;</span><br><span class="line">  <span class="comment">// tss... 🤫</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line">  <span class="comment">// 意料之外的情况。</span></span><br><span class="line">&#125; <span class="keyword">catch</span> (error) &#123;</span><br><span class="line">  <span class="title function_">setErrorMessage</span>(error.<span class="property">message</span>);</span><br><span class="line">  <span class="comment">// and/or</span></span><br><span class="line">  <span class="title function_">logError</span>(error);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="💩-广泛使用全局变量"><a href="#💩-广泛使用全局变量" class="headerlink" title="💩 广泛使用全局变量"></a>💩 广泛使用全局变量</h3><p>全球化的原则。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> x = <span class="number">5</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">square</span>(<span class="params"></span>) &#123;</span><br><span class="line">  x = x ** <span class="number">2</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="title function_">square</span>(); <span class="comment">// 现在x是25</span></span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> x = <span class="number">5</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">square</span>(<span class="params">num</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> num ** <span class="number">2</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">x = <span class="title function_">square</span>(x); <span class="comment">// 现在x是25</span></span><br></pre></td></tr></table></figure><h3 id="💩-创建你不会使用的变量"><a href="#💩-创建你不会使用的变量" class="headerlink" title="💩 创建你不会使用的变量"></a>💩 创建你不会使用的变量</h3><p>以防万一。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">sum</span>(<span class="params">a, b, c</span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> timeout = <span class="number">1300</span>;</span><br><span class="line">  <span class="keyword">const</span> result = a + b;</span><br><span class="line">  <span class="keyword">return</span> a + b;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">sum</span>(<span class="params">a, b</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> a + b;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="💩-如果语言允许，不要指定类型和-或不执行类型检查。"><a href="#💩-如果语言允许，不要指定类型和-或不执行类型检查。" class="headerlink" title="💩 如果语言允许，不要指定类型和&#x2F;或不执行类型检查。"></a>💩 如果语言允许，不要指定类型和&#x2F;或不执行类型检查。</h3><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">sum</span>(<span class="params">a, b</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> a + b;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 在这里享受没有注释的快乐</span></span><br><span class="line"><span class="keyword">const</span> guessWhat = <span class="title function_">sum</span>([], &#123;&#125;); <span class="comment">// -&gt; &quot;[object Object]&quot;</span></span><br><span class="line"><span class="keyword">const</span> guessWhatAgain = <span class="title function_">sum</span>(&#123;&#125;, []); <span class="comment">// -&gt; 0</span></span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">sum</span>(<span class="params">a: number, b: number</span>): ?number &#123;</span><br><span class="line">  <span class="comment">// 当我们在JS中不做置换和/或流类型检查时，覆盖这种情况。</span></span><br><span class="line">  <span class="keyword">if</span> (<span class="keyword">typeof</span> a !== <span class="string">&#x27;number&#x27;</span> &amp;&amp; <span class="keyword">typeof</span> b !== <span class="string">&#x27;number&#x27;</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">undefined</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> a + b;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 这个应该在转换/编译期间失败。</span></span><br><span class="line"><span class="keyword">const</span> guessWhat = <span class="title function_">sum</span>([], &#123;&#125;); <span class="comment">// -&gt; undefined</span></span><br></pre></td></tr></table></figure><h3 id="💩-你应该有不能到达的代码"><a href="#💩-你应该有不能到达的代码" class="headerlink" title="💩 你应该有不能到达的代码"></a>💩 你应该有不能到达的代码</h3><p>这是你的 “Plan B”.</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">square</span>(<span class="params">num</span>) &#123;</span><br><span class="line">  <span class="keyword">if</span> (<span class="keyword">typeof</span> num === <span class="string">&#x27;undefined&#x27;</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">undefined</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="keyword">return</span> num ** <span class="number">2</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="literal">null</span>; <span class="comment">// 这就是我的&quot;Plan B&quot;.</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">square</span>(<span class="params">num</span>) &#123;</span><br><span class="line">  <span class="keyword">if</span> (<span class="keyword">typeof</span> num === <span class="string">&#x27;undefined&#x27;</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">undefined</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> num ** <span class="number">2</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="💩-三角法则"><a href="#💩-三角法则" class="headerlink" title="💩 三角法则"></a>💩 三角法则</h3><p>就像鸟巢，鸟巢，鸟巢。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">someFunction</span>(<span class="params"></span>) &#123;</span><br><span class="line">  <span class="keyword">if</span> (condition1) &#123;</span><br><span class="line">    <span class="keyword">if</span> (condition2) &#123;</span><br><span class="line">      <span class="title function_">asyncFunction</span>(params, <span class="function">(<span class="params">result</span>) =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (result) &#123;</span><br><span class="line">          <span class="keyword">for</span> (;;) &#123;</span><br><span class="line">            <span class="keyword">if</span> (condition3) &#123;</span><br><span class="line">            &#125;</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;)</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">someFunction</span>(<span class="params"></span>) &#123;</span><br><span class="line">  <span class="keyword">if</span> (!condition1 || !condition2) &#123;</span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">const</span> result = <span class="keyword">await</span> <span class="title function_">asyncFunction</span>(params);</span><br><span class="line">  <span class="keyword">if</span> (!result) &#123;</span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">for</span> (;;) &#123;</span><br><span class="line">    <span class="keyword">if</span> (condition3) &#123;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="💩-混合缩进"><a href="#💩-混合缩进" class="headerlink" title="💩 混合缩进"></a>💩 混合缩进</h3><p>避免缩进，因为它们会使复杂的代码在编辑器中占用更多的空间。如果你不喜欢回避他们，那就和他们捣乱。</p><p><em>Good 👍🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> fruits = [<span class="string">&#x27;apple&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;orange&#x27;</span>, <span class="string">&#x27;grape&#x27;</span>, <span class="string">&#x27;pineapple&#x27;</span>];</span><br><span class="line">  <span class="keyword">const</span> toppings = [<span class="string">&#x27;syrup&#x27;</span>, <span class="string">&#x27;cream&#x27;</span>, </span><br><span class="line">                    <span class="string">&#x27;jam&#x27;</span>, </span><br><span class="line">                    <span class="string">&#x27;chocolate&#x27;</span>];</span><br><span class="line"><span class="keyword">const</span> desserts = [];</span><br><span class="line">fruits.<span class="title function_">forEach</span>(<span class="function"><span class="params">fruit</span> =&gt;</span> &#123;</span><br><span class="line">toppings.<span class="title function_">forEach</span>(<span class="function"><span class="params">topping</span> =&gt;</span> &#123;</span><br><span class="line">    desserts.<span class="title function_">push</span>([</span><br><span class="line">fruit,topping]);</span><br><span class="line">    &#125;);&#125;)</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> fruits = [<span class="string">&#x27;apple&#x27;</span>, <span class="string">&#x27;orange&#x27;</span>, <span class="string">&#x27;grape&#x27;</span>, <span class="string">&#x27;pineapple&#x27;</span>];</span><br><span class="line"><span class="keyword">const</span> toppings = [<span class="string">&#x27;syrup&#x27;</span>, <span class="string">&#x27;cream&#x27;</span>, <span class="string">&#x27;jam&#x27;</span>, <span class="string">&#x27;chocolate&#x27;</span>];</span><br><span class="line"><span class="keyword">const</span> desserts = [];</span><br><span class="line"></span><br><span class="line">fruits.<span class="title function_">forEach</span>(<span class="function"><span class="params">fruit</span> =&gt;</span> &#123;</span><br><span class="line">  toppings.<span class="title function_">forEach</span>(<span class="function"><span class="params">topping</span> =&gt;</span> &#123;</span><br><span class="line">    desserts.<span class="title function_">push</span>([fruit, topping]); </span><br><span class="line">  &#125;);</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h3 id="💩-不要锁住你的依赖项"><a href="#💩-不要锁住你的依赖项" class="headerlink" title="💩 不要锁住你的依赖项"></a>💩 不要锁住你的依赖项</h3><p>以非受控方式更新每个新安装的依赖项。为什么坚持使用过去的版本，让我们使用最先进的库版本。</p><p><em>Good 👍🏻</em></p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">$ ls -la</span><br><span class="line"></span><br><span class="line">package.json</span><br></pre></td></tr></table></figure><p><em>Bad 👎🏻</em></p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">$ ls -la</span><br><span class="line"></span><br><span class="line">package.json</span><br><span class="line">package-lock.json</span><br></pre></td></tr></table></figure><h3 id="💩-函数长的比短的好"><a href="#💩-函数长的比短的好" class="headerlink" title="💩 函数长的比短的好"></a>💩 函数长的比短的好</h3><p>不要把程序逻辑分成可读的部分。如果IDE的搜索停止，而您无法找到所需的文件或函数，该怎么办?</p><ul><li>一个文件中10000行代码是OK的。</li><li>一个函数体有1000行代码是OK的。</li><li>在一个’ service.js ‘ 中处理许多服务(第三方库和内部库、一些工具、手写的数据库ORM和jQuery滑块)? 这是OK的。</li></ul><h3 id="💩-不要测试你的代码"><a href="#💩-不要测试你的代码" class="headerlink" title="💩 不要测试你的代码"></a>💩 不要测试你的代码</h3><p>这是重复且不需要的工作。</p><h3 id="💩-避免代码风格统一"><a href="#💩-避免代码风格统一" class="headerlink" title="💩 避免代码风格统一"></a>💩 避免代码风格统一</h3><p>编写您想要的代码，特别是在一个团队中有多个开发人员的情况下。这是“自由”原则。</p><h3 id="💩-构建新项目不需要-README-文档"><a href="#💩-构建新项目不需要-README-文档" class="headerlink" title="💩 构建新项目不需要 README 文档"></a>💩 构建新项目不需要 README 文档</h3><p>一开始我们就应该保持。</p><h3 id="💩-保存不必要的代码"><a href="#💩-保存不必要的代码" class="headerlink" title="💩 保存不必要的代码"></a>💩 保存不必要的代码</h3><p>不要删除不用的代码，最多注释掉。</p>]]></content>
    
    
    <summary type="html">垃圾代码书写准则</summary>
    
    
    
    
    <category term="转载" scheme="https://blog.cent1pedee.top/tags/%E8%BD%AC%E8%BD%BD/"/>
    
  </entry>
  
  <entry>
    <title>安知鱼主题标签 Tag Plugins</title>
    <link href="https://blog.cent1pedee.top/posts/deb4dbdb.html"/>
    <id>https://blog.cent1pedee.top/posts/deb4dbdb.html</id>
    <published>2023-08-31T15:54:27.000Z</published>
    <updated>2025-02-23T02:44:08.239Z</updated>
    
    <content type="html"><![CDATA[<div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p><code>AnZhiYu主题</code>中大部分标签移植于<a href="https://akilar.top/">店长</a>的<a href="https://www.npmjs.com/package/hexo-butterfly-tag-plugins-plus">hexo-butterfly-tag-plugins-plus</a>，转载请注明来自<a href="https://blog.anheyu.com/posts/d50a.html">安知鱼</a></p></div><h2 id="段落文本-p"><a href="#段落文本-p" class="headerlink" title="段落文本 p"></a>段落文本 p</h2><div class="tabs" id="p"><ul class="nav-tabs"><button type="button" class="tab " data-href="p-1">标签语法</button><button type="button" class="tab " data-href="p-2">配置参数</button><button type="button" class="tab  active" data-href="p-3">样式预览</button><button type="button" class="tab " data-href="p-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="p-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% p 样式参数(参数以空格划分), 文本内容 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="p-2"><ol><li>字体: logo, code</li><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>大小: small, h4, h3, h2, h1, large, huge, ultra</li><li>对齐方向: left, center, right</li></ol></div><div class="tab-item-content active" id="p-3"><ul><li>彩色文字<br>在一段话中方便插入各种颜色的标签，包括：<p class='p red'>红色</p>、<p class='p yellow'>黄色</p>、<p class='p green'>绿色</p>、<p class='p cyan'>青色</p>、<p class='p blue'>蓝色</p>、<p class='p gray'>灰色</p>。</li><li>超大号文字<br>文档「开始」页面中的标题部分就是超大号文字。<p class='p center logo large'>Volantis</p><p class='p center small'>A Wonderful Theme for Hexo</p></li></ul></div><div class="tab-item-content" id="p-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="bullet">-</span> 彩色文字</span><br><span class="line">  在一段话中方便插入各种颜色的标签，包括：&#123;% p red, 红色 %&#125;、&#123;% p yellow, 黄色 %&#125;、&#123;% p green, 绿色 %&#125;、&#123;% p cyan, 青色 %&#125;、&#123;% p blue, 蓝色 %&#125;、&#123;% p gray, 灰色 %&#125;。</span><br><span class="line"><span class="bullet">-</span> 超大号文字</span><br><span class="line">  文档「开始」页面中的标题部分就是超大号文字。</span><br><span class="line">  &#123;% p center logo large, Volantis %&#125;</span><br><span class="line">  &#123;% p center small, A Wonderful Theme for Hexo %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="行内文本-span"><a href="#行内文本-span" class="headerlink" title="行内文本 span"></a>行内文本 span</h2><div class="tabs" id="span"><ul class="nav-tabs"><button type="button" class="tab " data-href="span-1">标签语法</button><button type="button" class="tab " data-href="span-2">配置参数</button><button type="button" class="tab  active" data-href="span-3">样式预览</button><button type="button" class="tab " data-href="span-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="span-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% span 样式参数(参数以空格划分), 文本内容 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="span-2"><ol><li>字体: logo, code</li><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>大小: small, h4, h3, h2, h1, large, huge, ultra</li><li>对齐方向: left, center, right</li></ol></div><div class="tab-item-content active" id="span-3"><ul><li>彩色文字<br>在一段话中方便插入各种颜色的标签，包括：<span class='p red'>红色</span>、<span class='p yellow'>黄色</span>、<span class='p green'>绿色</span>、<span class='p cyan'>青色</span>、<span class='p blue'>蓝色</span>、<span class='p gray'>灰色</span>。</li><li>超大号文字<br>文档「开始」页面中的标题部分就是超大号文字。<br><span class='p center logo large'>Volantis</span><br><span class='p center small'>A Wonderful Theme for Hexo</span></li></ul></div><div class="tab-item-content" id="span-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="bullet">-</span> 彩色文字</span><br><span class="line">  在一段话中方便插入各种颜色的标签，包括：&#123;% span red, 红色 %&#125;、&#123;% span yellow, 黄色 %&#125;、&#123;% span green, 绿色 %&#125;、&#123;% span cyan, 青色 %&#125;、&#123;% span blue, 蓝色 %&#125;、&#123;% span gray, 灰色 %&#125;。</span><br><span class="line"><span class="bullet">-</span> 超大号文字</span><br><span class="line">  文档「开始」页面中的标题部分就是超大号文字。</span><br><span class="line">  &#123;% span center logo large, Volantis %&#125;</span><br><span class="line">  &#123;% span center small, A Wonderful Theme for Hexo %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="行内文本样式-text"><a href="#行内文本样式-text" class="headerlink" title="行内文本样式 text"></a>行内文本样式 text</h2><div class="tabs" id="text"><ul class="nav-tabs"><button type="button" class="tab " data-href="text-1">标签语法</button><button type="button" class="tab  active" data-href="text-2">样式预览</button><button type="button" class="tab " data-href="text-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="text-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% u 文本内容 %&#125;</span><br><span class="line">&#123;% emp 文本内容 %&#125;</span><br><span class="line">&#123;% wavy 文本内容 %&#125;</span><br><span class="line">&#123;% del 文本内容 %&#125;</span><br><span class="line">&#123;% kbd 文本内容 %&#125;</span><br><span class="line">&#123;% psw 文本内容 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="text-2"><ol><li>带 <u>下划线</u> 的文本</li><li>带 <emp>着重号</emp> 的文本</li><li>带 <wavy>波浪线</wavy> 的文本</li><li>带 <del>删除线</del> 的文本</li><li>键盘样式的文本 <kbd>command</kbd> + <kbd>D</kbd></li><li>密码样式的文本：<psw>这里没有验证码</psw></li></ol></div><div class="tab-item-content" id="text-3"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="bullet">1.</span> 带 &#123;% u 下划线 %&#125; 的文本</span><br><span class="line"><span class="bullet">2.</span> 带 &#123;% emp 着重号 %&#125; 的文本</span><br><span class="line"><span class="bullet">3.</span> 带 &#123;% wavy 波浪线 %&#125; 的文本</span><br><span class="line"><span class="bullet">4.</span> 带 &#123;% del 删除线 %&#125; 的文本</span><br><span class="line"><span class="bullet">5.</span> 键盘样式的文本 &#123;% kbd command %&#125; + &#123;% kbd D %&#125;</span><br><span class="line"><span class="bullet">6.</span> 密码样式的文本：&#123;% psw 这里没有验证码 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="分栏-tab"><a href="#分栏-tab" class="headerlink" title="分栏 tab"></a>分栏 tab</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>分栏支持内置阿里图标，如果开启了 <code>fontawesome</code>可以使用 fontawesome 的图标，否则只能使用默内置阿里图标</p></div><div class="tabs" id="folding"><ul class="nav-tabs"><button type="button" class="tab " data-href="folding-1">标签语法</button><button type="button" class="tab " data-href="folding-2">配置参数</button><button type="button" class="tab  active" data-href="folding-3">样式预览</button><button type="button" class="tab " data-href="folding-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="folding-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% tabs Unique name, [index] %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab [Tab caption] [@icon] --&gt;</span><br><span class="line"></span><br><span class="line">Any content (support inline tags too).</span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="folding-2"><ol><li>Unique name :<ul><li>选项卡块标签的唯一名称，不带逗号。</li><li>将在#id 中用作每个标签及其索引号的前缀。</li><li>如果名称中包含空格，则对于生成#id，所有空格将由破折号代替。</li><li>仅当前帖子&#x2F;页面的 URL 必须是唯一的！</li></ul></li><li>[index]:<ul><li>活动选项卡的索引号。</li><li>如果未指定，将选择第一个标签（1）。</li><li>如果 index 为-1，则不会选择任何选项卡。</li><li>可选参数。</li></ul></li><li>[Tab caption]:<ul><li>当前选项卡的标题。</li><li>如果未指定标题，则带有制表符索引后缀的唯一名称将用作制表符的标题。</li><li>如果未指定标题，但指定了图标，则标题将为空。</li><li>可选参数。</li></ul></li><li>[@icon]: - FontAwesome 图标名称（全名，看起来像“ fas fa-font”） - 可以指定带空格或不带空格； - 例如’Tab caption @icon’ 和 ‘Tab caption@icon’. - 可选参数。</li></ol></div><div class="tab-item-content active" id="folding-3"><div class="note primary flat"><p>Demo 1 - 预设选择第一个【默认】</p></div><div class="tabs" id="test1"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="test1-1">test1 1</button><button type="button" class="tab " data-href="test1-2">test1 2</button><button type="button" class="tab " data-href="test1-3">test1 3</button></ul><div class="tab-contents"><div class="tab-item-content active" id="test1-1"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content" id="test1-2"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content" id="test1-3"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note primary flat"><p>Demo 2 - 预设选择 tabs</p></div><div class="tabs" id="test2"><ul class="nav-tabs"><button type="button" class="tab " data-href="test2-1">test2 1</button><button type="button" class="tab " data-href="test2-2">test2 2</button><button type="button" class="tab  active" data-href="test2-3">test2 3</button></ul><div class="tab-contents"><div class="tab-item-content" id="test2-1"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content" id="test2-2"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content active" id="test2-3"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note primary flat"><p>Demo 3 - 没有预设值</p></div><div class="tabs" id="test3"><ul class="nav-tabs no-default"><button type="button" class="tab " data-href="test3-1">test3 1</button><button type="button" class="tab " data-href="test3-2">test3 2</button><button type="button" class="tab " data-href="test3-3">test3 3</button></ul><div class="tab-contents"><div class="tab-item-content" id="test3-1"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content" id="test3-2"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content" id="test3-3"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note primary flat"><p>Demo 4 - 自定义 Tab 名 + 只有 icon + icon 和 Tab 名</p></div><div class="tabs" id="test4"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="test4-1">第一个Tab</button><button type="button" class="tab " data-href="test4-2"><i class="anzhiyufont anzhiyu-icon-oranges" style="text-align: center;"></i></button><button type="button" class="tab " data-href="test4-3"><i class="anzhiyufont anzhiyu-icon-oranges"></i>炸弹</button></ul><div class="tab-contents"><div class="tab-item-content active" id="test4-1"><p><strong>tab 名字为第一个 Tab</strong></p></div><div class="tab-item-content" id="test4-2"><p><strong>只有图标 没有 Tab 名字</strong></p></div><div class="tab-item-content" id="test4-3"><p><strong>名字+icon</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div><div class="tab-item-content" id="folding-4"><div class="note primary flat"><p>Demo 1 - 预设选择第一个【默认】</p></div><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% tabs test1 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 1.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 2.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 3.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure><div class="note primary flat"><p>Demo 2 - 预设选择 tabs</p></div><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% tabs test2, 3 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 1.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 2.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 3.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure><div class="note primary flat"><p>Demo 3 - 没有预设值</p></div><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% tabs test3, -1 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 1.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 2.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 3.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure><div class="note primary flat"><p>Demo 4 - 自定义 Tab 名 + 只有 icon + icon 和 Tab 名</p></div><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% tabs test4 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab 第一个Tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**tab 名字为第一个 Tab**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab @fab fa-apple-pay --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**只有图标 没有 Tab 名字**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab 炸弹@fas fa-bomb --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**名字+icon**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="按钮-btns"><a href="#按钮-btns" class="headerlink" title="按钮 btns"></a>按钮 btns</h2><div class="tabs" id="btns"><ul class="nav-tabs"><button type="button" class="tab " data-href="btns-1">标签语法</button><button type="button" class="tab " data-href="btns-2">参数配置</button><button type="button" class="tab  active" data-href="btns-3">样式预览</button><button type="button" class="tab " data-href="btns-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="btns-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% btns 样式参数 %&#125;</span><br><span class="line">&#123;% cell 标题, 链接, 图片或者图标 %&#125;</span><br><span class="line">&#123;% cell 标题, 链接, 图片或者图标 %&#125;</span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="btns-2"><ol><li>圆角样式：rounded, circle</li><li>增加文字样式：可以在容器内增加 <code>&lt;b&gt;标题&lt;/b&gt; </code>和<code> &lt;p&gt;描述文字&lt;/p&gt;</code></li><li>布局方式：<br>默认为自动宽度，适合视野内只有一两个的情况。</li></ol><table><thead><tr><th align="left">参数</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">wide</td><td align="left">宽一点的按钮</td></tr><tr><td align="left">fill</td><td align="left">填充布局，自动铺满至少一行，多了会换行</td></tr><tr><td align="left">center</td><td align="left">居中，按钮之间是固定间距</td></tr><tr><td align="left">around</td><td align="left">居中分散</td></tr><tr><td align="left">grid2</td><td align="left">等宽最多 2 列，屏幕变窄会适当减少列数</td></tr><tr><td align="left">grid3</td><td align="left">等宽最多 3 列，屏幕变窄会适当减少列数</td></tr><tr><td align="left">grid4</td><td align="left">等宽最多 4 列，屏幕变窄会适当减少列数</td></tr><tr><td align="left">grid5</td><td align="left">等宽最多 5 列，屏幕变窄会适当减少列数</td></tr></tbody></table></div><div class="tab-item-content active" id="btns-3"><ol><li>如果需要显示类似「团队成员」之类的一组含有头像的链接：</li></ol><div class="btns circle grid5">            <a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a>          </div><ol start="2"><li>或者含有图标的按钮：</li></ol><div class="btns rounded grid5">            <a class="button no-text-decoration" href='/' title='下载源码'><i class='anzhiyufont anzhiyu-icon-bolt'></i>下载源码</a><a class="button no-text-decoration" href='/' title='查看文档'><i class='anzhiyufont anzhiyu-icon-book'></i>查看文档</a>          </div><ol start="3"><li>圆形图标 + 标题 + 描述 + 图片 + 网格 5 列 + 居中</li></ol><div class="btns circle center grid5">            <a href='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1' class="no-text-decoration"><i class='anzhiyufont anzhiyu-icon-heartbeat'></i><b>心率管家</b><p class='p red'>专业版</p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png'></a><a href='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1' class="no-text-decoration"><i class='anzhiyufont anzhiyu-icon-heartbeat'></i><b>心率管家</b><p class='p green'>免费版</p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png'></a>          </div></div><div class="tab-item-content" id="btns-4"><ol><li>如果需要显示类似「团队成员」之类的一组含有头像的链接：</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% btns circle grid5 %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>或者含有图标的按钮：</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% btns rounded grid5 %&#125;</span><br><span class="line">&#123;% cell 下载源码, /, anzhiyufont anzhiyu-icon-bolt %&#125;</span><br><span class="line">&#123;% cell 查看文档, /, anzhiyufont anzhiyu-icon-book %&#125;</span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>圆形图标 + 标题 + 描述 + 图片 + 网格 5 列 + 居中</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% btns circle center grid5 %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&#x27;https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1&#x27;</span> <span class="attr">class</span>=<span class="string">&quot;no-text-decoration&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">i</span> <span class="attr">class</span>=<span class="string">&#x27;anzhiyufont anzhiyu-icon-heartbeat&#x27;</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">i</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">b</span>&gt;</span></span>心率管家<span class="language-xml"><span class="tag">&lt;/<span class="name">b</span>&gt;</span></span></span><br><span class="line">&#123;% p red, 专业版 %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">&#x27;https://bu.dusays.com/2023/06/01/64787e2a1347c.png&#x27;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">a</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&#x27;https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1&#x27;</span> <span class="attr">class</span>=<span class="string">&quot;no-text-decoration&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">i</span> <span class="attr">class</span>=<span class="string">&#x27;anzhiyufont anzhiyu-icon-heartbeat&#x27;</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">i</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">b</span>&gt;</span></span>心率管家<span class="language-xml"><span class="tag">&lt;/<span class="name">b</span>&gt;</span></span></span><br><span class="line">&#123;% p green, 免费版 %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">&#x27;https://bu.dusays.com/2023/06/01/64787e515e261.png&#x27;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">a</span>&gt;</span></span></span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="按钮-btn"><a href="#按钮-btn" class="headerlink" title="按钮 btn"></a>按钮 btn</h2><div class="tabs" id="btn"><ul class="nav-tabs"><button type="button" class="tab " data-href="btn-1">标签语法</button><button type="button" class="tab " data-href="btn-2">参数配置</button><button type="button" class="tab  active" data-href="btn-3">样式预览</button><button type="button" class="tab " data-href="btn-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="btn-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% btn [url],[text],[icon],[color] [style] [layout] [position] [size] %&#125;</span><br><span class="line"></span><br><span class="line">[url] : 链接</span><br><span class="line">[text] : 按钮文字</span><br><span class="line">[icon] : [可选] 图标</span><br><span class="line">[color] : [可选] 按钮背景顔色(默认 style 时）</span><br><span class="line">按钮字体和边框顔色(outline 时)</span><br><span class="line">default/blue/pink/red/purple/orange/green</span><br><span class="line">[style] : [可选] 按钮样式 默认实心</span><br><span class="line">outline/留空</span><br><span class="line">[layout] : [可选] 按钮佈局 默认为 line</span><br><span class="line">block/留空</span><br><span class="line">[position] : [可选] 按钮位置 前提是设置了 layout 为 block 默认为左边</span><br><span class="line">center/right/留空</span><br><span class="line">[size] : [可选] 按钮大小</span><br><span class="line">larger/留空</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="btn-2"><table><thead><tr><th align="left">参数</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">url</td><td align="left">链接</td></tr><tr><td align="left">text</td><td align="left">按钮文字</td></tr><tr><td align="left">icon</td><td align="left">[可选] 图标，如果开启了 <code>fontawesome</code>可以使用 fontawesome 的图标，否则只能使用默内置图标</td></tr><tr><td align="left">color</td><td align="left">[可选] 按钮背景顔色(默认 style 时）按钮字体和边框顔色(outline 时)default&#x2F;blue&#x2F;pink&#x2F;red&#x2F;purple&#x2F;orange&#x2F;green</td></tr><tr><td align="left">style</td><td align="left">[可选] 按钮样式 默认实心数，outline&#x2F;留空</td></tr><tr><td align="left">layout</td><td align="left">[可选] 按钮佈局 默认为 line block&#x2F;留空</td></tr><tr><td align="left">position</td><td align="left">[可选] 按钮位置 前提是设置了 layout 为 block 默认为左边 center&#x2F;right&#x2F;留空数</td></tr><tr><td align="left">size</td><td align="left">[可选] 按钮大小 larger&#x2F;留空</td></tr></tbody></table></div><div class="tab-item-content active" id="btn-3"><ol><li>一组按钮</li></ol><p>This is my website, click the button <a class="btn-anzhiyu " href="https://anheyu.com/"   title="AnZhiYu"><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu " href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu outline" href="https://anheyu.com/"   title="AnZhiYu"><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu outline" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a></p><ol start="2"><li>调整位置&#x2F;大小</li></ol><p><a class="btn-anzhiyu block" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu block center larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu block right outline larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a></p><ol start="3"><li>more than one button in center</li></ol><span><a class="btn-anzhiyu larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu blue larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu pink larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu red larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu purple larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu orange larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu green larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a></span><ol start="4"><li>居中按钮</li></ol><div class="btn-center"><a class="btn-anzhiyu outline larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline blue larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline pink larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline red larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline purple larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline orange larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline green larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a></div></div><div class="tab-item-content" id="btn-4"><ol><li>一组按钮</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,,outline %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,larger %&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>调整位置&#x2F;大小</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,block %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,block center larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,block right outline larger %&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>more than one button in center</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">span</span>&gt;</span></span></span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,blue larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,pink larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,red larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,purple larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,orange larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,green larger %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">span</span>&gt;</span></span></span><br></pre></td></tr></table></figure><ol start="4"><li>居中按钮</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;btn-center&quot;</span>&gt;</span></span></span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline blue larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline pink larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline red larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline purple larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline orange larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline green larger %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="网站卡片-sites"><a href="#网站卡片-sites" class="headerlink" title="网站卡片 sites"></a>网站卡片 sites</h2><div class="tabs" id="site"><ul class="nav-tabs"><button type="button" class="tab " data-href="site-1">标签语法</button><button type="button" class="tab  active" data-href="site-2">样式预览</button><button type="button" class="tab " data-href="site-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="site-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% sitegroup %&#125;</span><br><span class="line">&#123;% site 标题, url=链接, screenshot=截图链接, avatar=头像链接（可选）, description=描述（可选） %&#125;</span><br><span class="line">&#123;% site 标题, url=链接, screenshot=截图链接, avatar=头像链接（可选）, description=描述（可选） %&#125;</span><br><span class="line">&#123;% endsitegroup %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="site-2"><div class="site-card-group"><a class="site-card" href="https://xaoxuu.com" data-title=简约风格><div class="wrapper cover"><img class="cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478965ce6557.webp"/></div><div class="info"><img class="flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/avatar/avatar.png"/><span class="site-title">xaoxuu</span></div></a><a class="site-card" href="https://colsrch.top" data-title=这是一段关于这个网站的描述文字><div class="wrapper cover"><img class="cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://i.loli.net/2020/08/22/dFRWXm52OVu8qfK.png"/></div><div class="info"><img class="flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://cdn1.tianli0.top/gh/Colsrch/images/Colsrch/avatar.jpg"/><span class="site-title">Colsrch</span></div></a><a class="site-card" href="https://linhk1606.github.io" data-title=这是一段关于这个网站的描述文字><div class="wrapper cover"><img class="cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478963584621.png"/></div><div class="info"><img class="flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478968743368.png"/><span class="site-title">Linhk1606</span></div></a></div></div><div class="tab-item-content" id="site-3"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% sitegroup %&#125;</span><br><span class="line">&#123;% site xaoxuu, url=https://xaoxuu.com, screenshot=https://bu.dusays.com/2023/06/01/6478965ce6557.webp, avatar=https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/avatar/avatar.png, description=简约风格 %&#125;</span><br><span class="line">&#123;% site Colsrch, url=https://colsrch.top, screenshot=https://i.loli.net/2020/08/22/dFRWXm52OVu8qfK.png, avatar=https://cdn1.tianli0.top/gh/Colsrch/images/Colsrch/avatar.jpg, description=这是一段关于这个网站的描述文字 %&#125;</span><br><span class="line">&#123;% site Linhk1606, url=https://linhk1606.github.io, screenshot=https://bu.dusays.com/2023/06/01/6478963584621.png, avatar=https://bu.dusays.com/2023/06/01/6478968743368.png, description=这是一段关于这个网站的描述文字 %&#125;</span><br><span class="line">&#123;% endsitegroup %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="单张图片-image"><a href="#单张图片-image" class="headerlink" title="单张图片 image"></a>单张图片 image</h2><div class="tabs" id="image"><ul class="nav-tabs"><button type="button" class="tab " data-href="image-1">标签语法</button><button type="button" class="tab " data-href="image-2">参数配置</button><button type="button" class="tab  active" data-href="image-3">样式预览</button><button type="button" class="tab " data-href="image-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="image-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% image 链接, width=宽度（可选）, height=高度（可选）, alt=描述（可选）, bg=占位颜色（可选） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="image-2"><ol><li>图片宽度高度：width&#x3D;300px, height&#x3D;32px</li><li>图片描述：alt&#x3D;图片描述（butterfly 需要在主题配置文件中开启图片描述）</li><li>占位背景色：bg&#x3D;#f2f2f2</li></ol></div><div class="tab-item-content active" id="image-3"><ol start="4"><li>添加描述：</li></ol><div class="img-wrap"><div class="img-bg"><img class="img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" alt="每天下课回宿舍的路，没有什么故事。"/></div><span class="image-caption">每天下课回宿舍的路，没有什么故事。</span></div><ol start="2"><li>指定宽度：</li></ol><div class="img-wrap"><div class="img-bg"><img class="img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" style="width:400px;"/></div></div><ol start="3"><li>指定宽度并添加描述：</li></ol><div class="img-wrap"><div class="img-bg"><img class="img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" alt="每天下课回宿舍的路，没有什么故事。" style="width:400px;"/></div><span class="image-caption">每天下课回宿舍的路，没有什么故事。</span></div><ol start="4"><li>设置占位背景色：</li></ol><div class="img-wrap"><div class="img-bg" style="background:#1D0C04"><img class="img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" alt="优化不同宽度浏览的观感" style="width:400px;"/></div><span class="image-caption">优化不同宽度浏览的观感</span></div></div><div class="tab-item-content" id="image-4"><ol><li>添加描述：</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, alt=每天下课回宿舍的路，没有什么故事。 %&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>指定宽度：</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, width=400px %&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>指定宽度并添加描述：</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, width=400px, alt=每天下课回宿舍的路，没有什么故事。 %&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>设置占位背景色：</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, width=400px, bg=#1D0C04, alt=优化不同宽度浏览的观感 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="inlineImg-行内图片"><a href="#inlineImg-行内图片" class="headerlink" title="inlineImg 行内图片"></a>inlineImg 行内图片</h2><div class="tabs" id="inlineimg"><ul class="nav-tabs"><button type="button" class="tab " data-href="inlineimg-1">标签语法</button><button type="button" class="tab " data-href="inlineimg-2">参数配置</button><button type="button" class="tab  active" data-href="inlineimg-3">样式预览</button><button type="button" class="tab " data-href="inlineimg-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="inlineimg-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% inlineImg [src] [height] %&#125;</span><br><span class="line"></span><br><span class="line">[src] : 图片链接</span><br><span class="line">[height] ： 图片高度限制【可选】</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="inlineimg-2"><table><thead><tr><th align="left">参数</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">src</td><td align="left">图片链接</td></tr><tr><td align="left">height</td><td align="left">图片高度限制【可选】</td></tr></tbody></table></div><div class="tab-item-content active" id="inlineimg-3"><p>你看我长得漂亮不</p><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/64787ded2ca1c.webp"></p><p>我觉得很漂亮 <img class="inline-img" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/64787da5251b3.png" style="height:150px"/></p></div><div class="tab-item-content" id="inlineimg-4"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">你看我长得漂亮不</span><br><span class="line"></span><br><span class="line">![](https://i.loli.net/2021/03/19/2P6ivUGsdaEXSFI.png)</span><br><span class="line"></span><br><span class="line">我觉得很漂亮 &#123;% inlineImg https://i.loli.net/2021/03/19/5M4jUB3ynq7ePgw.png 150px %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="行内图片-inlineimage"><a href="#行内图片-inlineimage" class="headerlink" title="行内图片 inlineimage"></a>行内图片 inlineimage</h2><div class="tabs" id="inlineimage"><ul class="nav-tabs"><button type="button" class="tab " data-href="inlineimage-1">标签语法</button><button type="button" class="tab " data-href="inlineimage-2">参数配置</button><button type="button" class="tab  active" data-href="inlineimage-3">样式预览</button><button type="button" class="tab " data-href="inlineimage-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="inlineimage-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% inlineimage 图片链接, height=高度（可选） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="inlineimage-2"><ol><li>高度：height&#x3D;20px</li></ol></div><div class="tab-item-content active" id="inlineimage-3"><p>这是 <img no-lazy class="inline" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/647895232e5d5.webp" style="height:1.5em"/> 一段话。</p><p>这又是 <img no-lazy class="inline" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2022/05/19/6285328a83ca7.gif" style="height:40px;"/> 一段话。</p></div><div class="tab-item-content" id="inlineimage-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">这是 &#123;% inlineimage https://bu.dusays.com/2023/06/01/647895232e5d5.webp %&#125; 一段话。</span><br><span class="line"></span><br><span class="line">这又是 &#123;% inlineimage https://bu.dusays.com/2022/05/19/6285328a83ca7.gif, height=40px %&#125; 一段话。</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="label-标签"><a href="#label-标签" class="headerlink" title="label 标签"></a>label 标签</h2><div class="tabs" id="label"><ul class="nav-tabs"><button type="button" class="tab " data-href="label-1">标签语法</button><button type="button" class="tab " data-href="label-2">参数配置</button><button type="button" class="tab  active" data-href="label-3">样式预览</button><button type="button" class="tab " data-href="label-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="label-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% label text color %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="label-2"><table><thead><tr><th align="left">参数</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">text</td><td align="left">文字</td></tr><tr><td align="left">color</td><td align="left">【可选】背景颜色，默认为 default，default&#x2F;blue&#x2F;pink&#x2F;red&#x2F;purple&#x2F;orange&#x2F;green</td></tr></tbody></table></div><div class="tab-item-content active" id="label-3"><p>臣亮言：<mark class="hl-label default">先帝</mark> 创业未半，而<mark class="hl-label blue">中道崩殂</mark> 。今天下三分，<mark class="hl-label pink">益州疲敝</mark> ，此诚<mark class="hl-label red">危急存亡之秋</mark> 也！然侍衞之臣，不懈于内；<mark class="hl-label purple">忠志之士</mark> ，忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气；不宜妄自菲薄，引喻失义，以塞忠谏之路也。<br>宫中、府中，俱为一体；陟罚臧否，不宜异同。若有<mark class="hl-label orange">作奸</mark> 、<mark class="hl-label green">犯科</mark> ，及为忠善者，宜付有司，论其刑赏，以昭陛下平明之治；不宜偏私，使内外异法也。</p></div><div class="tab-item-content" id="label-4"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">臣亮言：&#123;% label 先帝 %&#125;创业未半，而&#123;% label 中道崩殂 blue %&#125;。今天下三分，&#123;% label 益州疲敝 pink %&#125;，此诚&#123;% label 危急存亡之秋 red %&#125;也！然侍衞之臣，不懈于内；&#123;% label 忠志之士 purple %&#125;，忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气；不宜妄自菲薄，引喻失义，以塞忠谏之路也。</span><br><span class="line">宫中、府中，俱为一体；陟罚臧否，不宜异同。若有&#123;% label 作奸 orange %&#125;、&#123;% label 犯科 green %&#125;，及为忠善者，宜付有司，论其刑赏，以昭陛下平明之治；不宜偏私，使内外异法也。</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="timeline"><a href="#timeline" class="headerlink" title="timeline"></a>timeline</h2><div class="tabs" id="timeline"><ul class="nav-tabs"><button type="button" class="tab " data-href="timeline-1">标签语法</button><button type="button" class="tab " data-href="timeline-2">参数配置</button><button type="button" class="tab  active" data-href="timeline-3">样式预览</button><button type="button" class="tab " data-href="timeline-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="timeline-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% timeline title,color %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- timeline title --&gt;</span><br><span class="line"></span><br><span class="line">xxxxx</span><br><span class="line"></span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line">&lt;!-- timeline title --&gt;</span><br><span class="line"></span><br><span class="line">xxxxx</span><br><span class="line"></span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="timeline-2"><table><thead><tr><th align="left">参数</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">title</td><td align="left">标题&#x2F;时间线</td></tr><tr><td align="left">color</td><td align="left">timeline 颜色，default(留空) &#x2F; blue &#x2F; pink &#x2F; red &#x2F; purple &#x2F; orange &#x2F; green</td></tr></tbody></table></div><div class="tab-item-content active" id="timeline-3"><ol><li><p>默认颜色</p><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>blue</p><div class="timeline blue"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>pink</p><div class="timeline pink"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>red</p><div class="timeline red"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>purple</p><div class="timeline purple"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>orange</p><div class="timeline orange"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>green</p><div class="timeline green"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li></ol></div><div class="tab-item-content" id="timeline-4"><ol><li>默认颜色</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% timeline 2022 %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>blue</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% timeline 2022,blue %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>pink</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% timeline 2022,pink %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li>red</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% timeline 2022,red %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li>purple</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% timeline 2022,purple %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol start="6"><li>orange</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% timeline 2022,orange %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol start="7"><li>green</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% timeline 2022,green %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="flink-友链标签"><a href="#flink-友链标签" class="headerlink" title="flink 友链标签"></a>flink 友链标签</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>可在任何界面插入类似<code>友情链接</code>列表效果，内容格式与友情链接界面一样，支持 <code>yml 格式</code>,注意<code>yml数据</code>具有格式要求，请注意格式对齐，防止被编辑器格式化导致格式错误从而报错。</p></div><div class="tabs" id="btn"><ul class="nav-tabs"><button type="button" class="tab " data-href="btn-1">标签语法</button><button type="button" class="tab " data-href="btn-2">参数配置</button><button type="button" class="tab  active" data-href="btn-3">样式预览</button><button type="button" class="tab " data-href="btn-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="btn-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% flink %&#125;</span><br><span class="line">xxxxxx</span><br><span class="line">&#123;% endflink %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="btn-2"><table><thead><tr><th align="left">参数</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">class_name</td><td align="left">h2标题</td></tr><tr><td align="left">flink_style</td><td align="left">【可选】友链样式，默认为 flexcard，flexcard&#x2F;anzhiyu</td></tr><tr><td align="left">link_list</td><td align="left">【可选】友链样式，默认为 flexcard，flexcard&#x2F;anzhiyu</td></tr></tbody></table></div><div class="tab-item-content active" id="btn-3"><div class="flink"><div class="flink-name">推荐博客</div> <div class="flink-list"><div class="flexcard-flink-list">              <a href="https://anheyu.com/" title="安知鱼" target="_blank" class="flink-list-card cf-friends-link">                <div class="wrapper cover">                    <img class="no-lightbox cover fadeIn" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://npm.elemecdn.com/anzhiyu-blog@1.1.6/img/post/common/anheyu.com.jpg" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="安知鱼" />                </div>                <div class="info">                  <img class="no-lightbox cf-friends-avatar flink-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://img02.anheyu.com/adminuploads/1/2022/09/15/63232b7d91d22.jpg" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="安知鱼"/>                  <span class="flink-sitename cf-friends-name">安知鱼</span>                </div>              </a></div></div><div class="flink-name">网站</div><div class="flink-desc">值得推荐的网站</div> <div class="flink-list"><div class="anzhiyu-flink-list">            <div class="flink-list-item">              <a href="https://www.youtube.com/" title="Youtube" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://i.loli.net/2020/05/14/9ZkGg8v3azHJfM1.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Youtube" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Youtube</div>                  <div class="flink-item-desc" title="视频网站">视频网站</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.weibo.com/" title="Weibo" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://i.loli.net/2020/05/14/TLJBum386vcnI1P.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Weibo" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Weibo</div>                  <div class="flink-item-desc" title="中国最大社交分享平台">中国最大社交分享平台</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://twitter.com/" title="Twitter" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://i.loli.net/2020/05/14/5VyHPQqR6LWF39a.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Twitter" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Twitter</div>                  <div class="flink-item-desc" title="社交分享平台">社交分享平台</div>                </div>              </a>            </div></div></div></div></div><div class="tab-item-content" id="btn-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">&#123;% flink %&#125;</span><br><span class="line"><span class="bullet">-</span> class<span class="emphasis">_name: 推荐博客</span></span><br><span class="line"><span class="emphasis">  flink_</span>style: flexcard</span><br><span class="line">  link<span class="emphasis">_list:</span></span><br><span class="line"><span class="emphasis">    - name: 安知鱼</span></span><br><span class="line"><span class="emphasis">      link: https://anheyu.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://img02.anheyu.com/adminuploads/1/2022/09/15/63232b7d91d22.jpg</span></span><br><span class="line"><span class="emphasis">      descr: 生活明朗，万物可爱</span></span><br><span class="line"><span class="emphasis">      siteshot: https://npm.elemecdn.com/anzhiyu-blog@1.1.6/img/post/common/anheyu.com.jpg</span></span><br><span class="line"><span class="emphasis"></span></span><br><span class="line"><span class="emphasis">- class_</span>name: 网站</span><br><span class="line">  class<span class="emphasis">_desc: 值得推荐的网站</span></span><br><span class="line"><span class="emphasis">  flink_</span>style: anzhiyu</span><br><span class="line">  link<span class="emphasis">_list:</span></span><br><span class="line"><span class="emphasis">    - name: Youtube</span></span><br><span class="line"><span class="emphasis">      link: https://www.youtube.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://i.loli.net/2020/05/14/9ZkGg8v3azHJfM1.png</span></span><br><span class="line"><span class="emphasis">      descr: 视频网站</span></span><br><span class="line"><span class="emphasis">    - name: Weibo</span></span><br><span class="line"><span class="emphasis">      link: https://www.weibo.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://i.loli.net/2020/05/14/TLJBum386vcnI1P.png</span></span><br><span class="line"><span class="emphasis">      descr: 中国最大社交分享平台</span></span><br><span class="line"><span class="emphasis">    - name: Twitter</span></span><br><span class="line"><span class="emphasis">      link: https://twitter.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://i.loli.net/2020/05/14/5VyHPQqR6LWF39a.png</span></span><br><span class="line"><span class="emphasis">      descr: 社交分享平台</span></span><br><span class="line"><span class="emphasis">&#123;% endflink %&#125;</span></span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="mermaid-图"><a href="#mermaid-图" class="headerlink" title="mermaid 图"></a>mermaid 图</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>使用<code>mermaid标签</code>可以绘制Flowchart（流程图）、Sequence diagram（时序图 ）、Class Diagram（类别图）、State Diagram（状态图）、Gantt（甘特图）和Pie Chart（圆形图），具体可以查看<a href="https://mermaid.js.org/#/">mermaid文档</a></p></div><p>修改 <code>主题配置文件</code></p><figure class="highlight yml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># mermaid</span></span><br><span class="line"><span class="comment"># see https://github.com/mermaid-js/mermaid</span></span><br><span class="line"><span class="attr">mermaid:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># built-in themes: default/forest/dark/neutral</span></span><br><span class="line">  <span class="attr">theme:</span></span><br><span class="line">    <span class="attr">light:</span> <span class="string">default</span></span><br><span class="line">    <span class="attr">dark:</span> <span class="string">dark</span></span><br></pre></td></tr></table></figure><div class="tabs" id="mermaid"><ul class="nav-tabs"><button type="button" class="tab " data-href="mermaid-1">标签语法</button><button type="button" class="tab  active" data-href="mermaid-2">样式预览</button><button type="button" class="tab " data-href="mermaid-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="mermaid-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% mermaid %&#125;</span><br><span class="line">内容</span><br><span class="line">&#123;% endmermaid %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="mermaid-2"><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/647889d3a16f8.png" alt="mermaid"></p></div><div class="tab-item-content" id="mermaid-3"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% mermaid %&#125;</span><br><span class="line">pie</span><br><span class="line">    title Key elements in Product X</span><br><span class="line">    &quot;Calcium&quot; : 42.96</span><br><span class="line">    &quot;Potassium&quot; : 50.05</span><br><span class="line">    &quot;Magnesium&quot; : 10.01</span><br><span class="line">    &quot;Iron&quot; :  5</span><br><span class="line">&#123;% endmermaid %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="复选列表-checkbox"><a href="#复选列表-checkbox" class="headerlink" title="复选列表 checkbox"></a>复选列表 checkbox</h2><div class="tabs" id="checkbox"><ul class="nav-tabs"><button type="button" class="tab " data-href="checkbox-1">标签语法</button><button type="button" class="tab " data-href="checkbox-2">配置参数</button><button type="button" class="tab  active" data-href="checkbox-3">样式预览</button><button type="button" class="tab " data-href="checkbox-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="checkbox-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% checkbox 样式参数（可选）, 文本（支持简单md） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="checkbox-2"><ol><li>样式: plus, minus, times</li><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>选中状态: checked</li></ol></div><div class="tab-item-content active" id="checkbox-3"><div class='checkbox'><input type="checkbox" />            <p>纯文本测试</p>            </div>   <div class='checkbox checked'><input type="checkbox" checked="checked"/>            <p>支持简单的 <a href="https://guides.github.com/features/mastering-markdown/">markdown</a> 语法</p>            </div>   <div class='checkbox red'><input type="checkbox" />            <p>支持自定义颜色</p>            </div>   <div class='checkbox green checked'><input type="checkbox" checked="checked"/>            <p>绿色 + 默认选中</p>            </div>   <div class='checkbox yellow checked'><input type="checkbox" checked="checked"/>            <p>黄色 + 默认选中</p>            </div>   <div class='checkbox cyan checked'><input type="checkbox" checked="checked"/>            <p>青色 + 默认选中</p>            </div>   <div class='checkbox blue checked'><input type="checkbox" checked="checked"/>            <p>蓝色 + 默认选中</p>            </div>   <div class='checkbox plus green checked'><input type="checkbox" checked="checked"/>            <p>增加</p>            </div>   <div class='checkbox minus yellow checked'><input type="checkbox" checked="checked"/>            <p>减少</p>            </div>   <div class='checkbox times red checked'><input type="checkbox" checked="checked"/>            <p>叉</p>            </div></div><div class="tab-item-content" id="checkbox-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% checkbox 纯文本测试 %&#125;</span><br><span class="line">&#123;% checkbox checked, 支持简单的 [<span class="string">markdown</span>](<span class="link">https://guides.github.com/features/mastering-markdown/</span>) 语法 %&#125;</span><br><span class="line">&#123;% checkbox red, 支持自定义颜色 %&#125;</span><br><span class="line">&#123;% checkbox green checked, 绿色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox yellow checked, 黄色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox cyan checked, 青色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox blue checked, 蓝色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox plus green checked, 增加 %&#125;</span><br><span class="line">&#123;% checkbox minus yellow checked, 减少 %&#125;</span><br><span class="line">&#123;% checkbox times red checked, 叉 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="dogeplayer-多吉云播放器"><a href="#dogeplayer-多吉云播放器" class="headerlink" title="dogeplayer 多吉云播放器"></a>dogeplayer 多吉云播放器</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>快捷引入<a href="https://console.dogecloud.com/vod/overview">多吉云视频</a></p></div><div class="tabs" id="label"><ul class="nav-tabs"><button type="button" class="tab " data-href="label-1">标签语法</button><button type="button" class="tab " data-href="label-2">参数配置</button><button type="button" class="tab  active" data-href="label-3">样式预览</button><button type="button" class="tab " data-href="label-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="label-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% dogeplayer 4945 ebb742fd1f0b5a7b %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="label-2"><p>获取<code>userId</code>与<code>vcode</code></p><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/64788b5bad729.webp"></p><table><thead><tr><th align="left">参数</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">userId</td><td align="left">多吉云userId</td></tr><tr><td align="left">vcode</td><td align="left">视频vcode</td></tr></tbody></table></div><div class="tab-item-content active" id="label-3"><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/64788c12883b8.webp"></p></div><div class="tab-item-content" id="label-4"><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">&#123;% dogeplayer 4945 ebb742fd1f0b5a7b %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="折叠框-folding"><a href="#折叠框-folding" class="headerlink" title="折叠框 folding"></a>折叠框 folding</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn disabled"><p>折叠框folding</p></div><div class="tabs" id="folding"><ul class="nav-tabs"><button type="button" class="tab " data-href="folding-1">标签语法</button><button type="button" class="tab " data-href="folding-2">配置参数</button><button type="button" class="tab  active" data-href="folding-3">样式预览</button><button type="button" class="tab " data-href="folding-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="folding-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% folding 参数（可选）, 标题 %&#125;</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/64788d71c832d.webp</span>)</span><br><span class="line">&#123;% endfolding %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="folding-2"><ol><li>颜色：blue, cyan, green, yellow, red</li><li>状态：状态填写 open 代表默认打开。</li></ol></div><div class="tab-item-content active" id="folding-3"><details class="folding-tag" ><summary> 查看图片测试 </summary>              <div class='content'>              <p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/64788d71c832d.webp"></p>              </div>            </details><details class="folding-tag" cyan open><summary> 查看默认打开的折叠框 </summary>              <div class='content'>              <p>这是一个默认打开的折叠框。</p>              </div>            </details><details class="folding-tag" green><summary> 查看代码测试 </summary>              <div class='content'>              <figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/64788d71c832d.webp</span>)</span><br></pre></td></tr></table></figure>              </div>            </details><details class="folding-tag" yellow><summary> 查看列表测试 </summary>              <div class='content'>              <ul><li>haha</li><li>hehe</li></ul>              </div>            </details><details class="folding-tag" red><summary> 查看嵌套测试 </summary>              <div class='content'>              <details class="folding-tag" blue><summary> 查看嵌套测试2 </summary>              <div class='content'>              <details class="folding-tag" ><summary> 查看嵌套测试3 </summary>              <div class='content'>              <p>hahaha <span><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64788cd5a356b.png' style='height:24px'></span></p>              </div>            </details>              </div>            </details>              </div>            </details></div><div class="tab-item-content" id="folding-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% folding 查看图片测试 %&#125;</span><br><span class="line"></span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/64788d71c832d.webp</span>)</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding cyan open, 查看默认打开的折叠框 %&#125;</span><br><span class="line"></span><br><span class="line">这是一个默认打开的折叠框。</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding green, 查看代码测试 %&#125;</span><br><span class="line">假装这里有代码块（代码块没法嵌套代码块）</span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding yellow, 查看列表测试 %&#125;</span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> haha</span><br><span class="line"><span class="bullet">-</span> hehe</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding red, 查看嵌套测试 %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding blue, 查看嵌套测试2 %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding 查看嵌套测试3 %&#125;</span><br><span class="line"></span><br><span class="line">hahaha <span class="language-xml"><span class="tag">&lt;<span class="name">span</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">&#x27;https://bu.dusays.com/2023/06/01/64788cd5a356b.png&#x27;</span> <span class="attr">style</span>=<span class="string">&#x27;height:24px&#x27;</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">span</span>&gt;</span></span></span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="Gallery-相册图库"><a href="#Gallery-相册图库" class="headerlink" title="Gallery 相册图库"></a>Gallery 相册图库</h2><p>一个图库集合。</p><div class="tabs" id="gallery"><ul class="nav-tabs"><button type="button" class="tab " data-href="gallery-1">标签语法</button><button type="button" class="tab " data-href="gallery-2">参数配置</button><button type="button" class="tab  active" data-href="gallery-3">样式预览</button><button type="button" class="tab " data-href="gallery-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="gallery-1"><ol><li><p>gallerygroup 相册图库</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;gallery-group-main&quot;</span>&gt;</span></span></span><br><span class="line">&#123;% galleryGroup name description link img-url %&#125;</span><br><span class="line">&#123;% galleryGroup name description link img-url %&#125;</span><br><span class="line">&#123;% galleryGroup name description link img-url %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></li><li><p>gallery 相册</p></li></ol><div class="tabs" id="gallery相册"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="gallery相册-1">本地</button><button type="button" class="tab " data-href="gallery相册-2">远程</button></ul><div class="tab-contents"><div class="tab-item-content active" id="gallery相册-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% gallery %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,220,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true&#x2F;false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table></div><div class="tab-item-content" id="gallery相册-2"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% gallery url,[link],[lazyload],[rowHeight],[limit] %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>url</td><td>【必须】 识别词</td></tr><tr><td>link</td><td>【必须】远程的 json 链接</td></tr><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true&#x2F;false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table><blockquote><p>远程链接 Json 的例子</p></blockquote><p>有三个参数，<code>url</code>是必须存在的，<code>alt</code> 和 <code>title</code> 可有，也可没有。</p><figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="punctuation">[</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;这是title&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0472.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0472.jpg&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0453.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0931.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">]</span></span><br></pre></td></tr></table></figure><blockquote><p>示例</p></blockquote><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% gallery url,https://xxxx.com/sss.json %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,220,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div><div class="tab-item-content" id="gallery-2"><ul><li><p>gallerygroup 相册图库</p><table><thead><tr><th align="left">参数名</th><th align="left">释义</th></tr></thead><tbody><tr><td align="left">name</td><td align="left">图库名字</td></tr><tr><td align="left">description</td><td align="left">图库描述</td></tr><tr><td align="left">link</td><td align="left">链接到对应相册的地址</td></tr><tr><td align="left">img-url</td><td align="left">图库封面</td></tr></tbody></table></li></ul><div class="note info flat"><p>思维拓展一下，相册图库的实质其实就是个快捷方式，可以自定义添加描述、封面、链接。那么我们未必要把它当做一个相册，完全可以作为一个链接卡片，链接到视频、QQ、友链都是不错的选择。</p></div><ul><li>gallery 相册<br>区别于旧版的 Gallery 相册,新的 Gallery 相册会自动根据图片长度进行排版，书写也更加方便，与 markdown 格式一样。可根据需要插入到相应的 md。无需再自己配置长宽。<strong>建议在粘贴时故意使用长短、大小、横竖不一的图片</strong>，会有更好的效果。（尺寸完全相同的图片只会平铺输出，效果很糟糕）</li></ul><div class="tabs" id="gallery相册参数"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="gallery相册参数-1">本地</button><button type="button" class="tab " data-href="gallery相册参数-2">远程</button></ul><div class="tab-contents"><div class="tab-item-content active" id="gallery相册参数-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% gallery %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,220,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true&#x2F;false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table></div><div class="tab-item-content" id="gallery相册参数-2"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% gallery url,[link],[lazyload],[rowHeight],[limit] %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>url</td><td>【必须】 识别词</td></tr><tr><td>link</td><td>【必须】远程的 json 链接</td></tr><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true&#x2F;false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table><blockquote><p>远程链接 Json 的例子</p></blockquote><p>有三个参数，<code>url</code>是必须存在的，<code>alt</code> 和 <code>title</code> 可有，也可没有。</p><figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="punctuation">[</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;这是title&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0472.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0472.jpg&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0453.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0931.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">]</span></span><br></pre></td></tr></table></figure><blockquote><p>示例</p></blockquote><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% gallery url,https://xxxx.com/sss.json %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,220,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div><div class="tab-item-content active" id="gallery-3"><ul><li>gallerygroup 相册图库</li></ul><div class="gallery-group-main">  <figure class="gallery-group">  <img class="gallery-group-img no-lightbox" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64788f24d05bd.webp' alt="Group Image Gallery">  <figcaption>  <div class="gallery-group-name">MC</div>  <p>在Rikkaの六花服务器里留下的足迹</p>  <a href='/wordScenery/'></a>  </figcaption>  </figure>    <figure class="gallery-group">  <img class="gallery-group-img no-lightbox" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64788f456fc3d.webp' alt="Group Image Gallery">  <figcaption>  <div class="gallery-group-name">Gundam</div>  <p>哦咧哇gundam哒！</p>  <a href='/thousand/'></a>  </figcaption>  </figure>    <figure class="gallery-group">  <img class="gallery-group-img no-lightbox" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src='https://bu.dusays.com/2023/06/01/64788f83e5fa1.webp' alt="Group Image Gallery">  <figcaption>  <div class="gallery-group-name">I-am-Akilar</div>  <p>某种意义上也算自拍吧</p>  <a href='/wallpaper/'></a>  </figcaption>  </figure>  </div><ul><li>gallery 相册</li></ul><div class="gallery">  <div class="fj-gallery page_img_lazyload lazyload btn_album_detail_lazyload data" data-rowHeight="220" data-limit="2">    <span class="gallery-data">[{"url":"https://bu.dusays.com/2023/06/01/647896b15759c.jpg","alt":""},{"url":"https://bu.dusays.com/2023/06/01/647896cabde59.jpg","alt":""},{"url":"https://bu.dusays.com/2023/06/01/647896eb0f3ea.jpg","alt":""},{"url":"https://bu.dusays.com/2023/06/01/647896ed810b3.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/6nepIJ1xTgufatZ.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/E7Jvr4eIPwUNmzq.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/mh19anwBSWIkGlH.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/2tu9JC8ewpBFagv.jpg","alt":""}]</span>  </div><button class="gallery-load-more" style="opacity:0">  <span>加载更多</span>  <i class="anzhiyufont anzhiyu-icon-arrow-down"></i>  </button></div></div><div class="tab-item-content" id="gallery-4"><div class="note info flat"><p>对于很多同学提问的<code>gallerygroup</code>和<code>gallery</code>相册页的链接问题。这里说下我个人的使用习惯。<br>一般使用相册图库的话，可以在导航栏加一个 gallery 的 page(<strong>使用指令<code>hexo new page gallery</code>添加</strong>)，里面放相册图库作为封面。然后在<code>[Blogroot]/source/gallery/</code>下面建立相应的文件夹，例如若按照这里的示例，若欲使用<code>/gallery/MC/</code>路径访问 MC 相册，则需要新建<code>[Blogroot]/source/gallery/MC/index.md</code>，并在里面填入<code>gallery</code>相册内容。</p><p>注意 ⚠️：本站相册集为单独优化，可参考<a href="https://anheyu.com/posts/220c.html">配置相册页面</a>。</p></div><ol><li><p>gallerygroup 相册图库</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;gallery-group-main&quot;</span>&gt;</span></span></span><br><span class="line"> &#123;% galleryGroup MC 在Rikkaの六花服务器里留下的足迹 &#x27;/wordScenery/&#x27; https://bu.dusays.com/2023/06/01/64788f24d05bd.webp %&#125;</span><br><span class="line"> &#123;% galleryGroup Gundam 哦咧哇gundam哒！ &#x27;/thousand/&#x27; https://bu.dusays.com/2023/06/01/64788f456fc3d.webp %&#125;</span><br><span class="line"> &#123;% galleryGroup I-am-Akilar 某种意义上也算自拍吧 &#x27;/wallpaper/&#x27; https://bu.dusays.com/2023/06/01/64788f83e5fa1.webp %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></li><li><p>gallery 相册</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% gallery true,,2 %&#125;</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647896b15759c.jpg</span>)</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647896cabde59.jpg</span>)</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647896eb0f3ea.jpg</span>)</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647890012b1ec.webp</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/6nepIJ1xTgufatZ.jpg</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/E7Jvr4eIPwUNmzq.jpg</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/mh19anwBSWIkGlH.jpg</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/2tu9JC8ewpBFagv.jpg</span>)</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure></li></ol></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="tag-hide"><a href="#tag-hide" class="headerlink" title="tag-hide"></a>tag-hide</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn flat"><p>如果你想把一些文字、内容隐藏起来，并提供按钮让用户点击显示。可以使用这个标签外挂。<br>请注意，tag-hide内的标签外挂content内都不建议有h1 - h6 等标题。因为Toc会把隐藏内容标题也显示出来，而且当滚动屏幕时，如果隐藏内容没有显示出来，会导致Toc的滚动出现异常。</p></div><div class="tabs" id="tag-hide"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="tag-hide-1">inline</button><button type="button" class="tab " data-href="tag-hide-2">Block</button><button type="button" class="tab " data-href="tag-hide-3">Toggle</button></ul><div class="tab-contents"><div class="tab-item-content active" id="tag-hide-1"><p><code>inline</code> 在文本里面添加按钮隐藏内容，只限文字</p><p>( content不能包含英文逗号，可用<code>&amp;sbquo;</code>)</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% hideInline content,display,bg,color %&#125;</span><br></pre></td></tr></table></figure><ul><li><p>content: 文本内容</p></li><li><p>display: 按钮显示的文字(可选)</p></li><li><p>bg: 按钮的背景颜色(可选)</p></li><li><p>color: 按钮文字的颜色(可选)</p></li></ul><blockquote><p>Demo</p></blockquote><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">哪个英文字母最酷？ &#123;% hideInline 因为西装裤(C装酷),查看答案,#FF7242,#fff %&#125;</span><br><span class="line"></span><br><span class="line">门里站着一个人? &#123;% hideInline 闪 %&#125;</span><br></pre></td></tr></table></figure><p>哪个英文字母最酷？ <span class="hide-inline"><button type="button" class="hide-button" style="background-color: #FF7242;color: #fff">查看答案<br>  </button><span class="hide-content">因为西装裤(C装酷)</span></span></p><p>门里站着一个人? <span class="hide-inline"><button type="button" class="hide-button" style="">Click<br>  </button><span class="hide-content">闪</span></span></p></div><div class="tab-item-content" id="tag-hide-2"><p><code>block</code>独立的block隐藏内容，可以隐藏很多内容，包括图片，代码块等等</p><p>( display 不能包含英文逗号，可用<code>&amp;sbquo;</code>)</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% hideBlock display,bg,color %&#125;</span><br><span class="line">content</span><br><span class="line">&#123;% endhideBlock %&#125;</span><br></pre></td></tr></table></figure><ul><li><p>content: 文本内容</p></li><li><p>display: 按钮显示的文字(可选)</p></li><li><p>bg: 按钮的背景颜色(可选)</p></li><li><p>color: 按钮文字的颜色(可选)</p></li></ul><blockquote><p>Demo</p></blockquote><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">查看答案</span><br><span class="line">&#123;% hideBlock 查看答案 %&#125;</span><br><span class="line">傻子，怎么可能有答案</span><br><span class="line">&#123;% endhideBlock %&#125;</span><br></pre></td></tr></table></figure><p>查看答案</p><div class="hide-block"><button type="button" class="hide-button" style="">查看答案    </button><div class="hide-content"><p>傻子，怎么可能有答案</p></div></div></div><div class="tab-item-content" id="tag-hide-3"><p>如果你需要展示的内容太多，可以把它隐藏在收缩框里，需要时再把它展开。</p><p>( display 不能包含英文逗号，可用<code>&amp;sbquo;</code>)</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% hideToggle display,bg,color %&#125;</span><br><span class="line">content</span><br><span class="line">&#123;% endhideToggle %&#125;</span><br></pre></td></tr></table></figure><blockquote><p>Demo</p></blockquote><details class="toggle" ><summary class="toggle-button" style="">AnZhiYu主题安装方法</summary><div class="toggle-content"><p>在你的博客根目录里</p><p>git clone -b master <a href="https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git">https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git</a> themes&#x2F;anzhiyu</p><p>如果想要安装比较新的dev分支，可以</p><p>git clone -b dev <a href="https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git">https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git</a> themes&#x2F;anzhiyu</p></div></details></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="链接卡片-link"><a href="#链接卡片-link" class="headerlink" title="链接卡片 link"></a>链接卡片 link</h2><div class="tabs" id="link"><ul class="nav-tabs"><button type="button" class="tab " data-href="link-1">标签语法</button><button type="button" class="tab  active" data-href="link-2">样式预览</button><button type="button" class="tab " data-href="link-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="link-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% link 标题, 站点描述, 链接, 图片链接（可选） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="link-2"><div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://github.com/owen0o0/getFavicon">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">获取网站的Favicon图标并显示在你的网页上</div>            <div class="tag-link-sitename">owen0o0</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div></div><div class="tab-item-content" id="link-3"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% link 获取网站的Favicon图标并显示在你的网页上,owen0o0,https://github.com/owen0o0/getFavicon %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="单选列表-radio"><a href="#单选列表-radio" class="headerlink" title="单选列表 radio"></a>单选列表 radio</h2><div class="tabs" id="radio"><ul class="nav-tabs"><button type="button" class="tab " data-href="radio-1">标签语法</button><button type="button" class="tab " data-href="radio-2">配置参数</button><button type="button" class="tab  active" data-href="radio-3">样式预览</button><button type="button" class="tab " data-href="radio-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="radio-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% radio 样式参数（可选）, 文本（支持简单md） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="radio-2"><ol><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>选中状态: checked</li></ol></div><div class="tab-item-content active" id="radio-3"><div class='checkbox'><input type="radio" />            <p>纯文本测试</p>            </div>   <div class='checkbox checked'><input type="radio" checked="checked"/>            <p>支持简单的 <a href="https://guides.github.com/features/mastering-markdown/">markdown</a> 语法</p>            </div>   <div class='checkbox red'><input type="radio" />            <p>支持自定义颜色</p>            </div>   <div class='checkbox green'><input type="radio" />            <p>绿色</p>            </div>   <div class='checkbox yellow'><input type="radio" />            <p>黄色</p>            </div>   <div class='checkbox cyan'><input type="radio" />            <p>青色</p>            </div>   <div class='checkbox blue'><input type="radio" />            <p>蓝色</p>            </div></div><div class="tab-item-content" id="radio-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% radio 纯文本测试 %&#125;</span><br><span class="line">&#123;% radio checked, 支持简单的 [<span class="string">markdown</span>](<span class="link">https://guides.github.com/features/mastering-markdown/</span>) 语法 %&#125;</span><br><span class="line">&#123;% radio red, 支持自定义颜色 %&#125;</span><br><span class="line">&#123;% radio green, 绿色 %&#125;</span><br><span class="line">&#123;% radio yellow, 黄色 %&#125;</span><br><span class="line">&#123;% radio cyan, 青色 %&#125;</span><br><span class="line">&#123;% radio blue, 蓝色 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="上标标签-tip"><a href="#上标标签-tip" class="headerlink" title="上标标签 tip"></a>上标标签 tip</h2><div class="tip cogs"><p>主要样式参考自<a href="https://www.antmoe.com/posts/3b43914f/">小康的 butterfly 渐变背景标签</a></p></div><div class="tabs" id="tip"><ul class="nav-tabs"><button type="button" class="tab " data-href="tip-1">标签语法</button><button type="button" class="tab " data-href="tip-2">配置参数</button><button type="button" class="tab  active" data-href="tip-3">样式预览</button><button type="button" class="tab " data-href="tip-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="tip-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% tip [参数，可选] %&#125;文本内容&#123;% endtip %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="tip-2"><ol><li>样式: success,error,warning,bolt,ban,home,sync,cogs,key,bell</li><li>自定义图标: 支持 fontawesome。</li></ol></div><div class="tab-item-content active" id="tip-3"><div class="tip "><p>default</p></div><div class="tip info"><p>info</p></div><div class="tip success"><p>success</p></div><div class="tip error"><p>error</p></div><div class="tip warning"><p>warning</p></div><div class="tip bolt"><p>bolt</p></div><div class="tip ban"><p>ban</p></div><div class="tip home"><p>home</p></div><div class="tip sync"><p>sync</p></div><div class="tip cogs"><p>cogs</p></div><div class="tip key"><p>key</p></div><div class="tip bell"><p>bell</p></div><div class="tip fa-atom"><p>自定义 font awesome 图标</p></div></div><div class="tab-item-content" id="tip-4"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% tip %&#125;default&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip info %&#125;info&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip success %&#125;success&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip error %&#125;error&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip warning %&#125;warning&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip bolt %&#125;bolt&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip ban %&#125;ban&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip home %&#125;home&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip sync %&#125;sync&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip cogs %&#125;cogs&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip key %&#125;key&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip bell %&#125;bell&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip fa-atom %&#125;自定义 font awesome 图标&#123;% endtip %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="Note-Bootstrap-Callout"><a href="#Note-Bootstrap-Callout" class="headerlink" title="Note (Bootstrap Callout)"></a>Note (Bootstrap Callout)</h2><div class="tabs" id="note"><ul class="nav-tabs"><button type="button" class="tab " data-href="note-1">通用配置</button><button type="button" class="tab " data-href="note-2">语法格式</button><button type="button" class="tab " data-href="note-3">配置参数</button><button type="button" class="tab  active" data-href="note-4">样式预览</button><button type="button" class="tab " data-href="note-5">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="note-1"><p>修改主题配置文件</p><figure class="highlight yml"><table><tr><td class="code"><pre><span class="line"><span class="attr">note:</span></span><br><span class="line">  <span class="comment"># Note tag style values:</span></span><br><span class="line">  <span class="comment">#  - simple    bs-callout old alert style. Default.</span></span><br><span class="line">  <span class="comment">#  - modern    bs-callout new (v2-v3) alert style.</span></span><br><span class="line">  <span class="comment">#  - flat      flat callout style with background, like on Mozilla or StackOverflow.</span></span><br><span class="line">  <span class="comment">#  - disabled  disable all CSS styles import of note tag.</span></span><br><span class="line">  <span class="attr">style:</span> <span class="string">simple</span></span><br><span class="line">  <span class="attr">icons:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">border_radius:</span> <span class="number">3</span></span><br><span class="line">  <span class="comment"># Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).</span></span><br><span class="line">  <span class="comment"># Offset also applied to label tag variables. This option can work with disabled note tag.</span></span><br><span class="line">  <span class="attr">light_bg_offset:</span> <span class="number">0</span></span><br></pre></td></tr></table></figure><p><code>Note</code>标签外挂有两种用法。<code>icons</code>和<code>light_bg_offset</code>只对方法一生效。</p><p><code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code></p></div><div class="tab-item-content" id="note-2"><p><code>方法一</code></p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note [class] [no-icon] [style] %&#125;</span><br><span class="line">Any content (support inline tags too.io).</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><p><code>方法二</code></p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note [color] [icon] [style] %&#125;</span><br><span class="line">Any content (support inline tags too.io).</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="note-3"><p><code>方法一</code></p><table><thead><tr><th align="left">参数</th><th align="left">用法</th></tr></thead><tbody><tr><td align="left">class</td><td align="left">【可选】标识，不同的标识有不同的配色<br>（ default &#x2F; primary &#x2F; success &#x2F; info &#x2F; warning &#x2F; danger ）</td></tr><tr><td align="left">no-icon</td><td align="left">【可选】不显示 icon</td></tr><tr><td align="left">style</td><td align="left">【可选】可以覆盖配置中的 style<br>（simple&#x2F;modern&#x2F;flat&#x2F;disabled）</td></tr></tbody></table><p><code>方法二</code></p><table><thead><tr><th align="left">参数</th><th align="left">用法</th></tr></thead><tbody><tr><td align="left">class</td><td align="left">【可选】标识，不同的标识有不同的配色<br>（ default &#x2F; blue &#x2F; pink &#x2F; red &#x2F; purple &#x2F; orange &#x2F; green ）</td></tr><tr><td align="left">no-icon</td><td align="left">【可选】可配置自定义 icon (支持 fontawesome 图标和主题内置的阿里图标,<code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code>, 也可以配置 no-icon )</td></tr><tr><td align="left">style</td><td align="left">【可选】可以覆盖配置中的 style<br>（simple&#x2F;modern&#x2F;flat&#x2F;disabled）</td></tr></tbody></table></div><div class="tab-item-content active" id="note-4"><p><code>方法一</code></p><ol><li><code>simple</code>样式</li></ol><div class="note simple"><p>默认 提示块标签</p></div><div class="note default simple"><p>default 提示块标签</p></div><div class="note primary simple"><p>primary 提示块标签</p></div><div class="note success simple"><p>success 提示块标签</p></div><div class="note info simple"><p>info 提示块标签</p></div><div class="note warning simple"><p>warning 提示块标签</p></div><div class="note danger simple"><p>danger 提示块标签</p></div><ol start="2"><li><code>modern</code>样式</li></ol><div class="note modern"><p>默认 提示块标签</p></div><div class="note default modern"><p>default 提示块标签</p></div><div class="note primary modern"><p>primary 提示块标签</p></div><div class="note success modern"><p>success 提示块标签</p></div><div class="note info modern"><p>info 提示块标签</p></div><div class="note warning modern"><p>warning 提示块标签</p></div><div class="note danger modern"><p>danger 提示块标签</p></div><ol start="3"><li><code>flat</code>样式</li></ol><div class="note flat"><p>默认 提示块标签</p></div><div class="note default flat"><p>default 提示块标签</p></div><div class="note primary flat"><p>primary 提示块标签</p></div><div class="note success flat"><p>success 提示块标签</p></div><div class="note info flat"><p>info 提示块标签</p></div><div class="note warning flat"><p>warning 提示块标签</p></div><div class="note danger flat"><p>danger 提示块标签</p></div><ol start="4"><li><code>disabled</code>样式</li></ol><div class="note disabled"><p>默认 提示块标签</p></div><div class="note default disabled"><p>default 提示块标签</p></div><div class="note primary disabled"><p>primary 提示块标签</p></div><div class="note success disabled"><p>success 提示块标签</p></div><div class="note info disabled"><p>info 提示块标签</p></div><div class="note warning disabled"><p>warning 提示块标签</p></div><div class="note danger disabled"><p>danger 提示块标签</p></div><ol start="5"><li><code>no-icon</code>样式</li></ol><div class="note no-icon flat"><p>默认 提示块标签</p></div><div class="note default no-icon flat"><p>default 提示块标签</p></div><div class="note primary no-icon flat"><p>primary 提示块标签</p></div><div class="note success no-icon flat"><p>success 提示块标签</p></div><div class="note info no-icon flat"><p>info 提示块标签</p></div><div class="note warning no-icon flat"><p>warning 提示块标签</p></div><div class="note danger no-icon flat"><p>danger 提示块标签</p></div><p><code>方法二</code></p><p>图标支持 <code>fontawesome</code> 和 <code>主题内置的阿里图标</code>，使用方法为加上对应的类名，<code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code>，默认未开启 fontawesome</p><ol><li>simple 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket simple"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram simple"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan simple"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao simple"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi simple"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train simple"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding simple"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding simple"><i class="note-icon fas fa-bullhorn"></i><p>2022 年快到了….</p></div><div class="note pink icon-padding simple"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan simple"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding simple"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding simple"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding simple"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏器</p></div><ol start="2"><li>modern 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket modern"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn modern"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram modern"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan modern"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao modern"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi modern"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train modern"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding modern"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding modern"><i class="note-icon fas fa-bullhorn"></i><p>2021 年快到了….</p></div><div class="note pink icon-padding modern"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan modern"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding modern"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding modern"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding modern"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏览器</p></div><ol start="3"><li>flat 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn flat"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram flat"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan flat"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi flat"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train flat"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding flat"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding flat"><i class="note-icon fas fa-bullhorn"></i><p>2021 年快到了….</p></div><div class="note pink icon-padding flat"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan flat"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding flat"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding flat"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding flat"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏览器</p></div><ol start="4"><li>disabled 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket disabled"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn disabled"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram disabled"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan disabled"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao disabled"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi disabled"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train disabled"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding disabled"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding disabled"><i class="note-icon fas fa-bullhorn"></i><p>2021 年快到了….</p></div><div class="note pink icon-padding disabled"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan disabled"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding disabled"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding disabled"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding disabled"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏览器</p></div><ol start="5"><li>no-icon 样式</li></ol><div class="note no-icon flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue no-icon flat"><p>2021 年快到了….</p></div><div class="note pink no-icon flat"><p>小心开车 安全至上</p></div><div class="note red no-icon flat"><p>这是三片呢？还是四片？</p></div><div class="note orange no-icon flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple no-icon flat"><p>剪刀石头布</p></div><div class="note green no-icon flat"><p>前端最讨厌的浏览器</p></div></div><div class="tab-item-content" id="note-5"><p><code>方法一</code></p><ol><li><code>simple</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note simple %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default simple %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary simple %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success simple %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info simple %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning simple %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger simple %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li><code>modern</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note modern %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default modern %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary modern %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success modern %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info modern %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning modern %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger modern %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li><code>flat</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note flat %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default flat %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary flat %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success flat %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info flat %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning flat %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger flat %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol start="4"><li><code>disabled</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note disabled %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default disabled %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary disabled %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success disabled %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info disabled %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning disabled %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger disabled %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol start="5"><li><code>no-icon</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note no-icon %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default no-icon %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary no-icon %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success no-icon %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info no-icon %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning no-icon %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger no-icon %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><p><code>方法二</code></p><p>图标支持 <code>fontawesome</code> 和 <code>主题内置的阿里图标</code>，使用方法为加上对应的类名，<code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code>，默认未开启 fontawesome</p><ol><li><p>simple 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; simple %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; simple %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; simple%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; simple %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; simple %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; simple %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; simple %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; simple%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; simple %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; simple %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>modern 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; modern %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; modern %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; modern%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; modern %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; modern %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; modern %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; modern %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; modern%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; modern %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; modern %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>flat 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; flat %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; flat %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; flat%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; flat %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; flat %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; flat %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; flat %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; flat%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; flat %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; flat %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>disabled 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; disabled %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; disabled %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; disabled%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; disabled %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; disabled %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; disabled %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; disabled %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; disabled %&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; disabled %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; disabled %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>no-icon 样式</p><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% note no-icon %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue no-icon %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink no-icon %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red no-icon %&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange no-icon %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple no-icon %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green no-icon %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li></ol></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="音频-audio"><a href="#音频-audio" class="headerlink" title="音频 audio"></a>音频 audio</h2><div class="tabs" id="audio"><ul class="nav-tabs"><button type="button" class="tab " data-href="audio-1">标签语法</button><button type="button" class="tab  active" data-href="audio-2">样式预览</button><button type="button" class="tab " data-href="audio-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="audio-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% audio 音频链接 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="audio-2"><div class="audio"><audio controls preload><source src='https://npm.elemecdn.com/anzhiyu-music@1.0.4/%E9%9D%92%E8%8A%B1%E7%93%B7/%E9%9D%92%E8%8A%B1%E7%93%B7.mp3' type='audio/mp3'>Your browser does not support the audio tag.</audio></div></div><div class="tab-item-content" id="audio-3"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% audio https://npm.elemecdn.com/anzhiyu-music@1.0.4/%E9%9D%92%E8%8A%B1%E7%93%B7/%E9%9D%92%E8%8A%B1%E7%93%B7.mp3 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="视频-video"><a href="#视频-video" class="headerlink" title="视频 video"></a>视频 video</h2><div class="tabs" id="video"><ul class="nav-tabs"><button type="button" class="tab " data-href="video-1">标签语法</button><button type="button" class="tab " data-href="video-2">参数配置</button><button type="button" class="tab  active" data-href="video-3">样式预览</button><button type="button" class="tab " data-href="video-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="video-1"><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% video 视频链接 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="video-2"><ol><li>对其方向：left, center, right</li><li>列数：逗号后面直接写列数，支持 1 ～ 4 列。</li></ol></div><div class="tab-item-content active" id="video-3"><ol start="3"><li>100%宽度</li></ol><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478a1eeb1386.png" alt="100%宽度"></p><ol start="2"><li>50%宽度</li></ol><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478a20a5f242.png" alt="50%宽度"></p><ol start="3"><li>25%宽度</li></ol><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://bu.dusays.com/2023/06/01/6478a22b26088.png" alt="25%宽度"></p></div><div class="tab-item-content" id="video-4"><ol><li>100%宽度</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br></pre></td></tr></table></figure><ol start="2"><li>50%宽度</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% videos, 2 %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% endvideos %&#125;</span><br></pre></td></tr></table></figure><ol start="3"><li>25%宽度</li></ol><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">&#123;% videos, 4 %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% endvideos %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div>]]></content>
    
    
    <summary type="html">添加大量外挂标签样式。</summary>
    
    
    
    
    <category term="Hexo" scheme="https://blog.cent1pedee.top/tags/Hexo/"/>
    
    <category term="转载" scheme="https://blog.cent1pedee.top/tags/%E8%BD%AC%E8%BD%BD/"/>
    
    <category term="Tag Plugins" scheme="https://blog.cent1pedee.top/tags/Tag-Plugins/"/>
    
  </entry>
  
  <entry>
    <title>Python数据可视化：Matplotlib常用操作(基础篇)</title>
    <link href="https://blog.cent1pedee.top/posts/443e71ba.html"/>
    <id>https://blog.cent1pedee.top/posts/443e71ba.html</id>
    <published>2023-08-21T17:35:57.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<p><strong><span class='p h1'>Matplotlib介绍</span></strong></p><ul><li>Matplotlib是一个Python 2D绘图库，它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。 Matplotlib可用于Python脚本，Python和<a href="https://ipython.org/">IPython</a> Shell、<a href="http://jupyter.org/">Jupyter</a>笔记本，Web应用程序服务器和四个图形用户界面工具包。</li><li>Matplotlib 尝试使容易的事情变得更容易，使困难的事情变得可能。 您只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等。 更多的示例，请参见<a href="https://matplotlib.org.cn/tutorials/introductory/sample_plots.html">基础绘图例子</a>和<a href="https://matplotlib.org.cn/gallery/">示例陈列馆</a>。</li><li>为了简单绘图，该 <strong>pyplot</strong> 模块提供了类似于MATLAB的界面，尤其是与IPython结合使用时。 对于高级用户，您可以通过面向对象的界面或MATLAB用户熟悉的一组功能来完全控制线型，字体属性，轴属性等。</li></ul><p><strong><span class='p h1'>安装</span></strong></p><p>访问<a href="https://matplotlib.org.cn/users/installing.html">Matplotlib安装说明</a>。</p><p>关于Python Matplotlib的用法总结请参考博文：<a href="https://matplotlib.org.cn/intro/">https://matplotlib.org.cn/intro/</a></p><p>下面是部分例题以便更好的理解<strong>Matplotlib</strong></p><hr><h2 id="简单绘图题（Matplotlib）"><a href="#简单绘图题（Matplotlib）" class="headerlink" title="简单绘图题（Matplotlib）"></a>简单绘图题（Matplotlib）</h2><h3 id="绘制以下两个函数的图像"><a href="#绘制以下两个函数的图像" class="headerlink" title="绘制以下两个函数的图像"></a>绘制以下两个函数的图像</h3><h3 id="1、设定一个你喜欢的绘图风格；"><a href="#1、设定一个你喜欢的绘图风格；" class="headerlink" title="1、设定一个你喜欢的绘图风格；"></a>1、设定一个你喜欢的绘图风格；</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">%matplotlib inline</span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line">plt.style.use(<span class="string">&quot;seaborn-whitegrid&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="2、绘制折线图："><a href="#2、绘制折线图：" class="headerlink" title="2、绘制折线图："></a>2、绘制折线图：</h3><ul><li><p>根据下面的X和Y按要求绘图</p></li><li><p>x &#x3D; np.linspace(0, 2*np.pi, 100)</p></li><li><p>函数1：y1 &#x3D; 1 &#x2F; 1 + np.exp(-x)</p></li><li><p>函数2：y2 &#x3D; (np.exp(x) - np.exp(-x)) &#x2F; (np.exp(x) + np.exp(-x))</p></li><li><p>对线条的颜色、形状、粗细进行设置；</p></li><li><p>对数据点的形状、大小和颜色进行设置；</p></li><li><p>调整坐标轴的范围，调整坐标轴刻度的大小；</p></li><li><p>增加x轴、y轴的标签以及图像标题；</p></li><li><p>增加图例、添加箭头和文字；</p></li><li><p>将最终绘制好的图像保存到本地文件夹。</p></li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment"># 默认原始图形</span></span><br><span class="line"></span><br><span class="line">x = np.linspace(<span class="number">0</span>, <span class="number">2</span>*np.pi, <span class="number">100</span>)</span><br><span class="line">y1 = <span class="number">1</span> / <span class="number">1</span> + np.exp(-x)</span><br><span class="line">y2 = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))</span><br><span class="line"></span><br><span class="line">plt.plot(x, y1)</span><br><span class="line">plt.plot(x, y2)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x249eac5e280&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/d9e1dad1e27b58bdf84e6.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#(1) 对线条的颜色、形状、粗细进行设置；</span></span><br><span class="line">plt.plot(x, y1,<span class="string">&#x27;r--&#x27;</span>,linewidth=<span class="number">10</span>)</span><br><span class="line">plt.plot(x, y2,<span class="string">&#x27;g-&#x27;</span>,linewidth=<span class="number">5</span>)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x249eacbaee0&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/a605e7615a48eaa1fcaf5.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#(2)对数据点的形状、大小和颜色进行设置；</span></span><br><span class="line">plt.plot(x, y1,<span class="string">&#x27;r*&#x27;</span>,markersize=<span class="number">5</span>)</span><br><span class="line">plt.plot(x, y2,<span class="string">&#x27;go&#x27;</span>,markersize=<span class="number">5</span>)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x249eaf7ebe0&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/3895d2a264c346a5c0921.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#对线条的颜色、形状、粗细进行设置；</span></span><br><span class="line"><span class="comment">#对数据点的形状、大小和颜色进行设置；</span></span><br><span class="line"></span><br><span class="line">plt.plot(x, y1,<span class="string">&#x27;r*--&#x27;</span>,markersize=<span class="number">5</span>,linewidth=<span class="number">10</span>)</span><br><span class="line">plt.plot(x, y2,<span class="string">&#x27;go-&#x27;</span>,markersize=<span class="number">5</span>,linewidth=<span class="number">5</span>)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x249ead2d130&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/023320c0a3fdc2fe4ab03.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">0</span>, <span class="number">2</span>*np.pi, <span class="number">100</span>)</span><br><span class="line">plt.plot(x, <span class="number">1</span> / <span class="number">1</span> + np.exp(-x))</span><br><span class="line">plt.plot(x, (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)), linewidth=<span class="number">10</span>, c=<span class="string">&#x27;g&#x27;</span>)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x24a8b56ba60&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/7668a0cc5c8fb17b0a591.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">plt.plot(x, <span class="number">1</span> / <span class="number">1</span> + np.exp(-x), <span class="string">&#x27;r+:&#x27;</span>, markersize=<span class="number">5</span>)</span><br><span class="line">plt.plot(x, (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)), <span class="string">&#x27;g*--&#x27;</span>, markersize=<span class="number">5</span>)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x24a8b66c160&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/5d4a5db02a86073aed590.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#调整坐标轴的范围</span></span><br><span class="line">plt.plot(x, <span class="number">1</span> / <span class="number">1</span> + np.exp(-x))</span><br><span class="line">plt.plot(x, (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)))</span><br><span class="line">plt.xlim(-<span class="number">2</span>, <span class="number">10</span>)</span><br><span class="line">plt.ylim(<span class="number">0</span>, <span class="number">3</span>)</span><br></pre></td></tr></table></figure><pre><code>(0.0, 3.0)</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/7a9b30d66ea9b2679d956.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#调整坐标轴刻度的大小；</span></span><br><span class="line">plt.plot(x, <span class="number">1</span> / <span class="number">1</span> + np.exp(-x))</span><br><span class="line">plt.plot(x, (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)))</span><br><span class="line">plt.xticks(np.arange(<span class="number">0</span>, <span class="number">7</span>, step=<span class="number">0.5</span>), fontsize=<span class="number">10</span>)</span><br><span class="line">plt.yticks(np.arange(<span class="number">0</span>, <span class="number">2</span>, step=<span class="number">0.5</span>), fontsize=<span class="number">10</span>)</span><br></pre></td></tr></table></figure><pre><code>([&lt;matplotlib.axis.YTick at 0x24a8b70d7c0&gt;,  &lt;matplotlib.axis.YTick at 0x24a8b70d3a0&gt;,  &lt;matplotlib.axis.YTick at 0x24a8b709220&gt;,  &lt;matplotlib.axis.YTick at 0x24a8b746fd0&gt;], [Text(0, 0, &#39;&#39;), Text(0, 0, &#39;&#39;), Text(0, 0, &#39;&#39;), Text(0, 0, &#39;&#39;)])</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/9099544b6105d61dd1ca0.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">plt.plot(x, <span class="number">1</span> / <span class="number">1</span> + np.exp(-x))</span><br><span class="line">plt.plot(x, (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)))</span><br><span class="line">plt.title(<span class="string">&quot;1 / 1 + e^x&quot;</span>, fontsize=<span class="number">20</span>)</span><br><span class="line">plt.xlabel(<span class="string">&quot;(e^x - e^(-x))/ (e^x + e^(-x))&quot;</span>, fontsize=<span class="number">20</span>)</span><br><span class="line">plt.ylabel(<span class="string">&quot;y&quot;</span>, fontsize=<span class="number">20</span>)</span><br></pre></td></tr></table></figure><pre><code>Text(0, 0.5, &#39;y&#39;)</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/f0768a4cb110c07620507.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">plt.plot(x, <span class="number">1</span> / <span class="number">1</span> + np.exp(-x), label=<span class="string">&quot;1 / 1 + e^x&quot;</span>)</span><br><span class="line">plt.plot(x, (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)), label=<span class="string">&quot;(e^x - e^(-x))/ (e^x + e^(-x))&quot;</span>)</span><br><span class="line">plt.title(<span class="string">&quot;1 / 1 + e^x&quot;</span>, fontsize=<span class="number">20</span>)</span><br><span class="line">plt.xlabel(<span class="string">&quot;(e^x - e^(-x))/ (e^x + e^(-x))&quot;</span>, fontsize=<span class="number">20</span>)</span><br><span class="line">plt.ylabel(<span class="string">&quot;y&quot;</span>, fontsize=<span class="number">20</span>)</span><br><span class="line">plt.legend(loc=<span class="string">&quot;best&quot;</span>, frameon=<span class="literal">True</span>, fontsize=<span class="number">15</span>)</span><br><span class="line">plt.annotate(<span class="string">&#x27;zero point&#x27;</span>, xy=(<span class="number">5</span>, <span class="number">1</span>), xytext=(<span class="number">3</span>, <span class="number">0.75</span>), fontsize=<span class="number">15</span>,</span><br><span class="line">             arrowprops=<span class="built_in">dict</span>(arrowstyle=<span class="string">&#x27;-&gt;&#x27;</span>, facecolor=<span class="string">&#x27;black&#x27;</span>),</span><br><span class="line">             )</span><br><span class="line">plt.savefig(<span class="string">&#x27;my_figure.png&#x27;</span>)</span><br></pre></td></tr></table></figure><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/33a4f8a15f0d2fdbe0527.png" alt="png"></p><h3 id="3、绘制散点图："><a href="#3、绘制散点图：" class="headerlink" title="3、绘制散点图："></a>3、绘制散点图：</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">plt.scatter(x, <span class="number">1</span> / <span class="number">1</span> + np.exp(-x), c=(<span class="number">1</span> / <span class="number">1</span> + np.exp(-x)), s=<span class="number">100</span> * np.random.rand(<span class="number">100</span>), cmap=<span class="string">&quot;viridis&quot;</span>, alpha=<span class="number">0.2</span>)</span><br><span class="line">plt.scatter(x, (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)), c=((np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))), s= <span class="number">50</span> * np.random.rand(<span class="number">100</span>), cmap=<span class="string">&quot;viridis&quot;</span>, alpha=<span class="number">0.7</span>)</span><br><span class="line">plt.colorbar()</span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.colorbar.Colorbar at 0x24a8b8c7cd0&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/d862bbd8efcf48a344eaa.png" alt="png"></p><ul><li>按y值的大小进行颜色配置，选择一个你喜欢的颜色映射；</li><li>生成一个随机序列，点的大小依赖于对应位置的随机序列的值；</li><li>设置不同的透明度。</li></ul><h3 id="4、绘制柱形图："><a href="#4、绘制柱形图：" class="headerlink" title="4、绘制柱形图："></a>4、绘制柱形图：</h3><ul><li>利用函数1，生成一系列x, y，并绘制柱形图；</li><li>利用函数2，生成一系列x, y，并绘制横向柱形图；</li><li>利用函数1、2，生成一系列x, y，并绘制累加柱形图和并列柱形图；</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">1</span>, <span class="number">10</span>, <span class="number">5</span>)</span><br><span class="line">y = <span class="number">1</span> / <span class="number">1</span> + np.exp(-x)</span><br><span class="line">plt.bar(x, y, align=<span class="string">&#x27;center&#x27;</span>, width=<span class="number">0.5</span>)</span><br><span class="line">plt.tick_params(axis=<span class="string">&#x27;both&#x27;</span>, labelsize=<span class="number">13</span>)</span><br><span class="line">plt.xticks(np.arange(<span class="number">0</span>, <span class="number">11</span>, step=<span class="number">0.5</span>))</span><br></pre></td></tr></table></figure><pre><code>([&lt;matplotlib.axis.XTick at 0x24a8b92d1c0&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b92d190&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b926d30&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b9587c0&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b958cd0&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b965220&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b965730&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b965c40&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b96b190&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b965970&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b958a00&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b96b6a0&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b96bbb0&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b972100&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b972610&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b972b20&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b975070&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b975580&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b9726a0&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b96b730&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b975880&gt;,  &lt;matplotlib.axis.XTick at 0x24a8b975c40&gt;], [Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;),  Text(0, 0, &#39;&#39;)])</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/9ed19363c45be86b48c15.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">1</span>, <span class="number">10</span>, <span class="number">5</span>)</span><br><span class="line">y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))</span><br><span class="line">plt.barh(x, y, align=<span class="string">&#x27;center&#x27;</span>)</span><br></pre></td></tr></table></figure><pre><code>&lt;BarContainer object of 5 artists&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/aea51d082aa8615b2f6be.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">1</span>, <span class="number">10</span>, <span class="number">5</span>)</span><br><span class="line">y1 = <span class="number">1</span> / <span class="number">1</span> + np.exp(-x)</span><br><span class="line">y2 = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))</span><br><span class="line">plt.bar(x, y1, align=<span class="string">&#x27;center&#x27;</span>, width=<span class="number">0.5</span>)</span><br><span class="line">plt.bar(x + <span class="number">0.5</span>, y2, align=<span class="string">&#x27;center&#x27;</span>, width=<span class="number">0.5</span>)</span><br></pre></td></tr></table></figure><pre><code>&lt;BarContainer object of 5 artists&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/2cfd38dbe408cd630c309.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">1</span>, <span class="number">10</span>, <span class="number">5</span>)</span><br><span class="line">y1 = <span class="number">1</span> / <span class="number">1</span> + np.exp(-x)</span><br><span class="line">y2 = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))</span><br><span class="line">plt.bar(x, y1, align=<span class="string">&#x27;center&#x27;</span>, width=<span class="number">0.5</span>)</span><br><span class="line">plt.bar(x, y2, bottom=y1, align=<span class="string">&#x27;center&#x27;</span>, width=<span class="number">0.5</span>)</span><br></pre></td></tr></table></figure><pre><code>&lt;BarContainer object of 5 artists&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/ed17559fe66ffec61829d.png" alt="png"></p><h3 id="5、多子图："><a href="#5、多子图：" class="headerlink" title="5、多子图："></a>5、多子图：</h3><ul><li>在函数1、2的基础上，增加正弦函数和余弦函数，绘制2*2的多子图。</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">0</span>, <span class="number">4</span> * np.pi, <span class="number">10000</span>)</span><br><span class="line">y1 = <span class="number">1</span> / <span class="number">1</span> + np.exp(-x)</span><br><span class="line">y2 = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))</span><br><span class="line">y3 = np.sin(x)</span><br><span class="line">y4 = np.cos(x)</span><br><span class="line"></span><br><span class="line">plt.subplot(<span class="number">321</span>)</span><br><span class="line">plt.plot(x, y1)</span><br><span class="line"></span><br><span class="line">plt.subplot(<span class="number">322</span>)</span><br><span class="line">plt.plot(x, y2)</span><br><span class="line"></span><br><span class="line">plt.subplot(<span class="number">323</span>)</span><br><span class="line">plt.plot(x, y3)</span><br><span class="line"></span><br><span class="line">plt.subplot(<span class="number">324</span>)</span><br><span class="line">plt.plot(x, y4)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x24a8b7c7820&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/d6a76a1ed8f9fad581ce0.png" alt="png"></p><h3 id="6、直方图："><a href="#6、直方图：" class="headerlink" title="6、直方图："></a>6、直方图：</h3><ul><li>构造一个标准正态分布，绘制频次直方图、概率密度直方图、累计概率直方图。</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">mu, sigma = <span class="number">85</span>, <span class="number">10</span></span><br><span class="line">x = mu + sigma * np.random.randn(<span class="number">10000</span>)</span><br><span class="line">plt.hist(x, bins=<span class="number">50</span>)</span><br></pre></td></tr></table></figure><pre><code>(array([  3.,   2.,   1.,   7.,   3.,   8.,   8.,  25.,  28.,  36.,  72.,         70., 122., 118., 165., 219., 300., 311., 397., 430., 516., 580.,        595., 627., 612., 661., 568., 535., 500., 455., 434., 371., 278.,        215., 196., 139., 101.,  86.,  58.,  48.,  41.,  18.,  14.,  11.,          8.,   6.,   1.,   0.,   0.,   1.]), array([ 46.8047152 ,  48.35161112,  49.89850705,  51.44540298,         52.9922989 ,  54.53919483,  56.08609076,  57.63298669,         59.17988261,  60.72677854,  62.27367447,  63.82057039,         65.36746632,  66.91436225,  68.46125818,  70.0081541 ,         71.55505003,  73.10194596,  74.64884188,  76.19573781,         77.74263374,  79.28952967,  80.83642559,  82.38332152,         83.93021745,  85.47711337,  87.0240093 ,  88.57090523,         90.11780116,  91.66469708,  93.21159301,  94.75848894,         96.30538486,  97.85228079,  99.39917672, 100.94607265,        102.49296857, 104.0398645 , 105.58676043, 107.13365635,        108.68055228, 110.22744821, 111.77434414, 113.32124006,        114.86813599, 116.41503192, 117.96192784, 119.50882377,        121.0557197 , 122.60261563, 124.14951155]), &lt;BarContainer object of 50 artists&gt;)</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/8a4d42cd166a08cf0c34f.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">mu, sigma = <span class="number">85</span>, <span class="number">10</span></span><br><span class="line">x = mu + sigma * np.random.randn(<span class="number">10000</span>)</span><br><span class="line">plt.hist(x, bins=<span class="number">50</span>, density=<span class="literal">True</span>, color=<span class="string">&#x27;r&#x27;</span>)</span><br><span class="line">plt.text(<span class="number">60</span>, <span class="number">.035</span>, <span class="string">r&#x27;$\mu=100,\ \sigma=15$&#x27;</span>)</span><br></pre></td></tr></table></figure><pre><code>Text(60, 0.035, &#39;$\\mu=100,\\ \\sigma=15$&#39;)</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/245a004976a2de2dd5307.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">mu, sigma = <span class="number">85</span>, <span class="number">10</span></span><br><span class="line">x = mu + sigma * np.random.randn(<span class="number">10000</span>)</span><br><span class="line">plt.hist(x, <span class="number">50</span>, density=<span class="literal">True</span>, cumulative=<span class="literal">True</span>, color=<span class="string">&quot;g&quot;</span>)</span><br><span class="line">plt.text(<span class="number">60</span>, <span class="number">.035</span>, <span class="string">r&#x27;$\mu=100,\ \sigma=15$&#x27;</span>)</span><br></pre></td></tr></table></figure><pre><code>Text(60, 0.035, &#39;$\\mu=100,\\ \\sigma=15$&#39;)</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/76088d82f5ce6d11b6749.png" alt="png"></p><h3 id="7、误差图："><a href="#7、误差图：" class="headerlink" title="7、误差图："></a>7、误差图：</h3><ul><li>利用函数 1，生成一系列x, y，随机生成一系列误差dy，绘制误差图。</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">0</span>, <span class="number">4</span> * np.pi, <span class="number">25</span>)</span><br><span class="line">y = <span class="number">1</span> / <span class="number">1</span> + np.exp(-x)</span><br><span class="line">dy = np.random.rand(<span class="number">25</span>)</span><br><span class="line"></span><br><span class="line">plt.errorbar(x, y, dy, fmt=<span class="string">&#x27;+b&#x27;</span>)</span><br></pre></td></tr></table></figure><pre><code>&lt;ErrorbarContainer object of 3 artists&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/be2ad3789c09ce2d36a0c.png" alt="png"></p><h2 id="简单绘图题（其他）"><a href="#简单绘图题（其他）" class="headerlink" title="简单绘图题（其他）"></a>简单绘图题（其他）</h2><h3 id="1、面向对象绘图"><a href="#1、面向对象绘图" class="headerlink" title="1、面向对象绘图"></a>1、面向对象绘图</h3><ul><li>利用函数 1 和函数2，绘制一个画中画。</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">x = np.linspace(<span class="number">0</span>, <span class="number">4</span> * np.pi, <span class="number">10000</span>)</span><br><span class="line">y1 = <span class="number">1</span> / <span class="number">1</span> + np.exp(-x)</span><br><span class="line">y2 = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))</span><br><span class="line"></span><br><span class="line">fig = plt.figure()</span><br><span class="line"></span><br><span class="line">ax1 = fig.add_axes([<span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>])</span><br><span class="line">ax2 = fig.add_axes([<span class="number">0.5</span>, <span class="number">0.5</span>, <span class="number">0.5</span>, <span class="number">0.5</span>])</span><br><span class="line"></span><br><span class="line">ax1.plot(x, y1, <span class="string">&#x27;r&#x27;</span>)</span><br><span class="line">ax2.plot(x, y2, <span class="string">&#x27;b&#x27;</span>)</span><br></pre></td></tr></table></figure><pre><code>[&lt;matplotlib.lines.Line2D at 0x24a8ceebd00&gt;]</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/2a49cb663f2915594e888.png" alt="png"></p><h3 id="2、三维图形绘制"><a href="#2、三维图形绘制" class="headerlink" title="2、三维图形绘制"></a>2、三维图形绘制</h3><ul><li>绘制一个薄圆柱体。</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">from</span> mpl_toolkits <span class="keyword">import</span> mplot3d</span><br><span class="line"></span><br><span class="line">t = np.linspace(<span class="number">0</span>, <span class="number">2</span>*np.pi, <span class="number">1000</span>)</span><br><span class="line">X = np.sin(t)</span><br><span class="line">Y = np.cos(t)</span><br><span class="line">Z = np.arange(t.size)[:, np.newaxis]</span><br><span class="line"></span><br><span class="line">ax = plt.axes(projection=<span class="string">&quot;3d&quot;</span>)</span><br><span class="line">ax.plot_surface(X, Y, Z, cmap=<span class="string">&quot;viridis&quot;</span>)</span><br></pre></td></tr></table></figure><pre><code>&lt;mpl_toolkits.mplot3d.art3d.Poly3DCollection at 0x24a8dff2d30&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/cecb4aae947e84e5da3ac.png" alt="png"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;strong&gt;&lt;span class=&#39;p h1&#39;&gt;Matplotlib介绍&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Matplotlib是一个Python 2D绘图库，它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。 Matplotlib可</summary>
      
    
    
    
    <category term="软件学习" scheme="https://blog.cent1pedee.top/categories/%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="大学生涯" scheme="https://blog.cent1pedee.top/categories/%E5%A4%A7%E5%AD%A6%E7%94%9F%E6%B6%AF/"/>
    
    
    <category term="Python" scheme="https://blog.cent1pedee.top/tags/Python/"/>
    
    <category term="数据分析" scheme="https://blog.cent1pedee.top/tags/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/"/>
    
    <category term="数据可视化" scheme="https://blog.cent1pedee.top/tags/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96/"/>
    
  </entry>
  
  <entry>
    <title>Python数据清洗：Numpy常用操作</title>
    <link href="https://blog.cent1pedee.top/posts/2b53089b.html"/>
    <id>https://blog.cent1pedee.top/posts/2b53089b.html</id>
    <published>2023-08-20T01:39:06.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<p><strong><span class='p h1'>我为什么要用NumPy?</span></strong></p><ul><li>对于同样的数值计算任务，使用NumPy要比直接编写Python代码便捷得多；</li><li>NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构，且其能够提升的性能是与数组中的元素成比例的；</li><li>NumPy的大部分代码都是用C语言写的，其底层算法在设计时就有着优异的性能，这使得NumPy比纯Python代码高效得多</li><li>当然，NumPy也有其不足之处，由于NumPy使用内存映射文件以达到最优的数据读写性能，而内存的大小限制了其对TB级大文件的处理；此外，NumPy数组的通用性不及Python提供的list容器。因此，在科学计算之外的领域，NumPy的优势也就不那么明显。</li></ul><p>关于Python Numpy矩阵的用法总结请参考博文：<a href="https://www.cnblogs.com/wj-1314/p/10244807.html">https://www.cnblogs.com/wj-1314/p/10244807.html</a></p><hr><h1 id="什么是NumPy-基础篇"><a href="#什么是NumPy-基础篇" class="headerlink" title="什么是NumPy?(基础篇)"></a>什么是NumPy?(基础篇)</h1><p>NumPy是一个功能强大的Python库，主要用于对多维数组执行计算。NumPy这个词来源于两个单词– <mark class="hl-label blue">Numerical</mark> 和<mark class="hl-label blue">Python</mark> 。NumPy提供了大量的库函数和操作，可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务：</p><ul><li><p><strong>机器学习模型</strong>：在编写机器学习算法时，需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库，用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。</p></li><li><p><strong>图像处理和计算机图形学</strong>：计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上，NumPy提供了一些优秀的库函数来快速处理图像。例如，镜像图像、按特定角度旋转图像等。</p></li><li><p><strong>数学任务</strong>：NumPy对于执行各种数学任务非常有用，如数值积分、微分、内插、外推等。因此，当涉及到数学任务时，它形成了一种基于Python的MATLAB的快速替代。</p></li></ul><h1 id="NumPy的安装"><a href="#NumPy的安装" class="headerlink" title="NumPy的安装"></a>NumPy的安装</h1><p>在你的计算机上安装NumPy的最快也是最简单的方法是在shell上使用以下命令：<code>pip install numpy</code>。</p><p>这将在你的计算机上安装最新&#x2F;最稳定的NumPy版本。通过PIP安装是安装任何Python软件包的最简单方法。现在让我们来谈谈NumPy中最重要的概念，NumPy数组。</p><h1 id="Numpy的使用以及应用"><a href="#Numpy的使用以及应用" class="headerlink" title="Numpy的使用以及应用"></a>Numpy的使用以及应用</h1><ul><li><p>导入Numpy模块</p></li><li><p>使用np.array()创建</p></li><li><p>使用plt 创建</p></li><li><p>使用np的routines函数创建</p></li><li><p>使用array()创建一个一维数组</p></li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line">arr = np.array([<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>])</span><br><span class="line">arr</span><br></pre></td></tr></table></figure><pre><code>array([1, 2, 3])</code></pre><ul><li>使用array()创建一个多维数组</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr = np.array([[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>],[<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>]])</span><br><span class="line">arr</span><br></pre></td></tr></table></figure><pre><code>array([[1, 2, 3],       [4, 5, 6]])</code></pre><ul><li>数组和列表的区别是什么？<ul><li>数组中存储的数据元素类型必须是统一类型</li><li>优先级：<ul><li>字符串 &gt; 浮点型 &gt; 整型</li></ul></li></ul></li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr = np.array([<span class="number">1</span>,<span class="number">2.2</span>,<span class="string">&quot;three&quot;</span>])</span><br><span class="line">arr</span><br></pre></td></tr></table></figure><pre><code>array([&#39;1&#39;, &#39;2.2&#39;, &#39;three&#39;], dtype=&#39;&lt;U32&#39;)</code></pre><ul><li>将外部的一张图片读取加载到numpy数组中，然后尝试改变数组元素的数值查看对原始图片的影响</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line">img_arr = plt.imread(<span class="string">&quot;C:\\Users\\图片.jpg&quot;</span>) <span class="comment">#返回的数组，数组中装载的就是图片内容</span></span><br><span class="line">plt.imshow(img_arr)<span class="comment">#将numpy数组进行可视化展示</span></span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.image.AxesImage at 0x2204a526cd0&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/803b1e000d92f5b4d6dc4.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">img_arr = img_arr - <span class="number">100</span> <span class="comment">#将每一个数组元素都减去100</span></span><br><span class="line">plt.imshow(img_arr)</span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.image.AxesImage at 0x2204d86c690&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/875edb3a27cef78116d17.png" alt="png"></p><ul><li>zero()</li><li>ones()</li><li>linespace()</li><li>arange()</li><li>random系列</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.ones(shape=(<span class="number">3</span>,<span class="number">4</span>))</span><br></pre></td></tr></table></figure><pre><code>array([[1., 1., 1., 1.],       [1., 1., 1., 1.],       [1., 1., 1., 1.]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.linspace(<span class="number">0</span>,<span class="number">100</span>,num=<span class="number">20</span>)<span class="comment">#一维的等差数列数组</span></span><br></pre></td></tr></table></figure><pre><code>array([  0.        ,   5.26315789,  10.52631579,  15.78947368,        21.05263158,  26.31578947,  31.57894737,  36.84210526,        42.10526316,  47.36842105,  52.63157895,  57.89473684,        63.15789474,  68.42105263,  73.68421053,  78.94736842,        84.21052632,  89.47368421,  94.73684211, 100.        ])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.arange(<span class="number">10</span>,<span class="number">50</span>,step=<span class="number">2</span>)<span class="comment">#一维等差数列</span></span><br></pre></td></tr></table></figure><pre><code>array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,       44, 46, 48])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.random.randint(<span class="number">0</span>,<span class="number">100</span>,size=(<span class="number">5</span>,<span class="number">3</span>))</span><br></pre></td></tr></table></figure><pre><code>array([[93, 62, 92],       [13, 20, 45],       [ 7, 65, 87],       [98, 23, 74],       [69, 18, 37]])</code></pre><h2 id="numpy的常用属性"><a href="#numpy的常用属性" class="headerlink" title="numpy的常用属性"></a>numpy的常用属性</h2><ul><li>shape</li><li>ndim</li><li>size</li><li>dtype</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr = np.random.randint(<span class="number">0</span>,<span class="number">100</span>,size=(<span class="number">5</span>,<span class="number">6</span>))</span><br><span class="line">arr</span><br></pre></td></tr></table></figure><pre><code>array([[78, 21, 12, 74, 84, 52],       [84, 57, 31, 61, 42, 10],       [60, 52, 95, 45, 19, 35],       [18, 31, 23, 21, 66, 21],       [89, 40, 84,  5, 47, 13]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.shape <span class="comment">#返回的是数组的形状</span></span><br></pre></td></tr></table></figure><pre><code>(5, 6)</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.ndim <span class="comment">#返回的是数组的维度</span></span><br></pre></td></tr></table></figure><pre><code>2</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.size <span class="comment">#返回数组元素的个数</span></span><br></pre></td></tr></table></figure><pre><code>30</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.dtype <span class="comment">#返回的是数组元素的类型</span></span><br></pre></td></tr></table></figure><pre><code>dtype(&#39;int32&#39;)</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="built_in">type</span>(arr) <span class="comment">#数组的数据类型</span></span><br></pre></td></tr></table></figure><pre><code>numpy.ndarray</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr = np.array([<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>])</span><br><span class="line">arr.dtype</span><br></pre></td></tr></table></figure><pre><code>dtype(&#39;int32&#39;)</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#创建一个数组，指定数组元素类型为int64</span></span><br><span class="line">arr = np.array([<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>],dtype=<span class="string">&quot;int64&quot;</span>)</span><br><span class="line">arr.dtype</span><br></pre></td></tr></table></figure><pre><code>dtype(&#39;int64&#39;)</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.dtype = <span class="string">&quot;uint8&quot;</span> <span class="comment">#修改数组的元素类型</span></span><br></pre></td></tr></table></figure><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.dtype</span><br></pre></td></tr></table></figure><pre><code>dtype(&#39;uint8&#39;)</code></pre><h2 id="numpy的索引和切片操作-重点"><a href="#numpy的索引和切片操作-重点" class="headerlink" title="numpy的索引和切片操作(重点)"></a>numpy的索引和切片操作(重点)</h2><ul><li>索引操作和列表同理</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr = np.random.randint(<span class="number">1</span>,<span class="number">100</span>,size=(<span class="number">5</span>,<span class="number">6</span>))</span><br><span class="line">arr</span><br></pre></td></tr></table></figure><pre><code>array([[94, 45,  2, 65, 25, 61],       [11, 45, 70, 66, 94, 85],       [32, 14, 90, 27, 32, 73],       [34, 32, 47, 74, 81, 69],       [42, 90, 73, 51, 20, 56]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr[<span class="number">1</span>] <span class="comment">#取出了numpy数组中的下标为1的行数据</span></span><br></pre></td></tr></table></figure><pre><code>array([11, 45, 70, 66, 94, 85])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr[[<span class="number">1</span>,<span class="number">3</span>,<span class="number">4</span>]] <span class="comment">#取出多行</span></span><br></pre></td></tr></table></figure><pre><code>array([[11, 45, 70, 66, 94, 85],       [34, 32, 47, 74, 81, 69],       [42, 90, 73, 51, 20, 56]])</code></pre><ul><li>切片操作<ul><li>切出前两行数据</li><li>切出前两列数据</li><li>切出前两行的前两列数据</li><li>数组数据翻转</li><li>练习：将一张图片上下左右进行翻转操作</li><li>练习：将图片进行指定区域的裁剪</li></ul></li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#切出arr数组的前两行的数据</span></span><br><span class="line">arr[<span class="number">0</span>:<span class="number">2</span>] <span class="comment">#arr[行切片]</span></span><br></pre></td></tr></table></figure><pre><code>array([[94, 45,  2, 65, 25, 61],       [11, 45, 70, 66, 94, 85]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#切出arr数组的前两列数据</span></span><br><span class="line">arr[:,<span class="number">0</span>:<span class="number">2</span>] <span class="comment">#arr[行切片,列切片]</span></span><br></pre></td></tr></table></figure><pre><code>array([[94, 45],       [11, 45],       [32, 14],       [34, 32],       [42, 90]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#切出前两行的前两列数据</span></span><br><span class="line">arr[<span class="number">0</span>:<span class="number">2</span>,<span class="number">0</span>:<span class="number">2</span>]</span><br></pre></td></tr></table></figure><pre><code>array([[94, 45],       [11, 45]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#将数组的行倒置</span></span><br><span class="line">arr[::-<span class="number">1</span>]</span><br></pre></td></tr></table></figure><pre><code>array([[42, 90, 73, 51, 20, 56],       [34, 32, 47, 74, 81, 69],       [32, 14, 90, 27, 32, 73],       [11, 45, 70, 66, 94, 85],       [94, 45,  2, 65, 25, 61]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#将数组的列倒置</span></span><br><span class="line">arr[:,::-<span class="number">1</span>]</span><br></pre></td></tr></table></figure><pre><code>array([[61, 25, 65,  2, 45, 94],       [85, 94, 66, 70, 45, 11],       [73, 32, 27, 90, 14, 32],       [69, 81, 74, 47, 32, 34],       [56, 20, 51, 73, 90, 42]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#所有元素倒置</span></span><br><span class="line">arr[::-<span class="number">1</span>,::-<span class="number">1</span>]</span><br></pre></td></tr></table></figure><pre><code>array([[56, 20, 51, 73, 90, 42],       [69, 81, 74, 47, 32, 34],       [73, 32, 27, 90, 14, 32],       [85, 94, 66, 70, 45, 11],       [61, 25, 65,  2, 45, 94]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#图片翻转前置准备</span></span><br><span class="line">img_arr = plt.imread(<span class="string">&quot;C:\\Users\\图片.jpg&quot;</span>)</span><br><span class="line">plt.imshow(img_arr)</span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.image.AxesImage at 0x2204d7a3690&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/102e1b002235f61dc0fa7.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">img_arr.shape</span><br></pre></td></tr></table></figure><pre><code>(1024, 1024, 3)</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#将一张图片左右进行翻转操作</span></span><br><span class="line">plt.imshow(img_arr[:,::-<span class="number">1</span>,:]) <span class="comment">#img_arr[行，列，颜色]</span></span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.image.AxesImage at 0x2204f886690&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/f9f8c50aa0024f90b3153.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#将一张图片上下进行翻转操作</span></span><br><span class="line">plt.imshow(img_arr[::-<span class="number">1</span>,:,:])</span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.image.AxesImage at 0x2204f629a90&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/25dba6ee787e0886fab10.png" alt="png"></p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#图片裁剪的功能</span></span><br><span class="line">plt.imshow(img_arr[<span class="number">200</span>:<span class="number">1000</span>,<span class="number">250</span>:<span class="number">800</span>,:])</span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.image.AxesImage at 0x2204fdc81d0&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/23afcfc2068144d70d251.png" alt="png"></p><h2 id="变形reshape"><a href="#变形reshape" class="headerlink" title="变形reshape"></a>变形reshape</h2><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr <span class="comment">#原始arr是一个5行6列的二维数组</span></span><br></pre></td></tr></table></figure><pre><code>array([[94, 45,  2, 65, 25, 61],       [11, 45, 70, 66, 94, 85],       [32, 14, 90, 27, 32, 73],       [34, 32, 47, 74, 81, 69],       [42, 90, 73, 51, 20, 56]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#将二维的数组变成1维</span></span><br><span class="line">arr_1 = arr.reshape((<span class="number">30</span>,))</span><br></pre></td></tr></table></figure><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#将1维变形成多维</span></span><br><span class="line">arr_1.reshape((<span class="number">6</span>,<span class="number">5</span>))</span><br></pre></td></tr></table></figure><pre><code>array([[94, 45,  2, 65, 25],       [61, 11, 45, 70, 66],       [94, 85, 32, 14, 90],       [27, 32, 73, 34, 32],       [47, 74, 81, 69, 42],       [90, 73, 51, 20, 56]])</code></pre><h2 id="级联操作"><a href="#级联操作" class="headerlink" title="级联操作"></a>级联操作</h2><ul><li>axis轴向的理解(将多个numpy数组进行横向或者纵向的拼接)<ul><li>0：列</li><li>1：行</li></ul></li><li>问题：<ul><li>级联的两个数组维度一样，但是行列个数不一样会如何?(不行，链接的两个数组维度必须完全匹配)</li></ul></li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.concatenate((arr,arr),axis=<span class="number">1</span>)</span><br></pre></td></tr></table></figure><pre><code>array([[94, 45,  2, 65, 25, 61, 94, 45,  2, 65, 25, 61],       [11, 45, 70, 66, 94, 85, 11, 45, 70, 66, 94, 85],       [32, 14, 90, 27, 32, 73, 32, 14, 90, 27, 32, 73],       [34, 32, 47, 74, 81, 69, 34, 32, 47, 74, 81, 69],       [42, 90, 73, 51, 20, 56, 42, 90, 73, 51, 20, 56]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr3 = np.concatenate((img_arr,img_arr,img_arr),axis=<span class="number">0</span>)</span><br><span class="line">plt.imshow(arr3)</span><br></pre></td></tr></table></figure><pre><code>&lt;matplotlib.image.AxesImage at 0x2205118d290&gt;</code></pre><p><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" onerror="this.onerror=null,this.src=&quot;/img/404.jpg&quot;" data-lazy-src="https://imgbed.kouseki.cn/file/2c816c6fc71cdd2203e0f.png" alt="png"></p><h2 id="常用的聚合操作"><a href="#常用的聚合操作" class="headerlink" title="常用的聚合操作"></a>常用的聚合操作</h2><ul><li>sum,max,min,mean</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr</span><br></pre></td></tr></table></figure><pre><code>array([[94, 45,  2, 65, 25, 61],       [11, 45, 70, 66, 94, 85],       [32, 14, 90, 27, 32, 73],       [34, 32, 47, 74, 81, 69],       [42, 90, 73, 51, 20, 56]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.<span class="built_in">sum</span>(axis=<span class="number">1</span>)</span><br></pre></td></tr></table></figure><pre><code>array([292, 371, 268, 337, 332])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.<span class="built_in">max</span>(axis=<span class="number">1</span>)</span><br></pre></td></tr></table></figure><pre><code>array([94, 94, 90, 81, 90])</code></pre><h2 id="常用的数学函数"><a href="#常用的数学函数" class="headerlink" title="常用的数学函数"></a>常用的数学函数</h2><ul><li>Numpy提供了标准的三角函数：sin() cos() tan()</li><li>numpy.around(a,decimals)函数返回指定数字的四舍五入值<ul><li>参数说明：<ul><li>a：数组</li><li>decimals：舍入的小数位数，默认值为0，如果为负，整数将四舍五入到小数点左侧的位置</li></ul></li></ul></li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.sin(arr)</span><br></pre></td></tr></table></figure><pre><code>array([[-0.24525199,  0.85090352,  0.90929743,  0.82682868, -0.13235175,        -0.96611777],       [-0.99999021,  0.85090352,  0.77389068, -0.02655115, -0.24525199,        -0.17607562],       [ 0.55142668,  0.99060736,  0.89399666,  0.95637593,  0.55142668,        -0.67677196],       [ 0.52908269,  0.55142668,  0.12357312, -0.98514626, -0.62988799,        -0.11478481],       [-0.91652155,  0.89399666, -0.67677196,  0.67022918,  0.91294525,        -0.521551  ]])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.around(<span class="number">3.14</span>,<span class="number">2</span>)</span><br></pre></td></tr></table></figure><pre><code>3.14</code></pre><h2 id="常用的统计函数"><a href="#常用的统计函数" class="headerlink" title="常用的统计函数"></a>常用的统计函数</h2><ul><li>numpy.amin()和numpy.amax(),用于计算数组中的元素沿指定轴的最小、最大值</li><li>numpy.ptp(),计算数组中元素最大值与最小值的差(最大值-最小值)</li><li>numpy.median()函数用于计算数组a中元素的中位数(中值)</li><li>标准差std():标准差是一组数据平均分散程度的一种度量</li><li>方差var():统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数，换句话说，标准差是方差的平方根</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.ptp(arr,axis=<span class="number">0</span>)</span><br></pre></td></tr></table></figure><pre><code>array([83, 76, 88, 47, 74, 29])</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr[<span class="number">1</span>].std()</span><br></pre></td></tr></table></figure><pre><code>27.455519582691487</code></pre><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr[<span class="number">1</span>].var()</span><br></pre></td></tr></table></figure><pre><code>753.8055555555557</code></pre><h2 id="矩阵相关"><a href="#矩阵相关" class="headerlink" title="矩阵相关"></a>矩阵相关</h2><ul><li>矩阵库numpy.matlib</li><li>numpy.matlib.identity()函数返回给定大小的单位矩阵</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#eye返回一个标准的对角矩阵</span></span><br><span class="line">np.eye(<span class="number">6</span>)</span><br></pre></td></tr></table></figure><pre><code>array([[1., 0., 0., 0., 0., 0.],       [0., 1., 0., 0., 0., 0.],       [0., 0., 1., 0., 0., 0.],       [0., 0., 0., 1., 0., 0.],       [0., 0., 0., 0., 1., 0.],       [0., 0., 0., 0., 0., 1.]])</code></pre><ul><li>转置矩阵 .T</li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">arr.T</span><br></pre></td></tr></table></figure><pre><code>array([[94, 11, 32, 34, 42],       [45, 45, 14, 32, 90],       [ 2, 70, 90, 47, 73],       [65, 66, 27, 74, 51],       [25, 94, 32, 81, 20],       [61, 85, 73, 69, 56]])</code></pre><h2 id="矩阵相乘"><a href="#矩阵相乘" class="headerlink" title="矩阵相乘"></a>矩阵相乘</h2><ul><li>numpy.dot(a,b,out&#x3D;None)<ul><li>a:ndarray数组</li><li>b:ndarray数组</li></ul></li></ul><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">a1 = np.array([[<span class="number">2</span>,<span class="number">1</span>],[<span class="number">4</span>,<span class="number">3</span>]])</span><br><span class="line">a2 = np.array([[<span class="number">1</span>,<span class="number">2</span>],[<span class="number">1</span>,<span class="number">0</span>]])</span><br></pre></td></tr></table></figure><figure class="highlight python"><table><tr><td class="code"><pre><span class="line">np.dot(a1,a2)</span><br></pre></td></tr></table></figure><pre><code>array([[3, 4],       [7, 8]])</code></pre>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;strong&gt;&lt;span class=&#39;p h1&#39;&gt;我为什么要用NumPy?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于同样的数值计算任务，使用NumPy要比直接编写Python代码便捷得多；&lt;/li&gt;
&lt;li&gt;NumPy中的数组的存储效率和输入输出性</summary>
      
    
    
    
    <category term="软件学习" scheme="https://blog.cent1pedee.top/categories/%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="大学生涯" scheme="https://blog.cent1pedee.top/categories/%E5%A4%A7%E5%AD%A6%E7%94%9F%E6%B6%AF/"/>
    
    
    <category term="Python" scheme="https://blog.cent1pedee.top/tags/Python/"/>
    
    <category term="数据分析" scheme="https://blog.cent1pedee.top/tags/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/"/>
    
    <category term="数据清洗" scheme="https://blog.cent1pedee.top/tags/%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97/"/>
    
  </entry>
  
  <entry>
    <title>Python数据分析：利用jupyter清洗处理csv</title>
    <link href="https://blog.cent1pedee.top/posts/10771.html"/>
    <id>https://blog.cent1pedee.top/posts/10771.html</id>
    <published>2023-08-16T16:21:40.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Python数据清洗"><a href="#Python数据清洗" class="headerlink" title="Python数据清洗"></a>Python数据清洗</h1><h2 id="什么是数据清洗"><a href="#什么是数据清洗" class="headerlink" title="什么是数据清洗"></a>什么是数据清洗</h2><pre><code>数据清洗（data cleaning）是从记录集、数据库表或数据库中检测和纠正（或删除）损坏或不准确的记录的过程，是指识别数据的不完整、不正确、不准确或不相关部分，然后替换、修改、或删除脏数据或粗数据。数据清洗可以与数据加工工具交互执行，也可以通过脚本进行批处理。清洗后，一个数据集应该与系统中其他类似的数据集保持一致。 检测到或删除的不一致可能最初是由用户输入错误、传输或存储中的损坏或不同存储中类似实体的不同数据字典定义引起的。 数据清理与数据确认(data validation)的不同之处在于，数据确认几乎总是意味着数据在输入时被系统拒绝，并在输入时执行，而不是执行于批量数据。数据清洗不仅仅更正错误，同样加强来自各个单独信息系统不同数据间的一致性。专门的数据清洗软件能够自动检测数据文件，更正错误数据，并用全企业一致的格式集成数据。</code></pre><p>info: <a href="https://zh.wikipedia.org/zh-cn/%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97">Wiki</a></p><h2 id="数据清洗流程"><a href="#数据清洗流程" class="headerlink" title="数据清洗流程"></a>数据清洗流程</h2><h3 id="数据读写"><a href="#数据读写" class="headerlink" title="数据读写"></a>数据读写</h3><h4 id="导入所需的库"><a href="#导入所需的库" class="headerlink" title="导入所需的库"></a>导入所需的库</h4><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">import numpy as np</span><br><span class="line">import pandas as pd</span><br><span class="line">import matplotlib.pyplot as plt</span><br><span class="line">import seaborn as sns</span><br><span class="line">%matplotlib inline</span><br></pre></td></tr></table></figure><h4 id="读入文件"><a href="#读入文件" class="headerlink" title="读入文件"></a>读入文件</h4><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#读入csv格式文件</span></span><br><span class="line">data=pd.read_csv(<span class="string">&quot;cs-training.csv&quot;</span>,index_col=0)</span><br></pre></td></tr></table></figure><h3 id="数据探索"><a href="#数据探索" class="headerlink" title="数据探索"></a>数据探索</h3><h4 id="了解数据形状"><a href="#了解数据形状" class="headerlink" title="了解数据形状"></a>了解数据形状</h4><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#返回元组</span></span><br><span class="line">data.shape</span><br></pre></td></tr></table></figure><h4 id="了解数据结构"><a href="#了解数据结构" class="headerlink" title="了解数据结构"></a>了解数据结构</h4><p>通过了解结构可以看出指标的缺失情况</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#可以看出样本的整体情况、缺失状况</span></span><br><span class="line">data.info()</span><br></pre></td></tr></table></figure><h4 id="了解数据描述性统计信息"><a href="#了解数据描述性统计信息" class="headerlink" title="了解数据描述性统计信息"></a>了解数据描述性统计信息</h4><p>通过描述性统计可以初步判断是否存在异常值信息，比如下图中“age”年龄这个字段，最小值0岁明显不符合常理，可判断为异常值。</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">data.describe().T</span><br></pre></td></tr></table></figure><h3 id="重复值处理"><a href="#重复值处理" class="headerlink" title="重复值处理"></a>重复值处理</h3><h4 id="检查重复值"><a href="#检查重复值" class="headerlink" title="检查重复值"></a>检查重复值</h4><p>python中可通过duplicated函数查找并显示数据表中的重复值<br>这里需要注意的是：</p><ul><li>当两条记录中所有的数据都相等时duplicated函数才会判断为重复值；</li><li>duplicated支持从前向后(first)，和从后向前(last)两种重复值查找模式，即从第一行数据开始，第二行数据和第一行一样，从前向后就把第二行数据判断为重复值，从后向前就把第一行数据判断为重复值；</li><li>默认是从前向后进行重复值的查找和判断，也就是后面的条目在重复值判断中显示为True；</li></ul><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">data.duplicated() <span class="comment">#返回布尔型数据，告诉重复值的位置</span></span><br><span class="line">data.duplicated().<span class="built_in">sum</span>()  <span class="comment">#说明共有多少个重复值</span></span><br><span class="line">data[data.duplicated()]  <span class="comment">#打印重复值</span></span><br><span class="line">data[data.duplicated()].index   <span class="comment">#打印重复值索引</span></span><br></pre></td></tr></table></figure><h4 id="删除重复值"><a href="#删除重复值" class="headerlink" title="删除重复值"></a>删除重复值</h4><p>python中可通过drop_duplicates函数删除数据表中的重复值，判断标准和逻辑与duplicated函数一样</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">data.drop_duplicates(inplace=True)   <span class="comment">#inplace=True表示直接在源数据上进行操作</span></span><br><span class="line">data.index = range(data.shape[0])    <span class="comment">#动过源数据就要进行索引重建</span></span><br></pre></td></tr></table></figure><h3 id="缺失值处理"><a href="#缺失值处理" class="headerlink" title="缺失值处理"></a>缺失值处理</h3><h4 id="删除缺失值"><a href="#删除缺失值" class="headerlink" title="删除缺失值"></a>删除缺失值</h4><p>python中可以用dropna函数删除缺失值</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#DataFrame.dropna(self, axis=0, how=&#x27;any&#x27;, thresh=None, subset=None, inplace=False)</span></span><br><span class="line"><span class="comment">#删除数据表中含有空值的行,如果存在任何NA值，则删除该行或列。</span></span><br><span class="line">data.dropna(how=<span class="string">&#x27;any&#x27;</span>)</span><br><span class="line"><span class="comment"># 传入这个参数后将只丢弃全为缺失值的那些行</span></span><br><span class="line">data.dropna(how = <span class="string">&#x27;all&#x27;</span>)    </span><br><span class="line"><span class="comment">#丢弃有缺失值的列（一般不会这么做，这样会删掉一个特征）</span></span><br><span class="line">data.dropna(axis = 1)     </span><br><span class="line"><span class="comment"># 丢弃全为缺失值的那些列</span></span><br><span class="line">data.dropna(axis=1,how=<span class="string">&quot;all&quot;</span>)  </span><br><span class="line"><span class="comment"># 丢弃‘AgMonthlyIncomee’和‘NumberOfDependents’这两列中有缺失值的行  </span></span><br><span class="line">data.dropna(axis=0,subset = [<span class="string">&quot;MonthlyIncome&quot;</span>, <span class="string">&quot;NumberOfDependents&quot;</span>])   </span><br></pre></td></tr></table></figure><h4 id="固定值填充"><a href="#固定值填充" class="headerlink" title="固定值填充"></a>固定值填充</h4><p>选取某个固定值&#x2F;默认值填充缺失值。</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">data.fillna(-9999, inplace=True) <span class="comment"># 填充 -1,-999,-9999</span></span><br></pre></td></tr></table></figure><h4 id="统计变量填充"><a href="#统计变量填充" class="headerlink" title="统计变量填充"></a>统计变量填充</h4><ol><li>均值填补</li></ol><p>对每一列缺失值，填充当列的均值</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#对数据中每一列的缺失值，填充当列的均值</span></span><br><span class="line">data.fillna(data.mean(),inplace=True) </span><br><span class="line"><span class="comment">#可为数据中某一个指标缺失值都填充该指标均值</span></span><br><span class="line">data[<span class="string">&#x27;MonthlyIncome&#x27;</span>].fillna(data[<span class="string">&#x27;MonthlyIncome&#x27;</span>].mean(),inplace=True)</span><br></pre></td></tr></table></figure><ol start="2"><li>中位数填补</li></ol><p>对每一列的缺失值，填充当列的中位数</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#对数据中每一列的缺失值，填充当列的中位数</span></span><br><span class="line">data.fillna(data.median(),inplace=True) </span><br><span class="line"><span class="comment">#可为数据中某一个指标缺失值都填充该指标中位数</span></span><br><span class="line">data[<span class="string">&#x27;MonthlyIncome&#x27;</span>].fillna(data[<span class="string">&#x27;MonthlyIncome&#x27;</span>].median(),inplace=True)</span><br></pre></td></tr></table></figure><ol start="3"><li>众数填补</li></ol><p>对每一列的缺失值，填充当列的众数;但可能存在某列缺失值过多，众数为nan的情况，注意要取的是每列删除掉nan值后的众数。</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#对数据中每一列的缺失值，填充当列的众数</span></span><br><span class="line">data.fillna(data.mode(),inplace=True) </span><br><span class="line"><span class="comment">#可为数据中某一个指标缺失值都填充该指标众数</span></span><br><span class="line">data[<span class="string">&#x27;MonthlyIncome&#x27;</span>].fillna(data[<span class="string">&#x27;MonthlyIncome&#x27;</span>].mode(),inplace=True)</span><br></pre></td></tr></table></figure><h4 id="向前填充-向后填充"><a href="#向前填充-向后填充" class="headerlink" title="向前填充&#x2F;向后填充"></a>向前填充&#x2F;向后填充</h4><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#可用axis修改填充的方向，默认为0</span></span><br><span class="line">data.fillna(method=<span class="string">&#x27;ffill&#x27;</span>,inplace=True)   <span class="comment"># pad/ffill用前一个非缺失值去填充该缺失值</span></span><br><span class="line">data.fillna(method=<span class="string">&#x27;bfill&#x27;</span>,inplace=True)  <span class="comment"># backfill/bfill用后一个非缺失值填充该缺失值</span></span><br></pre></td></tr></table></figure><h4 id="模型填充法"><a href="#模型填充法" class="headerlink" title="模型填充法"></a>模型填充法</h4><p>缺失值作为新的label，建立模型得到预测值，然后进行填充。这里选择某个缺失值数量适当的特征采用随机森林进行拟合</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">from sklearn import ensemble</span><br><span class="line">from sklearn.preprocessing import LabelEncoder<span class="comment">#标准化标签，标签专用，能够将分类转换为分类数值。</span></span><br><span class="line">def set_missing(<span class="built_in">df</span>,estimate_list,miss_col):</span><br><span class="line">    <span class="string">&quot;&quot;</span><span class="string">&quot;df要处理的数据帧，estimate_list用来估计缺失值的字段列表,miss_col缺失字段名称;会直接在原来的数据帧上修改&quot;</span><span class="string">&quot;&quot;</span></span><br><span class="line">    col_list=estimate_list</span><br><span class="line">    col_list.append(miss_col)   </span><br><span class="line">    process_df = df.loc[:,col_list]</span><br><span class="line">    class_le= LabelEncoder()</span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> col_list[:-1]:</span><br><span class="line">        process_df.loc[:,i]=class_le.fit_transform(process_df.loc[:,i].values)</span><br><span class="line">    <span class="comment"># 分成已知该特征和未知该特征两部分</span></span><br><span class="line">    known=process_df[process_df[miss_col].notnull()].values</span><br><span class="line">    known[:, -1]=class_le.fit_transform(known[:, -1])</span><br><span class="line">    unknown = process_df[process_df[miss_col].isnull()].values</span><br><span class="line">    <span class="comment"># X为特征属性值</span></span><br><span class="line">    X = known[:, :-1]</span><br><span class="line">    <span class="comment"># y为结果标签值</span></span><br><span class="line">    y = known[:, -1]</span><br><span class="line">    <span class="comment"># fit到RandomForestRegressor之中</span></span><br><span class="line">    rfr = ensemble.RandomForestRegressor(random_state=1, n_estimators=200,max_depth=4,n_jobs=-1)</span><br><span class="line">    rfr.fit(X,y)</span><br><span class="line">    <span class="comment"># 用得到的模型进行未知特征值预测</span></span><br><span class="line">    predicted = rfr.predict(unknown[:, :-1]).round(0).astype(int)</span><br><span class="line">    predicted=class_le.inverse_transform(predicted)</span><br><span class="line">    <span class="comment"># print(predicted)</span></span><br><span class="line">    <span class="comment"># 用得到的预测结果填补原缺失数据</span></span><br><span class="line">    df.loc[(<span class="built_in">df</span>[miss_col].isnull()), miss_col] = predicted</span><br><span class="line">    <span class="built_in">return</span> <span class="built_in">df</span></span><br></pre></td></tr></table></figure><h4 id="不处理"><a href="#不处理" class="headerlink" title="不处理"></a>不处理</h4><p>保持数据原始信息，不对信息进行处理，而是直接将空值作为一种分类传入模型中进行分析。</p><h3 id="异常值处理"><a href="#异常值处理" class="headerlink" title="异常值处理"></a>异常值处理</h3><p>异常值(outlier)为一组测定值中与平均值的偏差超过两倍标准差的测定值，与平均值的偏差超过三倍标准差的测定值，称为高度异常的异常值。在处理数据时，应剔除高度异常的异常值。</p><h4 id="异常值来源"><a href="#异常值来源" class="headerlink" title="异常值来源"></a>异常值来源</h4><ol><li><dl><dt>人为错误</dt><dd>人为输入异常：数据收集，记录或输入过程中导致的错误<br>故意异常值：人为造假<br>数据处理错误：对数据操作或提取错误导致数据集中的异常值</dd></dl></li><li><dl><dt>机器错误</dt><dd>实验误差：实验设计运用要素不统一<br>测量误差：系统、机器故障导致错误的记录</dd></dl></li><li><dl><dt>偏离值</dt><dd>特殊情形下真实数据值极大，远超一般数值水平：例如富豪的收入水平，销售冠军的销售额等</dd></dl></li></ol><h4 id="异常值识别"><a href="#异常值识别" class="headerlink" title="异常值识别"></a>异常值识别</h4><dl><dt>1.简单统计分析</dt><dd>结合经验对属性值进行一个描述性的统计，查看值的不合理性。例如年龄范围一般为0~100等</dd></dl><dl><dt>2.3δ原则<br>当数据服从正态分布：对于正态分布，距离平均值3δ之外的概率0.003 ，因此认定距离平均值大于3δ的样本样本为异常值；具体步骤为：</dt><dd>1.计算需要检验的数据列的平均值和标准差；<br>2.比较数据列的每个值与平均值的偏差是否超过3倍，如果超过3倍，则为异常值；</dd></dl><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#用3倍标准差,找出&#x27;DebtRatio&#x27;异常值</span></span><br><span class="line">sta=(data[<span class="string">&#x27;DebtRatio&#x27;</span>]-data[<span class="string">&#x27;DebtRatio&#x27;</span>].mean())/data[<span class="string">&#x27;DebtRatio&#x27;</span>].std()</span><br><span class="line">sta.abs()&gt;3                       <span class="comment">#返回每个跟3比较的结果</span></span><br><span class="line">data[sta.abs()&gt;3]                 <span class="comment">#异常值</span></span><br><span class="line">delindex=data[sta.abs()&gt;3].index  <span class="comment">#异常值索引</span></span><br><span class="line">data.drop(delindex,inplace=True)  <span class="comment">#删除异常值</span></span><br></pre></td></tr></table></figure><ul><li><u>当数据不服从正态分布：</u>可以通过远离平均距离多少倍的标准差进行判定。</li></ul><p>3.箱型图分析</p><dl><dt>计算过程:</dt><dd>1.计算上四分位数（Q3），中位数，下四分位数（Q1）<br>2.计算上四分位数和下四分位数之间的差值，即四分位数差（IQR，interquartile range）Q3-Q1<br>3.绘制箱线图的上下范围，上限为上四分位数，下限为下四分位数。在箱子内部中位数的位置绘制横线。<br>4.大于上四分位数1.5倍四分位数差的值，或者小于下四分位数1.5倍四分位数差的值，划为异常值（outliers）。<br>5.异常值之外，最靠近上边缘和下边缘的两个值处，画横线，作为箱线图的触须。<br>6.极端异常值，即超出四分位数差3倍距离的异常值，用实心点表示；较为温和的异常值，即处于1.5倍-3倍四分位数差之间的异常值，用空心点表示。<br>7.为箱线图添加名称，数轴等</dd></dl><p>python中可用seaborn库的sns.boxplot()函数画箱型图，查看数值变量的取值范围，是否有异常值</p><h4 id="异常值处理-1"><a href="#异常值处理-1" class="headerlink" title="异常值处理"></a>异常值处理</h4><ol><li>删除</li></ol><p>直接将含有异常值的记录删除；</p><ol start="2"><li>视为缺失值</li></ol><p>将异常值视为缺失值，利用缺失值处理的方法进行处理；</p><ol start="3"><li>平均值修正</li></ol><p>可用前后两个观测值的平均值修正该异常值；</p><ol start="4"><li>不处理</li></ol><p>直接在具有异常值的数据集上进行数据挖掘，由业务分析挖掘价值</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Python数据清洗&quot;&gt;&lt;a href=&quot;#Python数据清洗&quot; class=&quot;headerlink&quot; title=&quot;Python数据清洗&quot;&gt;&lt;/a&gt;Python数据清洗&lt;/h1&gt;&lt;h2 id=&quot;什么是数据清洗&quot;&gt;&lt;a href=&quot;#什么是数据清洗&quot; class</summary>
      
    
    
    
    <category term="软件学习" scheme="https://blog.cent1pedee.top/categories/%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="大学生涯" scheme="https://blog.cent1pedee.top/categories/%E5%A4%A7%E5%AD%A6%E7%94%9F%E6%B6%AF/"/>
    
    
    <category term="Python" scheme="https://blog.cent1pedee.top/tags/Python/"/>
    
    <category term="数据分析" scheme="https://blog.cent1pedee.top/tags/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/"/>
    
  </entry>
  
  <entry>
    <title>Hello World!</title>
    <link href="https://blog.cent1pedee.top/posts/1c291ca3.html"/>
    <id>https://blog.cent1pedee.top/posts/1c291ca3.html</id>
    <published>2023-08-01T15:00:00.000Z</published>
    <updated>2025-02-23T02:44:08.238Z</updated>
    
    <content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">$ hexo new <span class="string">&quot;My New Post&quot;</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot;&gt;documentation&lt;/a&gt; for</summary>
      
    
    
    
    
    <category term="Hello World!" scheme="https://blog.cent1pedee.top/tags/Hello-World/"/>
    
    <category term="Hexo" scheme="https://blog.cent1pedee.top/tags/Hexo/"/>
    
  </entry>
  
</feed>
