B 站视频
这是一个用于在 Hugo 网站中嵌入 Bilibili 视频的自定义 shortcode。
功能特性
- 🎥 支持嵌入 Bilibili 视频
- 📱 响应式设计,自适应移动端和桌面端
- 🎨 现代化的圆角设计和阴影效果
- 🌙 支持明暗主题切换
- 📝 支持视频说明文字(caption)
- ♿ 符合可访问性标准
- 🔒 安全的 iframe 嵌入
基本用法
最简单的用法
{{< bilibili bv="BV1634y1w7Nu" >}}
带说明文字的用法
{{< bilibili bv="BV1634y1w7Nu" caption="Istio Advisor Plus GPT 演示视频" >}}
完整参数示例
{{< bilibili bv="BV1634y1w7Nu" aid="36041724" cid="63259487" caption="这是一个示例视频" >}}
参数说明
参数 | 类型 | 必需 | 说明 | 示例 |
---|---|---|---|---|
bv | string | ✅ | Bilibili 视频的 BV 号 | BV1634y1w7Nu |
aid | string | ❌ | 视频的 AV 号(可选) | 36041724 |
cid | string | ❌ | 视频分 P 的 CID 号(可选) | 63259487 |
caption | string | ❌ | 视频下方显示的说明文字 | "这是视频说明" |
如何获取参数
获取 BV 号
- 打开 Bilibili 视频页面
- 从 URL 中复制 BV 号,例如:
- URL:
https://www.bilibili.com/video/BV1634y1w7Nu/
- BV 号:
BV1634y1w7Nu
获取 AID 和 CID(可选)
- 在视频页面按 F12 打开开发者工具
- 在 Console 中输入:
console.log('aid:', window.__INITIAL_STATE__.aid);
console.log('cid:', window.__INITIAL_STATE__.videoData.cid);
实际使用示例
示例 1:技术演示视频
## Istio Advisor Plus GPT 演示
下面是一个展示如何使用 Istio 老中医解决实际问题的视频:
{{< bilibili bv="BV1634y1w7Nu" caption="Istio Advisor Plus GPT 演示视频" >}}
视频展示了如何使用 GPT 来解答 Istio 相关的技术问题。
示例 2:航拍视频
## 上海夜景航拍
11 月 12 日晚在上海静安寺上空飞行,航拍的南京西路夜景:
{{< bilibili bv="BV12345678" aid="36041724" cid="63259487" caption="上海静安寺南京西路夜景航拍" >}}
示例 3:无说明文字
## 会议回顾
{{< bilibili bv="BV1634y1w7Nu" >}}
样式定制
CSS 变量
shortcode 使用 CSS 变量来支持主题切换:
:root {
--bilibili-video-bg: #000; /* 视频背景色 */
--bilibili-caption-color: #555; /* 说明文字颜色 */
}
/* 暗色模式 */
.dark-mode {
--bilibili-video-bg: #111;
--bilibili-caption-color: #ccc;
}
自定义样式
如果需要自定义样式,可以覆盖以下 CSS 类:
.bilibili-video-wrapper {
/* 主容器样式 */
max-width: 720px; /* 最大宽度 */
margin: 1rem auto; /* 外边距 */
}
.bilibili-video-container {
/* 视频容器样式 */
aspect-ratio: 16 / 9; /* 宽高比 */
border-radius: 8px; /* 圆角 */
}
.bilibili-caption {
/* 说明文字样式 */
font-size: 0.95rem;
font-style: italic;
text-align: center;
}
注意事项
1. 网络环境
- 确保用户能够访问 Bilibili
- 在某些网络环境下可能无法加载
2. 隐私考虑
- iframe 会加载 Bilibili 的播放器
- 可能会设置第三方 cookie
3. 性能优化
- 视频不会自动播放,减少带宽消耗
- 使用
loading="lazy"
属性延迟加载
4. 可访问性
- 所有 iframe 都包含适当的
title
属性 - 支持键盘导航
- 兼容屏幕阅读器
故障排除
问题 1:视频不显示
可能原因:
- BV 号错误
- 网络连接问题
- 视频已被删除或设为私有
解决方法:
- 检查 BV 号是否正确
- 确认视频在 Bilibili 上可以正常播放
问题 2:说明文字不显示
可能原因:
- CSS 样式冲突
- 参数格式错误
解决方法:
- 检查 caption 参数是否正确引用
- 确认 CSS 文件已正确加载
问题 3:样式问题
可能原因:
- CSS 变量未定义
- 样式被其他 CSS 覆盖
解决方法:
- 检查 CSS 导入顺序
- 使用开发者工具调试样式
技术实现
文件结构
layouts/shortcodes/bilibili.html # Hugo shortcode 模板
assets/scss/components/_bilibili.scss # 样式文件
生成的 HTML 结构
<figure class="bilibili-video-wrapper">
<div class="bilibili-video-container">
<iframe
src="//player.bilibili.com/player.html?bvid=BV1634y1w7Nu&isOutside=true"
title="视频标题"
allowfullscreen
scrolling="no"
frameborder="0">
</iframe>
</div>
<figcaption class="bilibili-caption">
<p>视频说明文字</p>
</figcaption>
</figure>
版本历史
- v1.0: 初始版本,支持基本的视频嵌入
- v1.1: 添加说明文字支持
- v1.2: 优化响应式设计和可访问性
- v1.3: 修复样式冲突问题,改进暗色模式支持