组件示例

26年4月8日 星期三
4009 字
21 分钟
AI 摘要
AI
文章主要介绍了一些用于构建时间线和组件的语法,包括ProseA、Alert、Badge、BlogHeader、Blur、Chat、ChatItem、Folding、Key、LinkBanner、LinkCard、Pic、Poetry、Quote、Tab、Timeline、Tip等。这些组件支持多种标题和内容混合排列,并具有灵活组合的特性。同时,还提供了提示和组件语法的详细属性说明,以及选项卡Tab的用法。此外,还提到了引用Quote的内容,强调有时候有些话,有点意思。
本摘要由AI生成,仅供参考,内容准确性请以原文为准。

时间线 Timeline

前天我
看到了小兔
昨天
是小鹿
今天
是你。
今日无事
今日依旧无事
然后——
一件事
两件事。
再添一笔。

组件语法

mdx
import Timeline from '@/components/content/Timeline.astro'

<Timeline>
  <dt class="timeline-caption">时间标题</dt>
  <dd class="timeline-body">内容描述</dd>
  <dt class="timeline-caption">另一个时间</dt>
  <dd class="timeline-body">另一段内容</dd>
</Timeline>

使用说明

  • 使用 <dt class="timeline-caption"> 作为时间节点标题
  • 使用 <dd class="timeline-body"> 作为时间线内容
  • 可以混合使用多个标题和内容
  • 左侧有垂直时间线和圆点标记

特性

  • 时间线样式:左侧有垂直线和圆点标记
  • 灵活组合:支持多个标题和内容混合排列
  • 卡片样式:内容区域使用卡片样式展示
  • 适配明暗模式:使用 CSS 变量适配主题

提示 Tip

我是一条 小提示 ,我 没有图标 +v 点击就能复制,太方便了!

组件语法

mdx
import Tip from '@/components/content/Tip.astro'

<!-- 基础用法 -->
<Tip tip="提示的内容">小提示</Tip>

<!-- 没有图标 -->
<Tip icon={false} tip="提示内容">没有图标</Tip>

<!-- 点击复制 -->
<Tip copy>点击复制这段文字</Tip>

<!-- 自定义图标 -->
<Tip tip="自定义提示" icon="ri:information-line">带图标的提示</Tip>

属性说明

属性类型默认值说明
textstring-提示文字内容
tipstring-鼠标悬浮时显示的提示内容
iconstring | boolean-图标名,或设为 false 隐藏图标
copybooleanfalse是否启用点击复制功能

特性

  • 下划线样式:默认带有虚线下划线,表示可交互
  • 悬浮提示:鼠标悬浮时显示提示内容
  • 点击复制:设置 copy 属性后点击可复制内容
  • 自定义图标:支持自定义图标或隐藏图标

选项卡 Tab

这是组件选项卡的内容。

markdown
# 一个简单的 Tab

是这样。

组件语法

mdx
import Tab from '@/components/content/Tab.astro'

<!-- 基础用法 -->
<Tab tabs={['选项卡1', '选项卡2']}>
  <div slot="tab1">选项卡1的内容</div>
  <div slot="tab2">选项卡2的内容</div>
</Tab>

<!-- 居中显示 -->
<Tab tabs={['选项卡1', '选项卡2']} center>
  <div slot="tab1">居中显示的选项卡</div>
  <div slot="tab2">内容</div>
</Tab>

<!-- 默认激活第二个选项卡 -->
<Tab tabs={['选项卡1', '选项卡2', '选项卡3']} active={2}>
  <div slot="tab1">第一个</div>
  <div slot="tab2">默认显示这个</div>
  <div slot="tab3">第三个</div>
</Tab>

属性说明

属性类型默认值说明
tabsstring[]必填选项卡标题数组
centerbooleanfalse是否居中显示(自动调整宽度)
activestring | number1默认激活的选项卡下标(从1开始)

特性

  • 插槽命名:使用 slot="tab1"slot="tab2" 等对应选项卡内容
  • 客户端切换:点击选项卡按钮可切换显示内容
  • 居中布局:设置 center 属性可使选项卡居中显示
  • 默认激活:通过 active 属性设置默认显示的选项卡

引用 Quote

有时候,有些话,有点意思。
令图标有所指,引用亦有中心。
ヾ(•ω•`)o
图标插槽也可以是 Emoji 或颜文字,或者英文装饰。

组件语法

mdx
import Quote from '@/components/content/Quote.astro'

<!-- 基础用法 -->
<Quote>有时候,有些话,有点意思。</Quote>

<!-- 自定义图标 -->
<Quote icon="ri:file-text-line">令图标有所指,引用亦有中心。</Quote>

<!-- 使用 Emoji/颜文字 -->
<Quote><span slot="icon">ヾ(•ω•`)o</span>图标插槽也可以是 Emoji 或颜文字。</Quote>

属性说明

属性类型默认值说明
iconstring'tabler:message-2'Iconify 图标名

特性

  • 默认图标:使用 tabler:message-2 作为默认图标
  • 图标插槽:支持通过 slot="icon" 传入 Iconify 图标组件或 Emoji/颜文字
  • 悬浮效果:鼠标悬浮时图标会上浮并增强不透明度
  • 渐变遮罩:图标底部有渐变遮罩效果

链接 ProseA

这是 内部链接 外部链接 默认在新标签页打开,并在鼠标悬浮时展示域名。

还会根据域名展示图标,例如 微软文档 GitHub Bilibili QQ 官网 微信公众号 等。

自定义图标

你可以将 icon 属性指定 Iconify 图标名,例如 自定义图标链接 。图标可在 IconifyYesicon 搜索。

组件语法

mdx
import ProseA from '@/components/content/ProseA.astro'

<!-- 内部链接 -->
<ProseA href="/posts/hello-world">内部链接</ProseA>

<!-- 外部链接(自动识别并添加图标) -->
<ProseA href="https://github.com">GitHub</ProseA>

<!-- 自定义图标 -->
<ProseA href="https://example.com" icon="ri:link">自定义图标</ProseA>

为更多站点匹配图标

你可以在 /src/utils/icon.ts 分别为主域名或专门域名(优先级高)添加匹配规则来为更多站点匹配图标。

typescript
// 专门域名匹配(优先级高)
const specificDomainIcons: Record<string, string> = {
  'docs.microsoft.com': 'logos:microsoft-icon',
  'github.com': 'ri:github-fill',
  // ...
}

// 主域名匹配
const domainIcons: Record<string, string> = {
  'github': 'ri:github-fill',
  'bilibili': 'ri:bilibili-line',
  // ...
}

提示 Alert

提醒
你好
问题
默认插槽的 超链接 粗体 Inline code
自定义标题
默认插槽的 超链接 粗体 Inline code
卡片风格 标题插槽的 超链接 粗体 Inline code
默认插槽的 超链接 粗体 Inline code
扁平风格 标题插槽的 超链接 粗体 Inline code
默认插槽的 超链接 粗体 Inline code
仅标题,并且自定义图标和颜色

组件语法

mdx
import Alert from '@/components/content/Alert.astro'

<!-- 基础用法 -->
<Alert type="success">你好</Alert>

<!-- 带标题 -->
<Alert type="question" title="问题标题">内容</Alert>

<!-- 卡片风格 -->
<Alert type="warning" variant="card">警告内容</Alert>

<!-- 扁平风格 -->
<Alert type="error" variant="flat">错误内容</Alert>

<!-- 自定义图标 -->
<Alert type="info" icon="ri:time-line" title="自定义图标" />

<!-- 标题插槽 -->
<Alert type="warning">
  <span slot="title">标题插槽的 **粗体** `code`</span>
  默认插槽内容
</Alert>

属性说明

属性类型默认值说明
type'info' | 'success' | 'warning' | 'error' | 'question''info'提示类型,决定颜色和默认图标
titlestring-标题文字
iconstring-自定义 Iconify 图标名
variant'card' | 'flat''card'样式变体:卡片风格或扁平风格

徽章 Badge

普通带链接 纯文本 纯文本 带个图

外部域名自动获取站点图标 纸鹿古怪杂记本,GitHub 链接能自动识别头像 KazariEX,也可指定方形 isYangs/GioPic

提醒

在其他组件中使用 带链接 指定圆形 背景色 可以 动态变化 使用

组件语法

mdx
import Badge from '@/components/content/Badge.astro'

<!-- 普通带链接 -->
<Badge href="https://github.com">GitHub</Badge>

<!-- 纯文本 -->
<Badge text="纯文本" />

<!-- 纯文本指定圆形 -->
<Badge text="圆形" round />

<!-- 纯文本指定方形 -->
<Badge text="方形" square />

<!-- 带图片(默认圆形) -->
<Badge img="https://example.com/avatar.png">用户名</Badge>

<!-- 带图片指定方形 -->
<Badge img="https://example.com/avatar.png" square>用户名</Badge>

<!-- GitHub 链接自动获取头像 -->
<Badge href="https://github.com/username">用户名</Badge>

属性说明

属性类型默认值说明
hrefstring-链接地址,有则渲染为 <a> 标签
textstring-文本内容(无 slot 时使用)
imgstring-图片 URL
roundbooleanfalse是否圆形(无图时默认方形,有图时默认圆形)
squarebooleanfalse是否方形(强制方形,优先级高于 round)

样式逻辑

  • 有图片时:默认为圆形,除非指定 square
  • 无图片时:默认为方形,除非指定 round

博客头部 BlogHeader

🦌🍂🐟🌊
异飨客的博客,记录生活、技术与分享

鼠标悬浮时的动画 Emoji 🦌🍂🐟🌊 对应"塔罗会"的汉字,在 config.json 中配置,字体由阿里妈妈方圆体分割而来。

组件语法

mdx
import BlogHeader from '@/components/content/BlogHeader.astro'

<!-- 默认用法 -->
<BlogHeader />

<!-- 指定标题标签 -->
<BlogHeader tag="h1" />

配置说明

config.json 中添加 header 配置:

json
{
  "header": {
    "logo": "https://example.com/avatar.png",
    "title": "博客标题",
    "subtitle": "博客副标题",
    "emojiTail": ["🦌", "🍂", "🐟", "🌊"],
    "showTitle": true,
    "font": {
      "family": "AlimamaFangYuanTi, 'Noto Sans SC', sans-serif",
      "url": "https://chinese-font.netlify.app/packages/alimamafangyuanti/dist/AlimamaFangYuanTi/result.woff2"
    }
  }
}

属性说明

属性类型默认值说明
tagstring'div'标题标签名,如 h1h2

特性

  • 悬浮动画:鼠标悬浮时标题文字会有字重和倒角动画
  • Emoji 背景:悬浮时背景 Emoji 会有浮动动画
  • 字体效果:使用阿里妈妈方圆体,支持可变字体动画

模糊文本 Blur

这是一段 模糊文本,鼠标移上去查看内容 ,可以用来隐藏剧透或敏感信息。

也可以 直接使用 text 属性 来显示内容。

信息

在段落中使用 这是一段包含 隐藏内容 的文本,鼠标悬浮在模糊区域即可查看。

组件语法

mdx
import Blur from '@/components/content/Blur.astro'

<!-- 使用插槽 -->
<Blur>模糊文本内容</Blur>

<!-- 使用 text 属性 -->
<Blur text="模糊文本内容" />

属性说明

属性类型默认值说明
textstring-文本内容(无 slot 时使用)

特性

  • 默认模糊:文本默认带有 4px 的模糊效果
  • 悬浮显示:鼠标悬浮时模糊效果消失,过渡动画 0.2s
  • 轻量简单:仅使用 CSS filter 实现,无需 JavaScript

聊天对话 Chat

2024-11-09 23:39
也许
我们可以聊聊天
纸鹿
我还可以有名字
纸鹿撤回了一条消息
用户 1
有趣
用户 1
我学到了。

组件语法

mdx
import Chat from '@/components/content/Chat.astro'
import ChatItem from '@/components/content/ChatItem.astro'

<Chat>
  <!-- 系统消息:时间戳 -->
  <ChatItem type="system">2024-11-09 23:39:30</ChatItem>
  
  <!-- 右侧消息(自己发送) -->
  <ChatItem type="right">也许</ChatItem>
  <ChatItem type="right">我们可以聊聊天</ChatItem>
  
  <!-- 右侧消息带名字 -->
  <ChatItem type="right" name="纸鹿">我还可以有名字</ChatItem>
  
  <!-- 系统消息:撤回提示 -->
  <ChatItem type="system">纸鹿撤回了一条消息</ChatItem>
  
  <!-- 左侧消息(他人发送) -->
  <ChatItem type="left" name="用户 1">有趣</ChatItem>
  <ChatItem type="left" name="用户 1">我学到了。</ChatItem>
</Chat>

ChatItem 属性说明

属性类型默认值说明
type'left' | 'right' | 'system''left'消息类型:左侧他人消息、右侧自己消息、系统消息
namestring-发送者名称

样式特点

  • 左侧消息:灰色背景,左下角圆角较小
  • 右侧消息:主题色背景,右下角圆角较小
  • 系统消息:居中显示,灰色文字,无背景
  • 气泡样式:圆角气泡,类似 QQ/微信聊天界面

折叠面板 Folding

折叠组件,支持折叠和展开,可以嵌套使用。

可以通过 title 属性设置标题

默认插槽的 超链接 粗体 Inline code

折叠还可以嵌套

默认展开的折叠。

警告

在嵌套使用的组件内部使用 MDC 的 #slotname 插槽语法必须缩进,否则会报错。

也可以通过标题插槽传值 超链接 粗体 Inline code

默认展开的折叠。

markdown
- 默认展开的折叠。

组件语法

mdx
import Folding from '@/components/content/Folding.astro'

<!-- 基础用法 -->
<Folding title="折叠标题">
  折叠内容
</Folding>

<!-- 默认展开 -->
<Folding title="默认展开" open>
  默认展开的内容
</Folding>

<!-- 使用标题插槽(支持富文本) -->
<Folding>
  <span slot="title">带 **粗体** 和 <ProseA href="/">链接</ProseA> 的标题</span>
  内容
</Folding>

<!-- 嵌套使用 -->
<Folding title="外层折叠">
  外层内容
  <Folding title="内层折叠">
    内层内容
  </Folding>
</Folding>

属性说明

属性类型默认值说明
titlestring-标题文字(无 title 插槽时使用)
openbooleanfalse是否默认展开

特性

  • 原生实现:使用 HTML5 <details> 元素,无需 JavaScript
  • 展开/收起按钮:右侧显示"展开"/"收起"文字提示
  • 标题插槽:支持通过 slot="title" 传入富文本标题
  • 嵌套支持:支持多层嵌套使用
  • 平滑过渡:展开时标题加粗并改变颜色

键盘按键 Key

按下键时会亮,可以通过 @press 配置触发事件,鼠标点击也会触发事件,博客全站搜索框的按键提示使用了这个组件。

  • 纯 Code
Esc F2 Ctrl a Space Tab Enter
  • 指定修饰符、图标、文本(macOS 自动使用图标)
Shift Alt Win 空格 Tab Enter
  • 组合键
Ctrl+Shift+a Shift+Alt Shift+Alt+Win

热血组合技 b a

组件语法

mdx
import Key from '@/components/content/Key.astro'

<!-- 纯按键 -->
<Key code="Escape" />
<Key code="Enter" />

<!-- 自定义文本 -->
<Key text="空格" />

<!-- 修饰键(macOS 自动显示图标) -->
<Key shift />
<Key alt />
<Key ctrl />
<Key meta />

<!-- 智能适配 cmd:Windows用Ctrl,macOS用Cmd -->
<Key cmd code="k" />

<!-- 组合键 -->
<Key cmd shift code="a" />
<Key ctrl alt code="Delete" />

<!-- 强制使用/禁用图标 -->
<Key code="Control" icon />      <!-- 强制使用图标 -->
<Key code="Control" icon={false} />  <!-- 禁用图标 -->

属性说明

属性类型默认值说明
textstring-自定义显示文本
codestring-按键代码(KeyboardEvent.key)
iconbooleanundefined是否使用图标(macOS 默认 true)
ctrlbooleanfalse是否包含 Ctrl 键
shiftbooleanfalse是否包含 Shift 键
altbooleanfalse是否包含 Alt 键
metabooleanfalse是否包含 Meta 键(Cmd/Win)
winbooleanfalse是否包含 Win 键
cmdbooleanfalse智能适配:Windows用Ctrl,macOS用Cmd
preventbooleanfalse是否阻止默认事件

特性

  • 按键高亮:按下对应键时按键会高亮显示
  • 点击触发:鼠标点击也会触发高亮效果
  • 平台适配:macOS 自动使用图标符号(⌘⌥⇧等)
  • 组合键支持:支持多键组合显示
  • 自定义事件:可通过 keypress 事件监听按键触发

链接横幅 LinkBanner

标题

组件语法

mdx
import LinkBanner from '@/components/content/LinkBanner.astro'

<!-- 完整用法 -->
<LinkBanner
  banner="https://example.com/image.jpg"
  title="标题"
  description="描述文字"
  link="https://example.com"
/>

<!-- 不填描述时自动显示域名 -->
<LinkBanner
  banner="https://example.com/image.jpg"
  title="GitHub"
  link="https://github.com"
/>

<!-- 无图片 -->
<LinkBanner
  title="纯文字横幅"
  link="https://example.com"
/>

属性说明

属性类型默认值说明
bannerstring-横幅图片 URL
titlestring必填标题
descriptionstring-描述文字(不提供时显示域名)
linkstring必填链接地址

特性

  • 图片遮罩:图片底部有渐变遮罩,与文字区域自然过渡
  • 自动提取域名:不填描述时自动从链接提取域名显示
  • 悬停效果:鼠标悬停时卡片上浮并显示阴影
  • 新标签打开:链接默认在新标签页打开

链接卡片 LinkCard

标题

组件语法

mdx
import LinkCard from '@/components/content/LinkCard.astro'

<!-- 完整用法 -->
<LinkCard
  title="标题"
  description="描述文字"
  icon="https://example.com/icon.jpg"
  link="https://example.com"
/>

<!-- 不填描述时自动显示域名 -->
<LinkCard
  title="GitHub"
  icon="https://github.com/favicon.ico"
  link="https://github.com"
/>

<!-- 无图标 -->
<LinkCard
  title="纯文字卡片"
  link="https://example.com"
/>

<!-- 使用插槽自定义图标 -->
<LinkCard title="自定义图标" link="https://example.com">
  <Icon name="ri:github-fill" slot="icon" />
</LinkCard>

属性说明

属性类型默认值说明
titlestring必填标题
descriptionstring-描述文字(不提供时显示域名)
iconstring-图标/图片 URL
linkstring必填链接地址

特性

  • 水平布局:左侧文字,右侧图标
  • 溢出省略:标题最多显示2行,描述单行省略
  • 自动提取域名:不填描述时自动从链接提取域名显示
  • 悬停效果:鼠标悬停时卡片上浮并显示阴影
  • 新标签打开:链接默认在新标签页打开
  • 图标插槽:支持通过 slot="icon" 传入自定义图标

图片展示 Pic

说明文字,还支持通过 width 或 height 属性指定尺寸
说明文字,还支持通过 width 或 height 属性指定尺寸
美丽的风景
美丽的风景

组件语法

mdx
import Pic from '@/components/content/Pic.astro'

<!-- 基础用法 -->
<Pic
  src="https://example.com/image.jpg"
  caption="图片说明文字"
/>

<!-- 使用 alt 作为说明 -->
<Pic
  src="https://example.com/image.jpg"
  alt="图片描述"
/>

<!-- 指定尺寸 -->
<Pic
  src="https://example.com/image.jpg"
  caption="指定宽度"
  width={400}
/>

<Pic
  src="https://example.com/image.jpg"
  caption="指定高度"
  height={300}
/>

<!-- 禁用灯箱功能 -->
<Pic
  src="https://example.com/image.jpg"
  caption="点击不会放大"
  zoom={false}
/>

<!-- 使用插槽自定义说明 -->
<Pic src="https://example.com/image.jpg">
  <span slot="caption">支持 <strong>富文本</strong> 说明</span>
</Pic>

属性说明

属性类型默认值说明
srcstring必填图片 URL
altstring-图片替代文本(也用作说明)
captionstring-图片说明文字(优先级高于 alt)
widthnumber | string-图片宽度
heightnumber | string-图片高度
zoombooleantrue是否启用点击放大(灯箱)

特性

  • 灯箱功能:点击图片可在遮罩层中放大查看
  • 说明文字:支持 caption 属性或 alt 属性显示说明
  • 富文本说明:支持通过插槽传入富文本说明
  • 尺寸控制:支持 width 和 height 属性指定尺寸
  • 关闭方式:点击遮罩层、关闭按钮或按 ESC 键关闭灯箱

诗词 Poetry

诗有诗的标题

一名作者

如你所见, 我, 是一首—— 诗。

静夜思

李白

床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。

组件语法

mdx
import Poetry from '@/components/content/Poetry.astro'

<!-- 完整用法 -->
<Poetry
  title="诗有诗的标题"
  author="一名作者"
  footer="可选的落款"
>
如你所见,
我,
是一首——
诗。
</Poetry>

<!-- 仅标题和内容 -->
<Poetry title="静夜思" author="李白">
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
</Poetry>

<!-- 仅内容 -->
<Poetry>
这是一首
没有标题的
小诗。
</Poetry>

属性说明

属性类型默认值说明
titlestring-诗词标题
authorstring-作者名称
footerstring-落款/备注

特性

  • 居中布局:诗词内容自动居中显示
  • 保留换行:支持使用换行符控制诗句格式
  • 优雅排版:标题、作者、内容、落款层次分明
  • 自适应宽度:根据内容自动调整宽度

发现错误或想要改进这篇文章?

在 GitHub 上编辑此页
组件示例
作者
异飨客
发布于
2026年4月8日 18:43
许可协议
CC BY-NC-SA 4.0
1 / 1

发现新文章

内容已更新

检测到文章内容有变化,已为您高亮差异部分。