我想突出显示您点击的当前菜单。我正在使用CSS,但现在正在使用。
这是我的css代码:
#sub-header ul li:hover{ background-color: #000;}
#sub-header ul li:hover a{ color: #fff; }
#sub-header ul li.active{ background-color: #000; }
#sub-header ul li.active a{ color: #fff; }
这是我的HTML:
<div id="sub-header">
<ul>
<li> <a href="index.php">Home</a> </li>
<li> <a href="contact.php">Contact Us</a> </li>
<li> <a href="about.php">About Us</a> </li>
</ul>
</div>
当我悬停并且菜单处于活动状态时,这就是我喜欢的
悬停是可以的,问题是当我点击菜单后黑色地面不显示
这是我的答案:
$(function(){
// this will get the full URL at the address bar
var url = window.location.href;
// passes on every "a" tag
$("#sub-header a").each(function() {
// checks if its the same on the address bar
if(url == (this.href)) {
$(this).closest("li").addClass("active");
}
});
});
然后在我的css文件中:
.active { background-color: #000; }
/* to override the existing css for "a" tag */
#sub-header .active a{ color: #fff; }
答案 0 :(得分:27)
在每个页面的正文中添加一个类:
<body class="home">
或者,如果您在联系页面上:
<body class="contact">
然后在创建样式时考虑到这一点:
#sub-header ul li:hover,
body.home li.home,
body.contact li.contact { background-color: #000;}
#sub-header ul li:hover a,
body.home li.home a,
body.contact li.contact a { color: #fff; }
最后,将类名应用于列表项:
<ul>
<li class="home"><a href="index.php">Home</a></li>
<li class="contact"><a href="contact.php">Contact Us</a></li>
<li class="about"><a href="about.php">About Us</a></li>
</ul>
此时,只要您在body.home
页面上,您的li.home a
链接就会有默认样式,表明它是当前页面。
答案 1 :(得分:3)
答案 2 :(得分:2)
添加简单方法
<div id='cssmenu'>
<ul>
<li class=''><a href='1.html'><span>1</span></a></li>
<li class=''><a href='2.html'><span>2</span></a></li>
<li class='' style="float:right;"><a href='3.html'><span>3</span></a></li>
</ul>
</div>
$("document").ready(function(){
$(function() {
$('.cssmenu a[href="' + location.pathname.split("/")[location.pathname.split("/").length-1] + '"]').parent().addClass('active');
});
});
答案 3 :(得分:2)
由于此问题的给定标记是 CSS ,我将提供完成它的方式。
在.css文件中创建一个类。
a.activePage{ color: green; border-bottom: solid; border-width: 3px;}
导航栏将如下:
<div id="sub-header">
<ul>
<li> <a href="index.php" class= "activePage" >Home</a> </li>
<li> <a href="contact.php">Contact Us</a> </li>
<li> <a href="about.php">About Us</a> </li>
</ul>
</div>
注意:如果您已经使用类设置了所有Nav-Bar元素的样式,则可以使用 white-space 在html-tag中的泛型类之后。
示例:在这里,我已经从我为所有列表项创建的名为&#39; navList&#39; 的类中导入了我的样式。但特殊情况样式属性是类&#39; activePage&#39;
.CSS文件:
a.navList{text-decoration: none; color: gray;}
a.activePage{ color: green; border-bottom: solid; border-width: 3px;}
.HTML文件:
<div id="sub-header">
<ul>
<li> <a href="index.php" class= "navList activePage" >Home</a> </li>
<li> <a href="contact.php" class= "navList">Contact Us</a> </li>
<li> <a href="about.php" class= "navList">About Us</a> </li>
</ul>
</div>
看看我是如何将一个类名串联起来的。
答案 4 :(得分:0)
首先,为所有链接指定一个唯一的id,并创建一个名为active的css类:
<ul>
<li><a id="link1" href="#/...">link 1</a></li>
<li><a id="link2" href="#/...">link 2</a></li>
</ul>
<强> CSS:强>
.active {
font-weight: bold;
}
Jquery版本:
function setActiveLink(setActive){
if ($("a").hasClass('active'))
$("a").removeClass('active');
if (setActive)
$("#"+setActive).addClass('active');
}
$(function() {
$("a").click(function() {
setActiveLink(this.id);
});
});
Vanilla javascript版本:
为了防止选择过多的document.querySelectorAll
链接,请为父元素指定一个名为menuLinks的ID。在链接上添加onClick处理程序。
<ul id="menuLinks">
<li><a id="link1" href="#/..." onClick="setActiveLink(this.id);">link 1</a></li>
<li><a id="link2" href="#/..." onClick="setActiveLink(this.id);">link 2</a></li>
</ul>
代码:
function setActiveLink(setActive){
var links = document.querySelectorAll("#menuLinks a");
Array.prototype.map.call(links, function(e) {
e.className = "";
if (e.id == setActive)
e.className = "active";
})
}
答案 5 :(得分:0)
您应该引用当前元素,而不是所有与您的选择器匹配的元素。
$("#mainMenu td").click(function() {
$(this).css('background-color', '#EDEDED');
});
我还建议您使用CSS类,而不是以这种方式设置CSS属性。
这就像是;
$("#mainMenu td").click(function() {
$(this).addClass('selected');
});
与;
#mainMenu td.selected {
background-color:#EDEDED; }
答案 6 :(得分:0)
试试这个(复制并粘贴):
Test.html: -
<html>
<link rel="stylesheet" type="text/css" href="style.css">
<a class="fruit" href="#">Home</a></span>
<a class="fruit" href="#">About</a></span>
<a class="fruit" href="#">Contact</a></span>
</html>
style.css中: -
a:link{
color:blue;
}
a:visited{
color:purple;
}
a:hover{
color:orange;
}
a:focus{
color:green;
}
a:active{
color:red;
}
a:active{
color:yellow;
}
答案 7 :(得分:0)
使用简单的2行侦听器的另一种变体
$( ".menu_button" ).click(function() {
$( ".menu_button" ).removeClass('menu_button_highlight');
$(this).addClass('menu_button_highlight');
});
=====
<a class='menu_button' href='#admin'>Admin</a>
<br/>
<a class='menu_button' href='#user_manager'>User Manager</a>
<br/>
<a class='menu_button' href='#invite_codes'>Invite Codes</a>
====
.menu_button {
padding: 0 5px;
}
.menu_button_highlight {
background: #ffe94c;
}
答案 8 :(得分:0)
也许这是非常非常糟糕的方式,只是对于懒惰的人 但是我决定要说。
我也使用PHP,bootstrap和fontawsome
为简单起见,我有2个页面:1.index和2.create-user
将此代码置于您的代码之上
<?php
$name=basename($_SERVER["REQUEST_URI"]);
$name=str_replace(".php","",$name);
switch ($name) {
case "create-user":
$a = 2;
break;
case "index":
$a = 1;
break;
default:
$a=1;
}
?>
和
在菜单中,您在菜单1的类中添加<?php if($a==1){echo "active";} ?>
然后为menu2添加<?php if($a==2){echo "active";} ?>
<ul id="menu" class="navbar-nav flex-column text-right mt-3 p-1">
<li class="nav-item mb-2">
<a href="index.php" class="nav-link text-white customlihamid <?php if($a==1){echo "active";} ?>"><i
class="fas fa-home fa-lg text-light ml-3"></i>dashbord</a>
</li>
<li class="nav-item mb-2">
<a href="#" href="javascript:" data-parent="#menu" data-toggle="collapse"
class="accordion-toggle nav-link text-white customlihamid <?php if($a==2){echo "active";} ?>" data-target="#tickets">
<i class="fas fa-user fa-lg text-light ml-3"></i>manage users
<span class="float-left"><i class="fas fa-angle-down"></i></span>
</a>
<ul class="collapse list-unstyled mt-2 mr-1 pr-2" id="tickets">
<li class="nav-item mb-2">
<a href="create-user.php" class="nav-link text-white customlihamid"><i class="fas fa-user-plus fa-lg text-light ml-3"></i>add user</a>
</li>
<li class="nav-item mb-2">
<a href="#" class="nav-link text-white customlihamid"><i class="fas fa-user-times fa-lg text-light ml-3"></i>delete user</a>
</li>
</ul>
</li>
</ul>
并添加CSS
.customlihamid {
transition: all .4s;
}
.customlihamid:hover {
background-color: #8a8a8a;
border-radius: 5px;
color: #00cc99;
}
.nav-item > .nav-link.active {
background-color: #00cc99;
border-radius: 7px;
box-shadow: 5px 7px 10px #111;
transition: all .3s;
}
.nav-item > .nav-link.active:hover {
background-color: #8eccc1;
border-radius: 7px;
box-shadow: 5px 7px 20px #111;
transform: translateY(-1px);
}
然后在js中添加
$(document).ready(function () {
$('.navbar-nav .nav-link').click(function(){
$('.navbar-nav .nav-link').removeClass('active');
$(this).addClass('active');
})
});
首先检查没有js代码的工作,以了解js代码的作用
答案 9 :(得分:0)
假设我们有一个这样的菜单:
<div class="menu">
<a href="link1.html">Link 1</a>
<a href="link2.html">Link 2</a>
<a href="link3.html">Link 3</a>
<a href="link4.html">Link 4</a>
</div>
让我们当前的网址为https://demosite.com/link1.html
使用以下功能,我们可以在菜单的href中添加活动类。
let currentURL = window.location.href;
document.querySelectorAll(".menu a").forEach(p => {
if(currentURL.indexOf(p.getAttribute("href")) !== -1){
p.classList.add("active");
}
})
答案 10 :(得分:0)
按照@Sampson的回答,我是这样处理的-
HTML:
div
类,其中有content
个类,其中包含该页面的内容。页眉和页脚分开。content
的页面添加了一个唯一的类。例如,如果我要创建一个与我们联系页面,我会将页面内容放入<section class="content contact-us"></section>
内。
<body>
<header>
<div class="nav-menu">
<ul class="parent-nav">
<li><a href="#">Home</a></li>
<li><a href="#">Contact us</a></li>
...
</ul>
</div>
</header>
<section class="content contact-us">
Content for contact us page goes here
</section>
<footer> ... </footer>
</body>
CSS:
active
类,其中包含一个活动菜单的样式。
.active {
color: red;
text-decoration: none;
}
<body>
<header>
<div class="nav-menu">
<ul class="parent-nav">
<li><a href="#">Home</a></li>
<li><a href="#">Contact us</a></li>
...
</ul>
</div>
</header>
<section class="content contact-us">
Content for contact us page goes here
</section>
<footer> ... </footer>
</body>
JavaScript:
content
类与菜单文本具有相同的类(小写且没有空格),则将active
类添加到菜单项。
var $allMenu = $('.nav-menu > .parent-nav > li > a');
var $currentContent = $('.content');
$allMenu.each(function() {
$singleMenuTitle = $(this).text().replace(/\s+/g, '-').toLowerCase();
if ($currentContent.hasClass($singleMenuTitle)) {
$(this).addClass('active');
}
});
.active {
color: red;
text-decoration: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<header>
<div class="nav-menu">
<ul class="parent-nav">
<li><a href="#">Home</a></li>
<li><a href="#">Contact us</a></li>
...
</ul>
</div>
</header>
<section class="content contact-us">
Content for contact us page goes here
</section>
<footer> ... </footer>
</body>
我为什么要这样做?
body
标签位于header.php
文件中,这意味着我无法为每个页面编写唯一的类名。