Angular で展開可能および折りたたみ可能なサイドバーを作成すると、アプリケーションのユーザー エクスペリエンスが大幅に向上します。このチュートリアルでは、アイコンとスムーズな遷移を備えたこのようなサイドバーを構築するためのステップバイステップのガイドを提供します。コンポーネント構造の設定から、サイドバーを切り替えるためのスタイルとロジックの適用まで、すべてを説明します。
折りたたみ可能なサイドバーは、以下によってアプリケーションの使いやすさを向上させます。
まず、Angular CLI がインストールされていることを確認します。そうでない場合は、次を実行します:
npm install -g @angular/cli
新しい Angular プロジェクトを作成します:
ng new angular-sidebar cd angular-sidebar
必要なコンポーネントを生成します:
ng generate component sidebar
これはアプリケーションのメインコンテナとして機能します。サイドバーとその状態を切り替えるボタンを追加します:
<div> <h4> <strong>app.component.ts</strong> </h4> <p>Add the logic to manage the sidebar's state:<br> </p> <pre class="brush:php;toolbar:false">import { Component } from '@angular/core'; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], }) export class AppComponent { isSidebarCollapsed = false; onSidebarToggle() { this.isSidebarCollapsed = !this.isSidebarCollapsed; } }
ネストされた項目を含むメニューを含む、サイドバーの HTML 構造を定義します。
<div> <h4> <strong>sidebar.component.ts</strong> </h4> <p>Handle the toggle logic for menu items and sidebar:<br> </p> <pre class="brush:php;toolbar:false">import { Component, EventEmitter, Input, Output } from '@angular/core'; interface MenuItem { icon: string; label: string; children?: MenuItem[]; isOpen?: boolean; } @Component({ selector: 'app-sidebar', templateUrl: './sidebar.component.html', styleUrls: ['./sidebar.component.scss'], }) export class SidebarComponent { @Input() isSidebarCollapsed = false; @Output() sidebarToggle = new EventEmitter<void>(); menuItems: MenuItem[] = [ { icon: 'fas fa-home', label: 'Dashboard', isOpen: false, children: [ { icon: 'fas fa-chart-pie', label: 'Analytics' }, { icon: 'fas fa-tasks', label: 'Projects' }, ] }, { icon: 'fas fa-cog', label: 'Settings', isOpen: false, children: [ { icon: 'fas fa-user', label: 'Profile' }, { icon: 'fas fa-lock', label: 'Security' }, ] }, { icon: 'fas fa-envelope', label: 'Messages' } ]; toggleSidebar() { this.sidebarToggle.emit(); } toggleMenuItem(item: MenuItem) { // Only toggle if sidebar is not collapsed and item has children if (!this.isSidebarCollapsed && item.children) { item.isOpen = !item.isOpen; } } }
レイアウトとトランジション用のグローバル スタイルを追加します:
.app-container { display: flex; height: 100vh; overflow: hidden; } .content { flex-grow: 1; margin-left: 250px; transition: all 0.3s ease-in-out; background-color: #f4f6f7; overflow-y: auto; &-inner { padding: 2rem; max-width: 1200px; margin: 0 auto; } &-expanded { margin-left: 50px; } } .sidebar-toggle-btn { position: absolute; top: 1rem; left: 200px; // Default position when sidebar is expanded background-color: #2c3e50; border: none; color: #fff; padding: 0.5rem; border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; cursor: pointer; z-index: 1001; box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; &:hover { background-color: #34495e; } &.sidebar-collapsed { left: 15px; // Position when sidebar is collapsed } }
サイドバーとメニューのスタイルを定義します:
.sidebar { background-color: #2c3e50; color: #ecf0f1; height: 100vh; width: 250px; position: fixed; top: 0; left: 0; z-index: 1000; transition: all 0.3s ease-in-out; overflow-x: hidden; box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); } .sidebar-header { display: flex; justify-content: center; align-items: center; padding: 1.5rem; position: relative; } .sidebar-logo { color: #fff; text-decoration: none; font-size: 1.5rem; font-weight: bold; text-align: center; } .sidebar-menu { padding: 1rem 0; ul { list-style-type: none; padding: 0; margin: 0; } } .sidebar-menu-item { position: relative; } .sidebar-item { display: flex; align-items: center; color: #ecf0f1; text-decoration: none; padding: 0.75rem 1rem; transition: all 0.2s ease; cursor: pointer; &:hover { background-color: rgba(255, 255, 255, 0.1); } &.menu-item-active { background-color: rgba(255, 255, 255, 0.2); } i { margin-right: 0.75rem; &.sidebar-item-arrow { margin-left: auto; font-size: 0.8rem; transition: transform 0.3s ease; &.rotated { transform: rotate(180deg); } } } &-text { opacity: 1; transition: opacity 0.3s ease-in-out; } &.has-children { position: relative; } } .sidebar-submenu { background-color: rgba(0, 0, 0, 0.1); .sidebar-item { padding-left: 3rem; font-size: 0.9rem; } } .sidebar-collapsed { width: 50px; .sidebar-menu-item { position: static; } .sidebar-item { i { margin-right: 0; } &-text, &-arrow { opacity: 0; width: 0; overflow: hidden; } } .sidebar-submenu { display: none; } }
開発サーバーを起動します:
ng serve
http://localhost:4200/ に移動して、サイドバーが動作していることを確認します。
sidebar.component.ts の menuItems 配列を変更し、適切なアイコン クラスを提供します。
はい、Angular のアニメーション モジュールを使用して、メニューの開閉時にスムーズな遷移を追加します。
展開状態と折りたたまれた状態について、sidebar.component.scss の width プロパティを更新します。
このガイドでは、Angular で機能的に拡張および折りたたみ可能なサイドバーを作成するための重要な手順をすべて説明します。アプリケーションのニーズに合わせてデザインと機能をさらにカスタマイズできます。
以上がアイコンを備えた Angular の展開および折りたたみ可能なサイドバーのステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。