You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

侧边栏子菜单显示异常修复请求:宽度与居中问题

侧边栏子菜单样式调整需求

我希望实现如下效果:

  • 子菜单(portfolio、contact等)背景占满整个宽度;
  • 子菜单标题大致居中。

我的侧边栏包含Category和Markets两个分类,当前子菜单(Portfolio、Contact、Indice等)宽度不足,左侧存在留白,同时子菜单标题未居中。

以下是相关代码:

HTML 代码

<div class="sidebar" [class.sidebar-close]="!openSidebar" >
    <div class="logo-details">
        <img src="https://zupimages.net/up/22/42/refj.png" /> 
    
    </div>
    <ul class="nav-links" id="nav-links" >
      <li *ngFor="let item of menuSidebar" #itemEl routerLinkActive="active">
        <div *ngIf="item.sub_menu.length == 0" class="dropdown-title">
          <a [routerLink]="[item.link]">
            <i [class]="item.icon"></i>
            <span class="link_name">{{item.link_name}}</span>
          </a>
        </div>
        <div *ngIf="item.sub_menu.length > 0" class="dropdown-title" (click)="showSubmenu(itemEl)">
          <a>
            <i [class]="item.icon"></i>
            <span class="link_name">{{item.link_name}}</span>
          </a>
          <i class='bx bxs-chevron-down arrow'></i>
        </div>
        <ul class="sub-menu" [class.blank]="item.sub_menu.length == 0">
          <li><a class="link_name">{{item.link_name}}</a></li>
          <li *ngFor="let item_sub of item.sub_menu" routerLinkActive="active">
            <a [routerLink]="[item_sub.link]">{{item_sub.link_name}}</a>
          </li>
        </ul>
      </li>
    </ul>
  </div>

CSS 代码

/* Sidebar */
.sidebar {
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  width: 260px;
  background: white;
  z-index: 100;
  transition: all 0.5s ease;
}

.sidebar.sidebar-close {
  width: 60px;

}

.sidebar .logo-details{
  width: 100%;
  padding: 10px 10px 10px 10px;
}

.sidebar .logo-details img{
  height: 50px;
  width: 80%;
  display: block;
  margin: 0 auto;
 
}

.sidebar.sidebar-close .logo-details img {
  width: 37px;
  height: 50px;
  transform: scale(1.2) translateX(-3px);
}

.sidebar .nav-links {
  height: 100%;
  width: 260px;
  padding-bottom: 150px;
  overflow: auto;
}

.sidebar .nav-links::-webkit-scrollbar {
  display: none;
}

.sidebar .nav-links li {
  list-style: none;
}

.sidebar .nav-links > li {
  position: relative;
  width: fit-content;
}

.sidebar .nav-links li:hover {
  background: #ffa726;
}

.sidebar .nav-links li.active {
  background-image: linear-gradient(to right, #ffa726, #ff5722);
}

/* Dropdown Title */
.sidebar .nav-links .dropdown-title {
  width: 260px;
  overflow: hidden;
  transition: all 0.52s ease;
  /* */
  display: flex;
  align-items: center;
  justify-content: space-between;
  position: relative;
}

.sidebar.sidebar-close .nav-links .dropdown-title {
  width: 60px;
}


.sidebar .nav-links li i {
  height: 50px;
  min-width: 60px;
  text-align: center;
  line-height: 50px;
  color: #ffa726;
  font-size: 20px;
  cursor: pointer;
  transition: all 0.3s ease;
}

.sidebar .nav-links li:hover i, 
.sidebar .nav-links li.active i {
  color: white;
}

.sidebar .nav-links li.showMenu i.arrow {
  transform: rotate(-180deg);
}

/* a Tag */
.sidebar .nav-links li a {
  display: flex;
  align-items: center;
  text-decoration: none;
  width: 100%;
}

/* Link Name */
.sidebar .nav-links li a .link_name {
  font-size: 16px;
  font-weight: 600;
  color: #ffa726;
  transition: all 0.4s ease;
}

.sidebar .nav-links li:hover a .link_name, 
.sidebar .nav-links li.active a .link_name {
  color: white;
}

.sidebar.sidebar-close .nav-links li a .link_name {
  pointer-events: none;
}

/* Sub Menu */
.sidebar .nav-links li .sub-menu {
  padding: 6px 6px 14px 70px;
  /* margin-top: -10px; */
  background: white;
  display: none;
  transition: all 0.4s ease;
}

.sidebar .nav-links li.showMenu .sub-menu {
  display: block;
}

.sidebar .nav-links li .sub-menu a {
  color: #ffa726;
  font-size: 15px;
  padding: 7px 0;
  white-space: nowrap;
  transition: all 0.3s ease;
}

.sidebar .nav-links li .sub-menu li {
  padding-left: 10px;
}


.sidebar .nav-links li .sub-menu li:hover a, 
.sidebar .nav-links li .sub-menu li.active a {
  color: white;
}

.sidebar.sidebar-close .nav-links li .sub-menu {
  position: absolute;
  left: 100%;
  top: -10px;
  margin-top: 0;
  padding: 0;
  border-radius: 0 6px 6px 0;
  opacity: 0;
  display: block;
  pointer-events: none;
  transition: 0s;
  overflow: hidden;
}

.sidebar.sidebar-close .nav-links li .sub-menu li {
  padding: 6px 15px;
  width: 200px;
}

.sidebar.sidebar-close .nav-links li:hover .sub-menu {
  top: 0;
  opacity: 1;
  pointer-events: auto;
  transition: all 0.4s ease;
}

.sidebar .nav-links li .sub-menu .link_name {
  display: none;
}

.sidebar.sidebar-close .nav-links li .sub-menu .link_name {
  font-size: 16px;
  font-weight: 600;
  /* opacity: 1; */
  display: block;
}

/* li:first-child contain .link_name */
.sidebar.sidebar-close .nav-links li .sub-menu li:first-child {
  background: white;
  pointer-events: none;
}

.sidebar.sidebar-close .nav-links li .sub-menu li:first-child:hover .link_name, 
.sidebar.sidebar-close .nav-links li .sub-menu li:first-child.active .link_name {
  color: #ffa726;
}


.sidebar .nav-links li .sub-menu.blank {
  pointer-events: auto;
  /* padding: 3px 20px 6px 16px; */
  opacity: 0;
  pointer-events: none;
}

.sidebar .nav-links li:hover .sub-menu.blank, 
.sidebar .nav-links li.active .sub-menu.blank {
  top: 50%;
  transform: translateY(-50%);
}

.sidebar.sidebar-close ~ .home-section {
  left: 60px;
  width: calc(100% - 60px);
}
解决方案

针对需求修改以下CSS规则即可:

1. 让子菜单背景占满整个宽度

首先修改父级列表项的宽度,使其撑满侧边栏:

.sidebar .nav-links > li {
  position: relative;
  width: 100%; /* 替换原有width: fit-content */
}

然后调整子菜单的内边距,去掉左侧偏移:

.sidebar .nav-links li .sub-menu {
  padding: 6px 6px 14px 6px; /* 替换原有padding: 6px 6px 14px 70px */
  background: white;
  display: none;
  transition: all 0.4s ease;
}

2. 让子菜单标题居中

给子菜单的标题项添加居中样式:

.sidebar .nav-links li .sub-menu li:first-child a {
  text-align: center;
  display: block;
}

若需在侧边栏收起状态下保持标题居中,补充:

.sidebar.sidebar-close .nav-links li .sub-menu li:first-child a {
  text-align: center;
}

修改后即可实现子菜单背景铺满宽度、标题居中的效果。

内容的提问来源于stack exchange,提问作者poporp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:55:13