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】搭建私人博客:文章目录(四)

相关推荐
久绊A14 小时前
服务器磁盘只读/故障排
java·linux·服务器
always_TT14 小时前
Makefile入门:自动化编译你的C项目
运维·c语言·自动化
yy_xzz14 小时前
【Linux开发】03 TCP 网络编程中的数据边界问题与解决方案
linux·网络·tcp/ip
hutengyi14 小时前
Redis基础——1、Linux下安装Redis(超详细)
linux·数据库·redis
白鸽梦游指南14 小时前
docker构建镜像文件
运维·docker·容器
yingzicat14 小时前
局域网内建立NTP服务器
运维·服务器
小句14 小时前
Nginx 配置完整指南
运维·nginx
m0_7269659814 小时前
Docker使用
运维·docker·容器
LeocenaY14 小时前
Linux 内核 I/O栈 总结
linux·运维·服务器
kishu_iOS&AI14 小时前
Git SSH + SourceTree篇
运维·git·ssh