FE
HTML
HTML 시작하기

HTML 시작하기

Attributions and copyright licensing (opens in a new tab) by Mozilla Contributors (opens in a new tab) is licensed under CC-BY-SA 2.5 (opens in a new tab).

요소와 속성을 정의하고 중요한 용어들을 살펴본다. HTML 요소를 구조화하는 방법, 언어의 중요한 기본 특징을 설명한다.

목표HTML언어에 대해 익숙해지고, HTML을 이용하여 실습해봅니다.

HTML이란?

HTML(Hypertext Markup Language, 하이퍼텍스트 마크업 언어)는 프로그래밍 언어는 아니고 웹페이지의 구조를 브라우저가 알 수 있도록 하는 마크업 언어다.

HTML은 elements로 구성되어 각 컨텐츠의 부분들을 감싸고 마크업한다.

tags는 웹 상의 다른 페이지로 이동하게 하는 하이퍼 링크 내용들을 생성하거나, 단어를 강조하는 등의 역할을 한다.

“My cat is very grumy”

다음의 문장을 그 자체로 표시하고 싶다면, <p> 태그로 감싸 엘리먼트를 문단으로 명시할 수 있다.

<p>My cat is very grumpy</p>

🦋 HTML 요소는 대소문자를 구분하지 않는다. 하지만 가독성 문제로 소문자로 작성한다.

HTML 요소(Element)의 구조

https://developer.mozilla.org/ko/docs/Learn/HTML/Introduction_to_HTML/Getting_started/grumpy-cat-small.png

<p>My Dog is very grumpy</p>
   |______**Content**______|
|_________**Element**__________|
|                          |
|                          |
**Opening tag**                **Closing tag**   
  • 여는 태그(Opening tag): 이것은 요소의 “이름”과(이 경우 “p”), “열고 닫는 꺽쇠 괄호”로 구성된다. 요소가 시작(이 경우 단락의 시작 부분)부터 효과가 적용되기 시작한다.
  • 닫는 태그(Closing tag): 이것은 요소의 이름 앞에 슬래시(/)가 있는것을 제외하면 여는 태그(opening tag)와 같다. 이것은 요소의 끝(이 경우 단락의 끝 부분)에 위치한다.
  • 내용(Content): 요소의 내용이며, 이 경우 단순한 텍스트이다.
  • 요소(Element): 여는 태그, 닫는 태그, 내용을 통틀어 요소(element)라고한다.

포함(내포:內包)된 요소(Nesting elements)

요소 안에 다른 요소가 들어갈 수 있다.

예를 들어, 아래와 같이 '매우'라는 단어를 강조하는 <strong> (opens in a new tab) (en-US) (opens in a new tab) 요소를 중첩해서 사용할 수 있다.

<p>My cat is <strong>very</strong> grumpy.</p>

아래와 같은 문장은 중첩(重疊 : 서로 포개어(overlap 또는 stacking) 지거나, 엇갈려 겹쳐짐)되었으므로 잘못된 문장이다.

<p>My cat is <strong>very grumpy.</p></strong> ❌

잘못 된 내포에도 불구하고 어떤 브라우저에서 이상없이 보일 수도 있다. 하지만 그저 그 브라우저가 문법에 흐물흐물(permittable)해서 웬만한 오류는 자체 수정해서 브라우저 창에 렌더링해주기 때문이다. '웬만한 오류는 알아서 처리해 준다.' 는 부분에서 초보자는 특히 주의해야 한다.

블럭 레벨 요소 vs 인라인 요소(Block versus inline elements)

  • 블록 레벨 요소(Block-level elements)는 웹페이지 상에 블록(Block)을 만드는 요소이다. 블록 레벨 요소는 앞뒤 요소 사이에 새로운 줄(Line)을 만들고 나타납니다. 즉 블록 레벨 요소 이전과 이후 요소사이의 줄을 바꾼다. 블록 레벨 요소는 일반적으로 페이지의 구조적 요소를 나타낼 때 사용됩니다. 예를 들어 개발자는 블록 레벨 요소를 사용하여 단락(Paragraphs), 목록(lists), 네비게이션 메뉴(Navigation Menus), 꼬리말(Footers) 등을 표현할 수 있다. 블록 레벨 요소는 인라인 요소(Inline elements)에 중첩될(Nested inside)수 없다. 그러나 블록 레벨 요소는 다른 블록 레벨 요소에 중첩될 수 있다.
  • 인라인 요소(Inline elements)는 항상 블록 레벨 요소 내에 포함되어 있다. 인라인 요소는 문서의 한 단락같은 큰 범위에는 적용될 수 없고 문장, 단어 같은 작은 부분에 대해서만 적용될 수 있다. 인라인 요소는 새로운 줄(Line)을 만들지 않는다. 즉 인라인 요소를 작성하면 그것을 작성한 단락내에 나타나게 된다. 예를 들어, 인라인 요소에는 하이퍼링크를 정의하는 요소인 <a> (opens in a new tab) , 텍스트(Text)를 강조하는 요소인 <em> (opens in a new tab),<strong> (opens in a new tab) (en-US) (opens in a new tab) 등이 있다.

[예시]

<em>first</em>
<em>second</em>
<em>third</em>
 
<p>fourth</p>
<p>fifth</p>
<p>sixth</p>
first second third
fourth
 
fifth
 
sixth

🦋 HTML5에서 요소 분류를 재정의했다: Element content categories (opens in a new tab). 이러한 정의는 이전의 정의보다 더 정확하고 덜 모호하지만, "블록"과 "인라인"보다 이해하기 훨씬 더 복잡하기 때문에, 이 주제 내내 이 정의들을 고수한다.

🦋 이 주제에서 사용되는 "블럭(block)"과 "인라인(inline)"의 뜻은 the types of CSS boxes (en-US) (opens in a new tab)에서 사용하고 있는 같은 단어와 혼돈하면 안된다. 기본적으로는 상관관계가 있지만 CSS 표시 유형을 변경해도 요소의 범주는 변경되지 않으며 요소가 포함할 수 있는 요소와 요소가 포함될 수 있는 요소에는 영향을 주지 않는다. HTML5가 이러한 용어들을 삭제했던 이유 중 하나는 이러한 다소 흔한 혼란을 막기 위해서였다.

🦋 Block-level elements (opens in a new tab) 문서와 Inline elements (opens in a new tab) 문서를 참고하면 블럭과 인라인 요소에 대한 유용한 내용을 찾을 수 있다.

빈 요소(Empty elements)

모든 요소가 위에 언급된 여는 태그, 내용, 닫는 태그 패턴을 따르는 것은 아닙니다. 주로 문서에 무언가를 첨부하기 위해 단일 태그(Single tag)를 사용하는 요소도 있습니다. 예를 들어 <img> (opens in a new tab) 요소는 해당 위치에 이미지를 삽입하기 위한 요소입니다:

“단일 태그”를 사용하는 <img> 같은 요소는 Empty elements다.

🦋 빈 요소는 가끔 Void 요소로 불리기도 한다.

속성(Attributes)

<p class="editor">My Dog is very grumpy</p>
   |_**Attribute**_|

속성을 사용할 때에는 아래 내용을 지켜야 한다:

  • 요소 이름 다음에 바로 오는 속성은 요소 이름과 속성 사이에 공백이 있어야 되고, 하나 이상의 속성들이 있는 경우엔 속성 사이에 공백이 있어야 합니다.
  • 속성 이름 다음엔 등호(=)가 붙습니다.
  • 속성 값은 열고 닫는 따옴표로 감싸야 합니다.

실습: 요소에 속성 추가하기

<a>는 주로 2개의 속성이 사용된다.

href : 이 속성에는 연결하고자 하는 웹 주소를 지정한다.

title : 링크에 대한 추가 정보를 나타낸다.

target : 링크가 어떻게 열릴 것인지 지정한다. “_blank”는 새 탭에서 보여주는 것. 생략하면 현재 탭에서 보인다.

참과 거짓 속성(Boolean attributes)

값이 없는 속성을 불 속성이라고 한다.

<input type="text" disabled="disabled">

그 속성의 이름과 동일한 하나의 값만 가질 수 있다.

<input type="text" disabled>

속성값의 따옴표 생략

<a href=https://www.mozilla.org/>favorite website</a>
<a href=https://www.mozilla.org/ title=The Mozilla homepage>favorite website</a>

2번째부터는 문제가 발생할 것이다. 브라우저가 마크업을 잘못 해석해서 title이 세 개의 속성값을 가진다고 생각할 것이다.

그래서 항상 속성값에 따옴표를 붙이라고 조언한다. 오류를 피하고 가독성도 좋아지기 때문이다.

작은 따옴표, 큰 따옴표?

원하는 걸 하나 정해서 쓰면 된다.

<a href="http://www.example.com" title="Isn't this fun?">A link to my example.</a
>

하지만 만약 따옴표 안에 같은 따옴표를 사용하고 싶다면(작은 따옴표든 큰 따옴표든) 따옴표를 표시하기 위해서 HTML entities (opens in a new tab)를 사용하세요.

<a href='http://www.example.com' title='Isn**&#39;**t this fun?'>A link to my example.</a>

HTML 문서의 구조

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>My test page</title>
  </head>
  <body>
    <p>This is my page</p>
  </body>
</html>
  • <!DOCTYPE html>: HTML 초창기에 자동 오류 검사 등이 가능한 좋은 HTML로 작동하는 것을 의미한다. <!DOCTYPE html> 은 유효한 문서 형식을 나타내는 짧은 문장이란 것만 알고 있으면 된다.
  • <html></html>: 전체 페이지 컨텐츠를 포함하는 기본 요소.
  • <head></head>: 사용자에게 보여지지 않는다. 검색 결과에 노출될 키워드, 홈페이지 설명, CSS 스타일, charactor setdeclaration 등 페이지의 모든 내용을 담고 있다.
  • <meta charset="utf-8">: HTML 문서의 문자 인코딩 설정을 UTF-8로 지정하는 것으로 전세계에서 사용되는 언어에 대한 대부분의 문자가 포함된다. 이 설정을 통해 페이지의 모든 텍스트 내용을 처리할 수 있다.
  • <title></title>: 페이지가 로드되는 브라우저 탭에 표시되는 제목으로 사용. 북마크 시 페이지 설명에도 사용됨.
  • <body></body>: 페이지에 표시되는 모든 콘텐츠가 포함된다.

HTML 공백

HTML 요소 내에서 얼마나 많은 공백(하나 이상 또는 줄 바꿈)을 사용하든 HTML 파서는 코드를 렌더링할 때 공백 시퀀스를 단일 공백으로 줄인다. 하지만 가독성을 위해 공백을 적절히 사용해라.

HTML은 중첩된 각 요소가 내부에 있는 것보다 두 칸 더 들여쓰기되어 있다.

Entity references: HTML에 특수 문자 포함

HTML 구문에 쓰이는 <,>"및 & 는 텍스트에 어떻게 포함시킬까?

링크 (opens in a new tab)를 보자. 엠퍼샌드(&)로 시작하고 세미콜론(;)으로 끝난다.

<p>In HTML, you define a paragraph using the <p> element.</p>
 
<p>In HTML, you define a paragraph using the &lt;p&gt; element.</p>

첫번째 단락의 경우 <p>의 두 번째 인스턴스를 새 단락이 시작하는 것으로 해석한다.

🦋 참고: HTML의 문자 인코딩이 UTF-8로 설정 (opens in a new tab)되어 있기 때문에 최신 브라우저는 실제 기호를 잘 처리하므로 다른 기호에 대해서는 엔티티 참조를 사용할 필요가 없다.

HTML 주석

주석의 목적은 코드에 메모를 포함시켜 논리 또는 코딩을 설명할 수 있도록 하는 것이다.

코드를 완전히 기억 못할 정도가 되었을 때 코드베이스로 돌아오는 경우 매우 유용하다.

HTML 주석을 쓰려면 특수 마커 <!- 및 ->로 주석을 묶는다.

<p>I'm not inside a comment</p>
 
<!-- <p>I am!</p> -->