Tools / UI Kit / Bootstrap / Tree Views

Tree Views

Collapsible file trees, nested category trees and expandable node lists.

Basic Collapsible File Tree
src
components
Button.vue
Card.vue
App.vue
<div class="uk-tree">
    <div class="uk-tree-item uk-tree-toggle">
        <i class="fas fa-chevron-down uk-tree-arrow"></i>
        <i class="fas fa-folder uk-tree-icon"></i> src
    </div>
    <div class="uk-tree-children">
        <div class="uk-tree-item uk-tree-file">
            <i class="fas fa-file-code uk-tree-icon"></i> App.vue
        </div>
    </div>
</div>

<style>
    .uk-tree { font-size: 0.9rem; color: #334155; }
    .uk-tree-item {
        display: flex; align-items: center; gap: 0.5rem;
        padding: 0.3rem 0; cursor: pointer; font-weight: 500;
    }
    .uk-tree-item:hover { color: #0f172a; }
    .uk-tree-arrow { font-size: 0.65rem; color: #94a3b8; width: 12px; transition: transform 0.2s; }
    .uk-tree-icon { width: 16px; text-align: center; }
    .uk-tree-children { padding-left: 1.5rem; border-left: 1px solid #e2e8f0; margin-left: 0.3rem; }
    .uk-tree-file { padding-left: 1.25rem; }
</style>

<script>
    // Toggle logic
    document.querySelectorAll('.uk-tree-toggle').forEach(item => {
        item.addEventListener('click', () => {
            const children = item.nextElementSibling;
            const arrow = item.querySelector('.uk-tree-arrow');
            if (children && children.classList.contains('uk-tree-children')) {
                children.style.display = children.style.display === 'none' ? 'block' : 'none';
                arrow.style.transform = children.style.display === 'none' ? 'rotate(-90deg)' : 'rotate(0deg)';
            }
        });
    });
</script>
Directory Tree with Checkboxes
Documents
Report.pdf
Draft.docx
<div class="uk-tree">
    <div class="uk-tree-item">
        <input type="checkbox" class="uk-tree-checkbox">
        <i class="fas fa-folder uk-tree-icon"></i> Documents
    </div>
    <div class="uk-tree-children">
        <div class="uk-tree-item">
            <input type="checkbox" class="uk-tree-checkbox">
            <i class="fas fa-file-pdf uk-tree-icon"></i> Report.pdf
        </div>
    </div>
</div>

<style>
    .uk-tree { font-size: 0.9rem; color: #334155; }
    .uk-tree-item {
        display: flex; align-items: center; gap: 0.5rem;
        padding: 0.3rem 0; cursor: pointer; font-weight: 500;
    }
    .uk-tree-checkbox {
        width: 14px; height: 14px; accent-color: #1e3a8a; cursor: pointer;
    }
    .uk-tree-icon { width: 16px; text-align: center; }
    .uk-tree-children { padding-left: 1.5rem; border-left: 1px solid #e2e8f0; margin-left: 0.3rem; }
</style>
Sidebar Navigation Tree
UI Components
<div class="uk-tree uk-tree-nav">
    <div class="uk-tree-item uk-tree-toggle uk-tree-nav-active">
        <i class="fas fa-chevron-down uk-tree-arrow"></i>
        <i class="fas fa-layer-group uk-tree-icon"></i> UI Components
    </div>
    <div class="uk-tree-children">
        <div class="uk-tree-item uk-tree-nav-link">Buttons</div>
        <div class="uk-tree-item uk-tree-nav-link">Forms</div>
    </div>
</div>

<style>
    .uk-tree { font-size: 0.9rem; color: #334155; }
    .uk-tree-item {
        display: flex; align-items: center; gap: 0.5rem;
        padding: 0.4rem 0.5rem; cursor: pointer; font-weight: 500;
        border-radius: 0.35rem; transition: background 0.15s;
    }
    .uk-tree-item:hover { background: #f8fafc; }
    .uk-tree-nav-active { background: #eef2f8; color: #1e3a8a; }
    .uk-tree-arrow { font-size: 0.65rem; color: #94a3b8; width: 12px; }
    .uk-tree-icon { width: 16px; text-align: center; }
    .uk-tree-children { padding-left: 1.5rem; }
    .uk-tree-nav-link { font-size: 0.85rem; color: #64748b; }
    .uk-tree-nav-link:hover { color: #1e3a8a; }
</style>
Deeply Nested Tree
Level 1
Level 2
Level 3
Level 4 Leaf Node
<div class="uk-tree">
    <div class="uk-tree-item">Level 1</div>
    <div class="uk-tree-children">
        <div class="uk-tree-item">Level 2</div>
        <div class="uk-tree-children">
            <div class="uk-tree-item">Level 3</div>
        </div>
    </div>
</div>

<style>
    .uk-tree { font-size: 0.9rem; color: #334155; }
    .uk-tree-item {
        display: flex; align-items: center; gap: 0.5rem;
        padding: 0.3rem 0; font-weight: 500;
    }
    .uk-tree-children { padding-left: 1.5rem; border-left: 1px solid #e2e8f0; margin-left: 0.3rem; }
</style>
CSS Connecting Lines Tree
  • src
    • App.vue
    • components
      • Header.vue
      • Footer.vue
<div class="uk-tree-lines">
    <ul>
        <li>
            <span>src</span>
            <ul>
                <li><span>App.vue</span></li>
                <li>
                    <span>components</span>
                    <ul>
                        <li><span>Header.vue</span></li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</div>

<style>
    .uk-tree-lines ul {
        list-style: none; padding-left: 20px; margin: 0;
        position: relative;
    }
    .uk-tree-lines li {
        position: relative; padding-left: 15px; line-height: 1.8;
    }
    /* Vertical line */
    .uk-tree-lines li::before {
        content: ''; position: absolute; left: 0; top: 0; bottom: 0;
        border-left: 1px solid #cbd5e1;
    }
    /* Horizontal line */
    .uk-tree-lines li::after {
        content: ''; position: absolute; left: 0; top: 0.9em;
        width: 10px; border-top: 1px solid #cbd5e1;
    }
    /* Remove lines for the root item */
    .uk-tree-lines > ul > li::before,
    .uk-tree-lines > ul > li::after {
        display: none;
    }
    .uk-tree-lines > ul { padding-left: 0; }
    .uk-tree-lines > ul > li { padding-left: 0; }
</style>