HTML Academy · 강의

details와 summary 공개 위젯

JavaScript 없이 기본 제공 펼치기 및 접기 구성 요소 만들기

레슨 3/413개 단계

details와 summary 공개 위젯은(는) CoddyKit의 무료 HTML Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 HTML Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

details와 summary란 무엇인가요?

<details>와 <summary> 요소는 JavaScript 없이 브라우저 기본 공개 위젯, 즉 펼치기 및 접기 기능을 만드는 요소입니다.

<details>
  <summary>What is HTML?</summary>
  <p>HTML (HyperText Markup Language) is the standard markup language
     used to create web pages.</p>
</details>

작동 방식

상호 작용 동작:

  • 기본적으로 <summary>만 표시됩니다
  • summary를 클릭하면 나머지 콘텐츠의 표시 여부가 전환됩니다
  • 기본적으로 summary에 공개 삼각형이 표시됩니다
  • JavaScript가 필요하지 않습니다

open 속성

open 속성은 details 요소를 미리 펼쳐 둡니다.

<details open>
  <summary>Installation instructions</summary>
  <ol>
    <li>Download the installer</li>
    <li>Run the installer</li>
    <li>Restart your computer</li>
  </ol>
</details>
<!-- open is a boolean attribute: presence = expanded -->
<!-- Remove it to start collapsed -->

FAQ 만들기

FAQ 섹션은 이 기능을 사용하기에 매우 적합합니다.

<h2>Frequently Asked Questions</h2>

<details>
  <summary>Is HTML5 a programming language?</summary>
  <p>No. HTML5 is a markup language that defines the structure and meaning
     of web content. Programming languages like JavaScript add logic and behavior.</p>
</details>

<details>
  <summary>Do I need to close void elements?</summary>
  <p>In HTML5, void elements like &lt;img&gt; and &lt;br&gt; do not require
     a closing slash. Both &lt;br&gt; and &lt;br /&gt; are valid.</p>
</details>

details와 summary 스타일 지정

모양을 사용자 지정합니다.

details {
  border: 1px solid #e2e8f0;
  border-radius: 0.5rem;
  padding: 0.75rem 1rem;
  margin-bottom: 0.5rem;
}

summary {
  font-weight: 600;
  cursor: pointer;
  list-style: none;   /* remove default triangle */
}

summary::before {
  content: '▶ ';      /* custom arrow */
}

details[open] > summary::before {
  content: '▼ ';      /* rotate when open */
}

기본 삼각형 제거하기

공개 삼각형은 list-style을 사용하여 적용됩니다.

/* Remove the default arrow: */
summary {
  list-style: none;
}

/* Firefox: */
summary::-webkit-details-marker {
  display: none;
}

/* Then add a custom indicator: */
summary::after {
  content: '+';
  float: right;
}
details[open] summary::after {
  content: '−';
}

toggle 이벤트

toggle 이벤트를 사용하여 열림 및 닫힘을 감지합니다.

const details = document.querySelector('details');

details.addEventListener('toggle', () => {
  if (details.open) {
    console.log('Details opened');
    // Track analytics, load content, etc.
  } else {
    console.log('Details closed');
  }
});

details로 아코디언 만들기

한 번에 하나의 패널만 열리는 기본 아코디언을 만듭니다.

/* Pure CSS accordion using details: */
/* Each item is a details element */
/* For exclusive open, use JavaScript: */

const allDetails = document.querySelectorAll('details');
allDetails.forEach(d => {
  d.addEventListener('toggle', () => {
    if (d.open) {
      allDetails.forEach(other => {
        if (other !== d) other.removeAttribute('open');
      });
    }
  });
});

details와 summary의 접근성

기본 제공 접근성 기능:

  • summary는 키보드 포커스를 받고 Enter 또는 Space로 활성화할 수 있습니다
  • 화면 낭독기는 summary 텍스트와 펼침 상태를 알립니다
  • 숨겨진 콘텐츠는 DOM에 존재하지만 펼칠 때까지 숨겨진 상태로 알려집니다

배타적 아코디언을 위한 name 속성

HTML 2025에서는 기본 배타적 아코디언을 위해 details에 name을 추가합니다.

<details name="faq">
  <summary>Question 1</summary>
  <p>Answer 1...</p>
</details>

<details name="faq">
  <summary>Question 2</summary>
  <p>Answer 2...</p>
</details>
<!-- details with the same name act as a group -->
<!-- Opening one closes the others automatically -->
<!-- Supported in Chrome 120+ and Firefox 130+ -->

toggle로 콘텐츠 지연 로딩하기

details가 열릴 때만 콘텐츠를 불러옵니다.

<details id="advanced">
  <summary>Load advanced settings...</summary>
  <div id="advanced-content">Loading...</div>
</details>

<script>
const d = document.getElementById('advanced');
d.addEventListener('toggle', async () => {
  if (d.open) {
    const res = await fetch('/api/settings');
    const html = await res.text();
    document.getElementById('advanced-content').innerHTML = html;
    d.removeEventListener('toggle', arguments.callee);
  }
}, { once: true });
</script>

빠른 확인

details 공개 위젯에서 항상 표시되는 트리거 텍스트를 제공하는 요소는 무엇인가요?

복습: 세부 정보와 요약

세부 정보 위젯의 핵심:

  • <details> + <summary> — JavaScript 없이 기본으로 제공되는 펼치기/접기 기능
  • open 속성 — 미리 펼쳐 두기
  • 전환 이벤트 — 열림/닫힘에 반응하기
  • CSS로 스타일을 지정하고, list-style: none으로 기본 삼각형을 제거합니다
  • name 속성 — 하나만 열리는 아코디언(Chrome 120 이상)
무료로 시작

AI 튜터와 함께 HTML을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
40
레슨
159

자주 묻는 질문

“details와 summary 공개 위젯” 강의는 무료인가요?

네 — “details와 summary 공개 위젯” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 HTML Academy 강의 전체를 잠금 해제할 수 있습니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“details와 summary 공개 위젯”에서 뭘 배우나요?

JavaScript 없이 기본 제공 펼치기 및 접기 구성 요소 만들기 브라우저에서 직접 실행하는 실습 코드로 HTML Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

HTML Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 HTML Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“details와 summary 공개 위젯” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 HTML Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 HTML Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. aside 보조 콘텐츠
  2. figure와 figcaption 다시 보기
  3. details와 summary 공개 위젯
  4. progress 및 meter 요소
← HTML Academy(으)로 돌아가기