시맨틱 HTML


두 페이지가 화면에서는 똑같아 보이면서도 속은 전혀 다르게 만들어졌을 수 있습니다. 한쪽은 담고 있는 내용을 그대로 이름으로 표현한 요소를 씁니다: 헤더, 내비게이션, 메인 영역 같은 식입니다. 다른 한쪽은 모든 것을 똑같은 이름 없는 상자에 넣고, 클래스 이름으로만 구분합니다. 화면만 보면 둘을 구별할 수 없습니다. 하지만 그 밖의 모든 면에서는 완전히 다른 페이지입니다. 의미에 따라 요소를 고르는 것, 이것이 바로 시맨틱 HTML의 핵심입니다.
시맨틱이란 무엇인가
**시맨틱(semantic)**은 "의미와 관련된"이라는 뜻입니다. 시맨틱 요소란 이름 자체가 그 안에 담긴 내용이 무엇인지 말해주는 요소입니다. 문단은 <p> 안에 들어갑니다, 문단이니까요. 내비게이션 메뉴는 <nav> 안에 들어갑니다, 내비게이션이니까요. 태그 이름이 곧 그 대상을 가리킵니다.
거의 모든 페이지를 만능 상자 하나로 만들고 스타일만 입혀서 겉모습을 똑같이 만들 수도 있습니다. 하지만 그렇게 하면 페이지 안의 어떤 것도 자기가 무엇인지 말해주지 않습니다. 내용에 맞는 이름을 가진 요소를 고르는 것은 이사할 때 상자에 라벨을 붙이는 것과 비슷합니다. 라벨 없는 상자에도 물건은 다 들어가지만, 라벨이 있어야 다른 사람이나 브라우저가 상자를 열어보지 않고도 안에 뭐가 있는지 알 수 있습니다.
<p>에, 메뉴는 <nav>에 넣는 식입니다. 모든 것을 평범한 상자에 넣고 스타일로 똑같이 보이게 만들 수도 있지만, 그러면 아무것도 자기가 무엇인지 말해주지 않습니다. 이사할 때 상자에 라벨을 붙여서 누구나 안에 뭐가 있는지 알 수 있게 하는 것과 같습니다. 랜드마크 요소들
페이지의 큰 영역들을 표시하기 위해 존재하는 요소가 몇 가지 있습니다. 가장 먼저 찾게 될 요소들입니다:
<header>는 페이지나 섹션의 맨 위 부분입니다: 로고, 제목, 소개글이 들어갑니다.<nav>는 내비게이션 링크 모음입니다, 메인 메뉴처럼요.<main>은 메인 콘텐츠입니다, 이 페이지가 존재하는 이유가 되는 부분이죠.<section>은 관련된 내용을 모아둔 덩어리입니다, 보통 자기만의 제목이 있습니다.<article>은 따로 떼어놓아도 그 자체로 의미가 통하는 독립적인 콘텐츠입니다, 블로그 글이나 뉴스 기사처럼요.<aside>는 옆으로 빠져나온 내용입니다: 관련 링크, 메모, 광고 같은 것들이죠.<footer>는 페이지나 섹션의 맨 아래 부분입니다: 저작권, 연락처, 작은 글씨로 된 안내 문구가 들어갑니다.
규칙은 항상 똑같습니다. 어떤 영역이 내비게이션이라면 <div>가 아니라 <nav>에 넣습니다. 푸터라면 <footer>에 넣습니다. 영역에 맞는 이름을 가진 요소로 그 영역을 표시하는 것입니다.
<header>
<h1>Mara's Kitchen</h1>
<nav>
<a href="/recipes">Recipes</a>
<a href="/about">About</a>
</nav>
</header>
<main>
<h2>Weeknight dinners</h2>
<p>Quick meals you can make after work.</p>
</main>
<footer>
<p>Made in Lisbon.</p>
</footer><header>, <nav>, <main>, <section>, <article>, <aside>, <footer>. 각각이 페이지의 한 부분을 가리키니, 지금 만들고 있는 영역과 맞는 것을 고르면 됩니다. 오늘 다 외울 필요는 없습니다, 계속 반복해서 나오다 보면 저절로 익숙해집니다. div와 span, 의미 없는 대체 요소
페이지의 모든 부분이 이름을 붙일 만한 의미를 가진 것은 아닙니다. 때로는 스타일을 입히려고 그냥 묶어놓을 상자가 필요하거나, 몇 글자에 색을 입히려고 감싸놓을 것이 필요할 때가 있습니다. 이럴 때 쓰라고 있는 것이 바로 그 자체로는 아무 의미도 없는 평범한 요소 두 가지입니다.
<div>는 범용 블록입니다: 다른 요소가 맞지 않을 때 쓰는 빈 컨테이너입니다. <span>은 한 줄 안의 짧은 텍스트 조각에 적용하는 같은 개념입니다. 둘 다 내용에 대해 아무것도 말해주지 않습니다. 순전히 스타일과 그룹핑을 위한 걸이일 뿐입니다.
<p>Today's total is <span class="price">£42.00</span>.</p>
<div class="card">
<h2>Special offer</h2>
<p>Two for one on all pasta.</p>
</div><span>은 가격에 색을 입히기 위해 그 부분을 감쌉니다. <div>는 카드를 묶어서 테두리를 두를 수 있게 해줍니다. 더 의미 있는 요소가 아무것도 맞지 않을 때만 이 둘을 쓰세요, 이들은 안에 무엇이 있는지 브라우저에 전혀 알려주지 않으니까요.
<div>는 평범한 상자이고 <span>은 몇 글자를 감싸는 평범한 래퍼일 뿐, 둘 다 아무 의미가 없습니다. 무언가를 그룹핑하거나 스타일만 입히면 되고 딱히 맞는 이름 있는 요소가 없을 때 쓰세요. 메뉴나 버튼처럼 실제로 의미가 있다면 그에 맞는 요소를 대신 쓰세요. 올바른 요소 고르기
어떤 요소를 써야 할지 헷갈릴 때는 단순한 질문 하나를 던져보세요: 이것은 무엇인가? 어떻게 보이는지가 아니라, 이것이 무엇인지 말입니다. 답이 대개 요소 이름을 그대로 알려줍니다. 맨 위에 가로로 늘어선 링크들은 내비게이션이니 <nav>입니다. 맨 아래의 작은 글씨 안내는 푸터니 <footer>입니다. 색을 입히고 싶은 가격은 딱히 무엇도 아니니 <span>입니다.
의미에서 시작하고, 실제 답이 "그냥 상자일 뿐"일 때만 <div>나 <span>으로 돌아가세요. 이 습관을 일찍 들이면 페이지가 스스로 자기가 무엇인지 설명하게 되고, 나중에 당신이든 다른 누구든 그 마크업을 다시 읽어야 할 때 그 보상을 바로 확인하게 됩니다.
<nav>이고, 작은 글씨 안내는 <footer>이고, 스타일만 입히고 싶은 평범한 상자는 <div>입니다. 매번 의미에서 시작하면 페이지가 저절로 자기가 무엇인지 설명하게 됩니다. 
