CSS만을 사용하여 자바스크립트 없이도 간단한 아코디언 메뉴와 탭 인터페이스를 구현할 수 있습니다. 이러한 인터랙티브 UI는 사용자 경험을 향상시키는 중요한 요소이며, CSS를 활용하면 간결하고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 이 글에서는 순수 CSS로 아코디언 메뉴와 탭 인터페이스를 만드는 방법을 소개합니다.

1. CSS로 구현하는 아코디언 메뉴

아코디언 메뉴는 여러 섹션을 포함하며, 하나의 섹션을 클릭하면 해당 섹션이 확장되고, 다른 섹션은 축소되는 UI 컴포넌트입니다.

1.1 HTML 구조:

<div class="accordion">
    <input type="radio" name="accordion" id="section1" checked>
    <label for="section1">Section 1</label>
    <div class="content">
        <p>This is the content of section 1.</p>
    </div>

    <input type="radio" name="accordion" id="section2">
    <label for="section2">Section 2</label>
    <div class="content">
        <p>This is the content of section 2.</p>
    </div>

    <input type="radio" name="accordion" id="section3">
    <label for="section3">Section 3</label>
    <div class="content">
        <p>This is the content of section 3.</p>
    </div>
</div>

1.2 CSS 스타일링:

.accordion {
    width: 100%;
    max-width: 600px;
    margin: 20px auto;
    border: 1px solid #ccc;
    border-radius: 8px;
    overflow: hidden;
}

.accordion input {
    display: none;
}

.accordion label {
    display: block;
    padding: 15px;
    background-color: #3498db;
    color: white;
    cursor: pointer;
    border-bottom: 1px solid #ccc;
    font-weight: bold;
}

.accordion label:hover {
    background-color: #2980b9;
}

.accordion .content {
    max-height: 0;
    overflow: hidden;
    background-color: #f1f1f1;
    transition: max-height 0.3s ease;
    padding: 0 15px;
    box-sizing: border-box;
}

.accordion input:checked + label + .content {
    max-height: 200px; /* 적절한 최대 높이 설정 */
    padding: 15px;
}

설명:

  • input[type="radio"]: 각 아코디언 섹션에 라디오 버튼을 사용하여 하나의 섹션만 열리도록 설정합니다.
  • label: 섹션의 제목을 나타내며, 클릭하면 해당 섹션이 확장됩니다.
  • .content: 각 섹션의 내용으로, 기본적으로 숨겨져 있다가 관련 라디오 버튼이 선택되면 확장됩니다.

2. CSS로 구현하는 탭 인터페이스

탭 인터페이스는 여러 콘텐츠를 동일한 영역에서 전환하여 보여줄 수 있는 컴포넌트입니다. CSS로 탭을 구현하면 간단한 구조와 스타일로 다양한 콘텐츠를 효과적으로 제어할 수 있습니다.

2.1 HTML 구조:

<div class="tabs">
    <input type="radio" name="tab-control" id="tab1" checked>
    <label for="tab1">Tab 1</label>
    <input type="radio" name="tab-control" id="tab2">
    <label for="tab2">Tab 2</label>
    <input type="radio" name="tab-control" id="tab3">
    <label for="tab3">Tab 3</label>

    <div class="content" id="content1">
        <p>This is the content of Tab 1.</p>
    </div>
    <div class="content" id="content2">
        <p>This is the content of Tab 2.</p>
    </div>
    <div class="content" id="content3">
        <p>This is the content of Tab 3.</p>
    </div>
</div>

2.2 CSS 스타일링:

.tabs {
    width: 100%;
    max-width: 600px;
    margin: 20px auto;
}

.tabs input {
    display: none;
}

.tabs label {
    display: inline-block;
    padding: 10px 20px;
    margin-right: 5px;
    background-color: #3498db;
    color: white;
    cursor: pointer;
    border-radius: 4px 4px 0 0;
    font-weight: bold;
}

.tabs label:hover {
    background-color: #2980b9;
}

.tabs .content {
    display: none;
    padding: 20px;
    background-color: #f1f1f1;
    border: 1px solid #ccc;
    border-radius: 0 0 4px 4px;
    box-sizing: border-box;
}

.tabs input:checked + label + .content {
    display: block;
}

설명:

  • input[type="radio"]: 각 탭에 라디오 버튼을 사용하여 하나의 콘텐츠만 표시되도록 설정합니다.
  • label: 각 탭의 제목으로, 클릭하면 관련 콘텐츠가 표시됩니다.
  • .content: 탭에 해당하는 콘텐츠로, 관련 라디오 버튼이 선택되면 표시됩니다.

3. CSS로 구현된 아코디언 메뉴와 탭 인터페이스의 한계

CSS만으로 아코디언 메뉴와 탭 인터페이스를 구현할 수 있지만, 복잡한 상호작용이나 동적 콘텐츠 업데이트는 어려울 수 있습니다. 이러한 경우 JavaScript를 함께 사용하면 더욱 강력한 기능을 추가할 수 있습니다.

결론

순수 CSS만으로 아코디언 메뉴와 탭 인터페이스를 구현하면 자바스크립트 없이도 간단한 상호작용을 제공할 수 있습니다. 이는 코드가 간결해지고, 유지보수가 쉬워지는 장점이 있습니다. 이 글에서 소개한 방법을 바탕으로, 다양한 인터랙티브 UI를 구현해보세요. 이를 통해 사용자 경험을 향상시키고, 웹 페이지의 상호작용성을 높일 수 있을 것입니다.

+ Recent posts