Start Bootstrap 模板库站点解析:Jekyll 驱动的模板目录、详情页与在线预览架构
前端文档【免费下载链接】startbootstrapA library of free and open source Bootstrap themes and templates项目地址https://gitcode.com/gh_mirrors/st/startbootstrap点击查看免费下载本文以 Start Bootstrap 站点博客中的《Structural Updates》一文为主线还原 2013 年那次关键站点结构改造的设计意图并将其与当前仓库的实现逐一对应从 Jekyll Collections 的目录架构、模板分类页的 Liquid 筛选逻辑到每个模板独立详情页大图预览、下载链接、GitHub 源码链接与 iframe 在线预览页的实现细节最后说明站点通过 Carbon Ads / BuySellAds 广告位维持运营的方式。读完后你将掌握如何用 Jekyll Collections Front Matter 构建一个可无限扩展的模板/主题目录站以及如何为每个资源实现列表卡片 → 详情页 → 独立预览页的三层信息架构。从一篇 2013 年的公告说起结构改造的四大目标_posts/2013-09-22-structural-updates.markdown 是 Start Bootstrap 站点博客中一篇 News 分类的公告帖作者 David Miller其 front matter 中的permalink规则由 _config.yml 统一控制# Permalinks permalink: /blog/:year/:month/:day/:title/因此该公告的实际访问路径为/blog/2013/09/22/structural-updates/。这篇文章宣告了四项结构性变化每一项都在今天的仓库代码中留下了清晰的实现痕迹新增 Templates 分区并引入分类体系——原文说 We now have a templates section with a few different categories, which will allow us to scale up the project a bit better as we start adding more and more templates目的是在模板数量持续增长时保持站点可维护。每个模板拥有独立的主页——提供更大尺寸的模板截图、在线预览live preview链接、完整.zip下载包包含模板本身、自定义 CSS 与 Bootstrap 3 核心组件以及指向 GitHub 上原始 HTML / CSS 的链接页面还附带起步设计建议和相似模板链接。引入内容相关的广告支持项目运营——原文点名感谢 Carbon Ads 允许其使用和定制广告方案content-relevant ads。新增 Full Website Templates 概念——收录功能完整、多页面、开箱即改的整站模板。下文结合当前仓库源码逐一剖析这些设计是如何落地的。目录架构的基石Jekyll Collections 与统一 Front Matter要理解 Templates 分区为什么能扩展首先要看 _config.yml 中的 Collections 定义。它声明了六个内容集合其中previews对应每模板一个独立预览页premium不输出到站点output: false仅用于付费产品的数据供给# Collections collections: themes: output: true permalink: /:collection/:title/ templates: output: true permalink: /:collection/:title/ snippets: output: true permalink: /:collection/:title/ guides: output: true permalink: /:collection/:title/ previews: output: true permalink: /:collection/:title/ premium: output: false这套声明意味着_templates/目录下每一个 Markdown 文件都同时是一条结构化数据front matter和一个可访问页面。站点内所有目录列表都遍历site.templates/site.themes集合新增模板只需往_templates/里加一个文件无需改动任何列表页代码——这正是 2013 年公告中 scale up the project 承诺的工程实现。每个模板文档的 front matter 构成了一套目录数据契约。以 _templates/2013-09-22-small-business.md 为例title: Small Business slug: small-business src: /templates/small-business categories: landing-page general description: A free, easy to use, Bootstrap starter template ... bump: A simple business Bootstrap template img-thumbnail: /assets/img/screenshots/templates/small-business.jpg img-full: /assets/img/screenshots/templates/small-business.png layout: overview-theme type: template rank: 16 migrated: true version: 4.2.2 bootstrap: 4.5.0 updated: 2020-06-19 features: - Responsive logo navigation bar - Image header with a heading, description, and call to action - Three content columns for service descriptions - Call to action well long-description: Small Business is a landing page template for Bootstrap ... redirect_from: - /small-business/ - /small-business.php/ - /downloads/small-business.zip/ - /template-overviews/small-business/关键字段的用途在仓库中都能找到消费方梳理如下字段作用消费位置slug唯一标识拼接预览页与下载路径_layouts/overview-theme.html 中href/previews/{{ page.slug }}/categories空格分隔的分类标签驱动分类页筛选templates/general.html 等分类页的contains判断rank数值排序权重_layouts/loop-templates.html 中sort: rankimg-thumbnail/img-full列表卡片小图 / 详情页大图列表页与详情页分别引用migrated标记仓库是否已迁移至新 GitHub 组织决定下载与预览 URL 的拼接方式overview、preview 两个布局中的条件分支version/bootstrap/updated元信息渲染在详情页侧栏卡片中_layouts/overview-theme.html#L174-L192features/long-description特性列表与长描述替代早期页面中的设计建议文案详情页 Description / Features 卡片redirect_from历史 URL 重定向配合jekyll-redirect-from插件_config.yml 的plugins列表从仓库现状看模板侧的分类标签共六种landing-page、blog、navigation、general、admin、ecommerce。它们来自各模板文件的categories字段例如_templates/2013-09-21-bare.mdlanding-page navigation general一个模板可归属多个分类_templates/2013-11-23-shop-homepage.mdecommerce_templates/2013-10-13-sb-admin.mdadmin。主题侧_themes/则使用landing-page、business、portfolio、blog、admin等标签与模板共用同一套筛选机制只是遍历的集合不同。分类列表页按标签筛选集合的通用模式公告中提到的 templates section with a few different categories 在站点上落地为若干分类入口页全部位于 templates/ 目录导航栏下拉菜单 _includes/navigation.html 给出了完整的分类清单/templates/ Browse All Templates /templates/admin-dashboard/ Admin Dashboard /templates/landing-pages/ Landing Pages Headers /templates/general/ General Page Layouts /templates/navigation/ Navigation Layouts /templates/ecommerce/ Ecommerce /templates/blog/ Blog以 templates/general.html 为例其筛选逻辑只有三行 Liquid 核心代码{% assign sorted site.templates | sort: rank %} {% for template in sorted %} {% if template.categories contains general %} div classcol-md-4 div classitem-preview mb-5 a classitem-preview-img box-shadow-lg d-block mb-3 href{{ template.src }} img classimg-fluid src{{ template.img-thumbnail }} alt{{ template.img-desc }} /a div classitem-preview-title d-flex align-items-center {{ template.title }} {% if template.pro %} span classbadge badge-warning ml-auto small badge-pillPro/span {% else %} span classbadge badge-success ml-auto small badge-pillFree/span {% endif %} /div div classitem-preview-description{{ template.bump }}/div /div /div {% endif %} {% endfor %}同样的模式在 templates/landing-pages.htmlcontains landing-page等分类页中重复出现差异仅在 permalink 与筛选标签两个 front matter 字段。全量列表页则由独立布局 _layouts/loop-templates.html 承接它遍历全部site.templates、同样按rank排序并额外给懒加载图片加lazy类data-src以优化滚动加载主题全量页 _layouts/loop-themes.html 则额外渲染update标记对应的 Updated! 角标。这个列表页 集合 一个标签条件的实现方式使得新增一个分类的完整成本是建一个带permalink的 HTML 页面 在导航中加一行链接模板数据侧零改动——分类体系与内容数据完全解耦。模板详情页大图预览、下载包与 GitHub 源码入口公告的第二项变化——each template now has its own home——由布局 _layouts/overview-theme.html 实现所有模板与主题文档通过layout: overview-theme复用同一骨架。页面为两栏栅格col-lg-8主栏 col-lg-4侧栏核心模块如下。大图预览。主栏首图直接使用模板的img-full大截图整个图片是一个指向独立预览页的链接鼠标悬停出现 View Live Preview 遮罩按钮a classimg-preview d-block shadow-lg rounded mb-4 target_blank href/previews/{{ page.slug }}/ img classimg-fluid rounded src{{ page.img-full }} alt{{ page.img-desc }} div classoverlay d-flex align-items-center justify-content-center rounded div classbtn btn-lightView Live Preview/div /div /a下载与预览按钮组响应式双份。由于小屏下侧栏收起下载按钮组在布局中出现了两次d-lg-none版本内联在图片下方d-none d-lg-block版本固定在侧栏。下载链接依据migrated标志分三种情形拼接overview-theme.html#L21-L34{% if page.migrated %} !-- 已迁移至 StartBootstrap 组织的模板 -- a target_blank href.../startbootstrap-{{ page.slug }}/archive/gh-pages.zip classbtn ... i classfal fa-download fa-fw/i spanFree Download/span /a {% elsif page.no-prefix %} a target_blank href.../{{ page.slug }}/archive/master.zip classbtn ... {% else %} a target_blank href.../startbootstrap-{{ page.slug }}/archive/gh-pages.zip classbtn ... {% endif %}下载走的是 GitHub 仓库的archive/*.zip打包接口即公告中完整的 .zip 文件的现代化形态每个下载按钮还挂了ga(send,event,Download,click,...)用于统计下载事件。紧随其后的 Live Preview 按钮统一指向站内预览页/previews/{{ page.slug }}/View on GitHub 按钮则对应公告中链接到 GitHub 上的原始 HTML 与 CSS。元信息卡片。侧栏第二张卡片渲染 LicenseMIT、Released、Bootstrap Version、Last Updated 与模板版本号五行动态信息数据直接来自 front matter 的date、bootstrap、updated、version字段overview-theme.html#L159-L193。描述、特性与相似推荐。主栏的 Description 卡片输出long-descriptionFeatures 卡片以无序列表渲染featuresdiv classcard border-0 shadow mb-4 div classcard-body h5 classm-0Features/h5 hr ul classmb-0 {% for feature in page.features %} li{{ feature }}/li {% endfor %} /ul /div /div公告提到的 links to similar templates相似模板链接在现实现中演化为侧栏的 Need something more? 模块overview-theme.html#L196-L253它按当前页面所属分类反向筛选site.themes中的 Pro 主题——管理后台页categories contains admin推荐同类后台主题其余页面推荐landing-page类 Pro 主题并附带 Free / Pro 徽章与跳转商店的入口。可以说当年帮你起步的设计建议 相似模板这一栏位如今由结构化的 Description、Features 数据与按类推荐的付费主题卡共同承担。独立预览页iframe 沙箱与桌面/移动端切换公告中的 live preview link 由 _previews/ 集合与布局 _layouts/preview.html 实现。每个模板对应一个极轻量文档例如 _previews/template-modern-business.mdtitle: Modern Business slug: modern-business src: /templates/modern-business layout: preview type: template migrated: true预览页本体是一条顶栏 一个全屏 iframe。顶栏提供View on GitHub 链接同样按migrated分支、桌面/移动端切换按钮、Builder 自定义入口、Free Download 按钮以及 Remove Frame 链接在新标签打开无框架页面ul classnav responsive-toggler justify-content-center roletablist li classnav-item a classnav-link active iddesktopToggle>$(#desktopToggle).on(click, function(e) { e.preventDefault(); $(.iframe-preview).removeClass(iframe-preview-mobile); }); $(#mobileToggle).on(click, function(e) { e.preventDefault(); $(.iframe-preview).addClass(iframe-preview-mobile); });iframe 的src指向模板仓库的 GitHub Pages 站点地址已迁移模板使用startbootstrap组织的gh-pages分支未迁移模板使用旧组织地址另有custom-preview-link字段可整体覆盖。把实际模板放进独立 iframe 而非直接渲染进站点既隔离了各模板自带的 CSS/JS 命名空间也天然支持桌面/移动双视口演示是资源目录站做在线预览的常见做法。广告支持Carbon Ads 与 BuySellAds 的三类位2013 年公告明确引入广告是为了 support the project by use of some quality, content-relevant ads。当前仓库中该体系已演进为三类广告位全部基于 BuySellAds原 Carbon Ads侧边栏 Carbon 单元。_includes/carbon.html 只有一行脚本从 CDN 载入带placementstartbootstrapcom标识的广告script async typetext/javascript src//cdn.carbonads.com/carbon.js?serveCKYIP53Eplacementstartbootstrapcom id_carbonads_js/script它在 _layouts/post.html博客右侧栏、_layouts/home.html 等页面被 include配套样式集中在 _sass/_carbon.scss其中.carbon-inverse类用于浅色容器反色显示。内容内嵌 native 广告。布局中的div classnative-standard/div占位见 overview-theme.html#L85-L86、post.html、guide 布局由页面底部的自定义模板脚本初始化_bsa.init(custom, CE7DV2JN, placement:startbootstrapcom, ...)传入一段以##company##、##description##、##callToAction##、##backgroundColor##等占位符构成的 banner 模板广告商内容直接注入正文区域即公告所指的 content-relevant ads。页脚 CPC 广告。_includes/footer.html 在页脚放置.bsa-cpc容器并初始化default模式单元还有一段兜底逻辑页面加载后检测广告是否真正渲染若没有可见广告则不展开该容器避免留下空白区域。三处位点共同构成博客页 / 详情页正文 / 全站页脚的完整覆盖且都做了无广告则隐藏的降级处理。Full Website Templates从单页起点到 17 页整站公告的最后一项变化是预告 Full Website Templates——fully functional, multi-page, pre-packaged website templates that are ready to download and customize。这一概念在仓库中的代表作是 Modern Business_templates/2013-09-26-modern-business.md 的 front matter 写明其定位与能力description: A full website template framework for building Bootstrap 4 websites with 17 pages and a working contact form long-description: Modern Business is a fully loaded Bootstrap 4 website starter template. It includes 17 HTML pages along with a working PHP contact form. features: - 17 HTML pages - Easy to edit, working PHP contact form - Homepage with image slider and captions - 4 portfolio page options with portfolio items - Bonus pages - pricing table, sidebar page, FAQ page, 404 page, and a blank full width page对比同期的小页面级模板如仅一个首页框架的 Small Business、BareModern Business 展示了整站模板的完整形态多页面、含可用 PHP 联系表单、附带定价表/FAQ/404 等增值页面。这类模板与单页模板共用overview-theme布局、同一套rank/categories/migrated字段与同一个预览页机制无需任何结构性特权——这正体现了前文所述数据驱动目录的价值无论资源是单页片段还是整站包进入目录的成本都是添加一个 front matter 文件。小结回到 2013 年 9 月 22 日这篇公告本身它篇幅很短但四项决定——Templates 分类分区、每模板独立主页大图 预览 下载 源码链接、广告化运营、Full Website Templates 专区——构成了 Start Bootstrap 此后十余年目录站的基本骨架。当前仓库中这套骨架由 _config.yml 的 Collections 声明、_templates/的统一 front matter 数据契约、_layouts/overview-theme.html 与 _layouts/preview.html 两个核心布局、templates/ 目录下的标签筛选页以及 _sass/_carbon.scss 与 Carbon/BuySellAds 脚本共同承载。对任何需要构建开源资源目录站的开发者而言Markdown front matter 即数据库 Liquid 条件筛选 iframe 沙箱预览这套组合是这份仓库里最值得直接借用的工程范式。赞分享前端文档【免费下载链接】startbootstrapA library of free and open source Bootstrap themes and templates项目地址https://gitcode.com/gh_mirrors/st/startbootstrap点击查看免费下载相关推荐深度解析Intel ME固件安全清理实战指南深度解析Intel ME固件安全清理实战指南 在当今硬件安全领域固件安全清理技术已成为保护计算设备免受底层威胁的关键防线。Intel MEManageme网络安全嵌入式colour-schemes的template目录HTML预览页模板文件结构colour schemes的template目录HTML预览页模板文件结构 colour schemes项目由Dayle Rees创建提供多种编辑器的配色开发工具Missing Semester 2026 课程索引页深度解析Jekyll 集合、Liquid 模板与课程站点架构Missing Semester 2026 课程索引页深度解析Jekyll 集合、Liquid 模板与课程站点架构 本文以开源仓库 missing semes文档教程上一篇VK视频下载技术分析前端注入式解决方案实现指南下一篇APK安装器在Windows电脑上直接安装安卓应用的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PathOfBuilding完整使用攻略

PathOfBuilding完整使用攻略

PathOfBuilding完整使用攻略 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding PathOfBuilding 是流放之路(Path of Exile)的离线 Build 规划工具&am…

2026/10/15 3:10:36 阅读更多 →
英伟达开源SoL-Pi:AI自己研究出优化方案,为Agent Harness省下64% Token

英伟达开源SoL-Pi:AI自己研究出优化方案,为Agent Harness省下64% Token

摘要:2026年9月11日,英伟达NVLabs开源SoL-Pi——不是新框架,不是新模型,而是一层“效率增强层”。装在开源Agent Harness Pi之上,Token消耗降低45%-64%,API成本降低50%-54%。最引人注目的不是性能数据&…

2026/10/15 3:10:36 阅读更多 →
网络安全工程师成长路线图,从小白到大神分阶段规划

网络安全工程师成长路线图,从小白到大神分阶段规划

夯实基石:初级工程师的入门必修课对于刚踏入网络安全领域的新人而言,首要任务不是盲目追求高深的攻防技巧,而是构建稳固的地基。这一阶段的核心目标是成为一名合格的初级安全工程师,重点在于对网络原理的深刻理解与 Linux 系统的熟…

2026/10/15 3:10:36 阅读更多 →

最新新闻

git 源代码里,出现一大堆红色文件的一次思考

git 源代码里,出现一大堆红色文件的一次思考

git 源代码里,出现一大堆红色文件 是因为切换分支的时候,底座导致的。 1.首先要理解rebase是什么意思? rebase是录制本地代码,把最新的代码作为背景,然后把最新修改加在最新代码后面。 2.如何解决呢? git c…

2026/10/15 4:02:46 阅读更多 →
18.从 IP 到 MQTT:STM32 用 AT 指令驱动 ESP-12F 上云的完整链路(含全套实战代码 + 踩坑清单)

18.从 IP 到 MQTT:STM32 用 AT 指令驱动 ESP-12F 上云的完整链路(含全套实战代码 + 踩坑清单)

这是我做 STM32F411 ESP-12F 跑通 MQTT 上云之后的一次系统复盘。上一篇讲了「网络地基 → MQTT 模型 → AT 指令遥控」三层逻辑,有同学说想要能直接抄走跑的代码。这篇我把全套实战代码补上:mqtt.h 头文件、mqtt.c 逐函数实现(每步为什么这…

2026/10/15 4:02:46 阅读更多 →
git 里的 rebase到底是什么?

git 里的 rebase到底是什么?

一句话:rebase-把本地代码录制下来,把背景换成别人的最新代码,然后把本地代码在最新代码基础上播放出来。那么 git pull --rebase origin master 是什么意思呢?意思是什么 取服务器的最新代码作为底座,origin 代码仓库…

2026/10/15 4:02:46 阅读更多 →
从背了就忘到主动复习 江苏一个初中英语班的变化

从背了就忘到主动复习 江苏一个初中英语班的变化

苏南一位初三孩子的妈妈跟我聊起上学期的事。孩子英语卷子拿回来,阅读错一半,完形填空连蒙带猜,最让她头疼的是词汇——今天默写全对,三天后再测,能记住的不到三成。她试过打印单词表、买过卡片、也盯着孩子抄过几遍&a…

2026/10/15 4:02:46 阅读更多 →
GitHub Copilot Chat:用对话方式让 AI 帮你重构代码

GitHub Copilot Chat:用对话方式让 AI 帮你重构代码

GitHub Copilot Chat:用对话方式让 AI 帮你重构代码一、重构——AI 编程的"杀手级场景" 在所有的编程任务中,代码重构是从 AI 辅助中获益最大的场景之一。重构有个特点:它需要理解现有代码的逻辑,然后进行"安全的变…

2026/10/15 4:02:46 阅读更多 →
一种可快速恢复的Zabbix高可用架构设计

一种可快速恢复的Zabbix高可用架构设计

做运维的朋友们可能都有过这样的深夜惊魂:好容器完成了监控的Server、Proxy的部署、告警的收敛,监控的覆盖率也达标了,结果承载Zabbix Server和PostgreSQL的机器突然宕机。那一刻,不是“少看几张图”的问题,而是整个团…

2026/10/15 4:01:45 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →