图标跑到页面顶部或左上角的根本原因是容器未设 position: relative,导致 absolute 定位的图标回溯到 body;必须用 position: relative 的 .search-box 包裹 input 和图标,并通过 .search-box::after 实现伪元素图标,同时 input 需设置足够 padding-right 以避免文字被遮挡,点击图标聚焦需借助 label 语义化或真实可绑定事件的元素。
根本原因是没给容器设 position: relative。position: absolute 的图标会逐级向上找最近的「已定位祖先」,如果找不到,就落到 body 上——于是图标飘在屏幕左上角,和 input 完全无关。
<div class="search-box"> 包住 <input> 和图标(不能直接用 <input> 自身设 relative,它是替换元素,Safari 里容易错位).search-box { position: relative; } 这一行不能省,它是整个定位体系的锚点.search-box::after 实现最稳妥,不增 DOM、不干扰表单聚焦逻辑::after 必须带 content: "",否则浏览器压根不渲染;也不能挂到 input::after 上——<input> 是自闭合标签,不支持伪元素。
.search-box::after { content: ""; position: absolute; right: 12px; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; background: url("search.svg") no-repeat center / contain; }
font-icon 或 <i> 标签塞进 HTML:字体加载失败时图标变空白,且点击不会自动聚焦 input.search-box::after 上,用 background-image 或 mask 方式,避免 DOM 干扰没留右内边距是常见体验断层:用户输入时看不到最后几个字符,不是“有点挤”,而是功能失效。
input 必须加 padding-right,值 ≥ 图标宽度 + 右侧间隙(比如图标 16px + 8px 间距 → padding-right: 24px)text-indent 代替:它只缩进首行,resize 或换行后立即失效input 内边距渲染略窄,统一加 box-sizing: border-box 防意外CSS 无法处理事件,但结构可以补足。最简方案是靠语义化 HTML,而不是 JS。
<input> 套进 <label> 里,图标作为 label 的子元素(哪怕只是 label::after),点击即聚焦div.search-box 结构,就给图标加 cursor: pointer,再配一行 JS:document.querySelector(".search-box::after").addEventListener("click", () => input.focus()); —— 但注意:伪元素无法直接绑定事件,实际需用真实元素或委托<button type="button" class="search-icon"></button> 替代伪元素,显式绑定 click,可控性更强tlwdr7650路由器没有wps按钮(tlwdr7650路由器没有wps按钮怎么办)
tlwdr7632扩展器电脑怎么设置(tlwdr7632扩展器电脑设置方法)
tlwda6332re安装教程(tlwda6332re如何安装)
tlwdr7632扩展器手机怎么设置(tlwdr7632扩展器手机设置方法)
tlxdr3010怎么设置网速快(tlxdr3010网速快设置方法)
tlwdr5620易展版怎么克隆(tlwdr5620易展版克隆方法)