pageservice.tistory.com

프론트엔드 개발 실무/HTML5 강의 & 실전

HTML 시맨틱 태그 완전 정복 - 접근성과 구조화의 시작 ②

free21 2025. 5. 15. 14:39
  • <header>, <nav>, <main>, <section>, <article>, <aside>, <footer> 설명
  • 각 태그가 문서 구조에서 어떤 역할을 하는지 예제 포함
  • HTML5 문서 구조 예시 작성
  • 잘못된 사용 사례와 올바른 사용법


2. 기본 시맨틱 태그 종류와 역할

1) <header>

  • 역할: 문서 또는 섹션의 머리말 영역을 나타냅니다. 보통 사이트 로고, 제목, 주요 네비게이션 링크가 포함됩니다.
  • 특징: 페이지 내 여러 개 사용할 수 있으며, 각 섹션마다 별도의 <header>가 존재할 수 있습니다.
<header>
  <h1>웹사이트 제목</h1>
  <nav>
    <ul>
      <li><a href="#home">홈</a></li>
      <li><a href="#about">소개</a></li>
    </ul>
  </nav>
</header>

2) <nav>

  • 역할: 주요 네비게이션 메뉴를 담는 영역입니다.
  • 특징: 사이트 내 주요 이동 경로를 나타내며, 페이지 내 여러 개 존재 가능하지만 보통 한두 개가 적절합니다.
<nav>
  <ul>
    <li><a href="#section1">섹션1</a></li>
    <li><a href="#section2">섹션2</a></li>
  </ul>
</nav>


3) <main>

  • 역할: 문서 내 주요 콘텐츠 영역을 나타냅니다.
  • 특징: 페이지 당 한 개만 허용하며, 헤더, 네비게이션, 푸터 등과 구분됩니다.
<main>
  <article>
    <h2>주요 기사 제목</h2>
    <p>본문 내용</p>
  </article>
  <aside>
    <h3>관련 정보</h3>
    <p>추가 참고 자료</p>
  </aside>
</main>

4) <section>

  • 역할: 문서 내 의미 있는 구획을 나타냅니다. 주로 제목과 함께 사용하여 논리적 구분을 제공합니다.
  • 특징: 콘텐츠를 구분짓는 용도로 사용하며, 여러 개 존재할 수 있습니다.
<section>
  <h2>서비스 소개</h2>
  <p>서비스 상세 설명</p>
</section>

<section>
  <h2>고객 후기</h2>
  <p>후기 내용</p>
</section>

5) <article>

  • 역할: 독립적이고 재사용 가능한 콘텐츠 단위(예: 블로그 글, 뉴스 기사 등)를 나타냅니다.
  • 특징: 독립적 의미를 가지므로 외부로도 분리될 수 있습니다.
<article>
  <h2>블로그 글 제목</h2>
  <p>본문 내용</p>
</article>

6) <aside>

  • 역할: 주요 콘텐츠와 간접적으로 관련된 보조 콘텐츠(광고, 사이드바, 관련 링크 등)를 나타냅니다.
  • 특징: 문서 흐름에서 벗어난 보조 정보 영역입니다.
<aside>
  <h3>추천 글</h3>
  <ul>
    <li><a href="#">관련 글1</a></li>
    <li><a href="#">관련 글2</a></li>
  </ul>
</aside>

7) <footer>

  • 역할: 문서나 섹션의 꼬리말 영역으로 저작권 정보, 연락처, 링크 등이 포함됩니다.
  • 특징: 여러 개 존재 가능하며, 각 섹션마다 별도 <footer> 존재 가능
<footer>
  <p>© 2025 회사명. 모든 권리 보유.</p>
  <nav>
    <ul>
      <li><a href="#privacy">개인정보처리방침</a></li>
      <li><a href="#terms">이용약관</a></li>
    </ul>
  </nav>
</footer>

전체 문서 구조 예시

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8" />
  <title>시맨틱 태그 예시</title>
</head>
<body>

  <header>
    <h1>웹사이트 제목</h1>
    <nav>
      <ul>
        <li><a href="#main">메인으로</a></li>
        <li><a href="#services">서비스</a></li>
      </ul>
    </nav>
  </header>

  <main>
    <section id="services">
      <h2>서비스 소개</h2>
      <article>
        <h3>서비스 1</h3>
        <p>서비스 1에 대한 상세 설명</p>
      </article>
      <article>
        <h3>서비스 2</h3>
        <p>서비스 2에 대한 상세 설명</p>
      </article>
    </section>

    <aside>
      <h2>공지사항</h2>
      <p>최근 업데이트 내용</p>
    </aside>
  </main>

  <footer>
    <p>© 2025 회사명. 모든 권리 보유.</p>
  </footer>

</body>
</html>

1) <header> 추가 예제


  • 사이트 헤더 + 검색창 포함
<header>
  <h1>내 블로그</h1>
  <nav>
    <ul>
      <li><a href="/">홈</a></li>
      <li><a href="/about">소개</a></li>
      <li><a href="/contact">연락처</a></li>
    </ul>
  </nav>
  <form action="/search" method="get">
    <label for="search-input" class="sr-only">검색어 입력</label>
    <input type="search" id="search-input" name="q" placeholder="검색어 입력">
    <button type="submit">검색</button>
  </form>
</header>

2) <nav> 추가 예제

  • 다단계 드롭다운 네비게이션
<nav>
  <ul>
    <li><a href="/">홈</a></li>
    <li>
      <a href="/services">서비스</a>
      <ul>
        <li><a href="/services/design">디자인</a></li>
        <li><a href="/services/development">개발</a></li>
      </ul>
    </li>
    <li><a href="/contact">연락처</a></li>
  </ul>
</nav>

3) <main> 추가 예제

  • 블로그 글과 사이드바 분리
<main>
  <article>
    <h2>최신 블로그 글 제목</h2>
    <p>블로그 글 내용...</p>
  </article>
  <aside>
    <h3>인기 글</h3>
    <ul>
      <li><a href="#">인기 글 1</a></li>
      <li><a href="#">인기 글 2</a></li>
    </ul>
  </aside>
</main>

4) <section> 추가 예제

  • FAQ 페이지의 구분된 질문 영역
<section>
  <h2>자주 묻는 질문 (FAQ)</h2>
  <article>
    <h3>배송 기간은 얼마나 걸리나요?</h3>
    <p>주문 후 3~5일 내 배송됩니다.</p>
  </article>
  <article>
    <h3>반품 정책은 어떻게 되나요?</h3>
    <p>상품 수령 후 7일 이내 반품 가능합니다.</p>
  </article>
</section>

5) <article> 추가 예제

  • 뉴스 기사 단독 페이지
<article>
  <header>
    <h1>오늘의 뉴스 제목</h1>
    <p><time datetime="2025-05-15">2025년 5월 15일</time> 작성자: 기자명</p>
  </header>
  <p>뉴스 본문 내용...</p>
  <footer>
    <p>출처: 뉴스사</p>
  </footer>
</article>
  • 페이지 내 광고 배너
<aside>
  <h2>광고</h2>
  <a href="https://example.com/promo">
    <img src="banner.jpg" alt="프로모션 배너">
  </a>
</aside>

 

 

7) <footer> 추가 예제

  • 사이트 전체 푸터 + 소셜 미디어 링크
<footer>
  <p>© 2025 내회사. 모든 권리 보유.</p>
  <nav>
    <ul>
      <li><a href="/privacy">개인정보처리방침</a></li>
      <li><a href="/terms">이용약관</a></li>
      <li><a href="https://twitter.com/내회사" target="_blank" rel="noopener">트위터</a></li>
      <li><a href="https://facebook.com/내회사" target="_blank" rel="noopener">페이스북</a></li>
    </ul>
  </nav>
</footer>

기본외 시멘틱 태그’s

  • <figure>: 이미지, 도표, 코드 블록 등 독립적인 콘텐츠 묶음
  • <figcaption>: <figure>의 캡션(설명)
  • <mark>: 강조 표시 (하이라이트)
  • <time>: 날짜나 시간을 나타냄
  • <details>: 추가 정보를 보여주는 접기/펼치기 컨텐츠
  • <summary>: <details>의 요약 제목
  • <address>: 연락처 정보, 저자 정보
  • <dialog>: 대화 상자, 모달 창
  • <main>: 앞서 설명한 페이지 주 콘텐츠
  • <output>: 계산 결과 등 동적 출력
  • <progress>: 진행 상태 표시
  • <section>, <article>, <nav>, <header>, <footer>, <aside> 외에도 다양한 역할 기반 태그가 존재합니다.

1) <figure> & <figcaption>

  • 역할: 이미지, 도표, 코드 등 독립적인 콘텐츠 묶음과 그에 대한 설명
  • 예제:
<figure>
  <img src="chart.png" alt="매출 그래프">
  <figcaption>2025년 1분기 매출 추이</figcaption>
</figure>

2) <mark>

  • 역할: 텍스트 내 강조(하이라이트) 표시
  • 예제:
<p>이 제품은 <mark>한정 수량</mark>으로 판매됩니다.</p>

3) <time>

  • 역할: 날짜 또는 시간 데이터 표시 (기계가 인식 가능하도록 datetime 속성 사용)
  • 예제:
<p>작성일: <time datetime="2025-05-15">2025년 5월 15일</time></p>

4) <details> & <summary>

  • 역할: 접기/펼치기 가능한 상세 정보
  • 예제:
<details>
  <summary>자주 묻는 질문 보기</summary>
  <p>질문에 대한 답변 내용이 여기에 표시됩니다.</p>
</details>

5) <address>

  • 역할: 연락처 또는 작성자 정보
  • 예제:
<address>
  작성자: 홍길동<br>
  이메일: hong@example.com<br>
  전화: 010-1234-5678
</address>

6) <dialog>

  • 역할: 대화 상자, 모달 창(브라우저 지원 상태 확인 필요)
  • 예제:
<dialog open>
  <p>안내 메시지입니다.</p>
  <button onclick="this.parentElement.close()">닫기</button>
</dialog>

7) <output>

  • 역할: 사용자 입력에 따른 결과 출력
  • 예제:
<form oninput="result.value=parseInt(a.value)+parseInt(b.value)">
  <input type="range" id="a" value="50"> +
  <input type="number" id="b" value="50"> =
  <output name="result" for="a b">100</output>
</form>

8) <progress>

  • 역할: 작업 진행 상태 표시
  • 예제:
<label for="file">업로드 진행률:</label>
<progress id="file" value="70" max="100">70%</progress>

HTML5 시맨틱 태그 완전 정복

1. <header>

  • 역할: 문서 또는 섹션의 머리말 영역. 제목, 네비게이션, 로고 등 포함.
  • 예제:
<header>
  <h1>내 블로그</h1>
  <nav aria-label="주요 메뉴">
    <ul>
      <li><a href="/">홈</a></li>
      <li><a href="/about">소개</a></li>
      <li><a href="/contact">연락처</a></li>
    </ul>
  </nav>
</header>
  • 접근성 팁: nav에 aria-label로 메뉴 명시.

2. <nav>

  • 역할: 페이지 내 주요 네비게이션 영역.
  • 예제:
<nav aria-label="주 메뉴">
  <ul>
    <li><a href="/">홈</a></li>
    <li><a href="/services">서비스</a></li>
    <li><a href="/contact">문의</a></li>
  </ul>
</nav>
  • 접근성 팁: 네비게이션이 여러개일 경우 aria-label로 구분 필요.

3. <main>

  • 역할: 페이지 내 핵심 콘텐츠 영역. 한 페이지당 하나만 사용.
  • 예제:
<main>
  <article>
    <h2>블로그 글 제목</h2>
    <p>내용...</p>
  </article>
</main>
  • 접근성 팁: main은 스크린리더가 빠르게 주요 내용으로 이동 가능.

4. <section>

  • 역할: 주제별 구획 구분. 제목이 있어야 함.
  • 예제:
<section>
  <h2>자주 묻는 질문</h2>
  <p>질문과 답변...</p>
</section>

5. <article>

  • 역할: 독립적으로 배포 가능하거나 재사용 가능한 콘텐츠 단위.
  • 예제:
<article>
  <header>
    <h1>뉴스 제목</h1>
    <time datetime="2025-05-15">2025년 5월 15일</time>
  </header>
  <p>본문...</p>
  <footer>작성자: 홍길동</footer>
</article>

6. <aside>

  • 역할: 본문과 간접적으로 관련된 보조 콘텐츠.
  • 예제:
<aside>
  <h3>관련 글</h3>
  <ul>
    <li><a href="#">글1</a></li>
    <li><a href="#">글2</a></li>
  </ul>
</aside>

7. <footer>

  • 역할: 문서 또는 섹션의 바닥글. 저작권, 연락처, 링크 포함.
  • 예제:
<footer>
  <p>© 2025 내사이트</p>
  <nav aria-label="푸터 메뉴">
    <ul>
      <li><a href="/privacy">개인정보처리방침</a></li>
      <li><a href="/terms">이용약관</a></li>
    </ul>
  </nav>
</footer>

8. <figure> & <figcaption>

  • 역할: 이미지, 도표, 코드 등 독립된 미디어 + 설명
  • 예제:
<figure>
  <img src="chart.png" alt="매출 그래프">
  <figcaption>2025년 1분기 매출 추이</figcaption>
</figure>

9. <mark>

  • 역할: 텍스트 강조(하이라이트)
  • 예제:
<p>이 제품은 <mark>한정 수량</mark>입니다.</p>

10. <time>

  • 역할: 날짜/시간 표시, 기계 판독 가능하도록 datetime 속성 포함
  • 예제:
<p>작성일: <time datetime="2025-05-15">2025년 5월 15일</time></p>

11. <details> & <summary>

  • 역할: 접기/펼치기 UI
  • 예제:
<details>
  <summary>자주 묻는 질문 보기</summary>
  <p>답변 내용...</p>
</details>

12. <address>

  • 역할: 작성자나 연락처 정보
  • 예제:
<address>
  작성자: 홍길동<br>
  이메일: hong@example.com<br>
  전화: 010-1234-5678
</address>

13. <dialog>

  • 역할: 대화 상자, 모달 (브라우저 지원 확인 필요)
  • 예제:
<dialog open>
  <p>안내 메시지입니다.</p>
  <button onclick="this.parentElement.close()">닫기</button>
</dialog>

14. <output>

  • 역할: 계산 결과나 사용자 입력 결과 출력
  • 예제:
<form oninput="result.value=parseInt(a.value)+parseInt(b.value)">
  <input type="range" id="a" value="50"> +
  <input type="number" id="b" value="50"> =
  <output name="result" for="a b">100</output>
</form>

15. <progress>

  • 역할: 작업 진행 상태 표시
  • 예제:
<label for="upload">업로드 진행률:</label>
<progress id="upload" value="70" max="100">70%</progress>

ARIA 속성과 시맨틱 태그 결합 활용

  • role: 시맨틱 태그가 없는 요소에 의미 부여
  • aria-label, aria-labelledby, aria-describedby: 접근성 설명 제공
  • 예시:
<nav aria-label="보조 메뉴">
  ...
</nav>
<button aria-haspopup="dialog" aria-controls="dialog1">열기</button>
<dialog id="dialog1">...</dialog>

요약

  • 시맨틱 태그는 문서 구조와 의미를 명확히 하여 SEO와 접근성을 높임
  • 다양한 시맨틱 태그를 목적에 맞게 활용하는 것이 중요
  • ARIA 속성과 병행하면 장애인 접근성을 더욱 향상 가능
▲ TOP