ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Minimal Mistakes 主题中 `<!--more-->` 摘要分隔符(More Tag)的配置与渲染机制详解

Minimal Mistakes 主题中 `<!--more-->` 摘要分隔符(More Tag)的配置与渲染机制详解 Minimal Mistakes 主题中!--more--摘要分隔符More Tag的配置与渲染机制详解【免费下载链接】minimal-mistakes:triangular_ruler: Jekyll theme for building a personal site, blog, project documentation, or portfolio.项目地址: https://gitcode.com/gh_mirrors/mi/minimal-mistakes导读!--more--是 Jekyll 生态中最常用的摘要分隔符用于在文章正文中显式标记的位置。本文以 Minimal Mistakes 主题仓库中的示例文档 docs/_posts/2012-03-15-layout-more-tag.md 为骨架结合主题源码archive-single.html、single.html与根目录 配置文件完整讲解 More Tag 的 Front Matter 写法、全局配置、摘要生成规则、归档页/详情页/SEO 的差异化渲染链路帮助你精确控制列表页展示内容与单页正文的关系。一、示例文档全景一篇演示 More Tag 的示例文章仓库中的示例文档docs/_posts/2012-03-15-layout-more-tag.md全貌如下--- title: Layout: More Tag excerpt_separator: !--more-- categories: - Layout - Uncategorized tags: - content - read more - layout --- This content is before the excerpt separator tag. Additional content before the more tag. !--more-- And this content is after the more tag.这份文档同时存在于 test/_posts/2012-03-15-layout-more-tag.md测试站点中用于验证主题在两种站点的渲染行为。整篇文章的核心技术点有三个Front Matter 中显式声明excerpt_separator: !--more--告诉 Jekyll 以!--more--作为本篇文章的摘要切分点正文中埋入!--more--标记标记之前的文字是摘要之后是正文的其余部分配合主题渲染链路归档列表页只展示标记前的摘要详情页展示完整内容。二、More Tag 的工作原理excerpt_separator 的两种声明方式Jekyll 生成文章摘要excerpt依赖excerpt_separator配置声明方式有两种2.1 站点级全局配置在仓库根目录的 _config.yml 中# Conversion excerpt_separator: \n\n默认值\n\n表示连续两个换行即默认情况下 Jekyll 会把文章第一段作为摘要。注意\n\n在 YAML 中是一个真实换行符序列等价于空行分段此时无需在正文中写任何标记。2.2 文章级局部覆盖推荐也是示例文档采用的方式如果只希望某些文章使用自定义分隔符可以在该文章的 Front Matter 中声明excerpt_separator: !--more--页面级配置会覆盖站点级配置。示例文档采用的就是这种方式它把摘要切分点从第一段改为显式的!--more--标记。2.3 两者结合的效果站点级配置决定默认行为未声明excerpt_separator的文章按空行取第一段为摘要文章级配置提供细粒度控制需要更长或自定义摘要的文章通过 Front Matter 覆盖。三、分隔符标记的语义!--more--前后内容的去向!--more--本身是一个 HTML 注释在浏览器中不会显示。Jekyll 在生成摘要时会取!--more--之前的所有内容作为post.excerpt正文则保留全部内容。以示例文档为例位置内容渲染结果!--more--之前This content is before the excerpt separator tag. Additional content before the more tag.作为摘要显示在归档/列表页!--more--之后And this content is after the more tag.仅在文章详情页正文中出现这种标记前是摘要、标记后是正文的行为允许作者精确控制列表页的引导文字避免把整篇文章灌入摘要。四、源码级验证摘要如何被主题消费More Tag 生成的post.excerpt在 Minimal Mistakes 主题中被多个模板消费形成完整的渲染链路。4.1 归档列表页archive-single.html归档页首页文章流、分类/标签归档、archive布局通过 _includes/archive-single.html 渲染单篇文章条目{% if post.excerpt %}p classarchive__item-excerpt p-summary itempropdescription{{ post.excerpt | markdownify | strip_html | truncate: 160 }}/p{% endif %}这里的过滤器链值得拆解markdownify把摘要中的 Markdown 渲染为 HTMLstrip_html剥掉 HTML 标签只留纯文本truncate: 160截断到 160 个字符。也就是说即使作者在!--more--前写了较长摘要列表页也会统一截断到 160 字符以内保证条目高度一致。如果post.excerpt为空例如文章没有正文则该段落整体不渲染。同时该条目的标题区h2 classarchive__item-title no_toc p-name渲染完整标题第 21-27 行 还处理了post.link外链场景外部链接文章会在标题旁追加永久链接图标。也就是说列表页 完整标题 截断到 160 字符的纯文本摘要。4.2 文章详情页single.html详情页布局 _layouts/single.html 对摘要的消费方式是元数据注入而非正文替换{% if page.excerpt %}meta itempropdescription content{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}{% endif %}这里把摘要写入meta itempropdescription供 schema.org 结构化数据使用第 25-29 行同时注入itempropheadline、datePublished、dateModified等元数据。正文部分在 第 52 行 通过{{ content }}输出完整内容——!--more--标记不会出现在详情页它只影响摘要的切分不影响正文渲染。splash.html布局对摘要的处理与single.html完全一致_layouts/splash.html。4.3 头部横幅与 SEO页面英雄区 _includes/page__hero.html当page.header.show_overlay_excerpt ! false且存在page.excerpt时摘要会以page__lead段落显示在头部横幅之下作为引导语SEO 模块 _includes/seo.htmlseo_description的取值优先级为page.description→page.excerpt→site.description。因此为文章声明excerpt_separator并写好!--more--前的引导文字会直接影响站点描述与搜索引擎描述。从源码结构看More Tag 的完整数据流为Front Matter 声明分隔符 → Jekyll 生成excerpt→ 归档页截断展示、详情页注入 meta 描述、英雄区作引导语、SEO 模块作站点描述。五、与自动摘要的对比More Tag 与自动生成的区别仓库中另有两篇对照示例文档便于理解差异docs/_posts/2012-03-14-layout-code-excerpt-generated.md未声明excerpt_separator标题说明这是生成的摘要Generated。正文首段包含内联代码span stylecolor: red;red/span列表页应展示该段自动生成的摘要。这篇用于验证自动摘要取第一段的行为与格式化正确性docs/_posts/2012-03-14-layout-excerpt-generated.md同样声明excerpt_separator: !--more--并使用!--more--标记但 Front Matter 未提供excerpt字段摘要完全由正文自动切分生成。两篇文档的正文都写有 Be sure to test the formatting of the auto-generated excerpt——说明主题作者将其作为摘要格式回归测试用例无论自动摘要还是显式 More Tag 摘要都要确保在列表页截断、去标签后不产生排版问题。区别总结对比项自动摘要默认More Tag 显式摘要分隔符站点级excerpt_separator: \n\n文章级excerpt_separator: !--more--摘要内容第一段!--more--之前的所有内容控制粒度段落级较粗可自由编排多段引导文字适用场景快速上手、摘要无特殊要求需要定制引导文案六、实操在 Minimal Mistakes 主题中启用 More Tag 的分步指南步骤 1确认或覆盖全局默认配置在站点根目录的_config.yml中默认excerpt_separator: \n\n_config.yml。如果希望全站统一使用!--more--将其改为excerpt_separator: !--more--注意 YAML 引号!--more--需要加双引号包裹避免被 YAML 解析器误解。步骤 2在文章 Front Matter 中声明分隔符可选仅对单篇文章启用时在_posts/目录下文章的 YAML 头中声明--- title: 我的文章 excerpt_separator: !--more-- ---步骤 3在正文中埋入标记在期望成为摘要的文字之后插入独立一行的!--more--这里是列表页会展示的摘要内容可以是多段文字。 !--more-- 这里是详情页才可见的正文其余部分。步骤 4验证效果本地运行bundle exec jekyll serve后检查首页/归档页条目摘要显示!--more--前的文字且被截断到 160 字符见 _includes/archive-single.html详情页正文完整显示摘要被注入meta itempropdescription见 _layouts/single.html。注意事项列表页强制截断即使!--more--前写了超过 160 字符的内容归档条目也只会显示前 160 字符markdownify处理摘要中的 Markdown 会被渲染后再剥除标签请确保摘要段落格式简单避免因嵌套标签导致截断位置突兀这正是两篇示例文档要求测试格式化的原因详情页无残留!--more--是 HTML 注释在详情页正文中不会显示站点级默认值的坑全局默认\n\n意味着不写任何标记时也会自动生成摘要取第一段。如果需要完全禁用摘要可结合各模板中{% if post.excerpt %}的条件判断通过控制excerpt是否为空来实现。七、总结More Tag!--more--在 Minimal Mistakes 主题中的定位是用显式标记精确控制文章摘要的边界。它的完整链路贯穿 Front Matter 声明excerpt_separator、全局默认配置_config.yml、归档条目渲染archive-single.html的truncate: 160、详情页元数据single.html的itempropdescription以及 SEO 描述优先级seo.html。通过示例文档 docs/_posts/2012-03-15-layout-more-tag.md 与配套测试站点 test/_posts/2012-03-15-layout-more-tag.md可以快速验证并掌握这一机制让博客列表页与详情页的内容呈现完全可控。【免费下载链接】minimal-mistakes:triangular_ruler: Jekyll theme for building a personal site, blog, project documentation, or portfolio.项目地址: https://gitcode.com/gh_mirrors/mi/minimal-mistakes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表