效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/qJEdKb

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cEJRKud

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器是一个无序列表,包含 4 个元素,代表 4 个按钮:

<ul>
<li>home</li>
<li>products</li>
<li>services</li>
<li>contact</li>
</ul>

居中显示:

body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: cornsilk;
}

去掉列表项前面的符号:

ul {
padding: 0;
list-style-type: none;
}

设置按钮的边框和背景的样式,背景采用渐变色,但渐变的方向依次交替:

ul li {
box-sizing: border-box;
width: 15em;
height: 3em;
font-size: 20px;
border-radius: 0.5em;
margin: 0.5em;
box-shadow: 0 0 1em rgba(0,0,0,0.2);
} ul li:nth-child(odd) {
background: linear-gradient(to right, orange, tomato);
} ul li:nth-child(even) {
background: linear-gradient(to left, orange, tomato);
}

设置按钮上文字的样式,依次交替居左或居右:

ul li {
color: white;
font-family: sans-serif;
text-transform: capitalize;
line-height: 3em;
} ul li:nth-child(odd) {
text-align: left;
padding-left: 10%;
} ul li:nth-child(even) {
text-align: right;
padding-right: 10%;
}

设置按钮的透视效果,依次交替向左旋转和向右旋转,此时透视的距离是 500px,注意 perspective() 函数和 rotateY() 函数的顺序不能写反:

ul li:nth-child(odd) {
transform: perspective(500px) rotateY(45deg);
} ul li:nth-child(even) {
transform: perspective(500px) rotateY(-45deg);
}

为按钮增加悬停效果,使悬停时的透视距离变短为 200px,透视距离越短,旋转的幅度看起来就越大:

ul li:nth-child(odd):hover {
transform: perspective(200px) rotateY(45deg);
padding-left: 5%;
} ul li:nth-child(even):hover {
transform: perspective(200px) rotateY(-45deg);
padding-right: 5%;
}

最后,设置一个缓动时间,使效果转换变得平滑:

ul li {
transition: 0.3s;
cursor: pointer;
}

大功告成!

最新文章

  1. 破解 Windows 下Markdown 编辑器 MarkdownPad 2
  2. CMD安装/删除服务
  3. ChannelPipeline
  4. ubuntu 14.04安装右键打开终端功能
  5. 基于VC的ACM音频编程接口压缩Wave音频(一)
  6. Linux: Set OR Change The Library Path
  7. 安卓模拟器安装apk,上网
  8. AlphaBlend參数BLENDFUNCTION
  9. linux的学习系列 6---打印文件和发送邮件
  10. move_uploaded_file的failed to open stream错误处理
  11. PHP算法学习(7) 双向链表 实现栈
  12. Docker Registry私有仓库搭建
  13. jquery tmpl生成导航
  14. csrfguard3.1 部署笔记
  15. 160A
  16. js 常用代码片段
  17. JSONP和HttpClient的区别
  18. facebook api之Marketing API
  19. Hexo重装小结
  20. PostgreSQL 之 yum安装 postgis 插件

热门文章

  1. 37)PHP,获取数据库数据并在html中显示(晋级4)
  2. 吴裕雄--天生自然C语言开发:强制类型转换
  3. python语法基础-网络编程-TCP协议和UDP协议
  4. iOS仿抖音节拍界面、Swift,MVVM架构完整项目、日历demo、滚动切换分类等源码
  5. P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles
  6. MOOC(13) - 连接数据库
  7. centos jdk
  8. 如何消除img间的默认间隙
  9. python3多线程应用详解(第一卷:线程的本质概念)
  10. 实现api开发实例页面