当前位置:首页 > VUE

vue实现左边侧边栏

2026-02-23 21:27:34VUE

实现左侧边栏的基本结构

使用Vue.js结合Vue Router和CSS可以快速构建左侧边栏。侧边栏通常包含导航菜单,并与主内容区域并列显示。

<template>
  <div class="app-container">
    <div class="sidebar">
      <nav>
        <router-link to="/">首页</router-link>
        <router-link to="/about">关于</router-link>
        <!-- 更多导航项 -->
      </nav>
    </div>
    <div class="main-content">
      <router-view></router-view>
    </div>
  </div>
</template>

样式设计

通过CSS Flex布局或Grid布局实现侧边栏与主内容的并排排列,侧边栏固定宽度,主内容自适应剩余空间。

vue实现左边侧边栏

<style scoped>
.app-container {
  display: flex;
  height: 100vh;
}

.sidebar {
  width: 200px;
  background-color: #f0f0f0;
  padding: 20px;
}

.main-content {
  flex: 1;
  padding: 20px;
}

nav a {
  display: block;
  margin-bottom: 10px;
  color: #2c3e50;
  text-decoration: none;
}

nav a.router-link-exact-active {
  color: #42b983;
  font-weight: bold;
}
</style>

动态折叠侧边栏

添加一个按钮控制侧边栏的展开与折叠,通过Vue的响应式数据控制样式变化。

<template>
  <div class="app-container">
    <button @click="toggleSidebar">切换侧边栏</button>
    <div class="sidebar" :class="{ 'collapsed': isCollapsed }">
      <nav>
        <router-link to="/">首页</router-link>
        <router-link to="/about">关于</router-link>
      </nav>
    </div>
    <div class="main-content">
      <router-view></router-view>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isCollapsed: false
    }
  },
  methods: {
    toggleSidebar() {
      this.isCollapsed = !this.isCollapsed;
    }
  }
}
</script>
.sidebar.collapsed {
  width: 50px;
  overflow: hidden;
}

.sidebar.collapsed nav a {
  text-overflow: ellipsis;
  white-space: nowrap;
}

使用组件化拆分

将侧边栏拆分为独立组件,提高代码复用性和可维护性。

vue实现左边侧边栏

<!-- Sidebar.vue -->
<template>
  <div class="sidebar" :class="{ 'collapsed': collapsed }">
    <nav>
      <slot></slot>
    </nav>
  </div>
</template>

<script>
export default {
  props: {
    collapsed: Boolean
  }
}
</script>
<!-- App.vue -->
<template>
  <div class="app-container">
    <button @click="toggleSidebar">切换侧边栏</button>
    <Sidebar :collapsed="isCollapsed">
      <router-link to="/">首页</router-link>
      <router-link to="/about">关于</router-link>
    </Sidebar>
    <div class="main-content">
      <router-view></router-view>
    </div>
  </div>
</template>

响应式设计

通过媒体查询实现移动端适配,小屏幕下侧边栏自动隐藏或改为下拉菜单。

@media (max-width: 768px) {
  .sidebar {
    position: fixed;
    height: 100%;
    z-index: 100;
    transform: translateX(-100%);
    transition: transform 0.3s ease;
  }

  .sidebar.collapsed {
    transform: translateX(0);
    width: 200px;
  }
}

状态管理

对于复杂应用,可以使用Vuex或Pinia管理侧边栏的展开状态,便于跨组件访问。

// store.js
import { createStore } from 'vuex'

export default createStore({
  state: {
    sidebarCollapsed: false
  },
  mutations: {
    toggleSidebar(state) {
      state.sidebarCollapsed = !state.sidebarCollapsed
    }
  }
})
<!-- App.vue -->
<template>
  <button @click="$store.commit('toggleSidebar')">切换侧边栏</button>
  <Sidebar :collapsed="$store.state.sidebarCollapsed" />
</template>

标签: 侧边vue
分享给朋友:

相关文章

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框…

eventbus vue实现

eventbus vue实现

EventBus 实现原理 EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。 创建 EventBus 在 Vue 项目中创建一个独立…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标签…

vue实现博客

vue实现博客

Vue 实现博客的基本步骤 使用 Vue.js 实现一个博客系统可以分为前端和后端两部分。以下是基于 Vue 的前端实现方案,后端可以选择 Node.js、Django 或其他框架。 项目初始化…

vue 实现modal

vue 实现modal

Vue 实现 Modal 的方法 使用 Vue 原生组件 通过 Vue 的组件系统可以轻松实现 Modal。创建一个可复用的 Modal 组件,通过 props 控制显示与隐藏。 <templ…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show…