效果预览

在线演示

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/qYMoPo

可交互视频教程

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

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

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

源代码下载

本地下载

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

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

代码解读

定义 dom,用 <nav> 定义导航栏,但 <li> 中要包含一个 <span>:

  1. &lt;nav&gt;
  2. &lt;ul&gt;
  3. &lt;li&gt;&lt;span&gt;Home&lt;/span&gt;&lt;/li&gt;
  4. &lt;/ul&gt;
  5. &lt;/nav&gt;

居中显示:

  1. html, body {
  2. width: 100%;
  3. height: 100%;
  4. display: flex;
  5. align-items: center;
  6. justify-content: center;
  7. background: linear-gradient(to right bottom, gold, chocolate);
  8. }

设置文本样式:

  1. nav ul {
  2. padding: 0;
  3. }
  4. nav ul li {
  5. font-size: 40px;
  6. font-family: sans-serif;
  7. list-style-type: none;
  8. background-color: white;
  9. border: 2px solid black;
  10. letter-spacing: 0.1em;
  11. }

为容器设置宽高,此处定义的变量 x 和 y 后面还会用到:

  1. :root {
  2. --x: 5em;
  3. --y: 1.5em;
  4. }
  5. nav ul li {
  6. width: var(--x);
  7. height: var(--y);
  8. line-height: var(--y);
  9. }

用伪元素画出一个小球,放到菜单项左端:

  1. nav ul li {
  2. position: relative;
  3. }
  4. nav ul li::before {
  5. content: '';
  6. position: absolute;
  7. height: var(--y);
  8. width: var(--y);
  9. background-color: black;
  10. border-radius: 50%;
  11. top: 0;
  12. left: calc(-1 * var(--y) / 2);
  13. }

用 mix-blend-mode 设置色彩混合模式,使小球覆盖的文字反色显示:

  1. nav ul li span {
  2. color: white;
  3. mix-blend-mode: difference;
  4. }

增加动画,使小球从左侧滚到右侧:

  1. nav ul li {
  2. overflow: hidden;
  3. }
  4. nav ul li::before {
  5. transition: 0.5s ease-out;
  6. }
  7. nav ul li:hover::before {
  8. --r: calc(var(--x) * 1.2);
  9. height: var(--r);
  10. width: var(--r);
  11. top: calc(-1 * var(--r) / 2 + var(--y) / 2);
  12. left: calc(-1 * var(--r) / 2 + var(--x) / 2);
  13. }

在 dom 中添加更多的菜单项:

  1. &lt;nav&gt;
  2. &lt;ul&gt;
  3. &lt;li&gt;&lt;span&gt;Home&lt;/span&gt;&lt;/li&gt;
  4. &lt;li&gt;&lt;span&gt;Products&lt;/span&gt;&lt;/li&gt;
  5. &lt;li&gt;&lt;span&gt;Services&lt;/span&gt;&lt;/li&gt;
  6. &lt;li&gt;&lt;span&gt;Contact&lt;/span&gt;&lt;/li&gt;
  7. &lt;/ul&gt;
  8. &lt;/nav&gt;

最后,设置一下菜单项之间的间距:

  1. nav ul li {
  2. margin: 0.5em;
  3. }

大功告成!

知识点

原文地址:https://segmentfault.com/a/1190000014876348

如何用纯 CSS 创作一个菜单反色填充特效的更多相关文章

  1. 前端每日实战:23# 视频演示如何用纯 CSS 创作一个菜单反色填充特效

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/qYMoPo 可交互视频教程 此视频是 ...

  2. 23.1纯 CSS 创作一个菜单反色填充特效

    交互效果地址:https://scrimba.com/c/cEwREJs6 HTML代码: <nav> <ul> <li><span>Home</ ...

  3. 23.纯 CSS 创作一个菜单反色填充特效

    原文地址:https://segmentfault.com/a/1190000014876348 HTML代码: <nav> <ul> <li><span&g ...

  4. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/OZmXQX 可交互视频教程 此视 ...

  5. 如何用纯 CSS 创作一个金属光泽 3D 按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此 ...

  6. 如何用纯 CSS 创作一个容器厚条纹边框特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/YLqbXy 可交互视频教程 此视 ...

  7. 前端每日实战:4# 视频演示如何用纯 CSS 创作一个金属光泽 3D 按钮特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此视频是可以 ...

  8. 前端每日实战:10# 视频演示如何用纯 CSS 创作一个同心圆弧旋转 loader 特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/OZmXQX 可交互视频教程 此视频是可以交 ...

  9. 如何用纯 CSS 创作一个 3D 文字跑马灯特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/GdrrZq 可交互视频教程 此视 ...

随机推荐

  1. Fragment中 监听Android 返回按钮事件

    @Override public void onResume() { super.onResume(); getView().setFocusableInTouchMode(true); getVie ...

  2. vue 项目安装

    安装stylus npm install stylus stylus-loader --save-dev

  3. Idea中使用Maven编码打包时中文乱码的解决办法

    -Dfile.encoding=GBK

  4. redis 持久化 RDB

    https://blog.csdn.net/u010028869/article/details/51792197

  5. Spring Cloud Feign声明式服务调用(转载)+遇到的问题

    转载:原文 总结: 1.pom添加依赖 2.application中填写正确的eureka配置 3.启动项中增加注解 @EnableFeignClients 4.填写正确的调用接口 通过原文使用Fei ...

  6. Why are C# structs immutable?

    Compiler Error CS1612 Cannot modify the return value of 'expression' because it is not a variable cl ...

  7. 一、基础篇--1.2Java集合-HashMap和ConcurrentHashMap的区别【转】

    http://www.importnew.com/28263.html 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了多少时间的,不 ...

  8. ActivityLifecycleCallbacks

    public class ActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks, ActivityS ...

  9. Django之模型的高级用法

    from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) a ...

  10. centOS 开启端口

    生产环境禁止关闭防火墙,只能开端口 [root@BetaD home]# firewall-cmd --add-port=/tcp --permanent [root@BetaD home]# fir ...