96、【Ubuntu】【Hugo】搭建私人博客:搜索功能(一)

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

背景

上篇 blog
【Ubuntu】【Hugo】搭建私人博客:_default&partials

分析了 Hugo 的 layouts/ 中,_default 模板和 partials 模板的区别,下面继续看搜索功能

搭建私人博客

首先来看 PaperMod 主题中的 layouts/_default/search.html 模板,其内容如下

go 复制代码
{{- define "main" }}

<header class="page-header">
    <h1>{{- (printf "%s&nbsp;" .Title ) | htmlUnescape -}}
        <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none"
            stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <circle cx="11" cy="11" r="8"></circle>
            <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
        </svg>
    </h1>
    {{- if .Description }}
    <div class="post-description">
        {{ .Description }}
    </div>
    {{- end }}
    {{- if not (.Param "hideMeta") }}
    <div class="post-meta">
        {{- partial "translation_list.html" . -}}
    </div>
    {{- end }}
</header>

<div id="searchbox">
    <input id="searchInput" autofocus placeholder="{{ .Params.placeholder | default (printf "%s ↵" .Title) }}"
        aria-label="search" type="search" autocomplete="off" maxlength="64">
    <ul id="searchResults" aria-label="search results"></ul>
</div>

{{- end }}{{/* end main */}}

标签信息

首先这里定义了页面头部

来看下这里的标签信息

  • <header>:语义化的 HTML5 标签,表示页面或文章的页头,class="page-header" 是 CSS 类名,方便后面用样式控制外观(比如加粗,居中,留白等)
  • <h1>:主标题标签,对 SEO 和可访问性很重要,通常每个页面只有一个 <h1>,代表当前页面的核心主题
  • <svg>:图标标签,内联了一个 SVG 图标,比如可以是一个小装饰图标,徽章,箭头等,这里是一个放大镜图标,表示搜索

SVG

OK,这里提到了 SVG 图标,下面来详细介绍下

SVG 全称 Scalable Vector Graphics,是一种基于 XML 的矢量图形格式,用于在网页中显示图标,插图等

SVG 的优点如下:

  • 无限缩放不模糊,因为是矢量,不是像素图
  • 文件小,尤其适合简单图标
  • 可直接用 CSS 控制颜色,大小,动画等
  • 内联嵌入 HTML,无需额外请求图片文件

OK,来看下 PaperMod search.html 这里的图标信息,首先是定义了形状

xml 复制代码
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>

这是一个典型的搜索图标(放大镜形状),<circle> 表示一个圆圈(代表镜片),<line> 表示一条斜线(代表手柄),这个图标来自流行的开源图标库 Feather Icons 中的 search 图标

Feather Icons 里面还有很多其他好看的图标,可以自由选择

下载图标后,打开内容,按下 F12 进入开发者模式,可以看到里面的内容和 PaperMod 主题中几乎一模一样

xmlns

OK,看下一个元素 xmlns,这里 xmlns="http://www.w3.org/2000/svg" 是一个 XML 命名空间的声明,因为 SVG 本质上是 XML 文档,而 HTML 是另一种标记语言 ,当在 HTML 中内联嵌入 SVG 时,浏览器需要知道,接下来的这段 <svg>...</svg> 不是普通的 HTML 元素,而是 SVG 元素,xmlns="http://www.w3.org/2000/svg" 就是通知浏览器:下面的内容按照 SVG 规范进行解析

不过在大多数现代浏览器中,即使省略 xmlns 元素,内联 SVG 也仍可能正常显示,因为现代浏览器一般会做容错 ,但严格来说,xmlns 元素是必须的,尤其在一些 XHTML 文档中,某些旧版浏览器里,或者需要通过 XML 解析器处理时,所以总的来说,加上 xmlns 是良好的实践,可以确保跨平台的兼容性

另外还要提一下,<svg> 标签中的 <circle> 和 <line> 元素是 SVG 元素,属于 XML 语法(更准确地说,是 SVG 的 XML 语法),不是 HTML 原生元素


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

相关推荐
wtblszn3 小时前
自动化包装生产线设备可视化管理方案
运维·自动化
心之语歌4 小时前
Tkinter 画布基本梳理
运维·服务器·python
Shulex5 小时前
面向跨境电商多渠道消息系统的技术架构:亚马逊站内信合规对接与自动化执行链路设计
运维·架构·自动化
bloglin999995 小时前
vmware部署centos7启动docker容器后无法访问服务
运维·docker·容器
夜听莺儿鸣5 小时前
502-003_Linux 中断与异常(一):从Linux角度理解中断与异常
linux·中断与异常·linux中断
杨云龙UP6 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
梦帮科技6 小时前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
向成科技7 小时前
XC3576H工控主板|深度适配Ubuntu 26.04 LTS,释放边缘AI与工业开发新潜能
linux·人工智能·ubuntu·机器人·硬件·主板·边缘ai
逐流人7 小时前
Ceph分布式存储集群配置与池管理:从配置优先级到PG、复本池与纠删码池
运维·分布式·ceph·云原生·云计算·rados
海宇服务7 小时前
零信任架构实战:基于海宇车型识别精准构建自动化定损网关
运维·人工智能·架构·自动化