Web技巧(08)
前段时间看到群里有不少同学在讨论,目前阶段哪些交互行为可以直接使用CSS来实现,而不再依赖JavaScript。后来想想,这应该也是一个值得我们探讨的话题,后来一想,要不这一期我们就来聊聊,哪些交互行为,可以不再依赖JavaScript,直接使用CSS来实现。
CSS Slider
Slider效果在Web中是非常常见的一种效果,像Swiper这样的库是一个非常优秀的库,用于实现Slider效果最好不过了。如果我们抛开JavaScript使用纯CSS也可以实现一些简单的Slider效果,不同的是要实现自动播放会有一定的难度。
通过<a>
链接的锚点来实现。除此之外,还可以配合input[type="radio"]
、CSS的:target
选择器。
如果我们想要实现一个自动播放的效果,需要配合CSS的animation
相关的特性一起来实现,比如下面这个示例:
如果不是自播放的Slider,CSS实现方案有很多种,对于自动播放的,那么就需要具备animation
和Web动画相关的知识。随着滚动特性和滚动捕捉特性越来越完善,对于CSS实现Slider的效果会越来越完美。
有关于CSS实现的Slider效果更多案例,可以点击这里查阅。
CSS Accordion
使用CSS实现手风琴的效果和实现Slider的效果类似,可以通过[input type="radio"]
、:target
、:hover
等方法来实现。比如下面这个效果:
如果你不想太纠结或者说徒手撸一个手风琴效果的话,也可以尝试着使用在线的生成工具,比如CSS Accordion Slider就蛮不错的:
实现Accordion的效果除了CSS之外,还有一个更优秀的方案,那就是采用HTML5的<details>
和<summary>
标签,比如下面这个案例:
有关于<details>
和<summary>
更详细的介绍可以阅读《借助HTML5 details,summary无JS实现各种交互效果》一文。另外,这两个标签结合在一起还可以实现一些其他的交互效果。
CSS Modal
模态弹出框也可以使用:target
或借助radio
或checkbox
的checked
来完成:
同时还可以借助animation.css
中提供的animation
效果,让Modal的出现和隐藏带有一些动效。比如像Light Modal提供的效果。
有关于CSS实现Modal的更多效果可以点击这里查阅。
CSS Tabs
原理是一样的,:target
、checked
配合~
一起。有关于CSS实现Tabs更多的案例可以点击这里。
CSS Tooltips
提示框通常是借助CSS状态选择器中的:hover
或:focus
来实现,也是非常常见的一个效果:
如果要实现点击显示或隐藏提示框,那还得借助checkbox
或radio
的checked
来完成。除此之外还可以使用:focus-within
来实现提示框的效果。
有关于Tooltip更多的效果可以点击这里查阅。
CSS Dropdown Menu
下拉菜单,采用:hover
实现下拉菜单已是很经典的技术了,比如下面这个效果:
现如今可以使用:focus-within
实现Off-screen导航菜单的效果:
前面提到使用<details>
和<summary>
来实现手风琴的效果,其实使用这两个标签也可以很好的实现下拉菜单的效果。
有关于下拉菜单更案例可以点击这里查阅。
CSS Range Slider
在上一期中的末尾提到了HTML5的<meter>
、<progress>
实现进度条的效果:
对于滑块的效果,可以直接使用<input type="range" />
来实现:
@Ana Tudor在她的《A Sliding Nightmare: Understanding the Range Input》一文中详细介绍了如何使用<input type="range">
,有兴趣的同学可以看看。
我们也可以使用CSS的mask
相关的特性,让Progress的效果更美:
有关于滑块更多的效果可以点击这里查阅。
CSS Star Rating
评分系统,也可以使用CSS来完成,不过需要配合input
的checked
一直处理:
有关于评分系统更多的案例可以点击这里查阅。
CSS Scrollbar
在Webkit内核下,可以借助Scrollbar相关的伪元素选择器实现自定义滚动条效果:
小结
文章中提到的这些效果,在以往较多情形之下,或者说一定得依赖JavaScript一起才能完成。随着CSS特性越来越强大,以前很多常见的Web效果(交互效果)就可以使用纯CSS来完成。上面是我能想到的一些常见效果,效果中常用到的是:target
、:focus-within
,input
的checked
和~
(或+
)选择器来完成。虽然CSS能实现这些效果,但对于HTML的结构有较强的要求,如果结果没有写好,要实现这些相应的交互效果就较为困难。另外,HTML5的一些新标签也能很好的帮助我们实现一些效果,比如使用<details>
实现手风琴,下拉菜单等效果,使用type="range"
、progress
、meter
可以实现一些进度条和滑块的效果。
如果您在这方面有相应的经验,欢迎在下面的评论中与我们一起分享。