如何在mix-blend-mode:multiply下让固定菜单文字始终为白色
解决方法
核心思路是把导航栏的背景层和文字层分离,只让背景层应用mix-blend-mode: multiply,文字层不受混合模式影响,以此保证文字始终显示白色。
修改后的完整代码如下:
body {margin:0;} .navbar { overflow: hidden; position: fixed; top: 0; width: 100%; /* 移除原背景色与混合模式,设为透明 */ background-color: transparent; z-index: 1; } /* 用伪元素单独承载背景与混合模式 */ .navbar::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #0071BC; mix-blend-mode: multiply; z-index: -1; /* 将背景层置于文字下方 */ } .navbar a { float: left; display: block; color: white; text-align: center; padding: 14px 16px; text-decoration: none; font-size: 17px; position: relative; /* 确保文字层级高于背景层 */ } .navbar a:hover { background: #ddd; color: black; } .main { padding: 16px; margin-top: 48px; height: 1500px; /* 用于示例滚动效果 */ background: green; }
<html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <div class="navbar"> <a href="#home">Home</a> <a href="#news">News</a> <a href="#contact">Contact</a> </div> <div class="main"> <h1>Fixed Top Menu</h1> <h2>Scroll this page to see the effect</h2> <h2>The navigation bar will stay at the top of the page while scrolling</h2> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> <p>Some text some text some text some text..</p> </div> </body> </html>
关键修改说明:
- 移除
.navbar本身的背景色和混合模式,设置背景为透明,避免文字直接参与混合 - 通过
::before伪元素创建独立的背景层,赋予原背景色和mix-blend-mode: multiply,并通过z-index: -1将其置于文字下方 - 给
.navbar a添加position: relative,确保文字层级高于伪背景层,不会被遮挡 - 保留原有的hover交互效果不变
修改后,导航栏背景依然会与下方内容应用multiply混合模式,而文字因脱离混合层级,始终保持白色显示。
内容的提问来源于stack exchange,提问作者Samuele Bianchi
相关产品推荐
相关产品推荐

