웹을 이루는 가장 기초적인 요소로 웹 콘텐츠의 의미와 구조를 정의하는 마크업 언어 (Markup Language)이다. 본문의 구조적 의미를 나타내는 것뿐만 아니라 링크, 인용 등의 항목으로 구조적 문서를 만드는 방법을 제공한다. HTML은 웹 브라우저에 표시되는 글과 이미지 등의 다양한 콘텐츠를 표시하기 위해 "마크업"을 사용한다. 마크업이란 태그 등을 이용해 문서나 데이터의 구조를 명기하는 언어를 말한다. 마크업에는 다양한 요소를 사용한다. 제목을 의미하는 h1
, 리스트를 의미하는 ul
, li
등 다양한 태그가 존재한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Title</title>
</head>
</html>
HTML의 Head 부분 구조이다. HTML의 head는 페이지를 열 때 웹 브라우저에 표시되지 않는다. head는 페이지나, CSS의 링크(HTML 컨텐츠를 CSS로 스타일링할 경우), 파비콘(favicon), 그리고 다른 메타데이터(작성자, 중요한 키워드와 같은 HTML에 대한 내용)를 포함한다.
<title>
<title>
태그는 페이지 내에서 페이지 내용물의 제목이나 뉴스의 헤드라인을 표시하기 위해서 브라우저 내의 컨텐츠에 표시되는 <h1>
등의 제목 태그와 달리 HTML문서 전체의 제목을 나타낸다고 할 수 있다.
<meta>
<meta>
태그는 데이터를 설명하는 데이터이다. 웹 페이지에 대한 정보를 제공하는 데이터이며, 페이지의 설명, 작성자, 키워드, 문자 인코딩, 뷰포트(viewport) 설정 등을 포함할 수 있다. 위의 코드를 예시로 보면,
<meta charset="UTF-8">
: 문서의 문자 인코딩을 UTF-8로 지정하는 것이다. utf-8
은 전세계적인 character 집합으로 많은 언어들을 문자들을 포함한다. 때문에 다국어 웹 사이트에서 사용되는 것이 일반적이다.<meta http-equiv="X-UA-Compatible" content="IE=edge">
: IE 문서 모드를 최신 버전으로 지정함을 의미한다. IE 브라우저는 버전 별로 지원하는 CSS나 태그 등이 상이하므로 지원하지 않는 기능을 사용하면 제대로 작동하지 않는 문제가 있다. content="IE=edge"
는 IE 브라우저를 사용하는 경우에는 최신 호환성 모드로 렌더링됨을 의미한다. 이는 현재의 IE 버전이 지원하는 최신 표준을 준수하도록 하여, 이전 버전에서 발생했던 호환성 문제를 해결할 수 있도록 한다. 이 요소는 IE 브라우저에서만 작동하며, 다른 브라우저에서는 무시된다.<meta name="viewport" content="width=device-width, initial-scale=1.0">
: 모바일 기기에서 웹 페이지를 볼 때 뷰포트를 설정하는 데 사용된다. 뷰포트란 화면 상의 화상 표시 영역을 뜻하며 데스크탑, 모바일의 각 기기마다 표시되는 영역이 달라진다. 태그에서 content="width=device-width
는 장치의 화면 너비를 따르도록 함을 뜻한다. initial-scale=1.0
는 브라우저에서 페이지를 표시할 때의 초기 확대 / 축소 수준을 의미한다. 1.0은 100%와 같다.<meta>
태그는 이 외에도 다른 속성을 가질 수 있으며, 많은 요소가 <name>
과 <content>
속성을 갖는다. <name>
은 메타 요소가 어떤 정보의 형태를 갖고 있는지 알려주는 역할을 하며, <content>
는 실제 메타데이터의 컨텐츠를 갖는다.
그 외에도 HEAD에 Open Graph 태그를 추가할 수 있다.
카카오톡 등으로 링크를 공유할 때, 위와 같이 링크의 내용과 관련된 사진, 제목 등이 간략하게 표시되는 것이 있다. 이는 Open Graph Data를 활용한 것으로 Facebook이 웹 사이트에 더 풍부한 메타 데이터를 제공하기 위해 발명한 메타 데이터 프로토콜이다.
<meta property="og:type" content="website">
<meta property="og:url" content="https://example.com/page.html">
<meta property="og:title" content="Content Title">
<meta property="og:image" content="https://example.com/image.jpg">
<meta property="og:description" content="Description Here">
<meta property="og:site_name" content="Site Name">
<meta property="og:locale" content="en_US">
<!-- 다음의 태그는 필수는 아니지만, 포함하는 것을 추천함 -->
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
Thanks to sturrxxl
<link>
<link>
태그는 해당 문서와 외부 소스(external resource) 사이의 관계를 정의할 때 사용한다. 주로 외부 스타일 시트를 연결할 때 사용한다.
<link rel="stylesheet" type="text/css" href="/examples/media/expand_style.css">
또는, 앞서 언급한 것처럼 파비콘을 추가할 때 사용할 수 있다. 인덱스 페이지와 같은 디렉토리에 .ico
포맷의 아이콘으로 사용할 이미지를 저장하고
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
위의 태그를 head에 추가하면 파비콘이 적용된다.
이 외에도 문서에 적용될 스타일을 작성하는 <style>
, JavaScript 코드를 포함하는 <script>
를 포함할 수 있다.
해당 HTML 문서의 텍스트, 하이퍼링크, 이미지, 리스트 등과 같은 모든 콘텐츠를 포함하는 영역을 정의할 때 사용하는 태그이며, 웹 페이지의 실제 내용을 담고 있는 부분이다. 웹을 웹답게 만들어주는 하이퍼링크 태그인 <a>
태그, 문서 내 특정 영역이나 구획을 정의하는 <div>
태그, 폼 요소를 구성하는 <form>
, <input>
, <button>
등 다양한 태그등을 포함할 수 있으며, 웹 페이지의 목적과 디자인에 따라 구조적으로 작성하는 것이 중요하다. 다음은 HTML을 작성하는 데 중요하게 고려할 수 있는 내용들이다.
HTML에는 두가지 종류의 요소 (Element) 가 있다. 블록 레벨 요소와 인라인 요소이다.
<em>
은 인라인 요소이기 때문에 새로운 줄을 만들지 않고 한 줄에 작성되는 것을 볼 수 있다. 문단을 정의하는 <p>
는 블록 레벨 요소이므로 위, 아래에 여백을 갖는 새로운 줄에 작성되는 것을 볼 수 있다.
HTML의 주요 작업 중 하나는 브라우저가 텍스트를 올바르게 표시 할 수 있도록 텍스트 구조와 의미를 제공하는 것이다. 사실 구역을 나누는 작업을 <div>
로 수행하고, 스타일을 적용하는 작업을 <span>
으로 수행하는 등, 적은 종류의 태그로 웹 페이지를 만들 수 있다. 하지만 다음의 사항들을 이유로 의미론적 태그를 사용해야 한다.
의미론적 태그를 사용함으로써 우리는 정확한 요소를 사용하고 있는지, 우리의 컨텐츠에 정확한 의미, 기능, 모습을 담았는지 확실히 할 수 있다. HTML은 의미론적 마크업을 위해 여러 영역을 나타낼 수 있는 전용 태그들을 제공한다.
영역 | 태그 |
---|---|
header | <header> |
navigation bar | <nav> |
main content | <main> , <article> , <section> , <div> 등 다양한 하위 섹션 |
sidebar | <aside> |
footer | <footer> |
위의 예제는 mdn web docs의 의미론적 태그를 사용한 예제이다. CSS 없이 HTML만으로 작성되었지만 어떤 부분이 시각적 개체의 어떤 섹션을 구성하는지 알기가 쉽다.
현재 표준으로 사용되고 있는 것은 HTML5다. 2014년에 W3C에서 공식 표준으로 발표한 이후 오늘날까지 대부분의 웹 사이트가 채택하여 사용하고 있는 버전이다.
<!DOCTYPE html>
DOCTYPE 선언 (Document Type Declaration) 은 HTML 문서에서 <html>
태그를 정의하기 전에 가장 먼저 선언되어야 하며, 선언된 페이지의 HTML 버전이 무엇인지를 웹 브라우저에 알려주는 역할을 하는 선언문이다. 대소문자를 구분하지 않는다. 위의 선언은 HTML5의 DOCTYPE 선언이다. SGML을 기반으로 하지 않아서 DTD 참조가 필요 없으며 엄격하게 검사하지 않으므로 매우 간단히 선언할 수 있다.
아래는 이전까지의 HTML에 관한 내용들이다.
mdn web docs) HTML: Hypertext Markup Language
TCP School) HTML 개요
W3schools) HTML Semantic Elements
지구별 안내서) IE 문서 모드란(meta http-equiv="x-ua-compatible" content="IE=edge")
지구별 안내서) meta viewport (메타 뷰포트 태그) 사용법
오쌤의 니가스터디) [HTML기초문법] 17강 meta태그와 viewport
sturrxxl) Meta Tag , OG(오픈그래프) 사용하기
요즘IT) 검색엔진 최적화(SEO)란?
W3schools) HTML History
heyhyo) [HTML]HTML의 역사