Html 根据页面地址更改菜单项的外观

Html 根据页面地址更改菜单项的外观,html,css,Html,Css,我希望根据当前页面更改导航菜单项的外观背景颜色 以下是导航菜单的HTML代码: <ul id="menu"> <li><a href="#">Home</a></li> <li><a href="#">Services</a> <ul> <li><a href="#">Recruitment</a>

我希望根据当前页面更改导航菜单项的外观背景颜色

以下是导航菜单的HTML代码:

<ul id="menu">
    <li><a href="#">Home</a></li>
    <li><a href="#">Services</a>
        <ul>
            <li><a href="#">Recruitment</a></li>
            <li><a href="#">Training & Development</a></li>
            <li><a href="#">Outsourcing</a></li>
        </ul>
    </li>
    <li><a href="#">About Us</a></li>
    <li><a href="#">Contact</a></li>
</ul>
#menu, #menu ul {
    margin: 0;
    padding: 0;
    list-style: none;
}

#menu {
    width: 960px;
    margin: 60px auto;
    border: 1px solid #222;
    background-color: #111;
    background-image: linear-gradient(#444, #111);
    border-radius: 6px;   
    box-shadow: 0 1px 1px #777;
}

#menu:before,
#menu:after {
    content: "";
    display: table;
}

#menu:after {
    clear: both;
}

#menu {
    zoom:1;
}

#menu li {
    float: left;
/*  border-right: 1px solid #222;
*/  
    box-shadow: 1px 0 0 #444;
    position: relative;
}

#menu a {
    float: left;
    padding: 12px 30px;
    color: #FFF;
    text-transform: uppercase;
    text-decoration: none;
    text-shadow: 0 1px 0 #000;
    font-family: Arial, Helvetica;
    font-size: 12px;
    font-weight: bold;
}

#menu li:hover > a {
    color: #fafafa;
}

*html #menu li a:hover { /* IE6 only */
    color: #fafafa;
}

#menu ul {
    margin: 20px 0 0 0;
    _margin: 0; /*IE6 only*/
    opacity: 0;
    visibility: hidden;
    position: absolute;
    top: 38px;
    left: 0;
    z-index: 1;    
    background: #444;   
    background: linear-gradient(#444, #111);
    box-shadow: 0 -1px 0 rgba(255,255,255,.3);  
    border-radius: 3px;
    transition: all .2s ease-in-out;  
}

#menu li:hover > ul {
    opacity: 1;
    visibility: visible;
    margin: 0;
}

#menu ul ul {
    top: 0;
    left: 150px;
    margin: 0 0 0 20px;
    _margin: 0; /*IE6 only*/
    box-shadow: -1px 0 0 rgba(255,255,255,.3);      
}

#menu ul li {
    float: none;
    display: block;
    border: 0;
    _line-height: 0; /*IE6 only*/
    box-shadow: 0 1px 0 #111, 0 2px 0 #666;
}

#menu ul li:last-child {   
    box-shadow: none;    
}

#menu ul a {    
    padding: 10px;
    width: 130px;
    _height: 10px; /*IE6 only*/
    display: block;
    white-space: nowrap;
    float: none;
    text-transform: none;
}

#menu ul a:hover {
    background-color: #f80033;
    background-image: linear-gradient(#f80033, #955d61);
}

#menu li:hover {
    border-radius:5px;
    background-color: #f80033;
    background-image: linear-gradient(#f80033, #955d61);
}

#menu ul li:first-child > a {
    border-radius: 3px 3px 0 0;
}

#menu ul li:first-child > a:after {
    content: '';
    position: absolute;
    left: 40px;
    top: -6px;
    border-left: 6px solid transparent;
    border-right: 6px solid transparent;
    border-bottom: 6px solid #444;
}

#menu ul ul li:first-child a:after {
    left: -6px;
    top: 50%;
    margin-top: -6px;
    border-left: 0; 
    border-bottom: 6px solid transparent;
    border-top: 6px solid transparent;
    border-right: 6px solid #3b3b3b;
}

#menu ul li:first-child a:hover:after {
    border-bottom-color: #f80033; 
}

#menu ul ul li:first-child a:hover:after {
    border-right-color: #ba4d5c; 
    border-bottom-color: transparent;   
}

#menu ul li:last-child > a {
    border-radius: 0 0 3px 3px;
}
使用:活动选择器选择当前活动的菜单项

您可以将选择器添加到菜单li:hover,使其成为菜单li:hover,menu li.active,然后只需将类active添加到加载页面时要突出显示的对象

演示:

为了自动进行选择,您需要一些脚本来将活动类添加到正确的li。。。通常,为了简单起见,我选择:

var pageUrl = window.location.href;
$("#menu a[href='" + pageUrl + "']").parent().addClass("active");

据我了解,有两种方法可以做到这一点:

编写服务器端代码以添加类似active的类,当选项卡路径与页面路径相同时,还可以比较控制器操作。 通过使用window.location并将其与tab-link进行比较,也可以使用javascript实现这一点。
您需要在项目的点击偶数上分配一个CSS类,在这种情况下,您需要使用javascript(请参见下面的jQuery),或者您需要在页面加载时标识当前页面,并将一个类分配给当时未显示的相关列表项,请参见中的答案

jQuery

$('#menu > li').on('click', function(){
    $('#menu > li').removeClass('active');
    $(this).addClass('active');   
});
附加CSS

#menu li.active {
    border-radius:5px;
    background-color: #f80033;
    background-image: linear-gradient(#f80033, #955d61);
}

为要显示为活动的链接添加类

并为该类添加css

例如:

a.active{background-color:#f80033;color:#fff;}

只有CSS无法执行此操作,您需要添加jquery:


它工作得很好。什么问题?是否要突出显示链接到当前页面的菜单项?如果是这样,没有服务器端或客户端脚本,这是不可能的;CSS还没有关于页面位置的概念。@如果我移动到其他页面,我需要活动菜单,而您只想用CSS实现这一点?正如David所说,这不可能只使用CSS。您需要为此包含jquery。@我想知道如何在新页面加载由应用的样式时帮助我。如果active不是单个页面站点,它将丢失。请记住,该属性可能只包含相对URL,从而导致此方法失败,最好选择相关元素,然后使用element.href属性筛选完整URL,以与window.location.href进行比较。请注意,我们的两种方法都会失败,因为在发布的代码中,每个链接的href都是简单的。。。W3学校在所有网站上都有错误信息!不要使用它们!我删除了链接,改成了CSS技巧页面。不知道你还想从我这里得到什么:P还有,W3Schools并不是最好的学习工具,但作为一个快速参考,我已经找到了我一直在寻找的答案,从那里我数不清。不全是坏事。
$('#menu li').click(function(){
    $('#menu li').removeClass('active');
    $(this).addClass('active');
});