제목 없음

css-아코디언-만들기-썸네일


안녕하세요 이코노트허브 입니다.

블로그 글 아래에 "자주 묻는 질문(FAQ)"을 넣고 싶은데, 질문을 다 펼쳐두면 페이지가 너무 길어 보일 때가 있습니다. 클릭했을 때만 답변이 펼쳐지는 아코디언 UI가 필요한 순간이죠. 보통 자바스크립트가 필요하다고 생각하기 쉽지만, 사실 HTML 태그 하나면 CSS도 필요 없이 만들 수 있습니다.

가장 쉬운 방법: details 태그

<details>
  <summary>애드센스 승인은 얼마나 걸리나요?</summary>
  <p>보통 신청 후 몇 주에서 한 달 정도 소요됩니다. 사이트 규모와 심사 상황에 따라 달라질 수 있습니다.</p>
</details>

<details>는 접고 펼치는 기능을 브라우저가 기본으로 지원하는 태그입니다. <summary> 안에 쓴 내용이 클릭 가능한 제목이 되고, 그 아래 내용은 평소엔 숨겨져 있다가 클릭하면 펼쳐집니다. 자바스크립트 코드 없이 이 6줄만으로 작동합니다.

기본 모양이 마음에 안 든다면: CSS로 꾸미기

브라우저 기본 스타일은 화살표 아이콘이 투박합니다. 아래 CSS로 좀 더 깔끔하게 꾸밀 수 있습니다.

details {
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 12px 16px;
  margin-bottom: 8px;
}

summary {
  cursor: pointer;
  font-weight: 700;
  list-style: none;
}

summary::-webkit-details-marker {
  display: none;
}

summary::after {
  content: '+';
  float: right;
}

details[open] summary::after {
  content: '−';
}

몇 가지 포인트를 짚어드리면 이렇습니다.

  • list-style: none::-webkit-details-marker는 브라우저 기본 화살표 아이콘을 숨기는 코드입니다.
  • summary::after { content: '+'; }로 직접 만든 + 아이콘을 오른쪽에 배치했습니다.
  • details[open]은 "펼쳐진 상태일 때"를 가리키는 선택자입니다. 펼쳐지면 아이콘이 +에서 로 바뀌도록 했습니다.

여러 개를 나열할 때: 펼침 효과 부드럽게

details 태그는 기본적으로 펼쳐질 때 뚝 끊기듯 나타납니다. 지난번 배운 transition을 살짝 응용하면 조금 더 부드럽게 만들 수 있습니다.

details p {
  animation: fadeIn 0.3s ease;
}

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

details 태그 자체의 펼침 동작은 CSS로 완전히 애니메이션 처리하기가 까다롭지만, 안에 있는 내용에 페이드인 효과를 주는 것만으로도 훨씬 자연스러운 느낌을 줄 수 있습니다.

FAQ 여러 개, 이렇게 나열하세요

<h2>자주 묻는 질문</h2>

<details>
  <summary>질문 1</summary>
  <p>답변 1</p>
</details>

<details>
  <summary>질문 2</summary>
  <p>답변 2</p>
</details>

<details>
  <summary>질문 3</summary>
  <p>답변 3</p>
</details>

details 태그는 각각 독립적으로 작동해서, 여러 개를 나열해도 서로 영향을 주지 않고 원하는 것만 펼쳐집니다.

초보자가 자주 하는 실수 2가지

  1. summary 안에 너무 많은 내용을 넣는 경우: summary는 클릭하는 제목 영역입니다. 여기에 긴 문장이나 이미지를 넣으면 클릭 영역이 애매해지고 디자인도 깨지기 쉽습니다. 짧은 질문이나 제목 한 줄 정도로 유지하세요.
  2. details[open] 선택자를 안 쓰고 아이콘 전환을 하려는 경우: 자바스크립트로 클래스를 붙였다 뗐다 하는 방식으로 접근하기 쉬운데, details 태그는 [open]이라는 속성 선택자만으로 펼침 상태를 CSS에서 바로 감지할 수 있어 훨씬 간단합니다.

핵심 요약

  • <details><summary> 태그만으로 자바스크립트 없이 접고 펼치는 UI를 만들 수 있습니다.
  • details[open] 선택자로 펼쳐진 상태를 감지해서 아이콘이나 스타일을 바꿀 수 있습니다.
  • 기본 화살표 아이콘이 마음에 안 들면 list-style: none::after로 직접 아이콘을 만들 수 있습니다.
  • details 태그들은 서로 독립적으로 작동해서 여러 개를 나열해도 문제없습니다.

FAQ뿐 아니라 목차, 댓글 접기, 스포일러 가리기 등 다양한 곳에 활용할 수 있는 태그입니다. 자바스크립트가 부담스러웠다면, details 태그부터 가볍게 시작해보시길 추천드립니다.

댓글 쓰기

자유롭게 질문해주세요. 단, 광고성 댓글 및 비방은 사전 통보 없이 삭제됩니다.

다음 이전