【问题标题】:Active and Clicked Menu (<a> tag) not changing CSS (DIVI Website)活动和点击菜单(<a> 标签)不更改 CSS(DIVI 网站)
【发布时间】:2021-03-31 04:00:15
【问题描述】:

我使用 Divi 侧边栏模块创建了一个侧边栏小部件。 HTML & CSS 代码如下:

CSS:

.et_pb_sidebar_0.et_pb_widget_area {
    border:1px solid #A9A9A9;
}

.et_pb_sidebar_0.et_pb_widget_area .widgettitle {
    padding-left: 30px;
}

.our-work-side-menu ul li {
    box-sizing: border-box;
    margin: 0;
    border-top:1px solid #A9A9A9;
    width:100%;
    padding: 10px 0 10px 40px;
}

.our-work-side-menu ul li:hover {
    background-color: #529883;
}

.our-work-side-menu ul li a {
    color: #529883;
}

.our-work-side-menu ul li a:hover {
    color: #ffffff;
    background-color: #529883;
}

.our-work-side-menu a:active {
    color: #ffffff;
    background-color: #529883;
}

HTML:

<div class="our-work-side-menu">
<ul >
    <li><a href="/our-work/completed-projects/">Completed Projects</a></li>
    <li><a href="/our-work/ongoing-projects/">Ongoing Projects</a></li>
    <li><a href="/our-work/future-projects/">Future Projects</a></li>
    <li><a href="/our-work/photo-gallery/">Photo Gallery</a></li>
    <li><a href="/our-work/video-center/">Video Center</a></li>
    <li><a href="/our-work/video-center/dr-asamoah-bio-video/">Dr. Asamoah Bio Video</a>    </li>
</ul>
</div>

divi sidebar preview

我无法获取活动链接/菜单项来更改其背景。 我还希望 Clicked Link 具有活动链接样式,并且其余链接保持不变。

【问题讨论】:

    标签: javascript css


    【解决方案1】:

    Divi 主题将菜单类 current-menu-item 分配给所有活动的 li 即菜单项。使用 CSS 将其与特定侧边栏小部件的 id 一起定位。请看下面的例子:

    #menu-blog-categories.menu .current-menu-item>a {
    color: #fff !important; background-color: #293852; }
    

    【讨论】:

      【解决方案2】:

      问题:您没有更改hoveractive 状态的背景颜色。见

      .our-work-side-menu ul li:hover {
          background-color: #529883; /*Same Color */
      }
      
      .our-work-side-menu ul li a {
          color: #529883;
      }
      
      .our-work-side-menu ul li a:hover { /* Repeated | Redundant CSS */
          color: #ffffff;
          background-color: #529883; /*Same Color */
      }
      
      .our-work-side-menu a:active {
          color: #ffffff;
          background-color: #529883; /*Same Color */
      }
      

      修复:

      .et_pb_sidebar_0.et_pb_widget_area {
        border: 1px solid #a9a9a9;
      }
      
      .et_pb_sidebar_0.et_pb_widget_area .widgettitle {
        padding-left: 30px;
      }
      
      .our-work-side-menu ul li {
        box-sizing: border-box;
        margin: 0;
        border-top: 1px solid #a9a9a9;
        width: 100%;
      }
      
      .our-work-side-menu ul li a {
        color: #529883;
        display: block;
        height: 100%;
        text-decoration: none;
        padding: 10px 0 10px 40px;
      }
      
      .our-work-side-menu ul li a:hover {
        color: #ffffff;
        background-color: #529883;
      }
      
      .our-work-side-menu ul li a:active {
        color: #ffffff;
        background-color: orange;
      }
       /* UPDATE: For clicked link behaviour we set an active class  */
       .active {
         background: orange;
         color: #ffffff !important;
       }
      

      更新:

      JAVASCRIPT:

      要使 Clicked Link 具有活动样式,我们需要使用一些 CSS。我想出了这段代码(虽然)有很多方法:)

      document.addEventListener("DOMContentLoaded", () => {
        let linksWrapper = document.querySelector(".links-wrapper");
      
        let hiddenLI = document.createElement("li");
        let anchor = document.createElement("a");
        anchor.setAttribute("class", "active");
      
        hiddenLI.appendChild(anchor);
      
        linksWrapper.appendChild(hiddenLI);
        hiddenLI.style.display = "none";
      
        const mainLinks = document.querySelectorAll(".links-wrapper li a");
        for (var i = 0; i < mainLinks.length; i++) {
          mainLinks[i].addEventListener("click", function () {
            var current = document.getElementsByClassName("active");
            current[0].className = current[0].className.replace("active", "");
            this.className = "active";
          });
        }
      });
      

      完整的工作代码:

      document.addEventListener("DOMContentLoaded", () => {
        let linksWrapper = document.querySelector(".links-wrapper");
      
        let hiddenLI = document.createElement("li");
        let anchor = document.createElement("a");
        anchor.setAttribute("class", "active");
      
        hiddenLI.appendChild(anchor);
      
        linksWrapper.appendChild(hiddenLI);
        hiddenLI.style.display = "none";
      
        const mainLinks = document.querySelectorAll(".links-wrapper li a");
        for (var i = 0; i < mainLinks.length; i++) {
          mainLinks[i].addEventListener("click", function () {
            var current = document.getElementsByClassName("active");
            current[0].className = current[0].className.replace("active", "");
            this.className = "active";
          });
        }
      });
      .et_pb_sidebar_0.et_pb_widget_area {
        border: 1px solid #a9a9a9;
      }
      
      .et_pb_sidebar_0.et_pb_widget_area .widgettitle {
        padding-left: 30px;
      }
      
      .our-work-side-menu ul li {
        list-style: none;
        box-sizing: border-box;
        margin: 0;
        border-top: 1px solid #a9a9a9;
        width: 100%;
      }
      
      .our-work-side-menu ul li a {
        color: #529883;
        display: block;
        height: 100%;
        text-decoration: none;
        padding: 10px 0 10px 40px;
      }
      
      .our-work-side-menu ul li a:hover {
        color: #ffffff;
        background-color: #529883;
      }
      
      .our-work-side-menu ul li a:active {
        color: #ffffff;
        background-color: orange;
      }
      
      .active {
        background: orange;
      }
      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8" />
          <meta http-equiv="X-UA-Compatible" content="IE=edge" />
          <meta name="viewport" content="width=device-width, initial-scale=1" />
          <link rel="stylesheet" href="style.css" />
        </head>
      
        <body>
          <div class="our-work-side-menu">
            <ul class="links-wrapper">
              <li><a href="#">Completed Projects</a></li>
              <li><a href="#">Ongoing Projects</a></li>
              <li><a href="#">Future Projects</a></li>
              <li><a href="#">Photo Gallery</a></li>
              <li><a href="#">Video Center</a></li>
              <li>
                <a href="#">Dr. Asamoah Bio Video</a>
              </li>
            </ul>
          </div>
        </body>
      
        <script src="./script.js"></script>
      </html>

      【讨论】:

      • 感谢 Imran 指出这一点。我确实更改了颜色,但是当页面处于活动状态时,链接背景不会保持我想要的颜色。它显示与非活动链接/菜单项相同。对于活动链接,我希望文本为白色,背景为绿色。
      • 我还更新了一些 CSS。由于特殊性问题,它没有来。最后一个 CSS 选择器 .our-work-side-menu ul li a:active { color: #ffffff;背景颜色:橙色;如果您单击我的答案底部的运行代码片段按钮。有一个工作代码。现在有主动效果。但是,如果您需要使整个 li 活跃,我也可以提供帮助。检查一次
      • 是的,这就是我想要的。整个 li 处于活动模式,其背景颜色应在页面打开时保持绿色,链接文本为白色
      • 我更新了代码。就完成了!你有你的功能朋友。请接受答案并投票,让提问者和回答者都受益于:)上帝保佑:)
      • 现在只需点击 Run Code Snipper 按钮。你会看到它工作。让我也投票给你,以提高你的声誉,我的一个小礼物。 :) 快乐编码
      【解决方案3】:

      那是因为您用于不同声明的所有颜色代码都是相同的

      .our-work-side-menu ul li:hover {
          background-color: #529883;
      }
      
      .our-work-side-menu ul li a {
          color: #529883;
      }
      
      .our-work-side-menu ul li a:hover {
          color: #ffffff;
          background-color: #529883;
      }
      
      .our-work-side-menu a:active {
          color: #ffffff;
          background-color: #529883;
      }
      

      您似乎想反转悬停和活动菜单项的颜色,所以我的建议是您的代码应如下所示

      .our-work-side-menu ul li a {
          color: #529883;
      }
      
      .our-work-side-menu ul li:hover,
      .our-work-side-menu ul li.active {
          background-color: #529883;
      }
      
      .our-work-side-menu ul li:hover a,
      .our-work-side-menu ul li.active a{
          color: #ffffff;
      }
      

      $(document).ready(function () {
          $('.our-work-side-menu ul li').click(function(e) {
      
              $('.our-work-side-menu ul li').removeClass('active');
      
              var $this = $(this);
              if (!$this.hasClass('active')) {
                  $this.addClass('active');
              }
              //e.preventDefault();
          });
      });
      .our-work-side-menu ul li {
        box-sizing: border-box;
        margin: 0;
        border-top: 1px solid #a9a9a9;
        width: 100%;
        padding: 10px 0 10px 40px;
      }
      .our-work-side-menu ul li a {
          color: #529883;
      }
      
      .our-work-side-menu ul li:hover,
      .our-work-side-menu ul li.active {
          background-color: #529883;
      }
      
      .our-work-side-menu ul li:hover a,
      .our-work-side-menu ul li.active a{
          color: #ffffff;
      }
      <!DOCTYPE html>
          <html>
            <head>
              <meta charset="utf-8" />
              <meta http-equiv="X-UA-Compatible" content="IE=edge" />
              <meta name="viewport" content="width=device-width, initial-scale=1" />
            </head>
      
            <body>
              <div class="our-work-side-menu">
                <ul>
                  <li><a href="#">Completed Projects</a></li>
                  <li><a href="#">Ongoing Projects</a></li>
                  <li class="active"><a href="#">Future Projects</a></li>
                  <li><a href="#">Photo Gallery</a></li>
                  <li><a href="#">Video Center</a></li>
                  <li>
                    <a href="#">Dr. Asamoah Bio Video</a>
                  </li>
                </ul>
              </div>
              <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            </body>
      
          </html>

      【讨论】:

      • 如何在更改链接时动态更改“活动”类。我得到的是静态效果。
      • 刚刚在这里找到了解决方案:stackoverflow.com/q/17975922/1889652
      • 上面的sn-p代码中也添加了,可以查看
      • 如果这是您正在寻找的内容,只需将其作为问题答案进行检查,或者只是对其进行投票。 :)
      【解决方案4】:

      您写道,您'Gave it class "#ghana-work-sidebar" ',但您的 CSS 代码旨在更改 ID。 尝试将 ID 分配给 HTML 代码中的元素,如下所示:

      <div id="ghana-work-sidebar"></div>
      

      【讨论】:

      • 您好,莫里茨,感谢您的意见。我已经更新了这个问题。删除了类和 ID 冲突,但我无法获取活动菜单项来更改其颜色。
      • 在这种情况下,您的 CSS 代码是正确的。如果它仍然不起作用,则您的规则将被其他冲突规则覆盖。在此处阅读有关 CSS 级联的更多信息:developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/…
      • 尝试将“.our-work-side-menu a:active”更改为“.our-work-side-menu ul li a:active”
      • 我不需要 javascript 代码来实现这一点,对吗?
      • 不需要 Javascript,只需要纯 CSS!
      猜你喜欢
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      相关资源
      最近更新 更多