HTML+CSS实现菜单的3D翻转特效
效果图如下:
HTML部分源代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>翻转特效</title> <link rel="stylesheet" href="style.css"> </head> <body> <nav> <div class="item"> <a href="#"> <p class="cn">首页</p> <p class="en">INDEX</p> </a> </div> <div class="item"> <a href="#"> <p class="cn">博客</p> <p class="en">BLOG</p> </a> </div> <div class="item"> <a href="#"> <p class="cn">关于</p> <p class="en">ABOUT</p> </a> </div> </nav> </body> </html>
CSS部分源代码如下:
:root { --background-color: #2c3e50; --color1: #7591AD; --color2: #9729ad; --color3: #db2159; } * { margin: 0; padding: 0; } html { font-size: 14px; } body { width: 100vw; height: 100vh; background-color: var(--background-color); display: flex; justify-content: center; align-items: center; } nav { width: 680px; background-color: var(--color1); } .item { width: 200px; height: 100px; margin: 10px; float: left; perspective: 4000px; } .item a { display: block; height: 100px; text-decoration: none; color: #fff; font-size: 1.5em; /* 开启3d */ transform-style: preserve-3d; /* 通过变换角度可以发现刚才的夹角好像一个打开的笔记本电脑 */ /* transform: rotateX(10deg) rotateY(10deg) translateZ(50px); */ /* 增加z轴上的位移主要是为了让hover旋转式沿着夹角形成的 */ /* 虚拟立方体中心轴旋转而不是当前cn元素的这一面的中心 */ transform: translateZ(50px); transition: 0.5s; } .item a p { height: 100px; line-height: 100px; text-align: center; } .item a p.cn { background-color: var(--color2); } .item a p.en { background-color: var(--color3); /* en元素沿顶端x轴逆向旋转90度 形成于cn元素垂直的夹角,类似于形成一个缺两面的正方体 */ transform: rotateX(-90deg); transform-origin: top; } .item a:hover{ /* 当鼠标移动到a元素时旋转,沿X轴旋转顺时针90度 */ /* 因为当前旋转基点在夹角形成的虚拟正方体的中心,所有看起来就像旋转 立方体的两个面一样 */ /* 出现偏移问题是因为顺序原因,具体的后续查了下文档发现,变换动作的 顺序会影响最终呈现的效果 */ transform: rotateX(90deg) translateZ(50px) ; }