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】搭建私人博客:搜索功能(二)

相关推荐
晚风吹长发28 分钟前
Docker基础——Docker Network(网络详解)
linux·运维·网络·ubuntu·docker·容器
高磊20052 小时前
LVS(Linux virual server)
linux·服务器·lvs
LedgerNinja2 小时前
WEEX API 自动化交易实践:下单、撤单、订单查询与状态闭环
运维·自动化
shwill1232 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法
执笔画流年呀3 小时前
Linux搭建Java项目部署环境
java·linux·运维
Dory_Youth4 小时前
联想笔记本电脑失灵
运维·笔记·电脑
Sisphusssss4 小时前
香橙派5plus GPIO
linux·python·ubuntu
W.W.H.4 小时前
嵌入式 Linux外接USB/WIFI模块兼容5G频段实战
linux·运维·5g·wifi
运维大师4 小时前
【K8S 运维实战】24-资源优化HPA与VPA
运维·kubernetes·github
影视飓风TIM4 小时前
Linux下C程序编译:gcc 动态链接与静态链接全解
linux·c语言