当前位置: 首页 > 科技观察

凉爽的!使用-webkit-box-reflect实现各种动态效果

时间:2023-03-16 14:38:29 科技观察

今天的文章很有意思。一行简单的代码就可以大大提高CSS动态效果的水平。正文从这里开始~在很久以前的一篇文章中,讲到了属性-webkit-box-reflect--从反射开始,讲CSS继承[1]`-webkit-box-reflect`[2]是一个非常有趣的属性,它使CSS能够像一面镜子一样工作,反映我们的元素最初绘制的内容。上次写的时候,它的兼容性还是非常非常惨淡的,但是今天,虽然还是一个Non-standardgrammar,但是兼容性已经大大提高了,我们可以用它来实现很多有趣的效果。截至2021-02-19,其兼容性已达到91.02%。看一下CANIUSE-webkit-box-reflect[3]:-webkit-box-reflect基本用法-webkit-box-reflect的语法很简单,最基本的用法是这样的:div{-webkit-box-reflect:below;}其中,below可以是below|以上|左|right表示bottom,top,left,right,即有4个方向可以选择。假设我们有如下图片:

div{background-image:url('https://images.pokemontcg.io/xy2/12_hires.png');}加上-webkit-box-reflect:对,也就是右侧的倒影:div{background-image:url('https://images.pokemontcg.io/xy2/12_hires.png');-webkit-box-reflect:right;}效果如下,在元素右侧生成一个镜像元素:设置方向后面的反射距离,也可以接一个具体的值来表示反射与原元素的距离。div{background-image:url('https://images.pokemontcg.io/xy2/12_hires.png');-webkit-box-reflect:right10px;}添加10px后,反射与原元素的距离willbe10px:设置倒影的虚实还有一个很重要的作用,就是在orientation之后,还可以设置一个渐变值。利用这个渐变值,可以实现倒影的虚化效果,这一点很重要。div{background-image:url('https://images.pokemontcg.io/xy2/12_hires.png');-webkit-box-reflect:below2pxlinear-gradient(透明,r??gba(0,0,0,.5)));}看效果,虚实转换后,更像倒影了。其实这里的渐变就是给倒影的图片加上一个MASK属性,MASK属性的透明部分会让图片变透明。对于纯色部分,保留原始图像。关于CSSMASK属性,如果你还有疑问,建议你看看这篇文章:WonderfulCSSMASK[4]CodePenDemo---webkit-box-reflectDemo[5]Using-webkit-box-reflect实现一些有趣的掌握了基本语法后,我们就可以用它来实现一些有趣的动画效果了,下面简单罗列一下。我发现这个属性特别适合用在一些深色风格的页面中。可以让很多动态效果看起来高大上很多。(个人审美)在按钮中使用-webkit-box-reflect加上一些动态边框动画按钮可以营造出非常科幻的效果:有兴趣的可以自己戳源码了解一下:CodePendemo-webkit-box-reflectNeonButtonHoverEffect[6]在文中使用了-webkit-box-reflect。在暗黑系列的标题文字中,使用-webkit-box-reflect,瞬间高大上。CodePendemo-Font&-webkit-box-reflect[7]在3D中使用-webkit-box-reflect呵呵,接下来,我们甚至可以在3D效果中使用-webkit-box-reflect,完全不同的观感体验。给3D照片墙加个倒影效果吧:CodePendemo-3DView&-webkit-box-reflect[8]使用-webkit-box-reflect制作艺术图案有趣的CSS艺术,又来了。在袁川先生的这篇文章--ChineseWindowLatticeAndCSS[9]中,介绍了使用-webkit-box-reflect生成剪纸艺术的思路。由于-webkit-box-reflect可以产生反射,我们用它来不断嵌套娃娃,层层叠叠,所以我们只需要生成一个基本元素,我们就可以利用反射来产生各种效果。假设,我们有以下结构:
我们只需要为.g-wrap4实现一个图形,例如:.g-wrap4{background:radial-gradient(circleat00,#00030%,transparent30%,transparent40%,#00040%,#00050%,transparent50%),radial-gradient(circleat100%100%,#00010%,transparent10%,transparent30%,#00030%,#00040%,transparent40%);}则为4层套娃,先给.g-wrap4加一层反射-webkit-box-reflect:.g-wrap4{-webkit-box-reflect:right0px;}得到:继续套娃,给.g-加一层反射wrap3-webkit-box-reflect:.g-wrap4{-webkit-box-reflect:right0px;}.g-wrap3{-webkit-box-reflect:below0px;}继续,给.g-wrap2加一层反射-webkit-box-reflect:.g-wrap4{-webkit-box-reflect:right0px;}.g-wrap3{-webkit-box-reflect:below0px;}.g-wrap2{-webkit-box-reflect:left0px;}最后,在.g-wrap1-webkit-box-reflect:.g-wrap中添加一层反射4{-webkit-box-reflect:right0px;}.g-wrap3{-webkit-box-reflect:below0px;}.g-wrap2{-webkit-box-reflect:left0px;}.g-wrap1{-webkit-box-reflect:above0px;}可以得到一个经过4层反射得到的图形:这样我们就可以通过不同的基础图形来发挥我们的想象力了,你可以生成各种剪纸对称图形:完整代码可以点击这里:CodePenDemo--webkit-box-reflectartist[10]最后,本文到此结束,希望对你有所帮助:),本文介绍了webkit-box-reflect的一些有趣的用法,在商业上可能不太实用,但是很有趣参考资料[1]从倒影说起,谈CSS继承继承:https://github.com/chokcoco/iCSS/issues/49[2]-webkit-box-reflect:https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-box-reflect[3]CANIUSE-webkit-box-reflect:https://caniuse.com/?search=-webkit-box-reflect[4]奇妙的CSSMASK:https://github.com/chokcoco/iCSS/issues/80[5]CodePen演示---webkit-box-reflect演示:http://codepen.io/Chokcoco/pen/ORbvxJ[6]CodePendemo-webkit-box-reflectNeonButtonHoverEffect:https://codepen.io/Chokcoco/pen/BaQzBEG[7]CodePendemo-Font&-webkit-box-reflect:https://codepen.io/Chokcoco/pen/xxREaLz[8]CodePendemo-3DView&-webkit-box-reflect:https://codepen.io/Chokcoco/pen/ZEBpjVO[9]ChineseWindowLatticeAndCSS:https://yuanchuan.dev/2019/05/15/window-lattice-and-css.html[10]CodePenDemo---webkit-box-reflectartist:https://codepen.io/Chokcoco/pen/vYyyYQj