【问题标题】:Navbar active item color导航栏活动项目颜色
【发布时间】:2021-11-09 05:20:40
【问题描述】:

是否可以在不使用 JS 和 jQuery 的情况下为 CSS 中的导航栏的活动项赋予颜色?实际上,我希望我的导航栏运行顺畅。

  1. 它是单页应用程序。
  2. 我尝试了 .classname a.active(className of ){backgroundcolor: green;} 但它仅适用于 className 处于活动状态的其他保留位置。

【问题讨论】:

标签: css navbar


【解决方案1】:

是的,你可以在不使用 JS 的情况下做到这一点,但你需要在你的 HTML 中有一些结构才能使它成为可能。

例如,在这个 sn-p 中,每个 li 元素都以 radio 类型的 input 元素开头。所有 li 输入元素都被赋予相同的名称,因此它们被分组 - 这意味着当单击一个单选按钮时,它会被选中,而其他所有元素都不会被选中。使用 CSS,我们可以选择包含文本的紧随其后的元素,并更改其背景颜色或任何其他所需的样式,如果其前面的输入元素被选中。

.navbar-nav li {
  position: relative;
  display: inline-block;
}

.navbar-nav li input {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  opacity: 0;
  z-index: 1;
}

.navbar-nav li input:checked+* {
  background: yellow;
}
<ul class="navbar-nav">
  <li><input type="radio" checked name="nav"><span>Item 1</span></li>
  <li><input type="radio" name="nav"><span>Item 2</span></li>
  <li><input type="radio" name="nav"><span>Item 3</span></li>
  <li><input type="radio" name="nav"><span>Item 4</span></li>
</ul>

请注意,输入元素的不透明度为 0,因此它们仍然存在但不可见,并且通过绝对位置使它们与项目具有相同的大小和相同的位置。

【讨论】:

  • 很好地解决了对常见情况的非常规请求。您还可以将文本包装在label 元素中,并使用label 上的for 属性和id 上的相应id 属性将其与input 相关联-然后您应该能够只需隐藏input 元素。
【解决方案2】:

你可能是指其中任何一个?

#nav li a:hover {
    color: red;
}

#nav li a:active {
    color: red;
}

【讨论】:

  • 我的意思是代替 - $(document).ready(function () { $('ul.navbar-nav > li') .click(function (e) { $('ul.navbar -nav > li') .removeClass('active'); $(this).addClass('active'); }); });有css代码吗?
  • 只有 CSS 没有办法做到这一点@hari
猜你喜欢
  • 1970-01-01
  • 2017-06-22
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 2017-08-21
  • 1970-01-01
  • 2022-09-22
相关资源
最近更新 更多