提升
htmx 支持使用 hx-boost 属性“提升”常规 HTML 锚点和表单。此属性会将所有锚点标签和表单转换为 AJAX 请求,默认情况下,这些请求会以页面主体为交换目标。
以下是一个例子:
<div hx-boost="true">
<a href="/blog">Blog</a>
</div>
此 div 中的锚标记将向 /blog 发出 AJAX GET 请求并将响应交换到 body 标记中。
渐进增强
hx-boost 的一个特点是,如果不启用 javascript,它会优雅地降级:链接和表单继续工作,它们只是不使用 ajax 请求。这被称为渐进式增强,它允许更广泛的受众使用你网站的功能。
其他 htmx 模式也可以进行调整以实现渐进增强,但这需要更多的考虑。
参考 active search 示例。正如它所写的那样,它不会优雅地降级:没有启用 javascript 的时候将无法使用此功能。这样做是为了简单起见,以保持示例尽可能简短。
但是,你可以将 htmx 增强输入包装在表单元素中:
<form action="/search" method="POST">
<input class="form-control" type="search"
name="search" placeholder="Begin typing to search users..."
hx-post="/search"
hx-trigger="keyup changed delay:500ms, search"
hx-target="#search-results"
hx-indicator=".htmx-indicator">
</form>
有了这些,启用 JavaScript 的客户端仍将获得良好的主动搜索用户体验,但未启用 JavaScript 的客户端将能够按下 Enter 键并继续搜索。更好的是,你还可以添加“搜索”按钮。然后,你需要使用 hx-post 属性的镜像更新表单,或者在其 action 上使用 hx-boost 。
你需要在服务器端检查 HX-Request 头,以区分 htmx 驱动和常规请求,从而确定向客户端呈现的具体内容。
其他模式也可以进行类似调整,以满足应用程序的渐进增强需求。
正如你所见,这需要更多的考虑和工作。它还规定了一些完全超出范围的功能。这些必须由开发人员根据项目目标和受众做出权衡。
可访问性是一个与渐进增强密切相关的概念。使用渐进增强技术(例如hx-boost将使你的 htmx 应用程序更易于广大用户访问)。
基于 htmx 的应用程序与普通的非 AJAX 驱动的 Web 应用程序非常相似,因为 htmx 是面向 HTML 的。
因此,适用常规 HTML 可访问性建议如下:
- 尽可能使用语义 HTML(即为正确的事物使用正确的标签)
- 确保焦点状态清晰可见
- 将文本标签与所有表单字段关联
- 使用适当的字体、对比度等最大限度地提高应用程序的可读性。