如何用纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/XqYroe
可交互视频教程
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/c7EbPuW
源代码下载
请从 github 下载。
https://github.com/comehope/front-end-daily-challenges/tree/master/019-split-text-menu-effects
代码解读
定义 dom,一个列表中包含一个列表项,列表项有一个 data-text 属性:
<ul class="menu">
<li data-text="New Game">New Game</li>
</ul>
居中显示:
html,
body {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-color: black;
}
设置文本样式:
.menu {
padding: 0;
}
.menu li {
list-style-type: none;
color: white;
font-size: 3em;
font-weight: bold;
text-transform: uppercase;
text-align: center;
line-height: 1em;
width: 7em;
}
画出文字的分割线:
.menu li {
border-top: 1px solid yellow;
}
隐藏文本:
.menu li {
color: transparent;
}
用伪元素增加文本:
.menu li {
position: relative;
}
.menu li::before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
width: 100%;
color: silver;
}
把伪元素文本向上移,竖跨分割线:
.menu li::before,
.menu li::after {
top: -0.5em;
}
用遮罩切出分割线上下二部分的文本:
.menu li::before {
clip-path: polygon(0 0, 100% 0, 100% 50%, 0 50%);
}
.menu li::after {
clip-path: polygon(0 50%, 100% 50%, 100% 100%, 0 100%);
}
dom 中再增加几个菜单项:
<ul class="menu">
<li data-text="New Game">New Game</li>
<li data-text="Load Game">Load Game</li>
<li data-text="Options">Options</li>
<li data-text="Exit">Exit</li>
</ul>
.menu li {
margin: 0.5em;
}
为分割线增加动画效果:
.menu li {
border-top: 1px solid transparent;
transition: 0.3s;
}
.menu li:hover {
border-top: 1px solid yellow;
}
为文字增加动画效果:
.menu li::before,
.menu li::after {
transition: 0.3s ease-out;
}
.menu li:hover::before,
.menu li:hover::after {
color: yellow;
transition: left 0.3s ease-out;
transition-delay: 0.2s;
}
.menu li:nth-child(odd):hover::before,
.menu li:nth-child(even):hover::after {
left: -0.15em;
}
.menu li:nth-child(even):hover::before,
.menu li:nth-child(odd):hover::after {
left: 0.15em;
}
大功告成!
知识点
- border-top https://developer.mozilla.org/en-US/docs/Web/CSS/border-top
- content https://developer.mozilla.org/en-US/docs/Web/CSS/content
- attr https://developer.mozilla.org/en-US/docs/Web/CSS/attr
- clip-path https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path
- transition-delay https://developer.mozilla.org/en-US/docs/Web/CSS/transition-delay
- nth-child() https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child#Syntax
原文地址:https://segmentfault.com/a/1190000014836748
如何用纯 CSS 创作一种有削铁如泥感觉的菜单导航特效的更多相关文章
- 前端每日实战:19# 视频演示如何用纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/XqYroe 可交互视频教程 此视频 ...
- 19.纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
原文地址:https://segmentfault.com/a/1190000014836748 感想: 把原元素隐藏,利用伪元素::before 和 ::after 各取上下一半 clip-path ...
- 如何用纯 CSS 创作一种侧立图书的特效
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/deVgRM 可交互视频教程 此视 ...
- 如何用纯 CSS 创作一种文字断开的交互特效
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/LmjNgL 可交互视频教程 此视 ...
- 如何用纯 CSS 创作一种按钮被瞄准的交互特效
效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. 在线演示 https://codepen.io/zhang-ou/pen/ELWMLr 可交互视频教程 此视 ...
- 前端每日实战:12# 视频演示如何用纯 CSS 创作一种文字断开的交互特效
效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/LmjNgL 可交互视频教程 此视频是可以交 ...
- 前端每日实战:14# 视频演示如何用纯 CSS 创作一种侧立图书的特效
效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/deVgRM 可交互视频教程 此视频是可以交 ...
- 14.纯 CSS 创作一种侧立图书的特效
原文地址:https://segmentfault.com/a/1190000014751037 HTML代码: <div class="books"> <div ...
- 12纯 CSS 创作一种文字断开的交互特效
原文地址:https://segmentfault.com/a/1190000014719591 总结:三部分组成,原文透明,左右都与原文重叠(绝对定位),但左右各取相应一部分. HTML代码: &l ...
随机推荐
- 分布式集群环境下,如何实现session共享四(部署项目测试)
这是分布式集群环境下,如何实现session共享系列的第四篇.在上一篇:分布式集群环境下,如何实现session共享三(环境搭建)中,已经准备好了相关的环境:tomcat.nginx.redis.本篇 ...
- c++关键字explicit
关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都 ...
- ssh密钥的分发之一:ssh-copy-id
ssh密钥的分发 我们在使用客户端账号对主机记性管理的时候,可以分为以下两种情况: .第一种情况,直接使用root账号: 优点:使用root账号密钥分发简单,指令执行简单 缺点:不安全 .第二种情况, ...
- 目标&计划
目标 感觉起来NOIP还是能考到一个比较好的分数的吧 550+? 现在可能还不大行,但是过3个月或许还是能考到的 所以先订下NOIP保底500争取550+吧 至于省选... 前面有一群巨佬挡着,感觉想 ...
- “玲珑杯”ACM比赛 Round #5 H -- Variance 简单树状数组
可以把每个公式都化简,然后得到要维护的东西就是平方和,和前缀和,两个bit即可 不能cin,超时.IOS后都不行. scanf用lld #include <cstdio> #include ...
- 前端打印console
很多时候,我们都想知道,是否已经选中或得到数据时,我们可以利用console 打印出来.console有几种方式使用.具体有: console.log($scope.getParkId); conso ...
- android开发学习 ------- 【转】Genymotion 小白安装
参考 https://www.cnblogs.com/whycxb/p/6850454.html 很详细,全面
- 代码审查的艺术:Dropbox 的故事
Dropbox 的 iOS 应用中的每一行代码,都是开始于被添加到 Maniphest 中的一个 bug 或者功能任务,Maniphest 是我们的任务管理系统.当一位工程师在上面接受一个任务,那么在 ...
- 【转】数据库CRUD操作
数据库CRUD操作 一.删除表 drop table 表名称 二.修改表 alter table 表名称 add 列名 数据类型 (add表示添加一列) alter table 表名 ...
- js dom node.children与node.childNodes区别
不同点:node.children不会取到节点下面的TextNode但是node.childNodes会取到 共同点:两者都是集合类数组,可以通过索引的方式取到值也可以用for循环遍历