搜索结果列表应使用语义化 或 包裹,每项用 ,标题用 、摘要用 ;搜索框设 name="q",容器用 ,空状态需提供明确提示与操作引导,兼顾seo与可访问性。

搜索结果列表怎么用 HTML + CSS 快速搭出来
不需要框架,纯 HTML 就能展示搜索结果,关键是结构清晰、语义正确、方便后续加交互。核心是用 <ol></ol> 或 <ul></ul> 包裹结果项,每条用 <li>,标题和摘要分别用 <h3></h3> 和 <p></p> —— 这样既利于 SEO,也方便屏幕阅读器识别。
常见错误是把所有内容堆在 <div> 里,结果搜索引擎抓不到标题层级,用户用键盘导航时也跳得乱。另外别忘了给搜索框加 <code>name="q",后端或 JS 才能取到关键词。
- 搜索框示例:
<input type="search" name="q" placeholder="输入关键词"> - 结果容器建议用
<main></main>包裹,避免语义混乱 - 每条结果外层
<li>最好加role="article"(可选,但对辅助技术更友好)
怎么让搜索结果带高亮关键词
纯 HTML 做不了动态高亮,必须用 JS 处理字符串并插入 <mark></mark> 标签。关键点不是“怎么加标签”,而是“怎么避免 XSS”和“怎么匹配全词”。
比如用户搜 js,你不该把 javascript 里的 js 也高亮 —— 那会误导。要用正则加单词边界 ,且必须对关键词做 HTML 转义后再插入 DOM。
- 安全做法:先用
document.createTextNode()创建文本节点,再用innerHTML拼接<mark></mark>部分 - 推荐正则:
new RegExp(`\b(${keyword.replace(/[.*+?^${}()|[]\]/g, '\$&')})\b`, 'gi') - 不要直接
innerHTML = resultStr.replace(...),除非你 100% 确认resultStr是可信内容
搜索无结果时页面该怎么写 HTML
空状态不是留白或显示“未找到”,而是要告诉用户“为什么没结果”以及“还能做什么”。HTML 层面只需提供明确的语义结构,样式由 CSS 控制。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
最常被忽略的是:没结果时仍要保留搜索框,且焦点应自动回到框内(JS 触发 input.focus()),否则用户得手动点回去。同时,<main></main> 里不能没有内容,否则影响可访问性。
- 结构示例:
<h2>没找到与“xxx”匹配的结果</h2> <p>试试换一个关键词,或查看 @#@#@#@#@#@#@#@#@#@0</p> - 避免用
<div class="empty"> 这种无意义 wrapper,直接用 <code><section></section>或<article></article>更合适 - 如果后端返回空数组,HTML 模板里就不要渲染
<ol></ol>,而应渲染上述空状态块 - 必须给每条结果的链接加
href或data-url,否则 iOS Safari 可能不触发 :active 状态 - 避免在
<li>上直接写onclick,改用事件委托监听<ol></ol>,减少内存占用 - 摘要字段若含 HTML 片段(如从富文本提取),务必用
textContent渲染,而不是innerHTML,防止执行脚本
移动端搜索结果页要注意哪些 HTML 细节
不是加个 viewport meta 就算适配了。真正影响体验的是交互反馈和信息密度 —— HTML 层要为这些留出钩子。
比如点击某条结果时,需要视觉反馈(如背景变色),就得确保 <li> 内容可聚焦(加 tabindex="0"),且包裹的 <a></a> 或 <button></button> 有明确 role。另外,摘要文字过长需截断,但 HTML 本身不处理省略号,得靠 CSS 的 line-clamp 或 JS 截取。
<div> 模拟列表、忘记 <code>aria-live 区域提示搜索完成、或者高亮逻辑在 IE 中因不支持 matchAll 直接崩掉。这些不是“锦上添花”,而是搜索功能可用的底线。










