Computer >> 컴퓨터 >  >> 프로그래밍 >> CSS

CSS와 JavaScript로 트리 뷰(Tree View) 만드는 방법

웹 페이지에서 파일 탐색기처럼 계층 구조를 보여주고 싶다면 트리 뷰(Tree View)가 유용한 UI 요소입니다. CSS와 JavaScript만으로도 별도의 라이브러리 없이 클릭 시 노드를 펼치고 접을 수 있는 트리 뷰를 손쉽게 구현할 수 있습니다.

이 글에서는 중첩된 <ul>, <li> 목록과 간단한 JavaScript 이벤트 처리를 활용해 트리 뷰를 만드는 전체 과정을 예제와 함께 살펴보겠습니다.

전체 예제 코드

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    ul, #treeUL {
        list-style-type: none;
    }
    #treeUL {
        margin: 0;
        padding: 0;
    }
    .rootTree {
        cursor: pointer;
        user-select: none;
        font-size: 18px;
        font-weight: bold;
        color: blue;
    }
    li {
        font-size: 16px;
        color: crimson;
        font-weight: 500;
    }
    .rootTree::before {
        content: "\25B6";
        color: black;
        display: inline-block;
        margin-right: 6px;
    }
    .rootTree-down::before {
        transform: rotate(90deg);
    }
    .children {
        display: none;
    }
    .active {
        display: block;
    }
</style>
</head>
<body>
<h1>Tree view example</h1>
<ul id="treeUL">
<li>
<span class="rootTree">Root</span>
<ul class="children">
<li>/bin</li>
<li>/etc</li>
<li>
<span class="rootTree">/home</span>
<ul class="children">
<li>/home/Downloads</li>
<li>/home/Pictures/</li>
<li>
<span class="rootTree">/home/Desktop</span>
<ul class="children">
<li>/home/Desktop/file.txt</li>
<li>/home/Desktop/file1.mp3</li>
<li>/home/Desktop/file1.mp4</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<script>
    var toggler = document.querySelectorAll(".rootTree");
    Array.from(toggler).forEach(item => {
        item.addEventListener("click", () => {
            item.parentElement.querySelector(".children").classList.toggle("active");
            item.classList.toggle("rootTree-down");
        });
    });
</script>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같이 Root라는 최상위 노드만 보이는 트리 뷰가 화면에 출력됩니다. 하위 항목들은 기본적으로 숨겨져 있습니다.

CSS와 JavaScript로 트리 뷰(Tree View) 만드는 방법

노드를 클릭하여 펼친 경우

삼각형 캐럿(▶)이 있는 항목을 클릭하면 해당 노드의 하위 디렉터리와 파일들이 아래와 같이 펼쳐지며, 캐럿 아이콘도 90도 회전해 열린 상태임을 나타냅니다.

CSS와 JavaScript로 트리 뷰(Tree View) 만드는 방법

동작 원리 정리

1. HTML 구조

트리의 각 계층은 중첩된 <ul><li>로 구성됩니다. 폴더 역할을 하는 항목에는 .rootTree 클래스를 가진 <span>을 사용하고, 그 자식 항목들은 .children 클래스를 가진 <ul> 안에 배치합니다.

2. CSS 스타일링

.rootTree::before 선택자에 유니코드 문자(\25B6)를 넣어 삼각형 캐럿 아이콘을 표시하고, .rootTree-down 클래스가 추가되면 transform: rotate(90deg)로 아이콘을 회전시켜 확장 상태를 시각적으로 알려줍니다. 또한 .children은 기본적으로 display: none으로 숨기고, .active 클래스가 붙으면 display: block으로 변경되어 내용이 보이게 됩니다.

3. JavaScript 이벤트 처리

document.querySelectorAll(".rootTree")로 모든 폴더 항목을 선택한 뒤, 각 항목에 클릭 이벤트 리스너를 등록합니다. 클릭이 발생하면 classList.toggle()을 사용해 자식 목록의 .active 클래스와 자신의 .rootTree-down 클래스를 번갈아 추가·제거함으로써 펼침/접힘 상태를 전환합니다.

이처럼 몇 줄의 CSS와 JavaScript만으로도 파일 탐색기 스타일의 트리 뷰를 완성할 수 있으며, 실제 프로젝트에서는 애니메이션 효과나 아이콘 이미지, 비동기 데이터 로딩 등을 추가해 더욱 풍부한 UX를 제공할 수 있습니다.