简体   繁体   English

CSS 位置:固定 + 混合模式:差异问题

[英]CSS position: fixed + mix-blend-mode: difference issue

I am trying to create a sticky nav bar which reacts during scrolling with the background.我正在尝试创建一个粘性导航栏,它会在滚动背景时做出反应。 I experimented with mix-blend-mode: difference and it is exactly was I was looking for.我尝试了mix-blend-mode: difference ,这正是我正在寻找的。 But since I am using position: sticky or position: fixed this is what happen:但由于我使用的是position: stickyposition: fixed这就是发生的情况:

Close before hitting the nav bar:在点击导航栏之前关闭:
在点击导航栏之前关闭

Here it hits the nav bar:在这里它点击导航栏:
在这里它击中导航栏

Unfortunately when it hits the nav bar the whole font is inverting its color.不幸的是,当它碰到导航栏时,整个字体都在反转它的颜色。 Here is an example how it should look like when it scrolls into each other:这是一个示例,当它相互滚动时应该是什么样子:

The Hamburger and Logo are creating a nice invert effect:汉堡包和标志创造了一个很好的反转效果:
汉堡包和标志创造了一个很好的反转效果

In this example I used position: absolute and it looks totally fine.在这个例子中,我使用了position: absolute ,它看起来完全没问题。

Here is what I have coded so far:这是我到目前为止编码的内容:

HTML & CSS HTML 和 CSS

 .nav-bar { width: calc(100vw - 3rem); margin: 0 auto; padding-top: 40px; position: sticky; top: 0; } .nav-bar ul { display: flex; justify-content: space-between; top: 200px; } .nav-bar ul li { list-style: none; } .nav-bar ul li img { width: 30px; } .nav-bar ul li .line { width: 25px; height: 5px; background: #000; margin-bottom: 3px; } .nav-bar ul li .line:last-child { margin-bottom: 0; } .headline-container { padding-top: 100px; } .headline-container .headline-item { width: calc(100vw - 3rem); margin: 0 auto; display: flex; justify-content: space-between; } .headline-container .headline-item span { font-size: 7vw; font-family: 'Montserrat', sans-serif; font-style: italic; font-weight: bold; mix-blend-mode: difference; color: white; }
 <div class="nav-bar"> <nav> <ul> <li class="test"> <img src="./img/logo_nav.svg" alt="logo" /> </li> <li> <div class="line"></div> <div class="line"></div> <div class="line"></div> </li> </ul> </nav> </div> <div class="headline-container"> <div class="headline-item"> <span>W</span> <span>E</span> <span>B</span> <span>A</span> <span>P</span> <span>P</span> <span>L</span> <span>I</span> <span>C</span> <span>A</span> <span>T</span> <span>I</span> <span>O</span> <span>N</span> </div> <div class="headline-item"> <span>D</span> <span>E</span> <span>S</span> <span>I</span> <span>G</span> <span>N</span> </div> <div class="headline-item"> <span>B</span> <span>R</span> <span>A</span> <span>N</span> <span>D</span> <span>I</span> <span>N</span> <span>G</span> </div> <div class="headline-item"> <span>C</span> <span>O</span> <span>M</span> <span>M</span> <span>U</span> <span>N</span> <span>I</span> <span>C</span> <span>A</span> <span>T</span> <span>I</span> <span>O</span> <span>N</span> </div> </div>

For me, this looks like the chromium problem.对我来说,这看起来像是铬问题。 I use Google Chrome and setting the background color was the solution for me.我使用谷歌浏览器并设置背景颜色是我的解决方案。

Here the bug .这里的错误

 body { background-color: white; } .nav-bar { width: calc(100vw - 3rem); margin: 0 auto; padding-top: 40px; position: sticky; top: 0; } .nav-bar ul { display: flex; justify-content: space-between; top: 200px; } .nav-bar ul li { list-style: none; } .nav-bar ul li img { width: 30px; } .nav-bar ul li img .line { width: 25px; height: 5px; background: #000; margin-bottom: 3px; } .nav-bar ul li img .line:last-child { margin-bottom: 0; } .headline-container { padding-top: 100px; } .headline-container .headline-item { width: calc(100vw - 3rem); margin: 0 auto; display: flex; justify-content: space-between; } .headline-container .headline-item span { font-size: 7vw; font-family: 'Montserrat', sans-serif; font-style: italic; font-weight: bold; mix-blend-mode: difference; color: white; }
 <div class="nav-bar"> <nav> <ul> <li class="test"> <img src="https://i.stack.imgur.com/72XoY.png" width="30px" height="30px" /> </li> <li> <div class="line"></div> <div class="line"></div> <div class="line"></div> </li> </ul> </nav> </div> <div class="headline-container"> <div class="headline-item"> <span>W</span> <span>E</span> <span>B</span> <span>A</span> <span>P</span> <span>P</span> <span>L</span> <span>I</span> <span>C</span> <span>A</span> <span>T</span> <span>I</span> <span>O</span> <span>N</span> </div> <div class="headline-item"> <span>D</span> <span>E</span> <span>S</span> <span>I</span> <span>G</span> <span>N</span> </div> <div class="headline-item"> <span>B</span> <span>R</span> <span>A</span> <span>N</span> <span>D</span> <span>I</span> <span>N</span> <span>G</span> </div> <div class="headline-item"> <span>C</span> <span>O</span> <span>M</span> <span>M</span> <span>U</span> <span>N</span> <span>I</span> <span>C</span> <span>A</span> <span>T</span> <span>I</span> <span>O</span> <span>N</span> </div> </div>

I have fixed that issue:我已经解决了这个问题:

<div class="fixed_menu">
    <div class="nav-bar">
      <nav>
        <ul>
          <li class="test">
            <img src="./img/logo_nav.svg" alt="logo" />
          </li>
          <li>
            <div class="line"></div>
            <div class="line"></div>
            <div class="line"></div>
          </li>
        </ul>
      </nav>
    </div>
  </div>

  <div class="section section1">
    <div class="headline-container">
      <div class="headline-item">
        <span>W</span>
        <span>E</span>
        <span>B</span>
        <span>A</span>
        <span>P</span>
        <span>P</span>
        <span>L</span>
        <span>I</span>
        <span>C</span>
        <span>A</span>
        <span>T</span>
        <span>I</span>
        <span>O</span>
        <span>N</span>
      </div>
      <div class="headline-item">
        <span>D</span>
        <span>E</span>
        <span>S</span>
        <span>I</span>
        <span>G</span>
        <span>N</span>
      </div>
      <div class="headline-item">
        <span>B</span>
        <span>R</span>
        <span>A</span>
        <span>N</span>
        <span>D</span>
        <span>I</span>
        <span>N</span>
        <span>G</span>
      </div>
      <div class="headline-item">
        <span>C</span>
        <span>O</span>
        <span>M</span>
        <span>M</span>
        <span>U</span>
        <span>N</span>
        <span>I</span>
        <span>C</span>
        <span>A</span>
        <span>T</span>
        <span>I</span>
        <span>O</span>
        <span>N</span>
      </div>
    </div>
  </div>
</div>
* {
 margin: 0;
 padding: 0;
 box-sizing: border-box;
}

.section {
 background-color: white;
}

.section1 h1 {
 padding-top: 150px;
 text-align: center;
}

.fixed_menu {
 position: fixed;
 width: calc(100vw - 3rem);
 mix-blend-mode: difference;
 z-index: 2;
 left: 50%;
 top: 30px;
 transform: translateX(-50%);
}

.nav-bar {
 width: calc(100vw - 3rem);
 /* margin: 0 auto; */
}

.nav-bar ul {
 display: flex;
 justify-content: space-between;
 top: 200px;
}

.nav-bar ul li {
 list-style: none;
}

.nav-bar ul li img {
 width: 30px;
}

.nav-bar ul li .line {
 width: 25px;
 height: 5px;
 background: #fff;
 margin-bottom: 3px;
}

.nav-bar ul li .line:last-child {
 margin-bottom: 0;
}

.headline-container {
 padding-top: 100px;
}

.headline-container .headline-item {
 width: calc(100vw - 3rem);
 margin: 0 auto;
 display: flex;
 justify-content: space-between;
}

.headline-container .headline-item span {
 font-size: 7vw;
 font-family: 'Montserrat', sans-serif;
 font-style: italic;
 font-weight: bold;
 mix-blend-mode: difference;
 color: white;
}

I dont know exactly what happened, but since I restructured everything, and used CSS instead of SCSS, i guess i had somewhere a typo, or something like that我不知道到底发生了什么,但由于我重组了所有内容,并使用 CSS 而不是 SCSS,我想我在某个地方有错字或类似的东西

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM