details와 summary 공개 위젯
JavaScript 없이 기본 제공 펼치기 및 접기 구성 요소 만들기
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 <img> and <br> do not require
a closing slash. Both <br> and <br /> 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- aside 보조 콘텐츠
- figure와 figcaption 다시 보기
- details와 summary 공개 위젯
- progress 및 meter 요소