更改 Hugo 的内置图形短代码以向图像添加延迟加载
Changing Hugo's built-in figure shortcode to add lazy loading to images
在我的 Hugo 生成的网站中,我使用了内置的简码 figure
。示例:
{{< figure src="myImage.svg" width="100%" alt="Some description" >}}
这会呈现以下内容 HTML:
<figure>
<img src="myImage.svg"
alt="Some description" width="100%"/>
</figure>
但现在我正在尝试更新我的 Hugo 网站,使图形短代码将 loading=lazy
属性添加到 img
标签:
<figure>
<img
loading="lazy"
src="myImage.svg"
alt="Some description" width="100%"/>
</figure>
如何使用(新)loading
属性实现让图像延迟加载的目标?
您可以创建一个名为 layouts\shortcodes\figure.html 的文件,并将 Hugo's figure shortcode source code 的内容复制到该文件中。这是当前的源代码:
<figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
{{- if .Get "link" -}}
<a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
{{- end -}}
<img src="{{ .Get "src" }}"
{{- if or (.Get "alt") (.Get "caption") }}
alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify| plainify }}{{ end }}"
{{- end -}}
{{- with .Get "width" }} width="{{ . }}"{{ end -}}
{{- with .Get "height" }} height="{{ . }}"{{ end -}}
/><!-- Closing img tag -->
{{- if .Get "link" }}</a>{{ end -}}
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
<figcaption>
{{ with (.Get "title") -}}
<h4>{{ . }}</h4>
{{- end -}}
{{- if or (.Get "caption") (.Get "attr") -}}<p>
{{- .Get "caption" | markdownify -}}
{{- with .Get "attrlink" }}
<a href="{{ . }}">
{{- end -}}
{{- .Get "attr" | markdownify -}}
{{- if .Get "attrlink" }}</a>{{ end }}</p>
{{- end }}
</figcaption>
{{- end }}
</figure>
之后,您可以对本地 figure.html 进行必要的更改。例如:
...
<img src="{{ .Get "src" }}" loading="lazy" decoding="async"
...
Hugo 比 built-in 版本更喜欢您本地定义的短代码,这意味着这会覆盖 built-in 行为。
渲染图像挂钩是一个 safe/better 赌注,然后您可以在 md 文件中保持标准降价。
因此,在 layouts/_default/_markup 中(根据您需要的任何查找顺序,这将是一个全局设置)
render-image.html
<figure>
<img
loading="lazy"
src=".Destination"
alt=".Text" width="100%" title=".Title"/>
</figure>
在你的降价文件中:
![]() <- typical markdown image link
在我的 Hugo 生成的网站中,我使用了内置的简码 figure
。示例:
{{< figure src="myImage.svg" width="100%" alt="Some description" >}}
这会呈现以下内容 HTML:
<figure>
<img src="myImage.svg"
alt="Some description" width="100%"/>
</figure>
但现在我正在尝试更新我的 Hugo 网站,使图形短代码将 loading=lazy
属性添加到 img
标签:
<figure>
<img
loading="lazy"
src="myImage.svg"
alt="Some description" width="100%"/>
</figure>
如何使用(新)loading
属性实现让图像延迟加载的目标?
您可以创建一个名为 layouts\shortcodes\figure.html 的文件,并将 Hugo's figure shortcode source code 的内容复制到该文件中。这是当前的源代码:
<figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
{{- if .Get "link" -}}
<a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
{{- end -}}
<img src="{{ .Get "src" }}"
{{- if or (.Get "alt") (.Get "caption") }}
alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify| plainify }}{{ end }}"
{{- end -}}
{{- with .Get "width" }} width="{{ . }}"{{ end -}}
{{- with .Get "height" }} height="{{ . }}"{{ end -}}
/><!-- Closing img tag -->
{{- if .Get "link" }}</a>{{ end -}}
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
<figcaption>
{{ with (.Get "title") -}}
<h4>{{ . }}</h4>
{{- end -}}
{{- if or (.Get "caption") (.Get "attr") -}}<p>
{{- .Get "caption" | markdownify -}}
{{- with .Get "attrlink" }}
<a href="{{ . }}">
{{- end -}}
{{- .Get "attr" | markdownify -}}
{{- if .Get "attrlink" }}</a>{{ end }}</p>
{{- end }}
</figcaption>
{{- end }}
</figure>
之后,您可以对本地 figure.html 进行必要的更改。例如:
...
<img src="{{ .Get "src" }}" loading="lazy" decoding="async"
...
Hugo 比 built-in 版本更喜欢您本地定义的短代码,这意味着这会覆盖 built-in 行为。
渲染图像挂钩是一个 safe/better 赌注,然后您可以在 md 文件中保持标准降价。
因此,在 layouts/_default/_markup 中(根据您需要的任何查找顺序,这将是一个全局设置)
render-image.html
<figure>
<img
loading="lazy"
src=".Destination"
alt=".Text" width="100%" title=".Title"/>
</figure>
在你的降价文件中:
![]() <- typical markdown image link