无法实现Bootstrap 5侧边栏箭头在aria-expanded=true时旋转的问题
问题解决:Bootstrap侧边栏展开时箭头不旋转
你的问题出在CSS选择器的匹配逻辑上,Bootstrap的Collapse组件切换状态时,会给按钮移除collapsed类并同步更新aria-expanded属性,但直接使用[aria-expanded="true"]属性选择器可能因优先级或状态更新时机问题导致样式不生效。
修复方案
将CSS中控制箭头旋转的选择器替换为基于collapsed类的否定选择器,同时确保样式顺序正确:
.btn-toggle-nav a { display: inline-flex; padding: 0.1875rem 0.5rem; margin-top: 0.125rem; margin-left: 1.25rem; text-decoration: none; } /* 替换原有的[aria-expanded="true"]选择器 */ .btn-toggle:not(.collapsed)::before { transform: rotate(90deg); } .btn-toggle::before { width: 1.25em; line-height: 0; content: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e"); transition: transform .35s ease; transform-origin: 0.5em 50%; }
原因说明
Bootstrap的Collapse插件核心是通过collapsed类来控制折叠/展开状态,虽然会同步更新aria-expanded属性,但类选择器的匹配优先级和稳定性更高,能确保状态切换时样式立即生效。
完整测试代码
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> <div class="col-3"> <a href="/" class="d-flex align-items-center pb-3 mb-3 link-dark text-decoration-none border-bottom"> <span class="fs-5 fw-semibold">Collapsible</span> </a> <ul class="list-unstyled ps-0"> <li class="mb-1"> <button class="btn btn-toggle align-items-center rounded collapsed" data-bs-toggle="collapse" data-bs-target="#home-collapse" aria-expanded="false"> Home </button> <div class="collapse" id="home-collapse"> <ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small"> <li><a href="#" class="link-dark rounded">Overview</a></li> <li><a href="#" class="link-dark rounded">Updates</a></li> <li><a href="#" class="link-dark rounded">Reports</a></li> </ul> </div> </li> <li class="mb-1"> <button class="btn btn-toggle align-items-center rounded collapsed" data-bs-toggle="collapse" data-bs-target="#dashboard-collapse" aria-expanded="false"> Dashboard </button> <div class="collapse" id="dashboard-collapse"> <ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small"> <li><a href="#" class="link-dark rounded">Overview</a></li> <li><a href="#" class="link-dark rounded">Weekly</a></li> <li><a href="#" class="link-dark rounded">Monthly</a></li> <li><a href="#" class="link-dark rounded">Annually</a></li> </ul> </div> </li> <li class="border-top my-3"></li> <li class="mb-1"> <button class="btn btn-toggle align-items-center rounded collapsed" data-bs-toggle="collapse" data-bs-target="#account-collapse" aria-expanded="false"> Account </button> <div class="collapse" id="account-collapse" style=""> <ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small"> <li><a href="#" class="link-dark rounded">New...</a></li> <li><a href="#" class="link-dark rounded">Profile</a></li> <li><a href="#" class="link-dark rounded">Settings</a></li> <li><a href="#" class="link-dark rounded">Sign out</a></li> </ul> </div> </li> <!-- 新增的第四个侧边栏 --> <li class="mb-1"> <button class="btn btn-toggle align-items-center rounded collapsed" data-bs-toggle="collapse" data-bs-target="#extra-collapse" aria-expanded="false"> Extra Menu </button> <div class="collapse" id="extra-collapse"> <ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small"> <li><a href="#" class="link-dark rounded">Subitem 1</a></li> <li><a href="#" class="link-dark rounded">Subitem 2</a></li> </ul> </div> </li> </ul> </div>
内容的提问来源于stack exchange,提问作者Yolo_chicken
相关产品推荐
相关产品推荐

