84、【Ubuntu】【Hugo】搭建私人博客:文章目录(三)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【Hugo】搭建私人博客:文章目录(二)

分析了【<details> 可折叠容器】,TOC 的生成方式,以及手动构建嵌套列表,下面继续分析

搭建私人博客

OK,看下一部分:初始化嵌套 <ul> 结构

可以看到,这里用 $.Scratch(Hugo 临时变量)记录哪些层级是裸 ul(没有用 <li> 包裹),用于后续正确的闭合标签

这里涉及到 <ul><li> 和 裸 <ul> 的概念,下面详细解释下

在 HTML 中:

  • <ul> 标签表示 Unordered List,无序列表,就是带圆点的列表 ,比如
  • <li> 标签表示 List Item,列表项,是 <ul> 里的每一个条目

正确的 HTML 嵌套结果必须像这样

html 复制代码
<ul>
  <li>一级标题</li>
  <li>
    二级标题
    <ul>
      <li>三级标题</li>
      <li>另一个三级标题</li>
    </ul>
  </li>
</ul>

其最终效果就像

而不应该直接 <ul><ul>,因为 HTML 标准规定,<ul> 只能出现在 <li> 内部,或作为根元素,所以 <ul><ul> 这样是非法的,比如下面这样

html 复制代码
<!-- 非法! -->
<ul>
  <ul>   <!-- 这里缺少 <li> 包裹! -->
    <li>...</li>
  </ul>
</ul>

任何 <ul> 如果出现在另一个 <ul> 内部,就应该被包在 <li> 里面,上面那种非法的写法最终渲染效果如下

单从效果来看,可以看到现代浏览器的解析器也不会报错,而是跳过规则检查,直接按原样解析,然后交给渲染引擎 ,也就是说,浏览器能够容忍这种非法写法,然后用默认样式去渲染,相当于外层 <ul> 被忽略了,只显示内层 <ul>,浏览器直接把内层 <ul> 当作主列表项来处理

但是,能渲染 ≠ 合法 ≠ 安全可靠 ,所以在这里可以看到,PaperMod 会对 bareul 进行单独处理,因为要生成语义正确,可预测,符合标准的 HTML,原因如下

  • 即使这个浏览器能够容忍非法结构,但不意味着所有浏览器都这样,不同浏览器渲染方式可能不同
  • 可访问性工具可能无法理解
  • SEO 爬虫可能忽略内容,导致搜索引擎无法捕获到相关关键字,进而降低在搜索结果中的排名
  • CSS 样式也可能失效

所以 PaperMod 在这里会主动判断 bareul 来确保每一个 <ul> 都被正确包裹在 <li> 中,让 HTML 结构永远合法,输出可控,稳定可靠

OK,刚才介绍了 <ul> 必须包裹着 <li>,下面来看正常的 HTML 效果,首先

  • <ul> = Unordered List(无序列表)会告诉浏览器,开始一个带圆点的列表
  • <li> = List Item(列表项),浏览器会识别到里面的列表中的每一项内容

比如下面这段 HTML 代码

html 复制代码
<ul>
  <li>苹果</li>
  <li>香蕉</li>
  <li>橙子</li>
</ul>

浏览器看到后,就会自动显示成

开发者不用自己打圆点,浏览器会自动加上,这是 HTML 的语义化设计

OK,有 Unordered List(无序列表),也就会有 Ordered List(有序列表),其效果是带数字的 1.2.3.,此时可以用 <ol> 标签,比如下面这段 HTML 代码

html 复制代码
<ol>
  <li>第一步</li>
  <li>第二步</li>
  <li>第三步</li>
</ol>

浏览器看到后,自动显示成

可以看到,浏览器会自动加上前面的数字索引


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Hugo】搭建私人博客:文章目录(四)

相关推荐
好好学习啊天天向上6 小时前
C盘容量不够,python , pip,安装包的位置
linux·python·pip
li_wen017 小时前
文件系统(八):Linux JFFS2文件系统工作原理、优势与局限
大数据·linux·数据库·文件系统·jffs2
wypywyp7 小时前
2.虚拟机一直显示黑屏,无法打开,可能是分配的硬盘空间不够
linux·运维·服务器
SongYuLong的博客7 小时前
TL-WR710N-V2.1 硬改刷机OpenWRT源码编译固件
linux·物联网·网络协议
AlfredZhao7 小时前
Docker 快速入门:手把手教你打包 Python 应用
linux·docker·podman
HIT_Weston8 小时前
107、【Ubuntu】【Hugo】搭建私人博客:模糊搜索 Fuse.js(三)
linux·javascript·ubuntu
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.9 小时前
Haproxy会话保持:基于Cookie优化
运维·负载均衡
艾莉丝努力练剑9 小时前
【优选算法必刷100题】第007~008题(双指针算法):三数之和、四数之和问题求解
linux·算法·双指针·优选算法
chinesegf9 小时前
Ubuntu 安装 Python 虚拟环境:常见问题与解决指南
linux·python·ubuntu
学习3人组10 小时前
Docker 容器内文件↔本地双向复制备份
运维·docker·容器