Collapsable Menu

Collapsable menu is a menu that can be expanded and collapsed. It is useful for displaying a list of items that can be expanded to show more details.

  • Products
  • Orders
  • Customers
HTML
                        
    <div x-data="{ isOpen: false }" class="collapsable-menu">
        <button type="button" class="collapsable-menu-btn" @click="isOpen = !isOpen"
        :aria-expanded="isOpen" aria-controls="collapse-example-1">
        E-Commerce
        </button>
        <div x-show="isOpen" class="collapsable-menu-content" x-transition id="collapse-example-1">
            <ul>
                <li class="collapsable-menu-item">
                    Products
                </li>
                <li class="collapsable-menu-item">
                    Orders
                </li>
                <li class="collapsable-menu-item">
                    Customers
                </li>
            </ul>
        </div>
    </div>
                        
                    
CSS
                        
    .collapsable-menu {
        --collapsable-menu-hover-bg: var(--bs-light-100);
        width: 100%;
        max-width: 300px;
    }
    [data-bs-theme="dark"] .collapsable-menu {
        --collapsable-menu-hover-bg: var(--bs-dark-100);
    }
    .collapsable-menu-btn {
        text-align: left;
        padding: var(--bs-spacer-2);
        border-radius: 0.25rem;
        cursor: pointer;
        border: none;
        width: 100%;
        transition: 0.3s;
        background-color: transparent;
    }
    .collapsable-menu-btn:hover {
        background-color: var(--collapsable-menu-hover-bg);
    }
    .collapsable-menu-btn::after {
        content: '\f078';
        font-family: 'Font Awesome 5 Free';
        font-weight: 900;
        float: right;
    }
    .collapsable-menu-btn[aria-expanded="true"]::after {
        content: '\f077';
    }
    .collapsable-menu-content {
        display: block;
    }
    .collapsable-menu-content ul {
        padding: 0;
        list-style: none;
    }
    .collapsable-menu-item {
        cursor: pointer;
        padding: var(--bs-spacer-1);
        border-radius: var(--bs-border-radius);
        padding-left: var(--bs-spacer-4);
    }
    .collapsable-menu-item:hover {
        background-color: var(--collapsable-menu-hover-bg);
    }