效果预览

在线演示

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
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>:

&lt;nav&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Home&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;

居中显示:

html, body {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(to right bottom, gold, chocolate);
}

设置文本样式:

nav ul {
padding: 0;
} nav ul li {
font-size: 40px;
font-family: sans-serif;
list-style-type: none;
background-color: white;
border: 2px solid black;
letter-spacing: 0.1em;
}

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

:root {
--x: 5em;
--y: 1.5em;
} nav ul li {
width: var(--x);
height: var(--y);
line-height: var(--y);
}

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

nav ul li {
position: relative;
} nav ul li::before {
content: '';
position: absolute;
height: var(--y);
width: var(--y);
background-color: black;
border-radius: 50%;
top: 0;
left: calc(-1 * var(--y) / 2);
}

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

nav ul li span {
color: white;
mix-blend-mode: difference;
}

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

nav ul li {
overflow: hidden;
} nav ul li::before {
transition: 0.5s ease-out;
} nav ul li:hover::before {
--r: calc(var(--x) * 1.2);
height: var(--r);
width: var(--r);
top: calc(-1 * var(--r) / 2 + var(--y) / 2);
left: calc(-1 * var(--r) / 2 + var(--x) / 2);
}

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

&lt;nav&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Home&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Products&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Services&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Contact&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;

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

nav ul li {
margin: 0.5em;
}

大功告成!

知识点

原文地址: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. docker Tomcat镜像

    docker中的管理命令 首先需要去下载镜像. [root@CFCA ~]# docker pull tomcat    下载镜像[root@CFCA ~]# docker images       ...

  2. AWS EC2 PV Drivers 驱动升级

    问题 从2019-10-23起,我的AWS实例不断的重启(大概6个小时左右),或者连接不上(远程连接不上并PING不通IP),但控制台显示running. 分析与解决方法 通过查看dump文件,发现是 ...

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

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

  4. C++入门经典-例7.10-运算符的重载,重载加号运算符

    1:曾经介绍过string类型的数据,它是C++标准模版库提供的一个类.string类支持使用加号“+”连接两个string对象.但是使用两个string对象相减确实非法的,其中的原理就是C++所提供 ...

  5. Linux查看和编辑文件

    例如,要想test.txt文件添加内容"I am a boy",test.txt在当前目录中 方法一:vi编辑法 打开终端,输入vi test.txt 回车,按a或i进入编辑模式, ...

  6. For 循环 kotlin(10)

    For 循环 for 循环可以对任何提供迭代器(iterator) 的对象进行遍历,语法如下: for (item in collection) print(item) 循环体可以是一个代码块. fo ...

  7. LC 357. Count Numbers with Unique Digits

    Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...

  8. Oracle 必要的后台进程

    Oracle 必要的后台进程 Table of Contents 1. 简述 2. 必要进程 2.1. 默认启动后台进程 2.2. 哪些进程不能杀 1 简述 oralce 每次大的版本变更,后台进程都 ...

  9. Python 中的type和object详解

    1.python中的类 Python2.x 中的类分为两种,一种是所有继承自object的新式类,另外一种是经典类classobj, 新式类的写法: class A(object): pass 经典类 ...

  10. maven 打jar包和war包

     (       最简单的:修改pom.xml文件:                        <packaging>war</packaging>(如果是jar,则是&l ...