【问题标题】:CSS Menu - Nav Bar refuses to highlight parent after selecting childCSS 菜单 - 导航栏在选择子项后拒绝突出显示父项
【发布时间】:2023-03-20 21:35:01
【问题描述】:

我知道有 400 个这样的线程,但似乎每个人的代码都有些不同:我设置了我的 CSS,每次您将鼠标悬停在导航中的页面上时都会出现一个蓝条,并且单击该链接页面时,蓝条将停留在其上方。当我单击带有下拉菜单的链接之一时,我无法让它停留在父页面上。我可以让一个蓝色条出现在下拉列表中(大声笑),但根本无法让它留在父母身边。我已经尝试了所有祖先的技巧,所有的菜单当前技巧,我只是束手无策。如果有任何帮助,我将永远感激不尽。

        /*** ----------------------------CHANGE THE COLOR OF THE SQUARES UNDERNEATH THE NAVIGATION BAR HERE ------------------------------- ***/
    nav ul li a:hover, nav ul li a.current {
        border-bottom: 5px solid #00BCF2;
        color: #00BCF2;
    }

    /*** THIS WILL PROBABILY GET US TO WHERE WE WANT TO BE WITH ADDING AND HOVERING THE PARENT LINK 



     nav ul li:hover > a, .current-menu-ancestor > a, .current-menu-parent > a {
            background-color: #536f9e !important;
            color: #ffffff !important;
        }
        ***/

    /*** add publications from box site level 1 here ***/
    /**** Dropdown ****/
    /*** ----------------------------- CHANGE THE LOGO OF THE DROPDOWN ARROW ------------------------------ ***/



    /*** ----------------------------- CHANGE THE height OF THE DROPDOWN menu ------------------------------ ***/

    .dropdown{
        padding: 14px 16px 37px 10px;
        background: url('images/dropdown_icon.png') no-repeat 99% 21px;
    }
    .dropdown:hover{
        border-bottom: none;
    }
    nav ul ul{
        display: none;
        margin: 0;
        position: absolute;
        background-color: #000;
        z-index: 1;

    }
    nav ul li:hover  ul{
        display: block;
            opacity: 0.9;


    }
    nav ul li ul li{
        margin: 0;



    }
    /*** ----------------------------- CHANGE THE WIDTH OF THE DROPDOWN MENU ------------------------------ ***/
    nav ul li ul li a{ 
        margin: 0;
        padding: 5px 10px;
        width: 100px;
    }
    /*** ----------------------------- CREATE BLUE BARS INSIDE OF DROPDOWN ------------------------------ ***/

    nav ul li:hover ul li a:hover, nav ul li:hover ul li a.current{
        border-bottom: none;
    }

根据要求,我开头的 HTML --> 标题是:

    <!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>XXXXXX</title>

    <link rel="stylesheet" href="style.css" type="text/css" media="screen, projection" />

    <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
    <script>
    $(function(){
    $('a').each(function() {
    if ($(this).prop('href') == window.location.href) {
    $(this).addClass('current');
    }
    <!--END OF HEADER -->
    });
    });
    </script>
</head>
<body>
    <div id="wrapper">

        <!--========================== L O G O  &   N A V    B A R ============================-->
        <header>
            <div id="logo">
                <a href="home.html"><img src="images/xylophone.png" alt="YouRock" /></a>
            </div>
            <nav>
                <ul>
                    <li><a href="home.html">Home</a></li>
                    <li><a href="about.html">About</a></li>
                    <li><a href="portfolio.html">Founders</a></li>
                    <li><a href="#" class="dropdown">Pipeline</a>
                        <ul>
                        <ul>
                            <li><a href="timeline.html">Timeline</a></li>
                            <li><a href="Phases.html">Phase I / II</a></li>

【问题讨论】:

  • 只是让我明白了,您希望当前页面在菜单项下有一个蓝条吗?
  • 确实如此。到目前为止,我的理解是,当悬停下拉列表的 li 时(例如 Timeline),您希望在父下拉类(例如 Pipeline)上显示蓝条。您能否确认这是预期的行为?
  • @PIIANTOM 不是在悬停该个人时,而是在单击链接时。因此,当单击主页、关于、投资组合等时,我的蓝色条将停留在它们下方。当我点击下拉列表中的链接时,我希望“管道”具有相同的蓝色下划线

标签: html css drop-down-menu navbar dropdown


【解决方案1】:

嗯,检查活动链接是否在下拉块内的最简单方法是设置一个类。此外,将一个包含.dropdown 链接的类设置为&lt;li&gt; 可能很有用,以便轻松实现它:

<li class="drop-li"><a href="#" class="dropdown">Pipeline</a>
        <ul>
            <li><a href="timeline.html" class="dropdowned">Timeline</a></li>
            <li><a href="Phases.html" class="dropdowned">Phase I / II</a></li>
        </ul>

现在您可以像这样突出显示所需的父链接:

$(function(){
    $('a').each(function() {
    if ($(this).prop('href') == window.location.href) {
        if ($(this).attr('class') == 'dropdowned'){
            $(this).closest('.drop-li').children('a').addClass('current');
        }
        else{
            $(this).addClass('current');
        }
    }
}

这样,无论您有多少下拉菜单以及链接和模板的名称是什么,它都可以正常工作。

【讨论】:

  • 对不起,我认为这也不起作用@chem1st, - 只是为了确认:所以当点击主页、关于、投资组合等时,我的蓝色条停留在它们下方。当我单击下拉列表中的链接时,我希望“管道”具有相同的蓝色下划线 - 在上述情况下,单击时我看不到该栏,例如时间线。上传我拥有的整个 CSS 会有帮助吗?
  • 我明白你想要什么,我的代码就是这样做的。你都做对了吗?
  • 你能告诉我在 CSS 中实现 $(function) 的确切位置吗?在我上面显示的代码的哪一行之后,您是否添加了以下内容 - 顺便说一句,我非常感谢您的帮助。我从来没有经历过一个公共论坛的问题被如此热切地回答——在今天的大多数论坛上,问题都会遭到令人反感的嘲讽——我希望有一天在我掌握了更多技能后能够帮助别人!
  • 对不起@chem1st 我的意思不是在 CSS 中,而是在 .js 文件中。我对 j 查询不太熟悉,所以我所做的只是创建一个新文件 - 我猜这里叫 dropdowned.js 但我认为我做得不对。我复制了你的整个 js 代码并保存为 .js 文件
  • 你已经接受了我的回答,这是否意味着你已经成功地完成了你想要的?是的,您可以将我的答案插入到 js 文件中或直接在模板中的 script 标签中
【解决方案2】:

在timeline.html和phases.html上放这个

<ul>
                    <li><a href="home.html">Home</a></li>
                    <li><a href="about.html">About</a></li>
                    <li><a href="portfolio.html">Founders</a></li>
                    <li><a href="#" class="dropdown" class="current">Pipeline</a>
                        <ul>
                        <ul>
                            <li><a href="timeline.html">Timeline</a></li>
                            <li><a href="Phases.html">Phase I / II</a></li>

,别把它放在其他地方,等 violla

【讨论】:

  • 在这种情况下,您将在每个“下拉页面”上有多个导航副本。如果模板名称或导航栏发生变化怎么办?
  • 那么菜单是动态的吗?
  • try` if ($(this).prop('href') == window.location.pathname)` 因为你的链接是相对 url,window.location.href 返回完整的 url 所以永远不会匹配相对网址
  • 对不起@Billy 我认为这不起作用-只是为了确认:因此,当单击主页、关于、投资组合等时,我的蓝色条会停留在它们下方。当我单击下拉列表中的链接时,我希望“管道”具有相同的蓝色下划线 - 在上述情况下,单击时我看不到该栏,例如时间线。上传我拥有的整个 CSS 会有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2013-03-14
  • 2016-12-15
  • 1970-01-01
  • 2014-10-09
  • 2014-10-19
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
相关资源
最近更新 更多