如何用纯 CSS 创作一个菜单反色填充特效

简介: 效果预览在线演示按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。https://codepen.io/comehope/pen/qYMoPo可交互视频教程此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

img_3a104f2fadb0a0ce45e6bdc461531325.png

效果预览

在线演示

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

相关文章
|
1月前
|
前端开发
CSS padding(填充)
CSS padding(填充)。
21 1
|
6月前
|
前端开发
HTML+CSS实现菜单的3D翻转特效
HTML+CSS实现菜单的3D翻转特效
|
8月前
|
移动开发 前端开发 JavaScript
SAP UI5 index.html 根节点的 css 类填充逻辑
SAP UI5 index.html 根节点的 css 类填充逻辑
|
JavaScript 前端开发
CSS进阶向--配合Vue动态样式实现“超炫酷”圆环菜单
CSS进阶向--配合Vue动态样式实现“超炫酷”圆环菜单
673 2
CSS进阶向--配合Vue动态样式实现“超炫酷”圆环菜单
|
前端开发
CSS 等距菜单悬停效果
纯HTML和CSS实现立体等距菜单悬停,动态效果由CSS实现
CSS 等距菜单悬停效果
|
前端开发
CSS特效集锦(9款 , 总有一款是你喜欢的)
主要是: 穿越时空特效, 图片放大镜, 3D相册, 立方体相册, 昼夜更替特效, 飘雪, 七彩雨, 签名生成器, 水波纹动画等
CSS特效集锦(9款 , 总有一款是你喜欢的)
|
前端开发
HTML+CSS+JS实现卡通人物C罗ui特效
2022年卡塔尔世界杯(英语:FIFA World Cup Qatar 2022)是第二十二届世界杯足球赛,是历史上首次在卡塔尔和中东国家境内举行、也是第二次在亚洲举行的世界杯足球赛。除此之外,卡塔尔世界杯还是首次在北半球冬季举行、首次由从未进过世界杯决赛圈的国家举办的世界杯足球赛
HTML+CSS+JS实现卡通人物C罗ui特效
|
前端开发 JavaScript
CSS实现背景跟随滑动的按钮菜单效果
通过transition过渡属性,可以将相关css属性的变化,改为一个持续一段时间的连续过程,而不是使css样式的改变立即生效,其过程按照指定的曲线速率变化......
485 0
CSS实现背景跟随滑动的按钮菜单效果
CSS 05 transition特效
transition-property 过渡属性,默认值为all transition-duration 过渡持续时间,默认时间为0s transition-timing-function 过渡函数,默认ease函数,还有ease-out(先快后慢)、ease-in(先慢后快)、linear(匀速)等等函数 transition-delay 过渡延迟时间,默认0s <div class="ceng"> </div> .ceng{ width:100px; height:100px; background-color:pink; cursor:point