欢迎关注我的公众号:前端侦探一般情况下,悬停是不能保存状态的。extra样式在鼠标移入时触发,鼠标移出后el:hover{color:red}恢复。这意味着如果你需要保持悬停状态,你可能不得不使用JS。比如下面是某学院首页排行榜的效果这里主要的交互有以下几种:鼠标滑动触发选中状态。鼠标移出列表后,仍保留上次选中状态(关键点)。默认列表中的第一项是选定状态。目前官网的实现也是通过JS实现的。其实完全可以只通过CSS来完成,还需要一些transitiondelay的技巧。一起来看看吧。1、鼠标滑过触发选中状态。假设列表HTML是这样的将军,夫人叫你种田只是何在休息室打了个盹,睁眼一看,一副古代不识字乡下姑娘的打扮。他不仅好吃懒做,在村子里还很霸道。十里八寨没人愿意娶她,好不容易买了个豪门女婿,可是大婚之日,人跑了。一气之下,恶霸父亲顺路为她拐走了一个丈夫。那是……爸,绑架你是不是有点不对劲?*苏胖子婚后很忙。忙着改造霸道总裁霸道哥哥。忙于营救神将美丽如花的丈夫。忙着养三个小霸王,小豆丁。一不小心,忙成了大衍最有权势的一品女侯爵!
被夺走一切后,她成神归来【甜甜的爽快、群宠、玄学】司浮晴一睁眼,不仅气运被抢走,所有人还让她滚出娱乐圈。为了重活,她只想和咸鱼一起躺下。谁知圈内人只知道推销,没有真本事,不磨练演技。这怎么能继续下去?不管怎样,我得收拾一下。司浮清捏了捏他的手腕,动了动。后来网上疯骂她太过分发帖于瑶,造谣私生活不检点,还有——国际天后:我今天能站在这里,多亏了男一号主播:离我远点姐姐@玉耀就连国际运动会官方:恭喜司福清获得第13枚个人金牌,退役之日全网瘫痪。据史书记载,殷帝年少成名,征战四方,平定天下,安玉内是大夏王朝最年轻的皇帝。他完美而强大,胸怀天下,却在27岁时病逝,无子无孙,是无数人心目中的白月光男神。谁也不知道,他再睁眼,一千五百年后来到。这一次,他看到了自己想象中的盛夏。·银凰身份曝光后不久,司浮清得知偶像就在身边。她很佩服她,她只想——司浮清:好好努力,报效大夏!银皇:以身相许司浮清:???我工作很努力,你想要我吗?·全能美人×杀青鬼帝从全网黑到神级巅峰,顺便和男神1v1...简单修改.list{列表样式:无;保证金:0;填充:0;宽度:400px;}.item{位置:相对;填充:10px10px10px34px;游标:指针;counter-increment:num;}.title::before{content:counter(num)'';宽度:25px;行高:30px;文本对齐:居中;颜色:#fff;位置:绝对;字体大小:14px;字体系列:幻想;左:4px;background:center/100%100%url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA8CAMAAAAe9Wm0AAAAbFBMVEUAAACaov2SnPKXnvaXofiyuvuCjPOgqvi4vfiBjPSyuf6Ml/a0u/21vPtte/F/i/WTnfWNmPiyuv6Ik/Zue/GRnPinr/Wfp/Gyuv6Ml/ebo/KTnfOutfqEj/W3vvpue/G/xfd1gvN8iPRodfBFzp+BAAAAF3RSTlMAECA7U2BgdIiTn6Wsvr+/v9Df39/s/o6+GugAAAGPSURBVHjazdZhk4IgEAZgpS6z8iotPEBF8P//x1tJrTxQlrm5uff7MxubLBtF9sQfp+ywjRCJk+zLhPq6SUwuxokhp4/YT1SUVtWam4nSZObImyA2YXHZ022cYsirOzwYoYti7nJzuMOqeHPNvke5jxgP2DRNNqLSMzQQtXjUtv8cBTWiwqOqohcsKikt8ajkHI+4EGjEBWNnNGJ1jUe1Vp9YJLSSeKRkh0eyC0BdEJIBZ5J/h1TA/6SUOgcgjUdaT6gJQA0CjV85jFrq/ZU/UYtA7HFzG5iA1PcOMnbs0b7tU/mcCAhjO/NE52A8jmXKMHYdnukTzE141vhyGWaSTq97ksMQhOnEF8qYFJvXneDO++lU82VznG0giYDppBVzTTvIffdjZSGFVjA2JHeVuRDbopOC6TrJ7GUSx0a1vYGR8u1kQ5krce5hJAUjlRbuRtuyu8GFVopxZ6OtxW5wObU2P3Ewaby+jya6R7UYO+C3xpICbk3NFhptTToaZ6OtzS/WGm39iUdkmdFFv5pvdNPREWjicTcAAAAASUVORK5CYII=);}.title{margin:0;填充:8px0;字体粗细:正常;}.sumary{边距:0;溢出:隐藏;显示:-webkit-box;-webkit-box-orient:垂直;-webkit-line-clamp:2;颜色:#666;字体大小:14px;颜色:20px;高度:0;}.item::before{内容:'';位置:绝对;插图:0;边界半径:8px;不透明度:0;z-指数:-1;background:linear-gradient(270deg,rgb(241,236,249)0%,rgba(241,236,249,0)100%);}效果如现在加在hover上的效果.item:hover.title{color:rebeccapurple;}.item:hover.sumary{高度:40px;}.item.item:hover::before{opacity:1;}效果如下正常的悬停效果,没什么特别的,那么移出后如何保持最终状态呢?再往下看2.保留悬停状态要实现悬停状态,就需要用到这么一个小技巧。比如给一个元素添加悬停样式el:hover{color:red}如果我们给这个元素添加一个延迟el{transition-delay:1s;}那么鼠标进出的时候会有一个延迟那么,我们取消悬停时的延迟el:hover{color:red;transition-delay:0s;}那么鼠标移进去的时候会有快速的响应,移出的时候还是会有延迟。说到这里相信大家都明白了。如果延迟设置的足够大,比如el{transition-delay:9999s;},鼠标移出后,需要9999s才会变化。是原始状态,相当于保留悬停状态。这是原则。接下来,让我们看看实际应用,如下/*defaulttransition*/.item::before,.item.sumary,.item.title{transition:0s9999s;}/*eachitemhover*/.item:hover.title{color:rebeccapurple;过渡:无;}.item:悬停.sumary{高度:40px;过渡:无;}.item.item:悬停::之前{不透明度:1;transition:none;}需要注意的是,既然是transition,所有的state变化都需要支持transition属性。比如这里的隐藏摘要使用的是height:0,而不是display:none,并且选中的背景颜色发生变化。由于background-image不支持transition,所以换成::before,然后单独使用opacity控制一些细节,效果如下,这样鼠标离开后,还是保留之前的状态。但是我们只需要保留最后一个,而不是全部,怎么处理呢?这里需要我们换一种思路。你可以这样做。当鼠标移入整个列表时,所有的状态都会被清空,只保留当前悬停的选项。有点类似于JS中的思路。首先把所有的.current全部去掉,然后给当前项加上.current,如下/*Clearallhover*/.list:hover.title{transition:none;颜色:#333;}.list:hover.sumary{transition:none;高度:0;}.list:hover.item::before{transition:none;opacity:0;}这样就实现了鼠标移出列表后保持上次选中状态的功能,有点像单选框的效果,只不过是hover触发的,并且效果如下。4、选中默认列表中的第一项,下面实现最后一个功能。这相对容易,需要使用:first-child伪类来匹配第一个元素。但需要考虑的是轻重缓急的问题。这是默认状态,权限应该是最低的。其他hover样式应该可以覆盖它,所以可以放在最上面,如下/*initialstate(第一个选中的)*/.item:first-child.sumary{height:40px;}.item:first-child.title{color:rebeccapurple;}.item:first-child::before{opacity:1;}/*Clearallhover*//*Eachhover*/完美实现了文章开头的效果。由于它是由CSS实现的,所以多个列表也是完全可重用的。完整代码可以查看在线demo:CSSkeephover(runjs.work)五、总结以上就是通过纯CSS实现鼠标悬停样式保留的所有技巧。最主要的是transition-delay的灵活运用。下面总结一下利用transition-delay让“恢复”时间足够长的实现原理,从而实现。保持悬停状态的效果。单选效果可以清除鼠标移入整个列表时的所有状态,只保留当前悬停的选项。有点类似于JS中的思路。注意所有属性必须支持transition例如display:none不支持transition,需要换成其他样式。当然,整个实现对CSS和选择器的要求非常高。实际项目过程可能没有JS实现快,但是CSS可以实现为什么要用JS?在我看来,JS应该回归本职工作,专心处理数据逻辑交互,把所有视觉方面的事情交给CSS,但是现在的CSS还不够强大,需要很多tricks来实现,但是现在的CSS改变。一定要够强,比如:有伪类,相信以后CSS会越来越好。最后,如果觉得对你有好处和帮助,欢迎点赞、收藏、转发???欢迎关注我的公众号:前端大侦探