홈페이지 관련/HTML2011. 2. 20. 00:16

참고자료

교육

  • "HTML V5 and XHTML V2"(Adriaan de Jonge, developerWorks, 2007년 11월): HTML V5와 XHTML V2를 통해 기존 버전을 개선하는 과정에서 개발자들이 선택한 접근 방식은 매우 달랐다. 이러한 접근 방식의 차이로 인해 결과도 달라졌다. 또한, 여러 해 만에 처음으로 곧 공개될 브라우저 버전의 경향이 불확실했다. 이러한 두 가지 표준의 세부적인 내용의 근간이 되는 전체적인 개념을 확인할 수 있다.

  • "New elements in HTML5"(Elliotte Rusty Harold, developerWorks, 2007년 8월): HTML5의 몇 가지 새로운 요소에 대한 개요를 확인할 수 있다.

  • "An Introduction to MathML"(David Carlisle, developerWorks, 2009년 12월): MathML은 W3C 권장사항으로 수학 표현식을 마크업하는 데 필요한 XML 어휘를 정의한다. HTML5를 사용하면 MIME 유형과 서버 구성을 변경하지 않아도 MathML을 직접 웹에 배치할 수 있을 것으로 보인다.

  • "Android and iPhone browser wars, Part 1: WebKit to the rescue"(Frank Ableson, developerWorks, 2009년 12월): 이 기사는 두 개의 파트로 구성된 연재 기사 중 첫 번째로 브라우저 기반의 iPhone과 Android 애플리케이션을 개발하는 과정을 다룬다.

  • "The future of HTML, Part 1: WHATWG"(Ed Dumbill, developerWorks, 2005년 12월): 두 개의 파트로 구성된 이 연재 기사에서 Edd Dumbill은 웹 작성자와 브라우저 개발자, 표준화 기구에서 제안하는 다양한 HTML 발전 방향을 살펴본다.

  • w3schools.comHTML 튜토리얼에서 HTML에 관한 모든 것을 배울 수 있다.

  • CSS 튜토리얼에서는 CSS를 사용하여 다양한 웹 페이지의 양식과 레이아웃을 모두 한 번에 제어할 수 있는 방법을 배울 수 있다.

  • JavaScript 튜토리얼: 웹의 스크립팅 언어를 사용하는 방법을 배울 수 있다.

  • HTML5: A vocabulary and associated APIs for HTML and XHTML: Editor's Draft 13 January 2010: 최근에 발표된 HTML 스펙 Editor's Draft를 읽어보자.

  • 곧 간행될 Dive Into HTML5(Mark Pilgrim, O'Reilly Media)에서 발췌한 글을 읽어보자.

  • HTML5 갤러리에서 HTML5 마크업을 사용하는 웹 사이트를 확인할 수 있다.

  • HTML5 Tag Reference: 알파벳 순서로 정렬된 HTML5 태그 참조를 확인할 수 있다.

  • HTML5 doctor 웹 사이트에는 HTML5를 구현하는 데 도움이 되는 정보가 많다.

  • HTML 5 Cheat Sheet에는 현재 지원되는 모든 태그와 해당 설명 및 속성 그리고 HTML4에서의 지원 상황이 표시되어 있다.

  • CSS 3 Cheat Sheet: 여기에서 편리한 CSS3의 기본 기능과 인쇄 가능한 참조 카드를 확인할 수 있다.

  • HTML5 데모 웹 사이트에는 다양한 HTML5 실험 및 데모 사이트를 가리키는 링크가 있다.

  • 이 데모는 브라우저상에서 기능이 다양한 대화식 3D 애플리케이션을 구현하는 데 필요한 오픈 소스 웹 API인 O3D를 사용하여 브라우저의 3D 그래픽 렌더링 능력을 실제로 증명한다.

  • lifehacker.com에서 How HTML5 Will Change the Way You Use the Web 기사를 읽어 보자.

  • Yes, You Can Use HTML5 Today!: HTML5의 세계를 소개하는 또 다른 우수한 기사이다.

  • css3.info.com: CSS3에 관한 모든 정보를 얻을 수 있다.

  • Introduction to CSS3: 곧 공개될 CSS3 스펙의 W3C Working Draft를 읽어보자.

  • Introducing the CSS3 Multi-Column Module에서는 W3C 다중 컬럼 모듈을 깊이 고찰한다. 이 모듈은 요소 내부에 있는 다중 컬럼으로 컨텐츠가 전달될 수 있도록 하기 위한 것이다.

  • Mozilla.org에서 CSS3 컬럼을 배워보자.

  • CSS3 transitions and 2D transforms: 이 기사에서 Opera의 CSS3 트랜지션과 변환에 관해 배울 수 있다. 또한, SVG와 SMIL도 확인하자.

  • Mozilla.org에서 제공하는 이 캔버스 튜토리얼에는 HTML 페이지에서 <canvas> 요소를 구현하는 방법이 설명되어 있다.

  • Apple Developer Central에 있는 Using the Canvas에서는 Javascript 캔버스 오브젝트를 지원하는 WebKit 기반 애플리케이션 및 Safari, Dashboard를 살펴본다. Javascript 캔버스 오브젝트를 이용하면 HTML 내에서 임의의 컨텐츠를 편리하게 그릴 수 있다.

제품 및 기술 얻기

  • TheoraXiph.org Foundation의 개방된 비디오 압축 형식으로 무료이다.

  • O3D AP: O3D는 브라우저상에서 기능이 다양한 대화식 3D 애플리케이션을 구현하는 데 필요한 오픈 소스 API이다.

  • IBM 제품 평가판을 다운로드하여 DB2, Lotus, Rational, Tivoli 및 WebSphere의 애플리케이션 개발 도구와 미들웨어 제품을 사용해 보자.

  • 다운로드하거나 DVD로 이용할 수 있는 IBM 시험판 소프트웨어를 사용하여 후속 오픈 소스 개발 프로젝트를 구현해 보자.

토론

Posted by 캠퍼스친구
홈페이지 관련/HTML2011. 2. 20. 00:16
예제파일을 첨부했습니다.
다운받아서 참고하세요.

Posted by 캠퍼스친구
홈페이지 관련/HTML2011. 2. 20. 00:15

요약

본 튜토리얼에서는 직접 사용해 볼 수 있는 예제를 이용하여 HTML5와 CSS3를 이용한 개발 과정을 소개한다. HTML5는 초기 개발 단계에서 많이 사용되며 HTML5에서 제안하는 새로운 기능을 다양한 브라우저 벤더에서 어떻게 채택하고 있는지 확인하는 것은 흥미로운 일이다. 현재, 주요 브라우저 중에서 Opera와 Safari, Firefox, Chrome은 릴리스할 때마다 더욱 많은 개선사항을 지원하고 있으며 2010년 말까지는 대부분의 HTML5 기능을 지원할 수 있기를 기대한다.

그러나 앞으로 HTML5가 널리 확산되기 위해서는 몇 가지 문제점을 해결해야 한다. 먼저, 실제적인 문제로 시장에서 가장 널리 사용되고 있는 브라우저인 Microsoft Internet Explorer에서의 HTML5에 대한 지원이 부족하다는 점을 들 수 있다. IE9의 첫 번째 베타 버전이 릴리스될 때까지 개발자들이 HTML5의 모든 기능을 IE에서 테스트할 수 있을 것으로 보이지는 않는다. 적어도 지금은 HTML5로 개발된 사이트가 IE8에서는 단계적으로 성능이 축소되며 추가로 약간의 작업을 하여 폴백을 삽입하면 IE 사용자도 별다른 문제 없이 사이트를 이용할 수 있다.

또 다른 문제는 비디오 코덱과 컨테이너에 관련된 사항이다. 현 상태에서 <video> 요소는 웹의 비디오 표준으로서 Flash 비디오를 대체할 수 없다. 여러 가지 코덱을 지원하는 다양한 브라우저에서는 비디오를 Theora와 H.264로 인코드하는 것보다는 Flash를 사용하는 것이 훨씬 더 수월하다. HTML5 비디오와 관련해서 금년에는 새로운 돌파구가 열리기를 기대해 본다. 간단히 말해서, HTML5와 CSS3는 매력적인 표준이며 지금 당장, 웹 사이트에서 이러한 새로운 스펙을 준수하여 미래를 대비할 수 있다. 본 튜토리얼에서 개략적으로 살펴본 단계를 따라가다 보면 HTML5에서 제공하는 다른 흥미로운 기능을 쉽게 확인할 수 있다.

기사의 원문보기


Posted by 캠퍼스친구
홈페이지 관련/HTML2011. 2. 20. 00:14

종합하기: 샘플 HTML5/CSS3 페이지

이 단계에서는 HTML5와 CSS3에서 제공하는 멋진 새 기능을 사용하는 웹 페이지를 직접 작성하기 시작한다. 이번 섹션에서는 새로 추가된 다양한 기능이 포함된 HTML 페이지를 작성한다. 이번 섹션에서는 HTML 페이지의 개발 과정을 다음과 같은 서브섹션으로 구분한다.

  • 기본 HTML5 페이지의 구조
  • 새로운 시맨틱 요소의 사용
  • <video> 요소에 대한 소개
  • 웹 양식 개선사항
  • <canvas> 요소와 2D 드로잉 API

전체 소스는 하나의 HTML 파일(index.html)로 작성된다(다운로드 참조). 컴퓨터의 어느 위치에서나 이 파일을 열 수 있으며 로드하기 위해 웹 서버로 전개할 필요가 없다. 일부 브라우저에서는 로컬에서의 스크립트 실행과 관련된 경고 메시지가 표시될 수 있으므로 필요하면 동적 스크립팅 기능이 실행 중인지 확인한다.

이 과정에서 HTML 페이지에 적용할 CSS 규칙을 외부 스타일시트 파일(styles.css)에 추가한다. 이 샘플 페이지에서는 border-radius, text-shadow 및 box-shadow와 같은 새로운 CSS3 특성에 대한 몇 가지 예를 살펴본다.

이 정도만 알아도 일상적인 용도로 사용하기에는 충분하다. 그러면 HTML5를 사용해 보도록 하자.

기본 HTML5 페이지

알고 있는 바와 같이 웹 브라우저는 HTML 문서에 올바른 doctype이 있는지에 따라 다양한 모드로 동작한다. 올바른 doctype이 없는 경우, 브라우저는 쿼크 모드로 동작하며 일부 비표준 기능을 유지하여 역호환성을 지원한다. 올바른 doctype이 있는 경우, W3C와 IETF 표준에 따라 브라우저는 표준 모드로 동작한다.

HTML5의 doctype은 <!doctype html>과 같이 매우 단순하다.

작성한 모든 HTML5 페이지의 맨 위에 이 행을 삽입해야 한다. 계속해서 index.html 페이지의 기본적인 구조를 정의해 보도록 하자. 이 페이지에 대한 코드는 Listing 1에 있다.


Listing 1. 기본적인 HTML5 문서 구조
<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>HTML5 Demo</title>
        <link rel="stylesheet" href="styles.css" />
        <!--[if IE]>
        <script src="http://html5shiv.googlecode.com/svn/trunk
/html5.js"></script>
        <![endif]-->
    </head>
    <body>

    </body>
</html>

최근의 XHTML 특징과는 다르게 첫 행에 있는 <html> 태그에는 더 이상 xmlnsxml:lang 속성이 필요 없으며 lang 속성만 있으면 된다. 마찬가지로 <meta> 요소는 HTML 페이지의 문자 인코딩을 정의하는 데 필요한 새로운 속기 속성 문자 세트로 구성되어 있다. 이러한 변화로 인해 코드 작성이 수월해질 뿐만 아니라 단순한 작업을 수행하는 데 필요한 코드 수도 줄어든다. 이전 방식도 여전히 유효하다.

또한, <link> 요소에 type 속성이 없는 이유가 궁금할 수도 있다. 현재 CSS에서는 스타일시트 유형만을 지원하며 모든 최신 브라우저에서는 아무것도 지정하지 않으면 유형이 text/css라고 가정하기 때문에 type 속성이 필요 없다. 또한, 원하는 경우에는 type 속성을 제공할 수 있다.

Listing 1에서 마지막으로 살펴볼 사항은 <script> 요소이며 이 요소는 외부에서 호스트되는 Javascript 파일(html5.js)을 로드한다. Microsoft Internet Explorer 브라우저 버전 8에서도 새 HTML5 요소를 지원하지 않으며 이 브라우저는 <article>, <section>, <header> 등과 같은 요소를 인식하지 못한다. 이 브라우저에서는 이러한 요소가 인식되지 않을 뿐만 아니라 이러한 요소에 양식이 지정되지도 않는다. 이러한 문제점을 해결할 방책은 Javascript 함수 document.createElement()를 사용하여 각 태그를 처리할 수 있는 더미 요소를 작성하는 것이다. 이 스크립트는 새로 추가된 모든 HTML5 요소를 대상으로 이러한 작업을 수행하므로 사용자는 이러한 작업을 신경 쓰지 않아도 된다. 이 스크립트를 모든 HTML5 페이지에 삽입할 것을 권장한다.

그런 다음, 새로운 시맨틱 요소 중 일부를 HTML 페이지에 추가하여 이 페이지의 시각적 구조를 작성한다. 또한, HTML 페이지가 더 멋지게 보일 수 있도록 몇 가지 스타일시트 규칙을 적용한다.



새로운 시맨틱 요소의 사용

새 시맨틱 HTML5 요소를 어떻게 사용해야 하는지 확인하기 위해 이제 이러한 요소를 index.html 파일에 추가한다. 이러한 요소의 기본 구조는 대략 다음과 같다.

  • header
    • hgroup
  • nav
  • article
    • header
    • section
      • header
  • footer

보는 바와 같이 페이지 맨 앞에는 header가 있고 그다음에는 nav, articel, footer가 순서대로 배치된다. header에는 hgroup 요소를 사용하여 다수의 표제를 배치할 수 있다. article 요소 아래에는 header와 section 요소가 있으며 section 요소에도 자체 header 요소가 있다. 이러한 코드는 Listing 2에 있으며 이 코드를 Listing 1의 처음과 마지막 <body> 태그 사이에 추가해야 한다.


Listing 2. HTML5 시맨틱 요소의 사용
<header>
    <hgroup>
        <h1>Company Name</h1>
        <h2>An example of HTML5 and CSS3 in action</h2>
    </hgroup>
</header>

<nav>
    <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About Us</a></li>
        <li><a href="#">Contact Us</a></li>
    </ul>
</nav>

<article>
    <header>
        <time datetime="2010-01-12" pubdate>
            <span>Jan</span> 12
        </time>
        <h1>
            <a href="#" title="Link to this post" 
rel="bookmark">Article Heading</a>
        </h1>
    </header>
    <p>This is an article that demonstrates some of the new features 
that HTML5 and CSS3 has to offer. This article contains several sections, each 
with its own heading, as well as a video element which will play a video without 
Flash on browsers that support it.</p>
    <section>
        <header>
            <h1>This is a section heading</h1>
        </header>
        <p>This is an example of a basic section of a document. 
A section can refer to different parts of a document, application, or page. 
According to the draft W3C spec, HTML5 sections usually have headings.</p>
    </section>
</article>

<footer>
    <p>&copy; 2009 Company Name. All rights reserved.</p>
</footer>
                

Listing 2에 있는 코드는 별다른 설명이 필요 없다. 기본 <header> 요소는 두 개의 표제, 즉 제목 <h1> 요소와 부제 <h2> 요소가 있는 <hgroup> 요소로 구성된다. 기본 <nav> 요소에는 세 개의 항목이 순서와 관계없이 표시되어 있으며 각 항목은 웹 사이트의 가상 페이지를 가리키는 링크이다. <article> 요소에는 기사의 공개 날짜를 지정하는 <time> 요소가 포함된 자체 <header> 요소가 있다. 이 요소에는 datetime 속성이 포함되어 있으며 이 속성은 컴퓨터에서 읽기 쉬운 표준화된 게시 날짜 양식을 지정한다. time 요소의 내용은 "Jan 12"로 사용자가 쉽게 확인할 수 있다. pubdate 속성은 해당 기사의 공개 날짜를 표시한다.

이 header 요소 밑에는 일반적인 HTML 단락이 있고 이 요소 다음에는 새로운 <section> 요소가 있으며 이 section 요소에는 해당 섹션의 제목과 단락으로 구성된 <header> 요소가 포함되어 있다. 본 튜토리얼의 나머지 섹션에서는 작성한 페이지의 추가 영역에 해당하는 섹션을 추가로 작성한다.

CSS를 사용하여 이 페이지의 양식을 아직 지정하지 않았기 때문에 브라우저에서 이 페이지를 열면 모양이 좋지않다. 몇 가지 양식을 추가하여 이 페이지를 좀 더 멋지게 만들어 보자. Listing 3에 있는 코드를 styles.css 파일에 추가한다.


Listing 3. 새 시맨틱 HTML 5 요소에 적용할 CSS 양식
 * {
    font-family: Lucida Sans, Arial, Helvetica, sans-serif;
}

body {
    width: 480px; margin: 0px auto;
}

header h1 {
    font-size: 36px; margin: 0px;
}

header h2 {
    font-size: 18px; margin: 0px; color: #888;
    font-style: italic;
}

nav ul {
    list-style: none; padding: 0px; display: block;
    clear: right; background-color: #666;
    padding-left: 4px; height: 24px;
}

nav ul li {
    display: inline; padding: 0px 20px 5px 10px;
    height: 24px; border-right: 1px solid #ccc;
}

nav ul li a {
    color: #EFD3D3; text-decoration: none;
    font-size: 13px; font-weight: bold;
}

nav ul li a:hover {
    color: #fff;
}

article > header time {
    font-size: 14px; display: block; width: 26px;
    padding: 2px; text-align: center; background-color: #993333;
    color: #fff; font-weight: bold; -moz-border-radius: 6px;
    -webkit-border-radius: 6px; border-radius: 6px; float: left;
    margin-bottom: 10px;
}

article > header time span {
    font-size: 10px; font-weight: normal;
    text-transform: uppercase;
}

article > header h1 {
    font-size: 20px; float: left;
    margin-left: 14px; text-shadow: 2px 2px 5px #333;
}

article > header h1 a {
    color: #993333;
}

article > section header h1 {
    font-size: 16px;
}

article p {
    clear: both;
}

footer p {
    text-align: center; font-size: 12px;
    color: #888; margin-top: 24px;
}

대부분 이러한 CSS 규칙에는 한동안 CSS에서 사용할 수 있었던 특성이 포함되어 있으며 CSS 규칙 article > header time에 Mozilla와 WebKit 기반 브라우저의 브라우저별 특성이 포함된 border-radius 특성이 있다는 것을 확인할 수 있다. 이 특성을 지원하는 Firefox, Safari, Chrome과 같은 브라우저에서는 date/time 상자의 모서리가 둥글게 표시된다.

또한, article > header h1 규칙에 text-shadow 특성이 사용되었다는 것을 확인할 수 있다. 대부분의 최신 브라우저에서 이러한 특성을 지원한다.

이 섹션에서 소개한 두 가지 CSS3 특성의 장점은 단계적으로 기능을 축소할 수 있다는 점이다. 다시 말해서, 방문자의 웹 브라우저에서 이러한 새로운 특성이 지원되지 않는 경우에는 이 특성은 간단히 무시되며 해당 요소는 기타 지원되는 특성에 따라 양식이 지정된다. 이러한 내용이 포함된 페이지는 그림 2에 있는 스크린샷과 같은 형태로 표시된다. (적어도 Mac OS X의 Safari 4에서는 이렇게 보인다.)


그림 2. 작동 중인 시맨틱 HTML5 요소 
 

다음은 <video> 요소와 이 요소를 사용하여 HTML5 페이지에 Theora 비디오 파일을 삽입하는 방법을 살펴본다.



<video> 요소에 대한 소개

이제, index.html 파일에 브라우저에서 제공하는 플레이백 제어 세트와 비디오를 추가한다. 이 샘플에 삽입된 비디오는 Theora 비디오로 Firefox와 Google Chrome에서만 재생된다. 현재, Safari에서는 H.264로 인코딩된 비디오만 지원한다. Listing 2에 있는 마지막 닫기 </section> 태그와 닫기 </article> 태그 사이에 Listing 4의 코드를 추가한다.


Listing 4. 페이지에 비디오 추가하기
<section>
    <header>
        <h1>This is a video section</h1>
    </header>
    <p>
        <video src="http://www.double.co.nz/video_test/transformers480.ogg" 
controls autoplay>
            <div class="no-html5-video">
                <p>This video will work in Mozilla Firefox or Google 
Chrome only.</p>
            </div>
        </video>
    </p>
</section>

보는 바와 같이 먼저, 새로운 섹션을 작성하여 HTML5 페이지에 비디오를 표시한다. 이 섹션에는 header 요소가 있으며 그 뒤에 비디오가 삽입된다. 여기서 사용하는 비디오는 트랜스포머 1편의 예고편이며 src 속성을 사용하여 외부 웹 사이트에서 이 비디오를 로드한다. controls 속성은 비디오 재생에 필요한 브라우저 표준 제어를 표시하도록 해당 브라우저에 명령한다. 그리고 autoplay 속성은 비디오를 자동으로 재생하도록 브라우저에 명령한다.

열기와 닫기 <video> 태그 사이에 no-html5-video 클래스가 지정된 <div> 요소를 작성했으며 이 요소는 Theora 비디오 코덱이나 <video> 요소를 지원하지 않는 브라우저를 사용하여 이 비디오를 보려고 하는 사용자에게 메시지를 표시한다.

브라우저에서 이 페이지를 실행하기 전에 styles.css 페이지에 몇 가지 새로운 규칙을 추가하자. styles.css 파일의 맨 밑에 Listing 5에 있는 규칙을 추가하면 된다.


Listing 5. 비디오 섹션을 처리하기 위한 CSS 규칙
article > section video {
    width: 480px; height: 200px;
}
article > section div.no-html5-video,
article > section div#no-canvas {
    width: 480px; height: 40px; border: 1px solid #993333;
    text-align: center; color: #993333; font-size: 13px;
    font-style: italic; background-color: #F7E9E9;
}

이 규칙은 비디오 컨테이너 요소의 크기를 정의할 뿐만 아니라 HTML5 비디오나 Theora 형식을 지원하지 않는 브라우저를 사용하는 방문객에게 표시할 오류 메시지를 지정한다. Firefox나 Chrome에서 이 페이지를 열면 다음과 같은 화면을 확인할 수 있다(그림 3 참조).


그림 3. 작동 중인 HTML5 비디오
 

간단하지 않은가? 이제 Internet Explorer나 Opera와 같은 브라우저에서 이 페이지를 열어 보자. 그림 4의 밑 부분에 있는 것과 같은 오류 메시지가 표시된다. Safari에서 이 페이지를 보려고 하면 브라우저에 비디오 플레이어가 표시되기는 해도 비디오가 재생되지는 않는다.


그림 4. HTML5 비디오 지원 오류
 

다음에는 플레이스홀더 텍스트, 자동 초점과 같은 일부 새로운 웹 양식 기능과 range, datetime, email과 같은 새로운 입력 유형이 포함되어 있는 양식을 작성한다.



웹 양식 개선사항

HTML5에서 상당히 저평가된 내용 중 하나는 몇 가지 새로운 양식 제어를 도입했다는 점으로 이러한 기능은 개발자들이 양식 기반의 웹 애플리케이션을 작성할 때 유용하다. 브라우저 위젯과 기능 면에서 보면 현재는 이러한 양식 제어에 대한 지원이 매우 부족하지만 이러한 제어는 보통의 텍스트 상자로 단계적으로 성능이 축소되므로 현재 이러한 제어를 코드에서 안전하게 사용할 수 있으며 브라우저에서 이러한 개선사항을 지원하는 경우에는 이러한 기능을 자동으로 사용할 수 있게 된다.

Listing 6에 있는 코드를 Listing 4에서 작성한 비디오 섹션의 닫기 </section> 태그 밑에 직접 추가한다.


Listing 6. 웹 양식 추가
<section>
    <header>
        <h1>This is a feedback form</h1>
    </header>
    <p><form>
        <label for="contact_name">Name:</label>
        <input id="contact_name" placeholder="Enter your name" 
autofocus><br />
        <label for="contact_email">E-mail:</label>
        <input type="email" id="contact_email" placeholder="Enter 
your email address"><br />            
        <label for="contact_phone">Phone:</label>
        <input type="tel" id="contact_phone" placeholder="Enter your 
phone number"><br />
        <label for="contact_callback">Callback on:</label>            
<input type="datetime" id="contact_callback"><br />
        <label for="contact_priority">Priority:</label>
        <input type="range" min="1" max="5" value="1" 
id="contact_priority"><br /><br />
        <input type="submit" value="Request Call">
    </form></p>
</section>

Listing 6에 있는 첫 번째 양식 요소에는 type 속성이 없으므로 기본값인 텍스트로 설정된다. 이 요소에는 플레이스홀더 텍스트 "Enter your name"이 있으며 자동 초점이 설정되어 있다는 것을 알 수 있다. 브라우저 지원은 페이지가 렌더링되었을 때 이 요소에 맞춰 자동으로 전환된다.

다음 요소는 "email" 유형이며 여기에도 플레이스홀더 텍스트 값이 포함되어 있다. 특별히 이러한 유형의 입력 요소를 인식하는 브라우저는 Opera로 이 브라우저는 email 필드라는 것을 강조하기 위해 해당 필드에 메일 아이콘을 표시한다.

다음 필드는 "Callback on:" 레이블이 있는 datetime 필드이다. 브라우저를 지원하는 과정에서 이 필드에 날짜와 시간 선택기가 표시된다. Opera에서는 이 필드가 시간을 선택할 수 있는 스피너와 날짜 선택기가 있는 텍스트 상자, 이렇게 두 가지 제어로 표시된다.

마지막으로 min, max 및 속성값 세트가 있는 range 유형으로 구성된 제어를 확인할 수 있다. Safari, Chrome 및 Opera에서는 이 제어가 슬라이더로 렌더링되며 기본적으로 최소값 1, 최대값 5로 설정된다. 지원되지 않는 브라우저에서는 단순히 텍스트 값이 1로 설정된 텍스트 상자로 표시된다.

이제 매우 단조롭고 간단한 양식에 몇 가지 세련된 기능을 추가해 보자. styles.css 파일에 다음 규칙을 추가한다(Listing 7 참조).


Listing 7. 웹 양식 CSS 규칙
article > section form {
    border: 1px solid #888;
    -moz-border-radius: 10px;
    -webkit-border-radius: 10px;
    border-radius: 10px;    
    -moz-box-shadow: 10px 10px 5px #888;
    -webkit-box-shadow: 10px 10px 5px #888;
    box-shadow: 10px 10px 5px #888;
    background-color: #eee;
    padding: 10px; margin-bottom: 30px;
}

article > section label {
    font-weight: bold; font-size: 13px;
}

article > section input {
    margin-bottom: 3px; font-size: 13px;
}

Listing 7을 자세히 살펴보면 상자의 모서리를 둥글게 하기 위해 border-radius 속성을 양식 컨테이너에 추가하였다는 것을 알 수 있다. 이외에도 box-shadow, background-color(연회색), padding 속성을 추가하였다.

먼저, Opera에서 이 양식이 어떻게 표시되는지 살펴보자. Opera에서는 이러한 새 HTML5 웹 양식 입력 유형을 대부분 지원한다(그림 5 참조).


그림 5. Opera의 웹 양식 개선사항
 

Email 필드 옆에 메일 아이콘이 있고 날짜 및 시간 필드 제어가 새로 추가된 것을 확인할 수 있다. 스피너의 드롭 다운 필드를 클릭하면 Opera의 달력 위젯이 그림 6과 같이 열린다.


그림 6. Opera의 달력 위젯
 

또한, 슬라이더 제어를 확인할 수 있으며 이 제어는 Opera에서 렌더링되었을 때가 오히려 더 단순해 보인다. 그러나 실망스럽게도 Opera에서는 border-radius나 box-shadow 속성을 지원하지 않는다. 따라서 이 양식에는 이러한 두 가지 효과가 모두 적용되지 않았다. 이제 같은 페이지를 Safari에서 열어서 이러한 CSS3 효과가 어떻게 표시되는지 확인해 보자(그림 7 참조).


그림 7. Safari의 웹 양식 개선사항
 

WebKit를 기반으로 하는 Safari는 상자의 그림자 효과와 둥근 모서리를 정확하게 렌더링했다. 이러한 효과는 매력적이지만 단순한 시각적 효과에 불과하다. Mozilla Firefox와 Google Chrome에서도 이러한 효과는 동일하게 표시된다. 또한, Safari에서는 플레이스홀더 텍스트 기능을 지원하고 range 입력 유형 대신 슬라이더를 구현하며 슬라이더는 Opera에서와는 다르게 훨씬 더 멋지게 표시된다는 것을 알 수 있다. 이 튜토리얼의 마지막 섹션에서는 <canvas> 요소와 2D 드로잉 API를 사용하여 웃는 얼굴을 한 간단한 비트맵 이미지를 작성하는 방법을 살펴본다.



<canvas> 요소와 2D 드로잉 API

<canvas> 요소를 사용하려면 먼저 HTML5 페이지에 이 요소를 추가해야 한다. 이전 섹션에서 웹 양식을 적용하기 위해 index.html에 추가한 코드 아래에 Listing 8에 있는 코드를 직접 추가한다.


Listing 8. HTML5 페이지에 <canvas> 요소 추가하기
<section>
    <header>
        <h1>This is an 2D Canvas section</h1>
    </header>

    <p>
        <canvas id="my_canvas" width="480" height="320"></canvas>
        <div id="no-canvas">
            <p>You need a Canvas-compatible browser to view this area.</p>
        </div>
    </p>
</section>

이 코드는 비교적 간단하다. 넓이와 높이, 고유 ID 속성을 지정하면서 canvas 요소를 선언하면 된다. <canvas> 태그에 별도의 닫기 태그가 있어야 하는지는 Mozilla 브라우저와 WebKit 브라우저가 각기 다르지만 열기 태그와 닫기 태그 사이에 코드를 삽입하지 않는 한, 두 경우 모두 같은 방식으로 렌더링된다. Javascript를 활용하여 지원되지 않는 브라우저의 사용자에게 바로 no-canvas 오류 메시지를 표시한다.

다음은 2D 드로잉 API를 활용하여 캔버스에 이미지를 작성하는 Javascript 코드를 추가한다. index.html 파일의 맨 윗부분에 있는 닫기 </head> 태그 바로 앞에 다음 코드를 추가한다(Listing 9 참조).


Listing 9. canvas 요소 스크립트 작성하기
<script>
function loadCanvas() {
    var canvas = document.getElementById('my_canvas');
    if(canvas.getContext) {
        var ctx = canvas.getContext('2d');
        ctx.beginPath();
        ctx.arc(245,160,150,0,Math.PI*2,true);
        ctx.fillStyle = "rgb(255,255,204)";
        ctx.fill();
        ctx.stroke();

        ctx.fillStyle = "black";
        ctx.beginPath();
        ctx.arc(200,110,15,0,Math.PI*2,true);
        ctx.fill();

        ctx.beginPath();
        ctx.arc(280,110,15,0,Math.PI*2,true);
        ctx.fill();

        ctx.beginPath();
        ctx.arc(240,170,20,4,Math.PI*2,true);
        ctx.stroke();

        ctx.beginPath();
        ctx.arc(240,190,60,0,Math.PI,false);
        ctx.stroke();
    } else {
        document.getElementById('my_canvas').style.display = 'none';
        document.getElementById('no-canvas').style.display = 'block';
    }
}
</script>

Listing 9에서는 페이지의 header 요소에 Javascript 블록을 추가하고 loadCanvas 함수를 정의한다. 이 함수는 고유 ID가 my_canvas인 요소를 선택하여 canvas 변수를 인스턴스화한다. 그런 다음, if문을 사용하여 이 요소에서 canvas 컨텍스트를 가져올 수 있는지 판별한다. 가져올 수 있는 경우에는 해당 브라우저에서 <canvas> 요소를 지원하게 되고 그렇지 않은 경우에는 지원하지 않게 된다. 그리고 canvas 요소 대신 오류 메시지가 표시된다. 이 과정은 이 함수의 마지막 부분에 있는 if문의 else 블록에서 처리된다.

지원되는 캔버스가 발견되면 이 함수는 2D 컨텍스트(ctx)를 가져오며 ctx를 사용하여 캔버스에 모양을 그린다. 이 함수는 다섯 개의 모양을 작성한다. 먼저, ctx.beginPath() 함수를 호출하여 경로를 그린다. 그다음 ctx.arc() 함수를 사용하여 캔버스 중심에 반경 150픽셀의 완전한 원호를 그린다. ctx.fill() 함수와 ctx.stroke() 함수를 호출하기 전에 채우기 양식을 노란색으로 설정하여 윤곽선 색상이 검정색인 노란색 큰 원을 작성한다. 이것이 기본 형태이다.

그 다음에는 채우기 양식을 검정색으로 설정하여 눈을 그린다. 이와 같은 완전한 원은 ctx.arc() 함수와 ctx.fill() 함수를 사용하여 작성하며 ctx.arc() 함수에서는 반경을 15픽셀로 설정하고 ctx.fill() 함수를 호출하여 원을 그린다.

다음 코드 블록에서는 코를 작성하는데, 코는 완전한 원이 아니라 호이며 방금 그린 눈 사이의 중심 밑에 배치한다. 코는 채우기를 하지 않는다. 따라서 ctx.stroke() 함수를 대신 사용한다.

마지막으로 눈 밑에 큰 반원형 호로 선을 그려서 입을 작성한다. 결과는 <canvas> 요소를 지원하는 모든 브라우저에서 동일하게 표시된다. (Internet Explorer는 물론이고 Firefox, Safari, Chrome 및 Opera와 같은 대부분의 최신 브라우저에서는 유용한 Javascript 라이브러리를 일부 사용하여 canvas 요소를 지원한다.)

index.html에서 마지막으로 해야 할 작업은 창에서 로딩이 완료되었을 때 loadCanvas() 함수를 호출하도록 <body> 요소를 변경하는 일이다. 다음 행을 사용하여 닫기 <body> 태그를 간단히 바꾼다. <body onload="loadCanvas();">

마지막으로 styles.css 파일에 다음 규칙을 추가하여 캔버스 컨테이너에 몇 가지 멋진 상자 음영 처리를 추가한다(Listing 10 참조).


Listing 10. 캔버스 CSS 규칙
article > section div#no-canvas {
    display: none;
}

canvas {
    border: 1px solid #888;
    -moz-border-radius: 10px;
    -webkit-border-radius: 10px;
    border-radius: 10px;    
    -moz-box-shadow: 10px 10px 5px #888;
    -webkit-box-shadow: 10px 10px 5px #888;
    box-shadow: 10px 10px 5px #888;
    background-color: #eee;
}

최종 결과는 그림 8에 있는 이미지와 같다.


그림 8. 웃는 얼굴이 그려진 캔버스
 

이것으로 본 튜토리얼의 샘플 페이지는 마무리된다. 이번 섹션에서는 HTML5와 CSS3를 사용하여 새로운 HTML5 시맨틱 요소를 처리하고, CSS3의 멋진 새로운 효과를 일부 이용하고, Flash 플러그인이 없는 브라우저에서 비디오를 보고, 몇 가지 새로운 양식 위젯을 살펴본 다음, Javascript API를 사용하여 캔버스에 웃는 얼굴을 그려 보았다.

Posted by 캠퍼스친구
홈페이지 관련/HTML2011. 2. 20. 00:14

CSS3의 새 기능

이번 섹션에서는 상태 기반의 구조적 부정 pseudo 클래스와 같은 새로운 CSS 선택기와 기타 새로운 유형의 선택기를 비롯하여 CSS 레벨 3 스펙에서 확인할 수 있는 새로운 기능을 소개한다. 또한, CSS3에서 제공하는 다양한 효과를 살펴본다. 이전에는 이러한 효과를 별도의 애플리케이션을 사용하여 이미지를 작성한 다음, GIF나 JPG, PNG로 저장해야 했다. 이러한 효과로는 텍스트와 상자의 드롭 새도우, 경계에서의 둥근 모서리, 불투명도를 사용한 반투명 외관이 있다. 레거시 웹 브라우저에서는 이러한 기능이 단계적으로 성능이 축소되기 때문에 불투명도 및 둥근 모서리와 같은 기능은 비교적 널리 사용된다. 그다음에는 CSS3를 사용하여 작성할 수 있는 새로운 다중 컬럼 레이아웃을 살펴본다. 이러한 레이아웃은 신문 레이아웃과 비슷하여 텍스트가 컬럼 수를 초과하여 확대되거나 필요한 경우에는 특정 컬럼 넓이로 확대된다. 살펴볼 또 다른 사항으로는 @font-face 태그를 사용하여 비표준 웹 폰트를 삽입하는 문제이다. 마지막으로 HSL(Hue, Saturation and Lightness)과 RGBA(Red, Green, Blue, and Alpha) 색상 모델과 같은 기타 새로운 CSS3 기능 중 일부를 소개한다.

새 선택기

CSS 선택기는 스타일시트를 사용하여 HTML 요소에 양식을 지정하는 수단이다. 예를 들어, 모든 <div> 요소 주변에 경계를 표시하려면 다음과 같이 div 선택기를 사용한다. div { border: 1px solid #000; }

클래스가 highlight인 모든 요소에 배경 색상을 적용하기 위해서는 다음과 같이 .highlight 선택기를 사용한다. .highlight { background-color: yellow; }

마지막으로 ID 속성값이 myDiv인 요소의 넓이를 변경하려면 다음과 같이 한다. #myDiv { width: 250px; }

물론 이러한 선택기를 조합하여 사용할 수도 있다. 따라서 div.highlight를 사용하여 highlight 클래스의 모든 <div> 요소를 선택하거나 div#myDiv를 사용하여 ID가 myDiv인 <div> 요소를 선택할 수 있다.

이처럼 간단한 선택기 외에도 CSS에는 더 복잡한 선택기가 있다(이전 버전부터 포함됨). 예를 들면, input[type="text"] 선택기를 사용하여 속성 유형이 text인 입력 요소만을 선택할 수 있다. 또는 의사 클래스 :hover를 사용하여 마우스가 요소 위에 있을 때의 요소 양식을 지정할 수 있다(예: a:hover { color: red; }).

선택기는 매우 다양하며 이러한 선택기를 이용하면 요소를 선택하여 편리하게 양식을 지정할 수 있다. CSS3에서는 훨씬 더 새로운 선택기가 추가되었으며 이러한 선택기로 덕택에 개발 작업이 훨씬 수월해졌으며 개발자가 작성해야 할 HTML과 Javascript 코드의 양이 줄어들었다.

속성 선택기

E[foo^="bar"]
foo 속성이 정확히 문자열 bar로 시작하는 요소 E를 선택한다.
E[foo$="bar"]
foo 속성이 정확히 문자열 bar로 끝나는 요소 E를 선택한다.
E[foo*="bar"]
foo 속성에 문자열 bar가 있는 요소 E를 선택한다.

구조적 의사 클래스

E:root
E 요소 중 문서의 루트(<html> 태그)인 요소를 선택한다.
E:nth-child(n)
E 요소 중 상위 요소의 n번째 하위 요소를 선택한다.
E:nth-last-child(n)
E 요소 중 상위 요소의 마지막 n번째 하위 요소를 선택한다.
E:nth-of-type(n)
E 요소 중 유형이 같은 n번째 동위 요소를 선택한다.
E:nth-last-of-type(n)
E 요소 중 유형이 같은 마지막 n번째 동위 요소를 선택한다.
E:last-child
E 요소 중 상위 요소의 마지막 하위 요소를 선택한다. (주: E:first-child는 이전에 CSS2에서 정의되었다.)
E:first-of-type
E 요소 중 유형이 같은 첫 번째 동위 요소를 선택한다.
E:last-of-type
E 요소 중 유형이 같은 마지막 동위 요소를 선택한다.
E:only-child
E 요소 중 상위 요소에 하위 요소가 하나뿐인 요소를 선택한다.
E:only-of-type
E 요소 중 유형이 같은 동위 요소만을 선택한다.
E:empty
하위 요소(텍스트 노드 포함)가 없는 E 요소를 선택한다.

대상 의사 클래스

E:target
참조 URI의 대상인 E 요소를 선택한다.

UI 요소 상태 의사 클래스

E:enabled
사용 가능한 사용자 인터페이스 요소 E를 선택한다.
E:disabled
사용 불가능한 사용자 인터페이스 요소 E를 선택한다.
E:checked
선택된 사용자 인터페이스 요소 E(단일 선택 단추나 선택란)를 선택한다.

부정 pseudo 클래스

E:not(s)
단순한 선택기와 일치하지 않는 E 요소를 선택한다.

일반 동위 컴비네이터

E ~ F
앞에 E 요소가 있는 F 요소를 선택한다.

브라우저는 새로운 속성 선택기를 지원하며 거의 모든 최신 브라우저에서 작동할 정도로 일반 동위 컴비네이터는 우수하다. 대부분의 최신 브라우저에서 새로운 pseudo 클래스를 지원하지만 Internet Explorer 6/7과 Firefox 3.0과 같은 구형 브라우저를 위해 폴백을 삽입해야 한다.



새 효과

새 선택기가 개발자의 어려운 점을 가장 많이 줄여 주는 기능이긴 하지만 대부분의 개발자들은 새로 추가된 멋진 효과를 사용할 수 있기를 원한다. 이는 다음과 같이 다양한 새로운 CSS 특성을 이용하면 가능해진다.

  • background(현재 다양한 배경 지원)
  • background-clip
  • background-origin
  • background-size
  • border-radius(둥근 모서리)
  • border-image
  • border-color(그래디언트 경계)
  • box-shadow(이미지가 없는 상자의 드롭 새도우)
  • box-sizing
  • opacity
  • outline-offset
  • resize
  • text-overflow
  • text-shadow
  • word-wrap

본 튜토리얼의 마지막 부분에서 작성할 샘플 HTML5/CSS3 웹 페이지에서 작동 중인 일부 새로운 효과를 확인할 수 있다.



다중 컬럼 레이아웃

CSS3 다중 컬럼 레이아웃을 이용하면 신문에서 볼 수 있는 것과 같은 다수의 컬럼에 텍스트를 전개할 수 있다. 이러한 작업에는 두 가지 방식이 있으며 column-width 특성을 사용하거나 column-count 특성을 사용하여 수행할 수 있다. column-width 특성을 사용하는 경우에는 각 컬럼의 넓이를 정의해야 하며(컬럼 수는 컨테이너에서 사용 가능한 공간에 의해 결정됨) column-count 특성을 사용하는 경우에는 사용할 컬럼 수를 정의해야 한다. 그렇지만, 컬럼의 넓이는 각 컬럼에서 사용할 수 있는 공간에 따라 변한다.

다중 컬럼 레이아웃의 다른 기능으로는 column-gap 특성을 들 수 있으며 이 기능을 이용하면 column-width 특성을 사용할 때 컬럼 간에 표시할 공간을 개발자가 정의할 수 있다. 또 다른 유용한 기능으로는 column-rule 특성이 있으며 이 기능을 이용하면 border-style 규칙을 컬럼 간에 지정할 수 있다. 마지막으로 column-space-distribution 특성이 있는데 이 특성은 컬럼 간에 지정해야 하는 여유 공간을 결정한다.

현재, Mozilla와 WebKit 브라우저에서는 다중 컬럼 레이아웃이 지원된다. 현재, 이러한 기능은 각각 -moz이나 -webkit를 접두부로 사용하는 임시 소유 특성을 사용하여 구현한다. 스펙이 완성되면 결국 이러한 브라우저에서 CSS 표준 특성을 지원하게 된다.



웹 폰트

사실상 웹 폰트는 CSS2를 위해 제안되었으며 Microsoft Internet Explorer 버전 5 이후부터 사용할 수 있었다. 불행히도 이 기능을 이용하려면 Microsoft에서 고유하게 사용하는 .eot(Embedded Open Type) 폰트 형식을 사용해야 했으며 다른 브라우저 벤더에서는 웹 폰트를 구현하려고 하지 않았다. 결과적으로 사실상 웹 폰트는 CSS2 기반 웹 사이트에서만 사용되었다.

그러나 현재, Firefox, Safari, Chrome 및 Opera 최신 버전을 사용하는 경우, 웹 페이지에서 라이센스가 부여된 모든 .ttf(TrueType)나 .otf(OpenType) 폰트를 사용하려면 @font-face 규칙을 이용해야 한다. @font-face 규칙은 다음과 같이 사용한다. @font-face { font-family: Alexa; src: url('Alexa.otf'); }

현재, article p { font-family: Alexa, Arial, Helvetica, sans-serif; } 형태의 자체 CSS 규칙을 이용하여 이 폰트를 사용할 수 있다.

자체적으로 제작한 폰트가 아닌 경우 폰트를 웹에서 사용하려면 이미지와 마찬가지로 폰트에 대한 사용 권한이 있어야 한다. 또한, 원하는 대로 웹 페이지에 삽입할 수 있는 폰트를 비용을 지불하고 사용하거나 무료 폰트를 다운로드할 수 있다.



기타 새로운 기능

또한, CSS3에는 새 색상 값, 특히 HSL(Hue, Saturation, Lightness)과 알파 특성이 있는 두 가지 색상 값, 즉 RGBA(Red, Green, Blue, Alpha)와 HSLA(Hue, Saturation, Lightness, Alpha)에 대한 지원을 비롯하여 기타 새로운 기능이 많이 포함되어 있다. 개발자는 매체 쿼리를 통해 뷰포트 크기를 기반으로 다양한 장치에 맞는 여러 가지 양식을 정의할 수 있다. 예를 들면, 스마트폰이나 PDA, 기타 모바일 장치와 같이 500픽셀 미만의 뷰포트를 사용하는 장치에 맞는 특정 양식을 제공할 수 있다. CSS3의 음성 모듈을 이용하면 화면 판독기의 음성 특성(음성 볼륨, 밸런스, 비율, 강조 등)을 제어할 수 있다.

Posted by 캠퍼스친구
홈페이지 관련/HTML2011. 2. 20. 00:13

HTML5의 새 기능

이번 섹션에서는 HTML5에 있는 매우 유용한 몇 가지 새로운 기능을 살펴본다. 먼저 머리글, 바닥글, 탐색줄, 사이드바와 같은 최신 웹 페이지 부분에 의미를 부여하는 새로운 시맨틱 요소를 살펴본다. 그런 다음 모양, 텍스트, 애니메이션, 전환 등을 작성하는 데 사용할 수 있는 2D 드로잉 Javascript API와 중요한 새 <canvas> 요소를 학습한다. 이후로는 멀티미디어 전송 플랫폼을 새로 추가된 <audio>와 <video> 요소로 인해 Flash에 대한 웹의 의존성이 어떻게 변모되고 있는지 살펴본다. 그런 다음 네트워크나 인터넷에 연결되지 않은 경우에도 기능 면에서 해당 데스크탑 애플리케이션과 비슷한 웹 애플리케이션을 작성할 수 있게 도움을 주는 오프라인 애플리케이션 지원과 로컬 스토리지 API를 소개한다. 이번 섹션은 현재의 HTML5 스펙에서 제안하는 API와 속성 및 기타 새로운 요소에 대한 개요를 간략히 살펴보는 것으로 마무리한다.

시맨틱 요소

HTML5 스펙에는 머리글, 바닥글, 탐색줄과 같은 웹 페이지 부분이나 다양한 섹션에 의미를 부여하는 새로운 시맨틱 요소가 있다. HTML 이전 버전에서는 일반적으로 <div> 요소를 사용하여 웹 페이지 부분을 작성하고 ID나 클래스 속성을 사용하여 이 부분을 서로 구분한다. 이 버전에는 사용할 클래스 이름과 ID를 지정하는 엄격한 규칙이 정의되어 있지 않기 때문에 의미를 부여하는 시맨틱 요소가 없고 이로 인해 수행되고 있는 특정 영역을 소프트웨어에서 판별하기가 매우 어렵다는 문제점이 있다. HTML5에서는 이러한 문제점이 완화되었으며 웹 브라우저에서 문서의 시맨틱 구조를 구문 분석하기가 훨씬 수월해졌다.

HTML5에서도 계속 <div> 요소를 사용할 수 있지만 앞으로를 고려한다면 관련된 시맨틱 요소를 사용해야 한다. 이와는 반대로 원래의 목적이 아닌 다른 용도로는 이러한 새 요소를 사용하지 않으려는 경향도 있다. 예를 들면, 단지 링크로만 구성된 그룹에는 <nav> 요소를 사용하지 말아야 하는데 이는 이 요소의 용도가 웹 페이지의 기본 탐색 블록을 둘러싸는 데 있기 때문이다.

HTML5에 도입된 기본 시맨틱 요소는 다음과 같다.

<header>
이 요소는 웹 페이지 일부분의 머리글을 정의하는 데 사용되며 전체 페이지에서는 <article> 요소나 <section> 요소를 사용한다.
<footer>
<header> 요소와 마찬가지로 이 새 요소는 페이지 일부분의 바닥글을 정의한다. 페이지나 기사, 섹션의 끝에는 바닥글이 있어서는 안 되지만 일반적으로는 그렇게 한다.
<nav>
이 요소는 웹 페이지의 기본 탐색 링크를 위한 컨테이너이다. 링크로 구성된 모든 그룹에는 이 요소를 사용하지 말아야 하며 주요 탐색 블록에만 사용해야 한다. <footer> 요소에 탐색 링크가 있는 경우에는 <footer> 요소만으로도 충분하므로 <nav> 요소로 이 탐색 링크를 둘러쌀 필요가 없다.
<article>
<article> 요소는 뉴스 항목, 블로그 포스트 또는 설명과 같이 자체적으로 배포될 수 있는 페이지에 있는 개별 항목을 정의하는 데 사용된다. 이러한 항목은 일반적으로 RSS 피드를 사용하여 신디케이트된다.
<section>
이 요소는 문서나 애플리케이션의 섹션, 즉 기사나 튜토리얼의 장 또는 섹션을 나타낸다. 예를 들면, HTML5에서는 독자가 현재 읽고 있는 섹션이 <section> 요소로 둘러싸인다. 반드시 그런 것은 아니지만 일반적으로 <section> 요소에는 머리글이 있다. 예를 들면, 현재 읽고 있는 섹션의 머리글에는 "시맨틱 요소"라는 텍스트가 포함되어 있다.
<aside>
이 요소는 새로 추가된 것으로 사이드바 주변에 있는 컨텐츠와는 별도로 다루어야 하는 기타 컨텐츠와 사이드바를 마크업하는 데 사용한다. 이러한 예로는 광고 블록이 있다.
<hgroup>
제목과 부제가 모두 있는 경우에는 페이지, 기사 또는 섹션에 둘 이상의 표제가 필요할 수도 있다. 예를 들면, 본 튜토리얼에는 제목과 부제가 있으며 각각 "HTML5와 CSS3를 사용하여 최신 웹 사이트 구축하기"와 "HTML5로 canvas와 video 요소 구현하기"이다. 주제와 부제에 각각 <h1> 요소와 <h2> 요소를 사용하여 <hgroup> 요소로 둘러쌀 수 있다.

본 튜토리얼 마지막 부분에 있는 샘플 웹 사이트에는 이러한 새 시맨틱 요소가 일부 포함되어 있으며 이 부분에서 해당 구문과 자세한 사용법을 설명한다.



<canvas> 요소

<canvas> 요소는 본래 Mac OS X 대시보드 위젯과 Safari에 사용할 목적으로 Apple®에서 개발했지만 나중에 Mozilla®와 Opera® 웹 브라우저에 채택되었다. 이 요소는 표준화되어 모양, 텍스트, 전환 및 요소 내부 애니메이션을 작성하는 데 사용할 수 있는 일련의 2D 드로잉 API와 함께 HTML5 스펙에 포함되었다.

대부분의 사람들은 <canvas> 요소 덕택에 그래프와 대화식 게임, 페인트 애플리케이션, Adobe Flash와 같은 외부 플러그인이 없어도 작동하는 기타 그래픽을 편리하게 제작할 수 있기 때문에 이 요소가 HTML5의 가장 중요한 특징 중 하나라고 여긴다.

<canvas> 요소는 매우 기본적인 요소로 오브젝트의 넓이와 높이, 고유 ID를 정의한다. 일반적으로는 웹 페이지에서 렌더링이 완료되면 개발자가 일련의 Javascript API를 사용하여 캔버스에서 실제로 오브젝트를 그려야 한다. 개발자는 이러한 API를 이용하여 선과 형태를 그리고, 색상과 불투명도, 그라디언트를 적용하고, 텍스트를 작성하고, 캔버스 오브젝트를 변환하고 애니메이션을 수행할 수 있다. 또한, API를 이용하면 <canvas> 요소를 대화식으로 사용하여 마우스 이벤트, 키 이벤트와 같은 사용자 입력에 응답할 수 있으며 또한, 캔버스에서 게임과 웹 애플리케이션을 편리하게 제작할 수 있다. <canvas> 요소에 대한 예는 나중에 본 튜토리얼에 있는 샘플 HTML5/CSS3 웹 사이트를 통해 살펴본다.



<오디오> 및 <비디오> 재생

최근에는 YouTube와 같은 비디오 공유 사이트와 Hulu와 같은 컨텐츠 제공 플랫폼이 대중화되면서 멀티미디어 스트리밍에 웹을 사용하는 사례가 폭발적으로 늘어났다. 불행히도 웹은 이러한 컨텐츠를 고려하여 구축된 것이 아니기 때문에 결과적으로 비디오와 오디오는 Flash Video(.flv) 파일 형식과 Adobe Flash 플랫폼으로 제공되었으며 또한 이러한 형식으로 인해 활성화되었다.

그러나 HTML5에서는 두 가지 새로운 요소, 즉 <audio>와 <video> 요소를 지원하며 웹 개발자는 이 요소를 사용하여 멀티미디어 컨텐츠를 삽입할 수 있으며 사용자가 추가로 브라우저 플러그인을 설치하지 않아도 된다. Mozilla Firefox, Apple Safari 및 Google Chrome과 같은 브라우저는 이러한 새 요소를 지원하면서 사용자가 선택해서 사용해야 하는 표준 브라우저 플레이백 제어를 제공하기 시작했다. 이외에도 개발자가 자체 플레이백 제어를 작성할 수 있도록 표준 Javascript API 세트를 제공했으며 개발자들은 그렇게 할 수 있기를 원했다. 기본 멀티미디어 플레이백의 중요한 장점은 이론적으로는 CPU 자원을 적게 사용하기 때문에 에너지를 절약할 수 있다는 점이다.

그러나 이러한 새로운 멀티미디어 요소에서는 각 브라우저에서 지원하는 파일 형식과 이러한 파일을 인코드할 수 있는 다양한 코덱에 대한 특허 라이센스 취득 문제가 주요 문제가 된다. Mozilla와 Opera는 특허 라이센스를 취득하지 않아도 브라우저에 코덱을 삽입할 수 있는 오픈 소스 Theora 비디오 컨테이너와 코덱을 사용하려고 한다. 이와는 반대로 Google은 Theora의 품질, 특히 YouTube에 있는 것과 같은 HD(High Definition) 컨텐츠를 제공하는 기능에 불만이 있다. Apple과 Google은 H.264 코덱을 선호하며 이 코덱은 일반적으로 MP4, MOV나 MKV 파일에 포함된다.

그러나 이러한 문제점이 비디오에만 있는 것은 아니며 오디오 코덱에도 같은 문제점이 있다. MP3와 AAC 형식은 특허로 제한되어 있지만 Vorbis 형식은 그렇지 않다. 휴대용 미디어 플레이어와 다수의 미디어 소프트웨어 애플리케이션에서는 Vorbis 오디오를 지원하지 않기 때문에 이 형식은 널리 사용되고 있지 않다는 문제가 있다.

가까운 장래에는 HTML5 <비디오>와 <오디오>에 관해 다양한 의사결정이 내려질 것이며 최종 권고안에서 어떤 코덱과 형식을 사용하게 될 것인지가 관심을 끌게 될 것이다. 다른 한편으로는 Flash 비디오를 폴백으로 제공하고 다양한 형식의 비디오를 사용할 수 있게 하여 모든 브라우저를 지원하게 할 수 있다. 브라우저 벤더에서 지원할 형식을 결정하는 데 그치지 않고 최종 결정이 내려지기를 바라자. 그래야 이러한 요소를 유용하게 사용할 수 있을 것이다.

또한, 작동 중인 <video> 요소를 본 튜토리얼에서 나중에 살펴본다.
 



로컬 스토리지와 오프라인 애플리케이션

전통적으로 웹 개발자는 나중에 웹 페이지에서 정보를 다시 읽을 수 있도록 쿠키를 사용하여 방문자의 로컬 시스템에 정보를 저장했다. 기본 데이터를 저장하는 데 있어 쿠키는 매우 유용하지만 웹 브라우저에서 유지할 수 있는 웹 서버당 쿠키 수나 쿠키당 데이터 용량(이름과 값 포함)은 각각 20개와 4KB로 제한된다. 이외에도 HTTP를 요청할 때마다 쿠키가 웹 서버로 전송되어 자원을 낭비한다.

HTML5에서는 로컬 스토리지 API의 이러한 문제점을 해결할 수 있는 방법을 제공하며 이러한 API는 기본 HTML5 문서로 분리된 별도의 스펙에서 다룬다. 개발자는 이러한 API 세트를 이용하여 방문자의 컴퓨터에 쿠키를 저장할 수 있으며 나중에도 이 정보가 해당 위치에 있을 것이라고 합리적으로 믿을 수 있다. 게다가 웹 페이지가 렌더링된 후에도 어느 시점에서나 쿠키를 액세스할 수 있으며 HTTP를 요청할 때마다 쿠키가 자동으로 로드되지 않는다. 이 스펙에는 근본 이유가 같은 제한사항이 포함되어 있으며 이 제한사항은 서로 다른 웹 사이트에서 저장한 데이터를 읽거나 변경하지 못하도록 한다.

대부분의 브라우저는 웹 페이지를 로컬 캐시에 저장하기 때문에 사용자는 오프라인 상태에 있는 경우에도 웹 페이지를 볼 수 있다. 정적 페이지에서는 이러한 기능이 잘 작동하지만 Gmail이나 Facebook, Twitter와 같은 데이터베이스 중심의 동적 컨텐츠에서는 이러한 기능을 사용할 수 없다. HTML5에서는 오프라인 애플리케이션을 지원하며 브라우저는 오프라인 상태에서 애플리케이션을 사용하는 데 필요한 모든 파일을 다운로드하여 사용자가 오프라인에서 해당 애플리케이션을 사용할 때 해당 프로세스에서 이루어진 모든 변경사항을 사용자가 인터넷에 다시 연결될 때 서버로 업로드할 수 있다.
 



웹 양식 개선사항

이전에 웹 애플리케이션을 작성했던 경험이 있다면 HTML의 양식 제어 세트에 익숙할 것이며 이중 일부는 <input> 요소를 사용하여 구현된다는 점을 잘 알고 있을 것이다. HTML4에서는 다음과 같은 입력 유형을 지원한다.

  • button
  • checkbox
  • file
  • hidden
  • image
  • password
  • reset
  • radio
  • submit
  • text

이외에도 <선택> 및 <텍스트 영역>과 같은 양식에 사용하는 기타 몇 가지 요소가 있다. 이러한 양식 제어는 연락처 양식에 있는 이름, 전화번호, 주소와 같은 기본 양식 필드에 다양한 기능을 제공한다. 그러나 Web은 연락처 양식을 제출하는 데 사용하는 HTML 양식과 같은 수준을 훨씬 뛰어넘어 플랫폼으로 성장했으며 이제 HTML 양식은 서버측에서 처리할 애플리케이션 데이터를 제출하는 데 사용된다. 결과적으로 웹 애플리케이션 개발자들은 스피너, 슬라이더, 날짜/시간 선택도구, 색상 선택도구 등과 같은 더 복잡한 양식 제어가 일부 필요하다는 사실을 깨달았다.

이러한 제어 도구를 활용하기 위해서는 개발자가 UI 컴포넌트를 제공하는 외부 Javascript 라이브러리를 사용하거나 그렇지 않으면 Adobe Flex, Microsoft Silverlight 또는 JavaFX와 같은 다른 개발 프레임워크를 사용해야 했다. HTML5에서는 다음과 같이 다양한 새로운 양식 입력 유형을 제공함으로써 이전 스펙에서 해결되지 못한 몇 가지 문제점을 해결하려고 한다.

  • color
  • date
  • datetime
  • datetime-local
  • email
  • month
  • number
  • range
  • search
  • tel
  • time
  • url
  • week

현재는 이러한 새 양식 필드에 대한 지원이 매우 제한적이다. iPhone의 모바일 Safari 브라우저에서는 이러한 새 유형을 일부 사용하여 사용자에게 표시되는 키보드 유형을 변경한다. 예를 들면, 이메일 유형과 함께 @ 기호와 .com 단축 아이콘이 표시된다. 또한, Opera에서는 숫자 유형을 선택할 수 있는 스피너와 날짜 관련 유형을 선택할 수 있는 날짜 선택도구와 같은 다양한 제어를 구현하는 데 필요한 새로운 위젯을 일부 제공한다. 이러한 새로운 오퍼링 중에서 매우 폭넓게 사용할 수 있는 유형은 범위 유형으로 이 유형은 Opera와 Safari, Google Chrome에서 슬라이더로 렌더링된다.

또한, 이러한 새로운 입력 유형 외에도 HTML5에서는 양식 필드를 위한 두 가지 새로운 기능을 지원한다. 이중 첫 번째는 자동 초점 기능으로 이 기능은 웹 페이지가 렌더링될 때 특정 양식 필드에 자동으로 초점을 맞추도록 브라우저에 명령하며 이 기능을 구현하기 위해 Javascript 코드를 작성할 필요가 없다. 두 번째 개선사항은 placeholder 속성으로 개발자는 이 속성을 이용하여 해당 컨텐츠가 비어 있을 때 텍스트 상자 기반의 제어에 표시할 텍스트를 정의할 수 있다. 이러한 예로는 개발자가 검색 상자 외부에 레이블을 사용하고 싶지 않은 경우를 들 수 있다. placeholder 속성을 이용하면 해당 제어의 값이 비어 있고 이 제어에 초점이 맞춰져 있지 않을 때 표시할 텍스트를 개발자가 지정할 수 있다. 이러한 예가 그림 1에 표시되어 있다.


그림 1. 작동 중인 placeholder 속성
 

그림 1에 표시된 바와 같이 이메일 주소와 전화번호의 플레이스홀더 텍스트는 회색으로 표시되어 있으며 비어 있고 초점이 맞춰져 있지 않다. 또한, 이 스크린샷에는 범위 입력 유형에 대한 예가 Safari 브라우저의 슬라이더로 표시되어 있다. 이 스크린샷은 나중에 본 튜토리얼에서 살펴볼 샘플 웹 페이지에서 가져온 것이다.



기타 새로운 기능

HTML5에는 매우 다양한 기능이 새롭게 추가되었지만 본 튜토리얼에서 이러한 기능을 모두 다룰 수는 없다. 이번 섹션에서는 HTML5 스펙의 기타 개선사항 중 일부를 간략하게 살펴보도록 한다.

웹 작업자
이 기능을 이용하면 Javascript 코드를 백그라운드 프로세스에서 실행하도록 설정할 수 있어서 멀티 스레드 애플리케이션을 편리하게 개발할 수 있다. 웹 작업자가 개발자에게 제공하는 주요 혜택으로는 사용자 인터페이스 속도를 떨어뜨리지 않으면서도 백그라운드에서 복잡한 계산을 처리할 수 있다는 점이다.
지리 정보
HTML5에는 지리 정보 API가 포함되어 있으며 사용자가 지정한 장치에 지리 정보를 확인할 수 있는 기능(휴대전화의 GPS 기능)이 있다고 가정하면 이 API를 이용하여 웹 애플리케이션에서 사용자의 현재 위치를 판별할 수 있다. 이러한 기능을 지원하는 장치(iPhone이나 Android 2.0 기반의 스마트폰)가 없는 경우에는 수동으로 위치를 설정할 수 있는 플러그인을 Firefox를 사용하여 다운로드할 수 있다.
끌어서 놓기
또 다른 흥미로운 기능으로는 끌어서 놓기 API를 들 수 있다. 지금까지는 플러그인을 사용하지 않고 끌어서 놓기 기능을 구현하려면 매우 복잡한 Javascript에 의존하거나 script.aculo.us와 같은 Javascript 라이브러리를 사용해야 했다.
문서 간 메시지 전송
이 기능을 이용하면 서로 다른 창에 있는 문서 간에 메시지를 주고 받을 수 있으며 iframe에서도 마찬가지이다. 이 기능은 기본 웹 페이지의 서버 이외의 서버에서 호스트되는 위젯과 애플리케이션을 개발하는 데 매우 유용하며 이러한 애플리케이션은 Facebook 애플리케이션과 비슷하다.
기타
HTML5에 도입된 기타 새로운 기능으로는 MIME 유형과 프로토콜 핸들러 등록 기능이 있어서 웹 애플리케이션을 특정 파일 유형이나 프로토콜의 기본 애플리케이션으로 등록할 수 있다. 현재까지 브라우저 히스토리 관리 기능은 수동으로 구현하거나 외부 Javascript 프레임워크를 사용해야 하지만 기타 새로운 요소와 속성을 호스트하게 되어 웹 개발이 더욱 수월해졌다.
Posted by 캠퍼스친구
홈페이지 관련/HTML2011. 2. 20. 00:12

요약:  1990년 초반 월드 와이드 웹이 출현한 이래로 HTML은 비교적 강력한 마크업 언어로 진화해 왔으며 기술적으로 밀접한 관련이 있는 Javascript와 CSS를 HTML과 같이 사용하면 멋진 형태의 대화식 웹 사이트와 애플리케이션을 작성할 수 있습니다. 본 튜토리얼에서는 직접 사용해 볼 수 있는 예제를 이용하여 HTML5와 CSS3를 소개합니다. 또한, HTML5에서 제공하는 다양한 API와 새로운 요소를 위한 구문과 기능은 물론이고 HTML 테이블과 관련된 CSS3의 기능과 효과 및 새 선택기에 관한 정보를 살펴봅니다. 마지막으로 새롭게 개발된 다양한 기능을 활용하여 샘플 웹 페이지를 개발하는 방법을 살펴봅니다. 본 튜토리얼을 완료하게 되면 HTML5와 CSS3를 기반으로 하는 자체 웹 사이트나 애플리케이션을 작성할 수 있게 됩니다.



시작하기 전에

본 튜토리얼에서는 독자가 HTML과 CSS, Javascript에 대한 기본 지식이 있다고 가정한다. 또한, HTML 요소나 태그에 대한 개념, 속성의 의미, HTML 마크업의 기본 구문 및 웹 페이지의 일반적인 구조 등을 알고 있다고 가정한다. CSS와 관련해서는 요소, 클래스 및 ID 기반 선택기, CSS 특성의 구문, 인라인이나 외부 스타일시트를 사용하여 웹 페이지에 CSS를 삽입하는 방법에 익숙하다고 가정한다. 마지막으로 독자가 변수, Javascript, if문 및 for 루프에 대한 개념은 물론이고 웹 페이지에 Javascript 코드를 삽입하는 방법과 같은 Javascript 관련 지식을 다뤄본 경험이 있다고 가정한다. 시작하기 전에 이러한 기술을 다시 익혀야 한다고 생각한다면 참고자료 섹션에 있는 유용한 튜토리얼과 기사를 참고하여 HTML, CSS, Javascript 개발과 관련된 기본 지식을 얻도록 한다.

이 튜토리얼의 정보

과거 10년 동안 Web 2.0과 RIA(Rich Internet Application), 시맨틱 웹과 같은 개념으로 인해 HTML과 CSS, Javascript의 기능은 한계에 이르렀으며 비디오, 오디오는 물론이고 그래픽이 풍부한 대화식 애플리케이션과 같은 컴포넌트를 강화하기 위해 Adobe® Flash와 같은 플러그인을 사용하게 되었다. Adobe Flex 개발 프레임워크, Microsoft® Silverlight 플랫폼 및 JavaFX의 목표는 개발을 어렵게 하는 HTML의 취약한 기능을 지원하는 데 있었다. 그러나 마크업 언어인 HTML5는 완전한 멀티미디어 지원, 로컬 스토리지 및 오프라인 애플리케이션 지원, 원시 2D 드로잉 API 및 새로운 애플리케이션 개발 API를 지원하면서 다시 등장했으며 이러한 모든 기능은 HTML, CSS 및 Javascript가 웹 사이트와 애플리케이션에 기능이 다양한 프론트엔드를 제공할 수 있다는 사실을 보여준다.

HTML5는 2010년에 새롭게 부각될 것으로 예상되는 매우 중요한 신기술 중 하나로 널리 여겨지며 이미 HTML5를 주제로 여러 가지 책이 집필되고 있다. 수년 동안 웹은 외부 플러그인에 의존하여 웹 브라우저에서 본래 지원할 수 없는 기능, 특히 2D 드로잉과 애니메이션, 멀티미디어를 제공했다. HTML과 CSS 스펙의 최신 버전은 브라우저 컴포넌트를 추가하지 않아도 이러한 기능을 사용할 수 있게 하고, 행 끌어서 놓기 및 행 스트라이핑 등과 같은 간단한 기능을 구현하는 데 필요한 Javascript 코드의 양을 줄이고 어떤 경우에는 Javascript를 전혀 사용하지 않아도 되게 하는 데 그 목적이 있다. 본 튜토리얼에 있는 내용을 따라 HTML5를 활용하는 방법을 학습해 보도록 하자.



전제 조건

HTML5는 비교적 최신에 발표된 스펙이며 따라서 이 글을 쓰는 현 시점에서는 브라우저 지원이 매우 제한적이다. 본 튜토리얼에 있는 코드는 가능한 브라우저 간에 호환되도록 빌드되었지만 일부 기능은 모든 브라우저에서 작동하지 않는다. 현재의 브라우저별 기능은 본 튜토리얼에서 명확하게 확인할 수 있다. 이러한 새 기능을 모두 사용하려면 다음 웹 브라우저 최신 버전을 설치한 다음 HTML5와 CSS3 애플리케이션을 개발해야 한다.

HTML과 CSS 코드를 작성하는 데 필요한 특정 소프트웨어는 없으며 메모장, vi, emacs 등과 같은 기본적인 텍스트 편집기를 사용하면 된다. 본 튜토리얼에서는 소스 코드가 로컬 컴퓨터의 디렉토리에 저장되어 있다고 가정한다. 다시 말해서 웹 서버를 사용하거나 웹 호스팅 서비스에 해당 파일을 업로드할 필요가 없다.

Posted by 캠퍼스친구