문서 구조
기본 페이지 템플릿
모든 HTML5 문서는 <!DOCTYPE html>로 시작하고, 그 다음 접근성과 SEO를 위해 lang 속성이 있는 <html>이 옵니다. <head>는 메타데이터(charset, viewport, title)를 포함하고, <body>는 보이는 콘텐츠를 가집니다. viewport 메타 태그는 모바일 기기에서 적절한 렌더링을 보장합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Web Page</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>Welcome to my page.</p>
</body>
</html>Head 섹션 & 메타데이터
<head> 요소는 기계가 읽을 수 있는 메타데이터를 포함합니다. charset은 문자 인코딩을 선언합니다(UTF-8은 거의 모든 문자를 포함). description 메타 태그는 SEO에 중요합니다 - 검색 엔진이 결과에 표시합니다. 스크립트에 defer를 사용하여 HTML 파싱 후에 로드하세요.
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page Title - Site Name</title>
<meta name="description" content="A brief description for SEO">
<meta name="author" content="John Doe">
<link rel="stylesheet" href="style.css">
<script src="app.js" defer></script>
</head>주석 & 조건부 주석
HTML 주석은 <!--로 시작해서 -->로 끝납니다. 브라우저에 표시되지 않지만 페이지 소스에서 볼 수 있습니다. 주석은 메모를 남기고, 섹션을 표시하고(TODO, FIXME), 문서화하는 데 유용합니다. 조건부 주석(IE 전용)은 더 이상 사용되지 않지만 레거시 코드에 나타날 수 있습니다.
<!-- This is a single-line comment -->
<!--
This is a
multi-line comment
-->
<!-- TODO: Add form validation -->
<!-- FIXME: Fix layout on mobile -->
<!--[if lt IE 9]>
<script src="html5shiv.js"></script>
<![endif]-->제목 계층
HTML은 6개의 제목 수준을 제공합니다. h1(가장 높음)에서 h6(가장 낮음). 수준을 건너뛰지 않고 계층적 순서로 사용하세요. 검색 엔진은 페이지 구조를 이해하기 위해 제목을 사용합니다. 모범 사례: 페이지당 하나의 h1, 그 다음 주요 섹션은 h2, 하위 섹션은 h3 등.
<h1>Main Page Title</h1>
<h2>Major Section</h2>
<h3>Subsection</h3>
<h4>Sub-subsection</h4>
<h5>Minor Heading</h5>
<h6>Lowest Level Heading</h6>
<!-- Use only one h1 per page for SEO -->
<h1>Blog Post Title</h1>
<h2>Introduction</h2>
<h3>Background</h3>Div & Span 컨테이너
<div>는 요소를 그룹화하고 스타일을 적용하는 블록 수준 컨테이너입니다. <span>은 텍스트의 작은 부분에 스타일을 지정하는 인라인 컨테이너입니다. 둘 다 의미가 없는 일반 요소입니다 - 더 나은 접근성과 SEO를 위해 적절할 때 시맨틱 태그(header, nav, main, article)를 선호하세요.
<div class="container">
<div id="header" class="header">
<span class="logo">MySite</span>
<span class="tagline">Best Content</span>
</div>
<div class="content">
<p>Main <span class="highlight">content</span> here.</p>
</div>
</div>텍스트 서식
굵게, 이탤릭 & 강조
<strong>은 중요한 텍스트를 나타내고(스크린 리더가 강조), <b>는 순수하게 시각적인 굵게입니다. 마찬가지로 <em>은 스트레스 강조를 나타내고(시맨틱), <i>는 시각적 이탤릭입니다. 접근성을 위해 <strong>과 <em>을 선호하세요. <b>와 <i>는 시맨틱 중요성 없이 스타일 목적으로 허용됩니다.
<p>This is <strong>important</strong> text.</p>
<p>This is <b>bold</b> text.</p>
<p>This is <em>emphasized</em> text.</p>
<p>This is <i>italic</i> text.</p>
<p><strong>Warning:</strong> Do not touch!</p>Mark, Delete & Insert
<mark>는 관련성 있는 텍스트를 강조합니다(검색 강조 표시 같은). <del>은 삭제된 텍스트를 표시하고, <ins>은 삽입된 텍스트를 표시합니다 - 편집을 표시하는 데 유용합니다. <s>는 오래된 정보에 취소선을 그립니다. <small>은 부가 설명이나 저작권에 사용됩니다. <u>는 링크와 닮아 조심스럽게 사용해야 합니다.
<p>Please <mark>highlight this</mark> word.</p>
<p>The price is <del>$99</del> <ins>$79</ins> now.</p>
<p><s>Old information</s> is struck through.</p>
<p>Use <u>underline</u> sparingly.</p>
<p>Small <small>print</small> for side comments.</p>위첨자 & 아래첨자
<sub>는 아래첨자 텍스트(기준선 아래)를 만듭니다 - 화학식(H2O)과 수학 변수에 사용. <sup>는 위첨자 텍스트(기준선 위)를 만듭니다 - 지수(x²), 서수(1st), 각주에 사용. 둘 다 수직 위치와 글꼴 크기를 조정하는 인라인 요소입니다.
<p>H<sub>2</sub>O is water.</p>
<p>E = mc<sup>2</sup> is Einstein's equation.</p>
<p>1st<sup>st</sup> January 2024</p>
<p>CO<sub>2</sub> emissions are rising.</p>
<p>x<sup>2</sup> + y<sup>2</sup> = r<sup>2</sup></p>인용 & 출처
<blockquote>는 블록 수준 인용(들여쓰기, 여러 줄)에 사용됩니다. <q>는 인라인 짧은 인용에 사용됩니다(자동으로 따옴표 추가). cite 속성은 출처 URL을 제공합니다. <cite>는 작품의 제목이나 저자 이름을 태그합니다. 이 요소들은 인용된 콘텐츠에 대한 시맨틱 마크업을 향상시킵니다.
<blockquote cite="https://example.com/source">
<p>The best way to predict the future is to invent it.</p>
<footer>— <cite>Alan Kay</cite></footer>
</blockquote>
<p>As <q cite="https://example.com">someone once said</q>,
knowledge is power.</p>코드 & 서식이 지정된 텍스트
<code>는 인라인 코드 스니펫(고정폭 글꼴)을 표시합니다. <pre>는 서식이 지정된 텍스트를 위해 공백과 줄바꿈을 보존합니다. <pre><code>를 결합하면 적절한 들여쓰기로 코드 블록을 표시합니다. <kbd>는 키보드 입력을 나타냅니다. <samp>는 프로그램 출력에 사용하고, <var>는 수학 표현의 변수에 사용합니다.
<p>Use the <code>console.log()</code> function.</p>
<p>Press <kbd>Ctrl</kbd> + <kbd>C</kbd> to copy.</p>
<pre><code>function hello() {
console.log("Hello, World!");
return true;
}</code></pre>줄바꿈 & 가로선
<br>은 텍스트 내에 줄바꿈을 만듭니다(드물게 사용, CSS 선호). <hr>은 섹션 간의 주제적 구분을 나타내는 가로선을 만듭니다. <wbr>은 긴 단어나 URL에 대해 줄바꿈 기회를 제안하여 브라우저가 최적의 지점에서 줄바꿈할 수 있게 합니다. 간격을 위해 <br>을 사용하지 마세요 - CSS 마진을 대신 사용하세요.
<p>First line<br>Second line<br>Third line</p>
<p>Paragraph one.</p>
<hr>
<p>Paragraph two after a thematic break.</p>
<wbr><!-- word break opportunity for long URLs -->
https://example.com/<wbr>very<wbr>long<wbr>url링크 & 내비게이션
기본 링크
<a> 요소는 하이퍼링크를 만듭니다. href는 목적지 URL을 지정합니다. 외부 링크는 전체 URL(https://...)을 사용하고, 내부 링크는 절대 경로(/about)를 사용하며, 상대 링크는 파일 경로(../index.html)를 사용합니다. 앵커 링크(#section)는 같은 페이지에서 일치하는 id 속성을 가진 요소로 이동합니다.
<!-- External link -->
<a href="https://www.example.com">Visit Example</a>
<!-- Internal link (same site) -->
<a href="/about">About Us</a>
<!-- Relative link -->
<a href="../index.html">Home</a>
<!-- Anchor link (same page) -->
<a href="#section1">Jump to Section 1</a>링크 대상 & 관계
target='_blank'는 링크를 새 탭에서 엽니다 - 보안을 위해 항상 rel='noopener noreferrer'과 함께 사용하세요(tabnabbing 공격 방지). download 속성은 파일 다운로드 를 트리거합니다. mailto:는 이메일 클라이언트를 열고, tel:은 모바일에서 전화를 겁니다. rel 속성은 관계를 정의합니다(noopener, noreferrer, SEO용 nofollow).
<!-- Open in new tab -->
<a href="https://example.com" target="_blank" rel="noopener noreferrer">
Open in new tab
</a>
<!-- Download link -->
<a href="report.pdf" download>Download PDF</a>
<!-- Email link -->
<a href="mailto:[email protected]?subject=Hello">Email us</a>
<!-- Phone link -->
<a href="tel:+1234567890">Call us</a>앵커 대상
id 속성이 있는 모든 요소는 앵커 대상이 될 수 있습니다. href='#id'가 있는 링크는 해당 요소로 스크롤합니다. 이는 목차, 각주, 단일 페이지 내비게이션에 필수적입니다. 애니메이션 스크롤을 위해 html에 CSS 'scroll-behavior: smooth'를 추가하세요. 'scroll-margin-top'을 사용하여 고정 헤더를 오프셋하세요.
<h2 id="introduction">Introduction</h2>
<p>Content here...</p>
<h2 id="features">Features</h2>
<p>Content here...</p>
<!-- Navigation menu linking to sections -->
<nav>
<a href="#introduction">Intro</a>
<a href="#features">Features</a>
</nav>
<!-- Smooth scroll via CSS: scroll-behavior: smooth -->