有哪些用CSS实现的功能比JS效率高
Admin 2022-11-11 群英技术资讯 550 次浏览
凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写。——Atwood定律
虽然万物都可以是JavaScript,但某种程度css的运行效率会比JavaScript高,所以笔者认为:能用CSS实现的就不用麻烦JavaScript。
两种语言都有不同的用途随着浏览器版本特性和属性的增加,CSS正成为一种功能强大的语言,能够处理我们以前依赖JavaScript实现的功能。
曾经有一段时间,我们不得不依靠JavaScript的window.scrollY
来实现来执行此操作,如果想平滑滚动还要依赖定时器增加一个动画。随着scroll-behavior
属性的新增,我们可以使用一行CSS代码来处理网站上的平滑滚动!浏览器支持约为75%,兼容性还是挺不错的。
html { scroll-behavior: smooth; }
屏幕录制2021-07-18 上午10.14.21.gif
完整代码[1]
幻灯片、图片库这些也是前端高频使用功能,上一代CSS能力有限,我们不得不依赖JavaScript来完成这功能。现在只要几行代码就可以实现此功能。从某种意义上说,它与Flexbox或CSS Grid
的工作原理类似,即您需要一个容器元素,在该容器元素上设置scrolln-snap-type
和多个为其设置了scroll-snap-align
的子元素,如下所示:
<main class=”parent”> <section class=”child”></section> <section class=”child”></section> <section class=”child”></section> </main>
.parent { scroll-snap-type: x mandatory; } .child { scroll-snap-align: start; }
屏幕录制2021-07-17 下午10.23.04.gif
完整代码[2]
曾经某个时期,大多数开发者使用 JavaScript(或者jQuery) 给浏览器中的元素添加动画。让这个淡化,让那个扩大,很简单。随着互动的项目越来越复杂,移动设备的大量增加,表现性能变得越来越重要。Flash 被抛弃,有天赋的动画开发者使用 HTML5 去实现过去从未实现的效果。他们需要更好的工具去开发复杂的动画序列并获得最好的性能。JavaScript(或者jQuery) 并不能够做到。浏览器日渐成熟的同时也开始提供了一些解决方案。最被广泛接受的方案是使用 CSS 动画。
屏幕录制2021-07-17 下午10.38.14.gif
完整代码[3]
html5 丰富了表单元素,提供了类似 required , email , tel 等表单元素属性。同样的,我们可以利用 :valid 和 :invalid 来做针对html5表单属性的校验。
:required 伪类指定具有required 属性的表单元素 :valid 伪类指定一个通过匹配正确的所要求的表单元素 :invalid 伪类指定一个不匹配指定要求的表单元素屏幕录制2021-07-18 上午9.15.50.gif
想必大家都想到了伪元素 after ,但是文字怎么获得呢,又不能用 JavaScript 。
CSS 的伪元素是个很強大的东西,我们可以利用他做很多运用,通常为了做一些效果, content:" " 多半会留空,但其实可以在里面写上 attr 抓资料哦!
<div data-msg="这里是获取content的内容"> hover </div>
div{ width:100px; border:1px solid red; position:relative; } div:hover:after{ content:attr(data-msg); position:absolute; font-size: 12px; width:200%; line-height:30px; text-align:center; left:0; top:25px; border:1px solid green; }
屏幕录制2021-07-18 上午9.42.38.gif
鼠标悬浮的场景十分常见,例如导航的菜单:
image.png
一般要把隐藏的东西如菜单作为hover目标的子元素或者相邻元素,才方便用css控制,例如上面的菜单,是把menu当作导航的一个相邻元素:
<!--menu为相邻的li--> <li class="user">用户</li> <li class="menu"> <ul> <li>账户设置</li> <li>登出</li> </ul> </li>
menu在正常态下是隐藏的:
.menu{ display: none; }
而当导航hover时显示:
/*使用相邻选择器和hover*/ .user:hover + .menu{ display: list-item; }
注意这里使用了一个相邻选择器,这也是上面说的为什么要写成相邻的元素。menu的位置可以用absolute定位。
同时menu自已本身hover的时候也要显示,否则鼠标一离开导航的时候,菜单就消失了:
.menu:hover{ display: list-item; }
这里会有一个小问题,即menu和导航需要挨着一起,否则中间有空隙的话,上面添加的菜单hover就不能发挥作用了,但是实际情况下从美观的角度,两者是要有点距离的。这个其实也好解决,只要在menu上面再画一个透明的区域就好了,如下蓝色的方块:
可以用before/after伪类用absoute定位实现:
ul.menu:before{ content: ""; position: absolute; left: 0; top: -20px; width: 100%; height: 20px; /*background-color: rgba(0,0,0,0.2);*/ }
如果我既写了css的hover,又监听了mouse事件,用mouse控制显示隐藏,双重效果会有什么情况发生,如果按正常套路,在mouse事件里面hover的时候,添加了一个display: block的style,会覆盖掉CSS的设置。也就是说,只要hover一次,css的代码就不管用了,因为内联样式的优先级会高于外链的。但是实际情况下会有意外发生,那就是在移动端iphone上面,触摸会触发CSS的hover,并且这个的触发会很高概率地先于touchstart事件,在这个事件里面会判断当前是显示还是隐藏的状态,由于css的hover发挥了作用,所以判断为显示,然后又把它隐藏了。也就是说,点一次不出来,要点两次。所以最好别两个同时写。第二种场景,使用子元素,这个更简单。把hover的目标和隐藏的对象当作同一个父容器的子元素,然后hover写在这个父容器上面就可以了,不用像上面那样,隐藏元素也要写个hover:
.marker-container .detail-info{ display: none }
.marker-container:hover .detail-info{ display: block }
这里展示也只是一些常用的功能,其实还有很多可以通过CSS实现的功能,有兴趣的同学继续研究一下更多不依赖JavaScript完成的CSS功能。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文主要给大家分享CSS中常用文本和字体样式及用法,小编觉得比较使用,对新手学习CSS也有一定的帮助,因此分享给大家做个参考,感兴趣的朋友接下来跟随小编一起来学习一下吧。
移动端动画用什么实现好?一些站长在做移动端网站时,想要做动画的效果,而制作动画效果的方法有css,jquery,canvas,那么究竟选择哪个实现好呢?另外,对于css3在移动端出现卡顿问题,我们又该如何解决?
很多人在做网站页面设计的时候,经常会用一张图片来做背景,这时我们就需要考虑网页兼容各种屏幕大小,背景图片要能够按比例缩放来自适应屏幕的宽度。那么这个效果是如何实现的呢?下面是具体的实现代码,感兴趣的朋友一起来学习一下吧。
页面上有一段文本,能否实现这段文本在不同背景色下展示不同的颜色?也就是俗称的智能变色。在 CSS 中,利用混合模式 mix-blend-mode: difference,让文字智能适配背景颜色。下面详细介绍一下,希望对大家有所帮助!
CSS悬停缩放的效果怎样实现?CSS悬停缩放的效果就是当鼠标悬停在图片上方的时候,图片会放大展示,当鼠标离开图片上方时,图片缩小。这样的效果还是比较常见的,例如一下图片网站,电商网站等等都会使用到。接下来我们就来看看这一效果是怎样做的,下文有实现效果及代码,需要的朋友可以参考。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008