在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
顶部菜单栏中放置搜索框是一个常见的场景,但如果搜索功能使用的不那么频繁,同时菜单栏中内容本来就比较拥挤,再放一个完整的搜索框在那就显得不那么美观。因此也有一个挺常见的做法是,只放一个搜索图标,需要时再显示整个搜索框,如下图所示: 实现思路起始状态时搜索框没有显示,鼠标移入后从右侧滑入,因此不能使用搜索框自身的 hidden 或透明度属性,需要使用父元素的 CSS 中有 这两个动画本身实现很简单,但有一些小细节:
代码实现完整的样式表附在文末,不想看具体思路的可以跳过本节直接去复制。 基础样式先普普通通的写一下基础样式,这里用的图标是 material design icon。 <div class="search"> <input class="bar" placeholder="请输入内容" /> <span class="material-icons icon">search</span> </div> .icon { width: 24px; height: 24px; } .bar { height: 26px; width: 200px; padding: 1px 9px; border: #fff 1px solid; border-radius: 3px; background-color: transparent; color: #fff; } ::placeholder { color: #ccc; /* 修改input中placeholder的颜色*/ } .search { height: 30px; display: flex; align-items: center; } 隐藏搜索框移动搜索框位置的方法有很多,比如可以使用 absolute 或者 relative 定位。
还有一种更直接的方法:transform 属性。通过这个属性,可以实现对元素的平移、旋转、缩放等变形操作,同时对其他元素不产生影响。在这里使用的 PS: transition, transform, translate 这几个词不会只有我一直分不清吧555 .search { overflow: hidden; } .bar { transform: translateX(224px); /* 上一句也可以替换为下面两句,效果相同 position: relative; left: 224px; */ } 动画序列动画通过 transition 属性实现。transition 是 transition-property,transition-duration,transition-timing-function 和 transition-delay 四个属性的简写(类比
transition 属性本质上是小学电脑课学过的 flash 补间动画,指定一个属性的起止两个状态,自动补全中间的过渡动画。元素本来的属性是起始状态,鼠标移上后的动画,自然元素的 .icon { opacity: 1; transition: opacity 0.3s ease; /* delay 属性默认值为0 */ } .search:hover .icon { opacity: 0; } .bar { transform: translateX(224px); transition: transform 0.3s ease-in-out 0.3s; } .search:hover .bar { transform: translateX(24px); } 逆向序列这样能够基本实现想要的动画效果了,但是在隐藏搜索框的时候也是图标先出现,搜索框后滑出,不够美观。解决方案也很简单,为 hover 伪类单独设置不同的 delay 属性即可。 有一点需要注意一下,hover 伪类中的 delay 属性对应的是鼠标移上时的延迟,元素本身属性中的 delay 对应的是鼠标移出时恢复动画的延迟。可能和第一反应不太一样(不过仔细想想倒也挺合理的),别写反了。 .icon { transition: opacity 0.3s ease 0.3s; } .search:hover .icon { transition-delay: 0s; } .bar { transition: transform 0.3s ease-in-out 0s; } .search:hover .bar { transition-delay: 0.3s; } 触发区域其实但就想要的动画效果,以上几步就足够了。但是这样还有一个小问题:动画是通过父元素 .search 的 hover 状态触发的,因此如果鼠标移入搜索图标左侧本来应该是搜索框的位置(但是现在什么也没有,被隐藏了),还是会触发显示搜索框动画。这其实也不是不能接受。 如果想只在鼠标悬停在图标时才触发动画,只要将触发条件改成 .icon 的悬停状态即可。不过由于 CSS 中只有后继元素选择器而没有前驱元素选择器(因为 DOM 渲染 CSS 的原则是不能出现回溯),需要调整一下 HTML 中图标和搜索框的顺序。 <div class="search"> <span class="material-icons icon">search</span> <input class="bar" placeholder="请输入内容" /> </div> 然后修改相应的样式和选择器即可。 .icon:hover { opacity: 0; transition-delay: 0s; } .icon:hover + .bar { /* + 紧邻兄弟选择器 */ transform: translateX(24px); transition-delay: 0.3s; } .search { display: flex; flex-direction: row-reverse; /* 让搜索框还在图标左边 */ } 附录:完整样式表 <div class="search"> <span class="material-icons icon">search</span> <input class="bar" placeholder="请输入内容" /> </div> .icon { width: 24px; height: 24px; opacity: 1; transition: opacity 0.3s ease 0.3s; } .icon:hover { opacity: 0; transition-delay: 0s; } .bar { height: 26px; width: 180px; padding: 1px 9px; border: #fff 1px solid; border-radius: 3px; background-color: transparent; color: #fff; transform: translateX(224px); transition: transform 0.3s ease-in-out 0s; } .icon:hover + .bar { transform: translateX(24px); transition-delay: 0.3s; } ::placeholder { color: #ccc; } .search { height: 30px; display: flex; flex-direction: row-reverse; align-items: center; overflow: hidden; } 到此这篇关于CSS实现隐藏搜索框功能(动画正反向序列)的文章就介绍到这了,更多相关css动画正反向序列内容请搜索极客世界以前的文章或继续浏览下面的相关文章,希望大家以后多多支持极客世界! |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论