首页IT科技css图片翻转效果(CSS 奇思妙想之酷炫倒影)

css图片翻转效果(CSS 奇思妙想之酷炫倒影)

时间2025-09-18 18:13:40分类IT科技浏览4743
导读:在 CSS 中,倒影是一种比较常见的效果。今天,我们就将尝试,使用 CSS 完成各类不同的倒影效果,话不多说,直接进入主题。...

在 CSS 中                ,倒影是一种比较常见的效果                。今天                     ,我们就将尝试        ,使用 CSS 完成各类不同的倒影效果            ,话不多说                     ,直接进入主题                     。

实现倒影的两种方式

首先            ,快速过一下在 CSS 中        ,实现倒影的 2 种方式        。

使用 -webkit-box-reflect

正常而言                     ,-webkit-box-reflect 是一种非常便捷及快速的实现倒影的方式            。

-webkit-box-reflect 的语法非常简单               ,最基本的用法像是这样:

div { -webkit-box-reflect: below; }

其中    ,below 可以是 below | above | left | right 代表下上左右                      ,也就是有 4 个方向可以选                     。

看这么一个例子:

div { background-image: url(image.png); -webkit-box-reflect: below 2px linear-gradient(transparent, rgba(0, 0, 0, .5)); }

看看效果                  ,有了虚实变化之后,这样就更像是一个倒影            。

简单而言                   ,使用 -webkit-box-reflec 可以做到:

不同方向的投影 投影的距离 投影的虚实                     ,可叠加一层蒙版控制透明度

上面 3 点即是 -webkit-box-reflec 的特点    ,同时                ,也表明了它存在一定的局限性                     ,同时        ,在今天            ,从 -webkit-box-reflec 的名字也能看出来                     ,存在一点兼容性问题        。所以            ,如果        ,我们想实现更负杂一点的倒影效果                     。利用下面一种方式可能更好               。

利用实现多一个反向元素实现

这个方法其实是更为普遍的    。也就是我们实现一个反向的效果即可                      。通常会利用元素的伪元素                  。

代码非常简单                     ,以文字为例子:

<p content="Reflect">Reflect</p> p { position: relative; &::before { content: attr(content); position: absolute; inset: 0; transform: rotatex(180deg) translatey(15px); transform-origin: 50% 100%; } }

就是通过元素的伪元素               ,再旋转 180 度    ,放置到正确合适的位置即可                      ,效果如下:

虽然这个代码多一点                  ,但是由于这是一整个可控制的元素,所以基于它                   ,我们可以实现的效果就能够非常丰富。

实现各式倒影效果

下面                     ,我们就基于上述的 DEMO    ,丰富我们的倒影效果                   。

我们核心要做的                ,就是通过改造伪元素                     ,实现不同的效果        ,得到不一样的倒影                     。

通过 mask            ,控制透明度                     ,控制条纹

我们可以通过 mask            ,有效的控制倒影的透明度:

p::before { mask: linear-gradient(transparent, #000); }

效果如下:

透明度的控制也可以是这种从左往右的:

p::before { mask: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.01) 25%, white, rgba(255, 255, 255, 0.01) 75%, transparent ); }

效果如下:

当然        ,mask 可以有不同的作用                     ,不仅仅是控制透明度               ,也可以实现横线分隔              、竖线分隔                        、斜线分隔:

p::before { mask: repeating-linear-gradient( transparent, transparent 3px, white 3px, white 4px ); }

这个是横线    ,效果如下:

改变 mask 的角度                      ,就可以得到各种不同方向的效果:

p::before { mask: repeating-linear-gradient( 90deg, transparent, transparent 3px, white 3px, white 4px ); }

是的                  ,我们还可以把上述两个不同的 mask 效果叠加在一起,那么就会是这样:

p::before { mask: repeating-linear-gradient( transparent, transparent 3px, white 3px, white 4px ), linear-gradient(transparent 40%, white 90%); }

那么                   ,就会是渐变消失叠加线段分隔的效果:

上面的效果                     ,再叠加上角度控制    ,就是另外一种效果:

p::before { mask: repeating-linear-gradient( 35deg, transparent, transparent 3px, white 3px, white 4px ), linear-gradient(-90deg, transparent, transparent, white); }

效果如下:

配合 transform                ,实现斜体

通过叠加 transform                     ,我们就能很好的让字体有一个适合的倾斜角度        ,像是这样:

p::before { mask: linear-gradient(transparent 20%, rgba(255, 255, 255, .7) 95%); transform: rotatex(180deg) translatey(15px) skew(135deg) translatex(-10px); }

效果如下:

当然            ,控制 mask                     ,能有各式的纹理:

p::before { mask: repeating-linear-gradient(35deg, transparent, transparent 2px, white 2px, white 4px), repeating-linear-gradient(-35deg, transparent, transparent 2px, white 2px, white 4px), linear-gradient(transparent 30%, white 95%); transform: rotatex(180deg) translatey(15px) skew(135deg) translatex(-10px); }

效果如下:

如果把另外一个伪元素也用上呢            ,就能丰富倒影的方向:

p { &::before { mask: linear-gradient(transparent 5%, rgba(255, 255, 255, .9) 95%); transform: rotatex(180deg) translatey(11px) skew(125deg) translatex(-10px); background: #333; color: transparent; background-clip: text; z-index: 1; } &::after { transform: rotatex(180deg) translatey(11px) skew(-125deg) translatex(8px); background: #ddd; color: transparent; background-clip: text; mask: linear-gradient(transparent 5%, rgba(255, 255, 255, .9) 95%); } }

像是这样:

借助滤镜实现虚化

再接着        ,我们可以借助滤镜                     ,继续丰富倒影的效果    。

譬如简单的一层模糊滤镜:

p::before { mask: linear-gradient(transparent 5%, rgba(255, 255, 255, .9) 99%); transform: rotatex(180deg) translatey(6px) skew(135deg) translatex(-8px); filter: blur(8px); }

效果如下:

或者是半截式的               ,模糊倒影:

p::before { transform: rotatex(180deg) translatey(15px); filter: blur(4px); mask: linear-gradient(transparent 30%, white 90%); }

或者是多个滤镜叠加在一起:

p::before { transform: rotatex(180deg) translatey(15px); filter: blur(9px) brightness(1.5); }

效果如下:

上述所有效果的 Demo    ,你可以在这里找到:

CodePen Demo -- Text Reflect Effect Demo

尝试更换字体以及利用 background-clip: text

再接着                      ,我们可以尝试更换不同的字体                。其实                  ,通过 background-clip: text 的特性,给文字染上不同的效果                     。

譬如                   ,我们选择了这样一张图片:

通过 background-clip: text 作用给文字                     ,像是这样:

p { position: relative; font-family: new font, sans-serif; background: url(花里胡哨的图片.jpg); background-clip: text; color: transparent; &::before { content: attr(content); position: absolute; inset: 0; transform: rotatex(180deg) translatey(24px); transform-origin: 50% 100%; background: inherit; background-clip: text; color: transparent; } }

再重复上述的效果一次    ,我们就能得到更为多样的不同的效果                ,下面是整体效果展示图:

完整的代码                     ,你可以戳这里:CodePen Demo -- Text Reflect Effect Demo

最后

当然        ,倒影能做的效果远不止这些            ,感兴趣的读者可以尝试使用更多 CSS 属性                     ,制作更多有意思的倒影效果        。

好了            ,本文到此结束        ,希望本文对你有所帮助 ?

如果还有什么疑问或者建议                     ,可以多多交流               ,原创文章    ,文笔有限                      ,才疏学浅                  ,文中若有不正之处,万望告知            。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
跨境电商 美国站(跨境电商部署在美国服务器的好处有什么) sas教程 数据分析(python中savgol_filter的详细解释)