There are a ton of issues all surrounding the .active class applied via our tab JS. I'm collecting all of them here to try to de-dupe them and figure out a path forward.
Here's what I have so far (checked indicates closed issue):
Seems like this is all stemming from the flexibility I was trying to provide by allowing .active to be placed on parent items (e.g., <li>s) or the .nav-link itself. To resolve this, I think we need to only allow .active on the .nav-link (or in the case of list groups, .list-group-item). With dropdowns, we also need to have a separate class that is added to the parent or menu to properly show that.
My proposal is this:
- Let's allow this to be flexible for any markup by applying the
.active class only to the item itself, and not the parent.
- Nav links, list group items, and dropdown triggers get
.active on the <a> or <button> for their active state.
- Dropdown triggers get
.active to indicate their associated menu is shown, and the .dropdown-menu gets .shown to indicate it is visible.
That last part is a deviation from the current behavior, and might require more work. I'd be fine keeping .show or .shown on the parent of the dropdown trigger and menu if that'd be easier.
Thoughts @cvrebert, @bardiharborow, @Johann-S?
Potentially related tabs issues and PRs for context:
There are a ton of issues all surrounding the
.activeclass applied via our tab JS. I'm collecting all of them here to try to de-dupe them and figure out a path forward.Here's what I have so far (checked indicates closed issue):
.activetab state isn't removed on tab switch with<nav>-based structure (but does work on<ul>one). Fixing bug described here: Multiple Tabs can become .active at once #20027 #20039 tries to fix this with some new JS, but perhaps not the right direction we want to go (see below)..activeto.nav-link, but the nav docs have it on.nav-item..nav-itemto the parent..activeto.show#21036: Rename.activeto.show(previously.open) for dropdowns.Seems like this is all stemming from the flexibility I was trying to provide by allowing
.activeto be placed on parent items (e.g.,<li>s) or the.nav-linkitself. To resolve this, I think we need to only allow.activeon the.nav-link(or in the case of list groups,.list-group-item). With dropdowns, we also need to have a separate class that is added to the parent or menu to properly show that.My proposal is this:
.activeclass only to the item itself, and not the parent..activeon the<a>or<button>for their active state..activeto indicate their associated menu is shown, and the.dropdown-menugets.shownto indicate it is visible.That last part is a deviation from the current behavior, and might require more work. I'd be fine keeping
.showor.shownon the parent of the dropdown trigger and menu if that'd be easier.Thoughts @cvrebert, @bardiharborow, @Johann-S?
Potentially related tabs issues and PRs for context:
.activestate.