当前位置: 首页 > Web前端 > HTML

CSS实现搜索相关的交互

时间:2023-03-28 16:35:23 HTML

先来看一个很常见的搜索框的交互。大致逻辑如下:当输入框有内容时,会显示清除按钮。单击清除按钮清除输入框。当输入框有内容并且处于焦点时,输入框会被清空。显示搜索结果浮层点击搜索项,关闭整个搜索结果浮层我们来看原生实现。1、HTML5新增表单元素HTML5中新增了一个type=search的表单,如下自然支持清除功能,只需要美化点击默认清除按钮。你可以在chrome中使用::-webkit-search-cancel-button,在ie中使用::ms-clear。这里我们以chrome为例[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;宽度:36px;高度:36px;边界:0;background:url("data:image/svg+xml,%3Csvgxmlns='http://www.w3.org/2000/svg'viewBox='00512512'%3E%3Cpathd='M2568C119881198256S111248248248248-111248-248S39382568ZM121.6313.1C4.4717L338377.6C-4.74.7-12.34.7-12.34.7-170L2560L256312L-65.165.6C-4.6C-4.74.74.7-7-7-12.34.7-12.34.7-12.34.7-17-17-17-17-7-17-17-7-170l134。4338c-4.7-4.7-4.7-12.30-17l65.6-65.61c-654.7-4.7-4.7-12.30-17l39.6-39.6c4.7-4.712.3-4.7170l6565.765.1-65.6c4。7-4.712.3-4.7170l39.639.6c4.74.74.712.31225L.665.1z'%3E%3C/path%3E%3C/svg%3E")中心无重复;背景大小:16px;游标:指针;不透明度:.4;transition:.2s;}这将工作2.firefox下的实现但是上面的方法在firefox下是无效的。firefox中没有清除按钮,表现与普通输入框一致(下图为firefox表现)。如果是PC端,面向用户,firefox还是不能忽略,如何处理?可以手动添加一个按钮然后适当美化一下(相信不难),就可以得到这样的效果。现在清除按钮与输入框无关。有输入内容时如何显示清空按钮?你可以这样想:如果有内容,说明它不为空,说明它是必填项。提到必填项,就可以想到required属性。当有内容时,说明是合法的,可以匹配:valid选择器,这样可以区分具体实现如下在input中添加一个required属性然后默认隐藏清除按钮,用相邻的selector+可以实现~.clear{visibility:hidden;}.input:valid+.clear{visibility:visible;}效果如下(下图是firefox的表现)然后清空的功能输入框。如果你不使用JS,你能做什么?可以清空输入框吗?在HTML5表单中,可以直接通过type=reset重置所有内容,所以这里需要修改一下结构,将外层div改为form,然后给button添加type=reset属性,如下这将清除搜索框(图片下面是firefox的表现)当然其他浏览器也支持这种方式。遗憾的是清空后输入框无法聚焦。2、自动显示搜索提示的浮层。先添加搜索提示的HTML结构搜索结果1搜索结果2搜索结果3

搜索结果默认隐藏,然后输入框里面有内容(:valid),只有聚焦(:focus)的时候才显示,兄弟选择器~可以实现如下:.search-list{position:absolute;visibility:hidden;}.input:focus:valid~.search-list{visibility:visible;}效果如下3.搜索提示浮层上的事件效果好像没什么问题。点击搜索项后,整个搜索结果确实是关闭的。但其实只要有问题,点击关闭都是因为输入框失去焦点。如果给搜索项添加点击事件,可能还没有关闭。触发事件关闭,如搜索结果1搜索结果2搜索结果3a>
效果如下,点击时不触发点击事件(不打印控制台)。原因其实很简单。click其实可以看做是mousedown→mouseup,mousedown之后马上失去焦点。提示悬浮层在mouseup之前关闭,所以不会触发该事件。为了解决这个问题,可以把onclick换成onmousedown,但这显然不能解决根本问题。例如,在许多情况下,搜索项具有href属性Searchresult1
这也不能正确跳跃。如何解决?这里有一个很简单的trick,点击时不能强制显示吗?clicks可以匹配:active,所以可以这样实现:.input:focus:valid~.search-list,.search-list:active{/*点击时也显示*/visibility:visible;}点击和跳转事件正常触发(控制台有打印)。完整代码可通过CSS搜索(codepen.io)获取。兼容firefox的完整代码可以通过CSS搜索firefox(codepen.io)获取。4.总结与描述以上实现了一个搜索输入相关的交互效果,没有布局技巧。核心在于选择器的合理使用。下面总结一下实现要点:输入框可以使用HTML5新的type=search属性,自然支持clear功能,可惜firefox不支持输入框的requred属性设置好后,结合:valid选择器判断表单中是否有内容。您可以通过type=reset按钮重置输入内容。匹配点击相关行为各种选择器可以组合使用,实现更灵活的交互效果兼容IE10+,几乎可以用于生产环境,很多时候js错误导致整个网站直接空白,完全无法使用,CSS不会有这样的问题~如果觉得还不错,如果对你有帮助,欢迎点赞、收藏、转发???