Start typing to search

Press ESC to close
沉浸

网站卡片

网站卡片

在文章或页面中展示一组网站卡片,以网格形式呈现网站的封面截图、图标、标题和描述。适合用来展示常用工具、设计资源、推荐阅读等网站收藏。


基本用法

在 Markdown 中使用 sites 容器指令:

:::sites{group="design"}
:::

group 属性对应 site-config.tslinks 配置的分组名称。


配置数据

src/data/site-config.tslinks 字段中定义分组和站点数据:

export default {
    // ...其他配置
    links: {
        design: [
            {
                title: 'Unsplash',
                url: 'https://unsplash.com',
                description: 'Photos for everyone.',
                icon: 'https://unsplash.com/favicon.ico',
                labels: [{ name: '图片', color: '#3b82f6' }]
            },
            {
                title: 'Dribbble',
                url: 'https://dribbble.com',
                description: 'Discover the world\'s top designers.',
                icon: 'https://dribbble.com/favicon.ico',
                labels: [{ name: '设计', color: '#ec4899' }]
            },
        ],
        tools: [
            {
                title: 'Figma',
                url: 'https://figma.com',
                description: 'The collaborative interface design tool.',
                icon: 'https://figma.com/favicon.ico',
                labels: [{ name: '设计', color: '#a259ff' }]
            },
        ],
    },
};

字段说明

每个站点支持以下字段:

字段类型必填说明
titlestring网站标题
urlstring网站链接
descriptionstring网站描述,未填写时显示 URL
iconstring网站图标 URL,未填写时自动尝试获取根域名 /favicon.ico
coverstring封面截图 URL,未填写时自动使用 thum.io 服务抓取网站截图
labelsSiteLabel[]标签列表

标签字段:

字段类型说明
namestring标签文字
colorstring标签背景色,支持十六进制色值(如 #3b82f6

标签颜色规则

标签的文字颜色会根据背景色自动调整:

  • 背景较浅(亮度 > 75%):文字使用深色,保证可读性
  • 背景高饱和且较亮(饱和度 > 90%,亮度 > 40%):文字使用稍深的颜色
  • 其他情况:文字使用白色

封面图说明

封面图优先级:

  1. 优先使用 cover 字段指定的图片地址
  2. 未指定时,自动通过截图服务抓取网站截图
  3. 截图加载失败时,显示主题色的占位背景

切换截图服务

site-config.ts 中配置 screenshotService

export default {
    // ...其他配置
    screenshotService: 'thumio',  // 'thumio' | 'mshots'
    links: { ... },
};
服务说明适用场景
thumio(默认)image.thum.io,截图质量高大多数网站
mshotsWordPress 截图服务thum.io 被屏蔽时备选

注意:截图服务均为第三方免费服务。某些网站(如需要登录或有反爬虫机制)可能无法自动抓取,建议手动配置 cover 字段。


使用示例

展示设计资源

## 设计资源

:::sites{group="design"}
:::

展示常用工具

## 开发工具

:::sites{group="tools"}
:::

自定义分组

你可以创建任意名称的分组:

links: {
    blogs: [
        { title: 'Astro Blog', url: 'https://astro.build/blog', description: 'Astro 官方博客' },
    ],
    reading: [
        { title: 'MDN', url: 'https://developer.mozilla.org', description: 'Web 技术文档' },
    ],
}
:::sites{group="blogs"}
:::

:::sites{group="reading"}
:::

Posters 海报卡片

展示竖向比例的海报网格,适合电影海报、专辑封面等收藏。

:::posters{group="movies"}
:::

sites 的区别

sitesposters
比例横向(3
竖向(2
)或正方形(1
信息展示封面 + 图标 + 标题 + 描述 + 标签封面 + 悬停标题
间隙较大(1rem)极小(2px)
适用场景网站收藏海报、专辑、封面

比例设置

通过 ratio 属性切换比例,默认 portrait

<!-- 竖向比例(2:3)—— 电影海报 -->
:::posters{group="movies"}
:::

<!-- 正方形(1:1)—— 专辑封面 -->
:::posters{group="albums" ratio="square"}
:::
ratio 值比例适用场景
portrait(默认)2
电影海报、竖版封面
square1
专辑封面、头像墙

固定列数

通过 cols 属性指定每行固定列数,任何屏幕下保持不变:

:::posters{group="movies" cols="4"}
:::
cols 值每行列数适用场景
22 列大幅海报展示
33 列中等尺寸封面
44 列专辑/书籍封面
55 列紧凑排列
66 列小型缩略图
88 列头像墙/徽章墙

不传 cols 时,根据容器宽度自动计算列数。

posters 使用同一套 links 配置,字段需求更少:

  • title:悬停时显示的标题
  • covericon:封面图片(必填,不自动抓取截图)
  • url:点击跳转链接(可选,无链接则不可点击)
links: {
    movies: [
        { title: '星际穿越', url: 'https://movie.douban.com/subject/1889243/', cover: 'https://example.com/poster1.jpg' },
        { title: '千与千寻', url: 'https://movie.douban.com/subject/1291561/', cover: 'https://example.com/poster2.jpg' },
    ],
}

样式特点

  • 响应式网格:根据容器宽度自动调整列数,小屏幕 2 列,中等屏幕 3~4 列
  • 悬停效果:鼠标悬停时卡片整体上浮,封面图轻微放大,标签渐隐
  • 圆角卡片:跟随主题的圆角和阴影风格
  • 懒加载:封面图和图标均使用 loading="lazy" 懒加载

与 OGCard 的区别

sites 指令OGCard 组件
数据来源配置文件(静态)实时抓取目标网页
使用场景批量展示已知网站收藏文章中引用单个链接
布局响应式网格横向卡片
标签支持不支持
性能构建时渲染,无额外请求页面加载时抓取 OG 数据

建议:批量展示使用 sites 指令,文章中引用单个链接使用 OGCard 组件。

未知标题
00:00
00:00
播放列表