为什么 chrome 从下拉项中删除 bootstrap 的 .active class?
Why chrome removes bootstrap's .active class from dropdown-item?
我有一个带下拉菜单的导航栏,我想将其中一项标记为活动,我的 HTML 是:
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#nb">
<span class="navbar-toggler-icon"></span>
</button>
<div id="nb" class="collapse navbar-collapse">
<ul class="navbar-nav ml-auto">
<li class="nav-item active dropdown justify-content-center text-center">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">User guide</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="link1.html">Link 1</a>
<a class="dropdown-item active" href="#">Active Link</a>
</div>
</li>
</ul>
</div>
</nav>
我正在使用这些样式和脚本:
<head>
...
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.2/css/all.min.css" integrity="sha256-zmfNZmXoNWBMemUOo1XUGFfc0ihGGLYdgtJS3KCr/l0=" crossorigin="anonymous" />
<link rel="stylesheet" href="CSS/my_style.css">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script type="text/javascript">
$(function() {$('body').scrollspy({offset:0.02*window.innerHeight});})
</script>
</head>
但是,这在 MS Edge 中有效,但由于某些原因在 chrome 中无效。加载文档后,.active class 从下拉项中消失。
Chrome:版本 77.0.3865.90(正式版)(64 位)
MS Edge:Microsoft Edge 44.18362.329.0,Microsoft EdgeHTML18.18362
知道为什么 chrome 这样做以及如何阻止它吗?
谢谢
编辑
问题似乎出在 scrollspy
<body data-spy="scroll" data-target="#side-nav" data-offset="0">
在 sidenav 上使用
<div id="sidebar" class="col-md-3 col-lg-3 col-xl-2 d-none d-md-block">
<nav id="side-nav" class="navbar navbar-light bg-dark sticky-top">
<nav class="nav nav-pills flex-column">
<a class="nav-link arrow" href="#top"><i class="fas fa-arrow-circle-up fa-2x"></i></a>
<a class="nav-link" href="#intro">Introduction</a>
<a class="nav-link" href="#usage">Usage</a>
<a class="nav-link" href="#properties">Properties</a>
<a class="nav-link arrow" href="#footerInfo"><i class="fas fa-arrow-circle-down fa-2x"></i></a>
</nav>
</nav>
</div>
当我在开发中手动将活动 class 添加到下拉项时。工具,然后向下滚动一点 - 它在 chrome 中消失(不在 MS edge 中)。
...
$(函数() {$('body').scrollspy({offset:0.02*window.innerHeight});})
请先尝试清除浏览器数据(缓存、cookie 或历史记录),然后重新测试您的代码。我已经使用您的代码创建了一个示例,似乎一切都在我这边运行良好,结果像 this。
如果仍然无法正常工作,请尝试使用 F12 开发人员工具检查 CSS,并检查您的代码,是否包含其他 JavaScript 脚本,这将删除活动 class?
问题是 ScrollSpy 会从目标中的所有 dropdown-item
元素中删除 active
class(以便它像 this 一样工作),在大多数情况下是 body
。解决方案是通过使用不同的活动 class(例如 selected
)排除某些下拉菜单成为 ScrollSpy 的目标,并为新选择的 class 创建自定义 CSS .dropdown-item.selected
.
我有一个带下拉菜单的导航栏,我想将其中一项标记为活动,我的 HTML 是:
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#nb">
<span class="navbar-toggler-icon"></span>
</button>
<div id="nb" class="collapse navbar-collapse">
<ul class="navbar-nav ml-auto">
<li class="nav-item active dropdown justify-content-center text-center">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">User guide</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="link1.html">Link 1</a>
<a class="dropdown-item active" href="#">Active Link</a>
</div>
</li>
</ul>
</div>
</nav>
我正在使用这些样式和脚本:
<head>
...
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.2/css/all.min.css" integrity="sha256-zmfNZmXoNWBMemUOo1XUGFfc0ihGGLYdgtJS3KCr/l0=" crossorigin="anonymous" />
<link rel="stylesheet" href="CSS/my_style.css">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script type="text/javascript">
$(function() {$('body').scrollspy({offset:0.02*window.innerHeight});})
</script>
</head>
但是,这在 MS Edge 中有效,但由于某些原因在 chrome 中无效。加载文档后,.active class 从下拉项中消失。
Chrome:版本 77.0.3865.90(正式版)(64 位)
MS Edge:Microsoft Edge 44.18362.329.0,Microsoft EdgeHTML18.18362
知道为什么 chrome 这样做以及如何阻止它吗?
谢谢
编辑
问题似乎出在 scrollspy
<body data-spy="scroll" data-target="#side-nav" data-offset="0">
在 sidenav 上使用
<div id="sidebar" class="col-md-3 col-lg-3 col-xl-2 d-none d-md-block">
<nav id="side-nav" class="navbar navbar-light bg-dark sticky-top">
<nav class="nav nav-pills flex-column">
<a class="nav-link arrow" href="#top"><i class="fas fa-arrow-circle-up fa-2x"></i></a>
<a class="nav-link" href="#intro">Introduction</a>
<a class="nav-link" href="#usage">Usage</a>
<a class="nav-link" href="#properties">Properties</a>
<a class="nav-link arrow" href="#footerInfo"><i class="fas fa-arrow-circle-down fa-2x"></i></a>
</nav>
</nav>
</div>
当我在开发中手动将活动 class 添加到下拉项时。工具,然后向下滚动一点 - 它在 chrome 中消失(不在 MS edge 中)。
... $(函数() {$('body').scrollspy({offset:0.02*window.innerHeight});})
请先尝试清除浏览器数据(缓存、cookie 或历史记录),然后重新测试您的代码。我已经使用您的代码创建了一个示例,似乎一切都在我这边运行良好,结果像 this。
如果仍然无法正常工作,请尝试使用 F12 开发人员工具检查 CSS,并检查您的代码,是否包含其他 JavaScript 脚本,这将删除活动 class?
问题是 ScrollSpy 会从目标中的所有 dropdown-item
元素中删除 active
class(以便它像 this 一样工作),在大多数情况下是 body
。解决方案是通过使用不同的活动 class(例如 selected
)排除某些下拉菜单成为 ScrollSpy 的目标,并为新选择的 class 创建自定义 CSS .dropdown-item.selected
.