You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSS实现类似耐克官网的滚动反转叠加效果?

滚动时元素随背景颜色反转的实现方案

针对你观察到的耐克官网按钮和SVG Logo随背景反转的效果,常见的实现方式有以下几种,其中官网大概率用的是第一种:

  • CSS 混合模式(mix-blend-mode)
    这是最简洁且性能最优的方案,无需监听滚动事件,直接通过元素与背景的颜色混合实现反差效果。核心是给目标元素设置mix-blend-mode: difference或exclusion属性:
/* 按钮和SVG容器的样式 */
.header-join-btn, .site-logo {
  mix-blend-mode: difference;
  color: #fff; /* 基础纯色,配合混合模式生效 */
}

对于SVG,需要确保内部图形的填充色为纯色(比如白色),再给SVG容器添加上述属性即可。这种模式会自动让元素颜色与背景色形成互补反差,背景亮时元素暗,背景暗时元素亮,你找不到颜色切换的JS或动态CSS代码很正常——因为它完全靠CSS混合模式实现,没有修改颜色值。

  • 滚动监听 + 类名切换
    如果需要更精准控制颜色,可通过监听滚动事件,判断当前视口内背景区域的明暗,给元素切换预设的颜色类:
// 监听滚动事件
window.addEventListener('scroll', () => {
  const targetElements = document.querySelectorAll('.header-join-btn, .site-logo');
  // 示例:通过获取当前滚动位置对应的背景元素亮度判断明暗
  const currentSection = document.elementFromPoint(window.innerWidth/2, 100);
  const bgColor = getComputedStyle(currentSection).backgroundColor;
  const isDarkBg = /* 转换bgColor为亮度值,判断是否为深色背景 */;
  
  targetElements.forEach(el => {
    el.classList.toggle('text-light', isDarkBg);
    el.classList.toggle('text-dark', !isDarkBg);
  });
});

对应的CSS预设类:

.text-light { color: #fff; }
.text-dark { color: #000; }
  • 滤镜反转(filter: invert())
    针对纯色元素,也可通过filter: invert(1)实现颜色反转,结合滚动监听切换滤镜类:
.color-invert {
  filter: invert(1);
}

这种方式适合简单纯色元素,但如果元素本身有复杂色彩,反转后效果可能不符合预期。

内容的提问来源于stack exchange,提问作者CafeHey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:25:21