본문 바로가기

old

[HTML] 블록 요소

HTML 안의 <body> 요소는 크게 "블록 요소(block eliment)와 "인라인 요소(inline eliment)"로 구분할 수 있다. 사실 이런 이진적 분류는 HTML 4.01이 사용되던 2014년 이전까지 사용됐는데, inline 요소와 block 요소의 조합은 HTML5의 플로우 콘텐츠에 대응된다.

 

HTML5의 마크

 

 

 

  • 블록 요소는 너비와 높이를 가져 공간을 차지하여 "블록"을 만든다. CSS 태그인 vertical-align, text-align이 적용되지 않는다.
  • 인라인 요소는 블록 레벨 안쪽에서 텍스트를 꾸미는 태그다. CSS에서 너비(width)와 높이(height)를 가지지 않는다
  • 블록 요소는 CSS 태그인 display: inline을 이용해 inline 속성으로 변경할 수 있다. 블록 태그는 새로운 줄에서 시작하지만 인라인 요소는 어느 곳에서나 시작할 수 있다.

 

 

 

다양한 블록 태그를 이해하고 사용하지 않고 아무렇게나 <div>나 <section>으로 감싸면 만들기에는 편하다. 하지만 태그 안의 내용이 어떤 내용을 담고 있는지, 즉 태그가 어떤 목적을 띠고 있는지 올바르게 표기한 문서가 좋은 문서다. 태그의 사용 목적을 제대로 알고 사용해야 한다. 예를 들면, 하이퍼링크로 이루어진 메뉴 버튼이 줄지어 있을 때 이것을 문서의 영역을 나누는 <section>으로 감싼 문서보다 하이퍼텍스트의 집합을 표현하는 <nav>로 감싼 문서가 유용한 문서가 될 것이다. 그럼 블록 태그의 종류와 쓰임을 살펴보자.

 


블록 요소 종류

(1) 랜드마크형 태그: <main>, <header>, <footer>

(2) section형 태그: <section>, <article>, <aside>, <nav>

(3) 기타

 

(1)과 (2)를 시멘틱 태그, 즉 의미를 구분해 주는 태그라고 부른다.

 

 

 

(1) 랜드마크형 태그

<body> 안의 문서를 크게 세 개의 단락으로 구분해 주는 랜드마크 같은 존재다. 문서에는 <header>, <main>, <footer> 순으로 배치한다.

 

 

<main>

문서 <body>의 주요 콘텐츠를 나타낸다. 문서의 핵심 주제나 앱의 핵심 기능에 직접적으로 연결됐거나 확장하는 콘텐츠로 이루어진다. <main> 요소의 콘텐츠는 문서의 유일한 내용이어야 한다. 사이드바, 탐색 링크, 저작권 정보, 사이트 로고, 검색 폼 등 여러 문서에 걸쳐 반복되는 콘텐츠는 포함해선 안 된다. 그러나 검색 폼이 페이지의 주요 기능이라면 예외로 둘 수 있다. <main>은 페이지의 개념적 구조를 바꾸지 않으며 온전히 정보 제공용이다.

<header>Gecko facts</header>

<main role="main">
    <p>Geckos are a group of usually small, usually nocturnal lizards. They are found on every continent except Australia.</p>
 
    <p>Many species of gecko have adhesive toe pads which enable them to climb walls and even windows.</p>
</main>

 

 

 

<header>

소개 및 탐색에 도움을 주는 콘텐츠를 나타낸다. 제목, 로고, 검색 폼, 작성자 이름 등의 요소도 포함할 수 있다.

<header> 요소는 구획 콘텐츠가 아니므로 개요에 구획을 생성하지 않는다. 대신 주위 구획의 제목을 감싸기 위한 요소지만, 필수 사항은 아니다. <header>는 HTML5에서야 명세에 포함됐지만, 사실 HTML의 시작부터 존재했다.

<header class="page-header">
    <h1>Cute Puppies Express!</h1>
</header>

<main>
    <p>I love beagles <em>so</em> much! Like, really, a lot. They’re adorable and their ears are so, so snuggly soft!</p>
</main>

 

<footer>

보통 문서의 마지막에 배치한다. 푸터는 일반적으로 구획의 작성자, 저작권 정보, 관련 문서 등의 내용을 담는다.

<article>
    <h1>How to be a wizard</h1>
    <ol>
        <li>Grow a long, majestic beard.</li>
        <li>Wear a tall, pointed hat.</li>
        <li>Have I mentioned the beard?</li>
    </ol>
    <footer>
        <p>© 2018 Gandalf</p>
    </footer>
</article>

 

 

 

 


(2) <section>형 태그 

문서 구획성 태그인데, 이는 네 개가 있다. <h1> 등을 이용해 제목을 붙이는 것이 일반적이다.

<section> <article> <aside> <nav>가 그것이다.

 

 

아래는 구글 크롬의 HTML5 outliner로 확인한 어떤 웹의 HTML 문서 구조이다. 번호가 붙은 부분이 section형 태그가 범위를 가지는 부분이며, 두 번째 사진에서는 section형 태그에 제목을 생략한 상황도 볼 수 있다.

번호가 붙은 것이 전부 상위 섹션형 태그과 하위 섹션 태그이다
3-1의 <h1>경로</h1>를 지웠더니 섹션의 의미를 알 수 없게 되었다

 

<section> 

일반 구획 요소이다. HTML 문서의 독립적인 구획을 나타내며, 더 적합한 의미를 가진 요소가 없을 때 사용한다. 각의 <section>을 식별할 수단이 필요한데, 주로 제목(<h1>-<h6>) 요소를 <section>의 자식으로 포함하는 방법을 사용한다. 내부 콘텐츠를 따로 구분해야 할 필요가 있으면 <article> 요소를 고려하라. 

* <section> 요소를 일반 컨테이너로 사용하지 말아라. 특히 단순한 스타일링이 목적이라면 <div> 요소를 사용해야 한다. 대개, 문서 요약에 해당 구획이 논리적으로 나타나야 하면 <section>이 좋은 선택이다.

<h1>Choosing an Apple</h1>
<section>
    <h2>Introduction</h2>
    <p>This document provides a guide to help with the important task of choosing the correct Apple.</p>
</section>

<section>
    <h2>Criteria</h2>
    <p>There are many different criteria to be considered when choosing an Apple — size, color, firmness, sweetness, tartness...</p>
</section>

 

 

<article>

단락 콘텐츠 중 하나이며, 특히 긴 글, 문장들의 집합이다. 내부에 여러 개의 <article>을 가질 수 있다. 아래 예제처럼 article마다 콘텐츠의 제목을 명시하는 것이 일반적이다.

<article class="forecast">
    <h1>Weather forecast for Seattle</h1>
    <article class="day-forecast">
        <h2>03 March 2018</h2>
        <p>Rain.</p>
    </article>
    <article class="day-forecast">
        <h2>04 March 2018</h2>
        <p>Periods of rain.</p>
    </article>
    <article class="day-forecast">
        <h2>05 March 2018</h2>
        <p>Heavy rain.</p>
    </article>
</article>

 

 

 

<aside>

부가 콘텐츠에서 <aside> 태그를 사용한다. 문서의 주요 내용과 간접적으로만 연관된 부분을 나타낸다. 주로 사이드바 혹은 콜아웃 박스로 표현한다.

 

 

<nav>

탐색 구획 요소라고도 하는데, 내부에 <a> 태그(하이퍼링크)의 집합을 포함할 때 쓰인다. 메뉴, 목차, 색인에서 자주 쓰인다.

<nav class="crumbs">
    <ol>
        <li class="crumb"><a href="#">Bikes</a></li>
        <li class="crumb"><a href="#">BMX</a></li>
        <li class="crumb">Jump Bike 3000</li>
    </ol>
</nav>

 

 

 

 

 


(3) 기타

 

 

 

<div> 콘텐츠 분할 요소

<div> 요소는 의미를 가진 다른 요소(<article, nav 등)가 적절하지 않을 때만 사용해야 한다. CSS로 꾸미기 전에는 콘텐츠나 레이아웃에 어떤 영향도 주지 않는다. <div> 요소는 "순수" 컨테이너로서 아무것도 표현하지 않는다. 대신 다른 요소 여럿을 묶어 class나 id 속성으로 꾸미기 쉽도록 돕거나, 문서의 특

정 구역이 다른 언어임을 표시하는 등의 용도로 사용할 수 있다.

 

 

<address> 연락처 정보

연락처 정보는 물리적 주소, URL, 이메일 주소, 전화번호, SNS 식별자, 좌표 등 어떠한 정보라도 포함할 수 있다.

<address>
	<a href= "dam@gmail.com"> dam@gmail.com <a><br>
    <a href= "tel: +021940134134"> 02-104-134134 <a>
</address>

 

 

 

 

 

<blockquote> 인용 블록 요소

안쪽의 텍스트가 긴 인용문임을 나타낸다. 주로 들여쓰기를 한 것으로 그려진다. 인용문의 출처는 인라인 특성<cite>로 제공할 수 있다.

<figure>
    <blockquote cite="https://www.huxley.net/bnw/four.html">
        <p>Words can be like X-rays, if you use them properly—they’ll go through anything. You read and you’re pierced.</p>
    </blockquote>
    <figcaption>—Aldous Huxley, <cite>Brave New World</cite></figcaption>
</figure>

 

 

 

<details> 요소

"열림" 상태일 때만 내부 정보를 보여주는 정보 공개 위젯을 생성한다. 요약이나 레이블은 <summary> 요소를 통해 제공할 수 있다. 정보 공개 위젯은 보통 레이블 옆의 작은 삼각형이 돌아가면서 열림/닫힘 상태를 나타낸다. <details> 요소의 첫 번째 자식이 <summary> 요소라면, <summary>의 콘텐츠를 위젯의 레이블로 사용한다.

<details>
    <summary>Details</summary>
    Something small enough to escape casual notice.
</details>

<datails> 태그의 닫힘 상태이다

 

<datails> 태그의 열림 상태이다

 

 

 

 <dialog> 대화 상자 요소

닫을 수 있는 경고, 검사기, 창 등 대화 상자 및 기타 다른 상호작용 가능한 컴포넌트를 나타낸다.

<dialog open>
  <p>여러분 안녕하세요!</p>
</dialog>

 

 

 

 

<dl> <dt> <dd> 정의 목록 요소

<dl>: definition list or Description list

설명 목록을 나타낸다. <dl>은 <dt>로 표기한 용어와 <dd>요소로 표기한 설명 그룹의 목록을 감싸서 설명 목록을 생성한다. 주로 용어사전 구현이나 메타데이터(키-값 쌍 목록)을 표시할 때 사용한다.

 

<dt>: definition term

리스트에서 용어를 나타낸다. <dl> 안에 위치해야 한다. 보통 <dd>가 뒤따른다.

 

<dd>: definition Description

 <dt>에 대한 설명, 정의, 또는 값을 제공한다.

 

<dl>
    <dt>Beast of Bodmin</dt>
    <dd>A large feline inhabiting Bodmin Moor.</dd>

    <dt>Morgawr</dt>
    <dd>A sea serpent.</dd>

    <dt>Owlman</dt>
    <dd>A giant owl-like creature.</dd>
</dl>

용어를 설명하는 dd 요소는 자동 들여쓰기가 된다.

 

 

 

 

<fieldset> 필드셋 요소

웹 양식의 여러 컨트롤과 레이블<label>을 묶을 때 사용한다.

<fieldset>는 그룹을 만들 수 있으며 <legend>로 그룹의 설명을 제공할 수 있다. 여러 특성을 지정할 수 있는데, 그 중 중요한 것 하나는 페이지 내 <form>요소의 id를 받을 수 있는 form 특성으로, <form> 바깥의 <fieldset> 요소를 해당 양식에 포함해야 할 때 사용한다. 다른 하나는 disabled로, <fieldset>의 모든 콘텐츠를 한 번에 비활성화할 수 있다.

<form>
  <fieldset>
    <legend>Choose your favorite monster</legend>

    <input type="radio" id="kraken" name="monster">
    <label for="kraken">Kraken</label><br/>

    <input type="radio" id="sasquatch" name="monster">
    <label for="sasquatch">Sasquatch</label><br/>

    <input type="radio" id="mothman" name="monster">
    <label for="mothman">Mothman</label>
  </fieldset>
</form>

<fieldset> 구현 모습

 

 

 

 

<figure> 요소 독립적인 콘텐츠

<figcaption> 요소를 사용해 설명을 붙일 수 있다. <figure>, 설명, 콘텐츠는 하나의 단위로 참조된다.

<figcaption>는 부모 <figure> 요소가 포함하는 다른 콘텐츠에 대한 설명 혹은 범례를 나타낸다.

<figure>
    <img src="/media/cc0-images/elephant-660-480.jpg"
         alt="Elephant at sunset">
    <figcaption>An elephant at sunset</figcaption>
</figure>

 

 

 

 

 

<form> 요소

정보를 제출하기 위한 대화형 컨트롤을 포함하는 문서 구획을 나타낸다.

<form action="" method="get" class="form-example">
  <div class="form-example">
    <label for="name">Enter your name: </label>
    <input type="text" name="name" id="name" required>
  </div>
  <div class="form-example">
    <label for="email">Enter your email: </label>
    <input type="email" name="email" id="email" required>
  </div>
  <div class="form-example">
    <input type="submit" value="Subscribe!">
  </div>
</form>

<form> 구현 모습

 

 

 

 

<hgroup> 요소

문서 구획의 다단계 제목을 나타낸다. 다수의 <h1>-<h6>을 묶을 때 사용한다.

<hgroup>는 W3C HTML5 명세에서 제거되었고, WHATWG판 HTML에만 남아있습니다. 그러나 대부분의 브라우저에서 부분적으로 구현 중이므로 사라지지는 않을 것으로 보인다. 다만, <hgroup> 요소의 주요 목적이 HTML 명세의 개요 알고리즘에서 제목의 표시 방법을 설정하기 위함이며, 어떠한 브라우저도 개요 알고리즘을 구현하지 않았음을 고려할 때, <hgroup>의 의미는 이론적으로만 유효하다.

<hgroup>
    <h1>Calculus I</h1>
    <h2>Fundamentals</h2>
</hgroup>

 

 

<hr> 요소

이야기 장면 전환, 구획 내 주제 변경 등, 문단 레벨 요소에서 주제의 분리를 나타낸다. 역사적으로 <hr>은 가로줄로 표현했다. 시각적 브라우저에서도 가로줄로 그려질 수 있지만, 이제 시각 표현에 그치지 않고 의미를 가지게 됐다. 따라서 가로줄을 그리고 싶다면 적절한 CSS를 사용해야 한다.

<p>§1: The first rule of Fight Club is: You do not talk about Fight Club.</p>

<hr>

<p>§2: The second rule of Fight Club is: Always bring cupcakes.</p>

<hr> 구현

 

 

 

<ol> / <ul> / <li>

<ol>: ordered list, 즉 정렬된 목록을 나타낸다. 보통 숫자 목록으로 표현한다.

<ul>: unordered list,정렬되지 않은 목록을 나타낸다. 보통 불릿으로 표현한다.

 

<ol>과 <ul>은 모두 목록을 나타내는 태그지만, 항목의 순서를 바꿨을 때 의미도 바뀐다면 <ol>을 사용하라.

<li>: list, 즉 목록의 항목을 나타낸다. 반드시 <ol> <ul>  혹은 메뉴 <menu> 안에 위치해야 한다. 

<ol>
  <li>Mix flour, baking powder, sugar, and salt.</li>
  <li>In another bowl, mix eggs, milk, and oil.</li>
  <li>Stir both mixtures together.</li>
  <li>Fill muffin tray 3/4 full.</li>
  <li>Bake for 20 minutes.</li>
</ol>
    
<ul>
    <li>Neil Armstrong</li>
    <li>Alan Bean</li>
    <li>Peter Conrad</li>
    <li>Edgar Mitchell</li>
    <li>Alan Shepard</li>
</ul>

 

 

<p>

하나의 문단을 나타낸다. 시각적인 매체에서, 문단은 보통 인접 블록과의 여백과 첫 줄의 들여쓰기로 구분하지만, HTML에서 문단은 이미지나 입력 폼 등 서로 관련있는 콘텐츠 무엇이나 될 수 있다.

문단은 블록 레벨 요소이며, 자신의 닫는 태그(</p>) 이전에 다른 블록 레벨 태그가 분석되면 자동으로 닫힌다.

<p>독자 입장에선 문단 사이를 여백으로 구분하는게 제일 읽기 쉽지만,
첫 줄 들여쓰기로도 구분할 수 있습니다. 들여쓰기는 보통 인쇄매체에서
공간과 종이를 아끼기 위해 사용합니다.</p>

<p>학교 과제나 초안 등 나중에 편집할 글은 여백과 들여쓰기 둘 다 사용합니다.
그러나 완성한 글에 둘 다 사용하는건 불필요하고 초보적으로 여겨집니다.</p>

<p>아주 오래된 글에서는 문단을 특수기호 ¶, <i>필크로</i>(단락 기호)로
구분했습니다. 그러나 답답하고 읽기 힘들어 지금은 사용하지 않습니다.</p>

 

 

 

 

<pre> 요소

미리 서식을 지정한 텍스트를 나타내며, HTML에 작성한 내용 그대로 표현한다. 텍스트는 보통 고정폭 글꼴을 사용해 렌더링하고, 요소 내 공백문자를 그대로 유지한다. <pre> 요소로 만든 이미지나 도표에 대한 대체 설명을 지정하는 것이 중요하다. 대체 설명은 분명하고 간결하게 이미지 또는 도표 콘텐츠를 설명해야 한다.

<pre>
  L          TE
    A       A
      C    V
       R A
       DOU
       LOU
      REUSE
      QUE TU
      PORTES
    ET QUI T'
    ORNE O CI
     VILISÉ
    OTE-  TU VEUX
     LA    BIEN
    SI      RESPI
            RER       - Apollinaire
</pre>

 

 

 

 

<table> 요소

행과 열로 이루어진 표를 나타낸다.

 

<th> table head: 제목, 굵은 글씨체에 중앙 정렬로 나타난다.

<tr> table row: 가로줄을 만드는 역할이다. 이 안에 <th>와 <td>가 들어간다.

<td> table data: 데이터를 입력한다.

 

table의 머리와 몸통과 발을 명시적으로 구분하고 싶을 때 아래 태그를 사용한다. 입력하지 않으면 자동으로 <tbody>로 감싸진다.

<thead> table head

<tbody> table body

<tfoot> table foot

<table>
    <thead>
        <tr>
            <th colspan="2">The table header</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>The table body</td>
            <td>with two columns</td>
        </tr>
    </tbody>
</table>

 

 

 

 

 

참고 사이트: Mozila 웹 문서 https://developer.mozilla.org/ko