当前位置: 首页 > 知识库问答 >
问题:

前端 - 如何解决侧边栏菜单点击收齐时宽度回弹的问题?

寇甫
2024-09-09

菜单侧边栏点击收齐的时候,宽度会回弹一下,没有在js里面控制或者直接修改宽度,第一个图片是useRenderLayout,第二个是Menu

版本号: "element-plus": "^2.6.1",

image.png PixPin_2024-09-09_10-45-38.gif

css

:root {
  --el-aside-max-width: 200px;
  --el-aside-min-width: 64px;
  --el-aside-width: 200px;
}
//useRenderLayout.scss
$prefix-cls-left: #{$namespace}-render-left;
.#{$prefix-cls-left} {
  display: flex;
  height: 100%;
  .aside-max-width {
    width: var(--el-aside-max-width);
  }
  .aside-min-width {
    width: var(--el-aside-min-width);
  }
  .main-content {
    flex: 1;
    .app-View {
      height: calc(100% - 40px);
      padding: 10px 20px 20px;
    }
  }
}
// Menu.vue
$prefix-cls: #{$namespace}-menu;

.#{$prefix-cls} {
  height: 100%;
  background-color: rgba(255, 255, 255, 0);
  width: 100%;
  // 对宽度有个两秒的动画=>感觉没啥用,没生效
  transition: width 0.2s;
  // 折叠动画的时候,就需要把文字给隐藏掉
  :deep(.el-menu--collapse) {
    // background-color: red;
    // transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out !important;
    .#{$prefix-cls}__title {
      display: none;
    }
  }
}

transition: width 0.2s; 我给宽度加了一个这个 也不管用 ,我想知道它回弹的原因和解决办法

共有1个答案

陶胤
2024-09-09

针对你描述的侧边栏菜单点击收齐时宽度回弹的问题,这通常是由于CSS样式或JavaScript逻辑处理不当导致的。以下是一些可能的解决步骤和检查点:

1. 检查JavaScript逻辑

首先,确保在JavaScript中控制侧边栏宽度的逻辑是正确且一致的。检查是否有任何代码在侧边栏宽度变化后又意外地将其改回。特别是检查点击事件处理函数,确保在折叠和展开时只设置一次宽度。

2. 审查CSS样式

  • 确保CSS过渡(transition)属性应用正确:你已经在.#{$prefix-cls}上设置了transition: width 0.2s;,但请确保这个类确实应用到了侧边栏元素上。你可以通过浏览器的开发者工具来检查元素的计算样式,确认transition属性是否被正确应用。
  • 检查是否有其他CSS规则覆盖:有时候,其他CSS规则可能会覆盖你设置的transition属性。检查是否有其他CSS选择器(如更具体的选择器或!important声明)影响了侧边栏的宽度或过渡效果。
  • 检查父元素或容器样式:侧边栏的宽度变化可能受到其父元素或容器的影响。确保父元素或容器的宽度没有限制侧边栏的过渡效果。

3. 移除不必要的CSS规则

你提到了一些注释掉的CSS规则,如transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out !important;。这些规则如果被激活,可能会干扰侧边栏的过渡效果。确保这些规则没有被错误地应用。

4. 使用JavaScript动态控制类

如果CSS过渡不起作用,你可以考虑使用JavaScript来动态添加或移除类,这些类包含不同的宽度和过渡样式。例如,你可以有一个类.collapsed用于折叠状态,另一个类.expanded用于展开状态。在点击事件处理函数中,根据侧边栏的当前状态添加或移除这些类。

5. 调试和测试

  • 逐步调试:使用浏览器的开发者工具逐步执行JavaScript代码,观察侧边栏宽度的变化。
  • 简化问题:尝试创建一个简单的示例,只包含侧边栏和必要的CSS/JavaScript,以排除其他因素的干扰。
  • 跨浏览器测试:在不同的浏览器上测试侧边栏的行为,以确保问题不是特定于某个浏览器的。

6. 示例代码

这里是一个简化的JavaScript示例,用于控制侧边栏的展开和折叠:

function toggleSidebar() {
  const sidebar = document.querySelector('.sidebar');
  if (sidebar.classList.contains('collapsed')) {
    sidebar.classList.remove('collapsed');
    sidebar.style.width = '200px'; // 或使用CSS变量
  } else {
    sidebar.classList.add('collapsed');
    sidebar.style.width = '64px'; // 或使用CSS变量
  }
}

// 假设你有一个按钮来触发侧边栏的折叠和展开
document.querySelector('.toggle-button').addEventListener('click', toggleSidebar);

确保你的CSS中.collapsed类定义了折叠状态下的样式,包括宽度和可能的过渡效果。

 类似资料:
  • 我需要一个简单的主div列100%满。 有时会出现一个侧边栏,具有动态宽度。 在这个示例中,您可以看到我无法更改侧栏宽度(每次都有一个新的宽度值),并且我无法将主div“拉伸”到100%的宽度。 怎么办?

  • 主要内容:ion-side-menu-content,ion-side-menu,menu-toggle,menu-close,$ionicSideMenuDelegate一个容器元素包含侧边菜单和主要内容。通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换。 效果图如下所示: 用法 要使用侧栏菜单,添加一个父元素<ion-side-menus>,一个中间内容 <ion-side-menu-content>,和一个或更多 <ion-side-menu> 指令。 尝试一下 »

  • 一个容器元素包含侧边菜单和主要内容。通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换。 效果图如下所示: 用法 要使用侧栏菜单,添加一个父元素<ion-side-menus>,一个中间内容 <ion-side-menu-content>,和一个或更多 <ion-side-menu&gt 指令。 <ion-side-menus> <!-- 中间内容 --> <ion-

  • uniapp使用swiper做导航栏,两边会回弹,就会有留白,怎么处理比较好呢? 各种尝试,发现根本不生效

  • 可以从左侧或者右侧滑出的面板。 使用侧栏 在任何元素上增加 .open-panel 类都可以使它能点击打开侧栏。如果有多个侧栏,你可以通过 data-panel='{panel的选择}'来指定具体打开哪一个侧栏 在任何元素上增加 .close-panel 类都可以使他点击关闭侧栏,因为侧栏只能同时打开一个,所以关闭的时候你不用指定是哪一个侧栏。 可以通过 .panel-left 或者 .panel

  • 创建侧边栏对于以下目的很有用: 将 相关文档 分组 为每篇文档 显示一个侧边栏 提供带有 下一页/上一页(next/previous)按钮的 分页导航 要为你的 Docusaurus 网站添加侧边栏的话,需要: 创建一个导出(export) 侧边栏对象(sidebar object) 的文件。 将此对象直接或通过 @docusaurus/preset-classic 传递给 @docusaurus