
短代码
作者:Goose 和 Quill
8 分钟阅读 901 字
目录
目前可用的短代码:
AlertImageCodeVideoYoutubeBilibiliSteamSpotifyCRT
如何使用
在 MDX 中,这些组件已经通过 ExtendMarkdown.astro 注入,所以你可以直接这样写:
<Alert type="note">Hello</Alert>无需额外导入。
1. Alert
渲染 GitHub 风格的提示块。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
type | 'note' | 'tip' | 'important' | 'warning' | 'caution' | 'note' | 提示样式 |
示例
<Alert type="note">这是一个提示。</Alert>
<Alert type="warning">这是一个警告。</Alert>说明
- 内容通过默认插槽传递。
- 如果省略
type,则使用note。
2. ImageCode
渲染一张图片,并支持一组可组合的样式类。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
url | string | — | 原图 URL,必填 |
url_min | string | undefined | 预览/压缩图片 URL;提供后显示预览图并链接到 url |
alt | string | '' | 替代文本 |
full | boolean | false | 使图片填满内容宽度 |
full_bleed | boolean | false | 让图片超出内容栏 |
start | boolean | false | 将图片浮动到起始侧 |
end | boolean | false | 将图片浮动到结束侧 |
pixels | boolean | false | 使用像素艺术风格渲染 |
transparent | boolean | false | 更适合透明图片 |
no_hover | boolean | false | 禁用悬停缩放 |
spoiler | boolean | false | 应用剧透遮罩 |
solid | boolean | false | 更强的剧透遮罩,与 spoiler 配合使用 |
示例
<ImageCode url="/images/example.png" alt="示例图片" no_hover="true"/>
<ImageCode url="/images/original.png" url_min="/images/preview.png" alt="可点击的预览" full="true"/>说明
solid只有在启用spoiler时才有效。- 当存在
url_min时,组件会渲染一个指向url的链接预览图。 full、full_bleed、start、end这些布局标志最好有意识地使用,而不是全部一起使用。
3. Video
渲染本地或远程视频,支持与 ImageCode 大多数相同的展示类。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
url | string | — | 视频 URL,必填 |
alt | string | '' | 用作 aria-label 的无障碍文本 |
full | boolean | false | 填满内容宽度 |
full_bleed | boolean | false | 更宽的展示 |
start | boolean | false | 浮动到起始侧 |
end | boolean | false | 浮动到结束侧 |
pixels | boolean | false | 像素艺术渲染风格 |
transparent | boolean | false | 透明展示风格 |
spoiler | boolean | false | 剧透遮罩 |
solid | boolean | false | 与 spoiler 配合使用时的更强遮罩 |
autoplay | boolean | false | 自动播放视频 |
controls | boolean | false | 显示原生控件 |
loop | boolean | false | 循环播放 |
muted | boolean | false | 静音开始 |
playsinline | boolean | false | 请求内联播放 |
示例
<Video url="/videos/demo.webm" alt="演示视频" controls="true"/>
<Video url="/videos/hero.webm" full_bleed="true" autoplay="true" muted="true" loop="true" playsinline="true"/>说明
- 组件直接将
url传递给<video src>,不会推断格式。 solid只有在启用spoiler时才有意义。- 与
ImageCode不同,Video不支持url_min或no_hover。
4. Youtube
使用 youtube-nocookie.com 域名嵌入 YouTube 视频。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
id | string | — | YouTube 视频 ID,必填 |
autoplay | boolean | false | 是否自动播放 |
start | number | undefined | 开始时间(秒) |
示例
<Youtube id="0Da8ZhKcNKQ" />
<Youtube id="0Da8ZhKcNKQ" autoplay="true" start={30} />说明
- 嵌入 URL 格式为
https://www.youtube-nocookie.com/embed/<id>。 - 只有在提供相应属性时才会追加查询参数。
5. Bilibili
嵌入 Bilibili 播放器。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
bvid | string | undefined | BV ID |
aid | string | undefined | AV ID |
cid | string | undefined | 资源/弹幕 ID |
page | number | 1 | 分P编号 |
autoplay | boolean | false | 是否自动播放 |
示例
<Bilibili bvid="BV1yt4y1Q7SS" />
<Bilibili bvid="BV1yt4y1Q7SS" page={2} autoplay="true"/>说明
- 组件构建类似
//player.bilibili.com/player.html?...的 URL。 - 它始终追加
isOutside=true。 - 所有 ID 属性技术上是可选的,但实际上通常应该至少提供
bvid或aid。
6. Spotify
嵌入 Spotify 内容,如专辑、播放列表、曲目、节目和剧集。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
type | 'track' | 'album' | 'artist' | 'playlist' | 'episode' | 'show' | undefined | 通用类型表单 |
id | string | undefined | 与 type 配合使用的 content ID |
track | string | undefined | 曲目 ID 简写 |
album | string | undefined | 专辑 ID 简写 |
artist | string | undefined | 艺术家 ID 简写 |
playlist | string | undefined | 播放列表 ID 简写 |
episode | string | undefined | 剧集 ID 简写 |
show | string | undefined | 节目 ID 简写 |
height | string | number | auto | 自定义 iframe 高度 |
示例
<Spotify album="5gDJVilnZpPt8zwBC467UH" />
<Spotify type="track" id="11dFghVXANMlKmJXsNCbNl" />
<Spotify playlist="37i9dQZF1DXcBWIGoYBM5M" height={480} />说明
- 你可以通过两种方式传递属性:
- 简写:
album="..."、track="..."等 - 通用:
type="album" id="..."
- 简写:
- 如果两者都存在,简写属性优先。
- 如果既没有简写属性,也没有有效的
type + id对,组件会抛出错误。 - 默认高度:
track→152- 其他所有类型 →
352
7. Steam
显示 Steam 商店卡片。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
appid | string | number | — | Steam App ID,必填 |
variant | 'horizontal' | 'vertical' | 'horizontal' | 卡片布局 |
示例
<Steam appid="1127400" />
<Steam appid="730" variant="vertical" />说明
- 组件构建:
- 商店 URL:
https://store.steampowered.com/app/<appid>/ - 横向图片:
header.jpg - 纵向图片:
library_600x900_2x.jpg
- 商店 URL:
- 在
vertical模式下,媒体容器固定宽度为200px。 - 它不调用 Steam API,只根据给定的
appid构建 URL。
8. CRT
渲染 CRT 风格的代码容器。
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
code | string | — | 要显示的代码文本,必填 |
no_scanlines | boolean | false | 禁用扫描线效果 |
示例
<CRT code={`Hello, CRT`} />
<CRT no_scanlines="true" code={`No scanlines here`}/>说明
- 如果
code以换行符开头,组件会 stripping 第一个换行符,以获得更干净的多行模板使用体验。 - 当
no_scanlines为false时,组件还会添加scanlines类。
实用建议
媒体
- 需要一个链接到原图的预览图:使用带有
url_min的ImageCode - 需要剧透遮罩:使用
spoiler,并添加solid获得更强效果 - 需要内容栏内的全宽图片:使用
full - 需要超出内容栏的内容:使用
full_bleed
嵌入
- YouTube:传递
id - Bilibili:优先使用
bvid - Spotify:优先使用简写属性如
album="..." - Steam:传递
appid,然后根据布局需求选择variant
提示和展示
- 使用
Alert进行标注 - 使用
CRT来渲染复古终端风格的代码 - 使用普通 Markdown 代码块来展示常规的高亮代码,除非你特别想要 CRT 效果