Collapse

Animated collapse using HTML details.

Collapse
Show something
Code
<details class="blue-collapse">
    <summary>
        <header class="blue-collapse-header d-flex">
            <div class="blue-collapse-chevron" aria-hidden="true">&#10095;</div>
            Collapse
        </header>
    </summary>
    Show something
</details>

Element with class blue-collapse-chevron will be rotated to 90deg by default and if it is the first child. If it’s the last child it will rotate to -90deg. Since text nodes aren’t considered as child elements, you should wrap your text around an element. <span>Collapse</span> in this case:

Collapse
Show something
Code
<details class="blue-collapse">
    <summary>
        <header class="blue-collapse-header d-flex">
            <span>Collapse</span>
            <div class="blue-collapse-chevron" aria-hidden="true">&#10094;</div>
        </header>
    </summary>
    Show something
</details>

You can also customize the rotation target position with the CSS variable --blue-collapse-chevron-rotate:

Collapse
Show something
Code
<details class="blue-collapse">
    <summary>
        <header class="blue-collapse-header d-flex">
            Collapse
            <div class="blue-collapse-chevron" style="--blue-collapse-chevron-rotate: -45deg" aria-hidden="true">
                &#10094;
            </div>
        </header>
    </summary>
    Show something
</details>

Combine with styling of Menu Item

Parent
Code
<details class="blue-collapse">
    <summary class="blue-collapse-header blue-menu-item btn">
        <span class="blue-menu-item-icon" aria-hidden="true">☀️</span>
        <span class="blue-menu-item-label">Parent</span>

        <svg
            xmlns="http://www.w3.org/2000/svg"
            width="1em"
            height="1em"
            fill="currentColor"
            class="blue-menu-item-dropdown-toggle blue-collapse-chevron blue-menu-item-chevron ms-auto"
            style=" display: inline-block; vertical-align: -0.125em; transition: transform 0.2s;"
            viewBox="0 0 16 16"
        >
            <path
                class="blue-sidebar-exception"
                fillRule="evenodd"
                d="M11.354 1.646a.5.5 0 010 .708L5.707 8l5.647 5.646a.5.5 0 01-.708.708l-6-6a.5.5 0 010-.708l6-6a.5.5 0 01.708 0"
            ></path>
        </svg>
    </summary>
    <div class="blue-menu-item-dropdown text-body" style="--blue-menu-item-dropdown-bg: var(--bs-body-bg)">
        <button type="button" class="blue-menu-item btn">
            <span class="blue-menu-item-icon" aria-hidden="true">🌍</span>
            <span class="blue-menu-item-label">Child</span>
        </button>
        <button type="button" class="blue-menu-item btn">
            <span class="blue-menu-item-icon" aria-hidden="true">🌑</span>
            <span class="blue-menu-item-label">Child 2</span>
        </button>
    </div>
</details>

.blue-collapse-group let’s you group a collapse together with another UI element like a button that should come before the collapse summary.

Collapse sub menu
Code
<div class="blue-collapse-group">
    <button type="button" class="blue-menu-item btn">
        <span class="blue-menu-item-icon" aria-hidden="true">☀️</span>
        <span class="blue-menu-item-label">Parent</span>
    </button>
    <details class="blue-collapse">
        <summary class="blue-collapse-header blue-menu-item btn">
            <span class="visually-hidden">Collapse sub menu</span>
            <svg
                xmlns="http://www.w3.org/2000/svg"
                width="1em"
                height="1em"
                fill="currentColor"
                class="blue-menu-item-dropdown-toggle blue-collapse-chevron blue-menu-item-chevron ms-auto"
                style=" display: inline-block; vertical-align: -0.125em; transition: transform 0.2s;"
                viewBox="0 0 16 16"
            >
                <path
                    class="blue-sidebar-exception"
                    fillRule="evenodd"
                    d="M11.354 1.646a.5.5 0 010 .708L5.707 8l5.647 5.646a.5.5 0 01-.708.708l-6-6a.5.5 0 010-.708l6-6a.5.5 0 01.708 0"
                ></path>
            </svg>
        </summary>
        <div class="blue-menu-item-dropdown text-body" style="--blue-menu-item-dropdown-bg: var(--bs-body-bg)">
            <button type="button" class="blue-menu-item btn">
                <span class="blue-menu-item-icon" aria-hidden="true">🌍</span>
                <span class="blue-menu-item-label">Child</span>
            </button>
            <button type="button" class="blue-menu-item btn">
                <span class="blue-menu-item-icon" aria-hidden="true">🌑</span>
                <span class="blue-menu-item-label">Child 2</span>
            </button>
        </div>
    </details>
</div>

Öffnen
Code
<div class="bg-body-secondary py-4" style="width: 16.563rem">
    <div class="blue-collapse-group blue-sidebar-visible-on-open">
        <div class="blue-menu-item-wrapper blue-menu-item-wrapper-208d4903-3a8c-4e7b-9b27-ba27782210f8">
            <button type="button" class="blue-menu-item btn">
                <span class="blue-menu-item-icon  " aria-hidden="true"
                    ><svg
                        xmlns="http://www.w3.org/2000/svg"
                        viewBox="0 0 10240 10240"
                        class="o-collection-icon"
                        width="1em"
                        height="1em"
                        fill="currentColor"
                    >
                        <path
                            fill=""
                            d="M1280 640l5230 0c352,0 656,126 905,375l1170 1170c249,249 375,553 375,905l0 6510 -7680 0 0 -8960zm5760 960l0 960 960 0 -960 -960zm-5120 -320l0 7680 6400 0 0 -5440c0,-176 -144,-320 -320,-320l-1600 0 0 -1600c0,-176 -144,-320 -320,-320l-4160 0z"
                        ></path></svg></span
                ><span class="blue-menu-item-label text-truncate ">Filter &amp; Controls</span>
            </button>
        </div>

        <details class="blue-collapse " open="">
            <summary class="blue-collapse-header blue-menu-item btn ">
                <span class="blue-menu-item-label text-truncate visually-hidden">Öffnen</span
                ><svg
                    xmlns="http://www.w3.org/2000/svg"
                    width="1em"
                    height="1em"
                    fill="currentColor"
                    class="blue-menu-item-dropdown-toggle blue-collapse-chevron blue-menu-item-chevron ms-auto"
                    aria-hidden="true"
                    style=" display: inline-block; vertical-align: -0.125em; transition: transform 0.2s;"
                    viewBox="0 0 16 16"
                >
                    <path
                        class="blue-sidebar-exception"
                        fillrule="evenodd"
                        d="M11.354 1.646a.5.5 0 010 .708L5.707 8l5.647 5.646a.5.5 0 01-.708.708l-6-6a.5.5 0 010-.708l6-6a.5.5 0 01.708 0"
                    ></path>
                </svg>
            </summary>

            <div class="d-flex flex-column border-start position-relative ms-3">
                <a href="#" class="blue-menu-item btn" rel=""
                    ><span class="blue-menu-item-label text-truncate ">Listen</span></a
                >

                <a href="#" class="blue-menu-item btn" rel=""
                    ><span class="blue-menu-item-label text-truncate">Ablage von Filtercontrols in XAML</span></a
                >
            </div>
        </details>
    </div>
</div>

Grab the code

When you don't use the entire Blue Web library, you can also just copy and paste the required code into your own project.

  1. Copy and paste the following code into your project. Source: @/dist/styles/_collapse.scss