更改活动导航项的颜色并显示相对于导航栏项的页面

Posted

技术标签:

【中文标题】更改活动导航项的颜色并显示相对于导航栏项的页面【英文标题】:Changing the color of active nav-item and displays the page relative to the navbar item 【发布时间】:2020-12-17 12:23:14 【问题描述】:

我尝试了很多方法,但无法更改活动导航项的背景颜色,也无法显示相对于导航栏项的页面。

注意: 下面的 jQuery 代码改变了导航栏列表项的背景颜色,但是当我点击页面时它又回到了默认颜色。如果我添加 'e.preventDefault()' 它会正确更改导航项背景颜色,但不会显示相对于导航栏项的页面。

html(EJS 文件)

 <div class="navbar-nav">
    <ul class="navbar-nav">
        <li class="nav-item">
            <a class="nav-link" href="#">Item 1</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Item 2</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Item 3</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Item 4</a>
        </li>
    </ul>
</div>               



CSS

.navbar-nav > .aMenuActive 
    background-color: var(--main-pink-color);
 

jQuery

// aMenuActive -> Add class to clicked li
$('ul.navbar-nav > li').click(function (e)     
    console.log("log...clicked menu",);
    $('ul.navbar-nav > li').removeClass('aMenuActive');
    $(this).addClass('aMenuActive');
    //e.preventDefault(); // -> works but does not send to link
);

$('ul.navbar-nav > li').click(function (e)     
    console.log("log...clicked menu",);
    $('ul.navbar-nav > li').removeClass('aMenuActive');
    $(this).addClass('aMenuActive');
    //e.preventDefault(); // -> works but does not send to link
);
.navbar-nav > .aMenuActive 
    background-color: red;
 
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="navbar-nav">
    <ul class="navbar-nav">
        <li class="nav-item">
            <a class="nav-link" href="#">Item 1</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Item 2</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Item 3</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#">Item 4</a>
        </li>
    </ul>
</div>

【问题讨论】:

在 SO 上看到过几次 - 您正在单击链接,然后 导航到新页面 从而重新创建页面。您需要在页面加载上添加检查以根据当前页面设置aMenuActive/或使用ajax加载页面。 我一定会看看 ajax 是如何工作的,我需要它来改进我的代码。非常感谢。 您需要覆盖 boostrap.min.css 文件中预定义的 css 属性 white。你可以通过Inspect Element找到。 【参考方案1】:

href 将触发页面重新加载并丢失选择。

你可以通过css改变背景颜色。

.navbar-nav > .nav-item:focus-within 
  background-color: pink; //var(--main-pink-color);
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="navbar-nav">
  <ul class="navbar-nav">
      <li class="nav-item">
          <a class="nav-link px-auto px-lg-2 px-xl-3" href="/index/2">Item 1</a>
      </li>
      <li class="nav-item">
          <a class="nav-link px-auto px-lg-2 px-xl-3 " href="/index/viagens">VIAGENS</a>
      </li>
      <li class="nav-item">
          <a class="nav-link px-auto px-lg-2 px-xl-3" href="/index/3">Item 2</a>
      </li>
      <li class="nav-item">
          <a class="nav-link px-auto px-lg-2 px-xl-3" href="/index/4">Item 3</a>
      </li>
  </ul>
</div>

【讨论】:

当页面重新加载时,即使通过 css 更改背景颜色,它也会恢复为默认颜色。但是感谢您的回答,我会尝试重组我的代码。我在这个功能上花了很多时间......

以上是关于更改活动导航项的颜色并显示相对于导航栏项的页面的主要内容,如果未能解决你的问题,请参考以下文章

更改导航项的颜色

通过整个应用程序更改导航项的颜色?

更改导航抽屉中菜单项的文本颜色

更改 Blazor 菜单中导航项的可见性

markdown 商家可以更改特定导航项的文本颜色

突出显示当前所选导航菜单项的背景