Menu

HTML header 태그: 예제와 상단 고정 헤더 만들기

<header> 요소는 페이지나 섹션의 도입부를 담아요. 로고, 제목, 내비게이션, 작성자 정보 같은 거예요. 사이트 헤더 만드는 법, <header>와 <head>, 제목 태그의 차이, 글 안에서 쓰는 법, 상단에 고정하는 법을 알아봐요.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

HTML에서 헤더 만드는 법

페이지 윗부분(로고, 사이트 이름, 주 메뉴)을 <header> 요소로 감싸세요. 기본 모양이 없는 블록 상자라서 CSS 몇 줄이면 바 모양이 돼요.

로고의 margin-inline-end: auto가 메뉴와 버튼을 바의 끝쪽으로 밀어내요. <style> 요소를 지워도 여전히 헤더예요. 헤더를 헤더로 만드는 건 어두운 배경이 아니라 태그예요.

header, head, h1 차이

비슷하게 들리지만 하는 일이 다른 세 이름이에요.

요소위치보임개수
<head><html> 바로 안, <body> 앞아니요: <title>, <meta>, <link>를 담음딱 하나
<header><body> 안예: 페이지나 섹션의 도입부 콘텐츠제한 없음
<h1>~<h6><body> 안 어디든예: 제목제한 없음

아래 <head>는 브라우저 탭에 보이는 페이지 제목을 정해요. 미리보기에서 보이는 것은 모두 <body>에서 나와요.

헤더에는 제목이 들어가는 경우가 많지만 꼭 그래야 하는 건 아니고, 제목을 헤더로 감쌀 필요도 없어요.

글 안의 헤더

<header>는 페이지만이 아니라 가장 가까운 article이나 section의 도입부예요. 글마다 자체 헤더가 있는 블로그 글 목록은 올바르고 흔한 구조예요.

스크린 리더에게는 페이지 수준 헤더(article, aside, main, nav, section 안에 있지 않은 것)만 banner 랜드마크가 돼요. 글 헤더들은 일반 묶음이라서 banner가 여러 개 생기지 않아요.

상단 고정(sticky) 헤더

position: sticky는 그 아래 콘텐츠가 스크롤되는 동안 헤더를 맨 위에 붙여 둬요. 아래 상자 안에서 스크롤해 보세요.

제대로 동작하게 하는 세부 사항이 세 가지예요. top: 0(오프셋이 없으면 sticky는 아무 일도 안 해요), 배경색(없으면 행들이 비쳐 보여요), 그리고 위치가 지정된 콘텐츠가 그 위에 그려지지 않게 하는 z-index예요. 실제 페이지에서는 스크롤되는 상자가 페이지 자체라서 헤더를 <body>에 바로 둬요.

position: fixed인 헤더도 제자리에 머물지만, 페이지 흐름에서 빠지기 때문에 콘텐츠가 그 아래로 미끄러져 들어가서 위쪽에 padding이 필요해요. sticky는 레이아웃에서 자기 자리를 유지해요.

header에 넣을 수 있는 것

header에는 제목, 로고 이미지, <nav>, 검색 폼, 버튼 등 거의 모든 콘텐츠를 넣을 수 있어요. 다만 다른 <header>나 <footer>는 담을 수 없고, <footer>, <address>, 다른 <header> 안에 들어갈 수도 없어요.

<header>
  <a href="/"><img src="logo.svg" alt="Acme home"></a>
  <nav aria-label="Main">...</nav>
  <form role="search">...</form>
</header>

로고가 홈페이지로 가는 링크라면 스크린 리더가 그걸 읽어 주니까, alt 텍스트에 링크가 어디로 가는지("Acme home") 쓰세요.

자주 하는 실수

  • <header>와 <head>를 헷갈림. 메타데이터는 <head>에 넣고, 보이는 콘텐츠는 절대 넣지 않아요.
  • 모든 제목에 <header>를 씀. 제목 하나만 있다면 header로 감쌀 필요가 없어요. 도입부 콘텐츠 묶음이 있을 때 <header>를 쓰세요.
  • 배경 없는 sticky 헤더. 페이지 텍스트가 스크롤되면서 비쳐 보여요. background를 지정하세요.
  • 붙지 않는 sticky. overflow: hidden이나 overflow: auto인 조상이 sticky의 스크롤 상자가 되어서, 헤더가 그 상자 안에 붙거나 아예 붙지 않아요. 조상 요소를 확인하세요.
  • 사이트 메뉴를 header 안의 <div>에 넣음. 스크린 리더 사용자가 바로 건너뛸 수 있도록 <nav>를 쓰세요.

자주 묻는 질문

HTML에서 header 태그란 무엇인가요?

<header>는 도입부 콘텐츠를 위한 시맨틱 요소예요. 페이지 맨 위의 사이트 로고와 메뉴, 또는 글 맨 위의 제목과 작성자 정보 같은 거예요. 기본 스타일이 없는 일반 블록 상자예요.

HTML에서 head와 header는 무엇이 다른가요?

<head>는 <title>, <meta> 태그, 스타일시트 링크가 들어가는 문서의 보이지 않는 부분이고, 딱 하나만 있어요. <header>는 <body> 안의 보이는 콘텐츠이고, 한 페이지에 여러 개 있을 수 있어요.

한 페이지에 header 요소를 여러 개 써도 되나요?

네. 페이지에는 보통 사이트 헤더가 하나 있고, 각 <article>이나 <section>은 제목과 메타 정보를 위한 자체 <header>를 가질 수 있어요. 스크린 리더에게 페이지 banner로 인정되는 건 article, aside, main, nav, section 안에 있지 않은 header뿐이에요.

nav를 header 안에 넣어야 하나요?

넣어도 되고, 주 메뉴가 페이지 맨 위에 있을 때는 흔히 그렇게 해요. <nav>를 <header> 밖에 두는 것도 올바르니, 레이아웃에 맞는 쪽을 고르세요.

스크롤해도 헤더가 맨 위에 붙어 있게 하려면 어떻게 하나요?

position: sticky; top: 0;에 배경색과 z-index를 주면 콘텐츠가 그 아래로 스크롤돼요. sticky는 헤더의 부모가 헤더보다 키가 클 때만 동작하고, overflow: hidden인 조상이 있으면 페이지에 붙지 않아요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기