0033 HTMLCSS 적용하고 기본 문법 알아보기


CSSHTML 문서에 적용하는 방법은 다음의 3가지 방식이다. 

  

Inline - 개별 요소에 style 속성으로 적용

Internal - <head>의 영역에 있는 <style> 요소에 스타일 시트 설정

External - 외부의 CSS 파일을 링크로 연결하여 적용


인라인(inline) 방식HTMLstyle 속성에서 다루었기 때문에 0025 HTML style 속성(attribute) 및 배경색 설정을 참조하자. 

    

CSSHTML 문서에 적용할 때 가장 자주 사용하는 방법은 외부에 CSS 파일을 만들어서 이를 HTML 문서에 링크하는 External 방식이다. 하지만 External 방식은 나중세 살펴보고 이번에는 우리는 주로 보기 쉽고 이해하기 편한 Internal 방식으로 기본적인 CSS 문법을 익혀보자. 

    

Internal CSS를 사용하는 경우는 하나의 HTML 페이지를 꾸미는 경우다. 이는 하나의 요소만을 대상으로 꾸미는 Inline CSS와 대조된다. 

     

Internal CSS를 사용하기 위해서는 <head> 섹션에 <style> 요소를 중첩시킨다. 

    

다음과 같이 0033.html 파일을 만들어 실행해 보자. 

    

<!DOCTYPE html>

    

<html>

<head>

 <title>간단한 CSS 적용 사례</title>

 <style>

   p

       color: white;

       background-color: red;

   }

 </style>

</head>

<body>

 <p>1번 p블록 시작<br /><br />1번 p블록 끝</p>

 <p>2번 p블록 시작<br /><br />2번 p블록 끝</p>

</body>

</html>


위의 예문은 <style></style> 요소 내에 CSS를 집어넣어 사용하는 Internal CSS 사용방식을 보여준다. 작성한 예문을 실행해보면 다음과 같이 나타난다. 



위에서 작성한 CSS가 어떻게 작성되었는지 기본적인 내용들을 살펴보자.

    

다음은 <p>요소를 선택하여 배경색(background-color) 속성(property)빨간색(red)으로 선언한 규칙이다. 



이 전체를 하나의 규칙(Rule)이라고 부른다. 그리고 규칙(Rule)어떤 요소에 어떤 속성을 적용할지 결정한다. 

    

CSS에서 작성된 규칙이 어떤 HTML의 요소에 적용되는지 나타내는 것을 선택자(selector)라고 한다. 위의 예문에서는 선택자로 <p> 요소를 선택하여 모든 <p> 요소가 해당 규칙의 적용을 받아 서로 다른 2개의 <p> 요소 블록에 동일한 CSS 규칙이 모두 적용되는 것을 확인할 수 있다. 

    

현재는 <p> 요소를 선택하고 있지만, <body> 요소, <h1> 요소 등 다른 요소를 선택할 수 있고 그 외에도 id 속성, class 속성 등 굉장히 다양한 방식으로 선택이 가능하다(나중에 자세히 살펴보자.). 

    

중괄호({ })로 감싸져 있는 부분 안에는 속성(property)속성값(value)이 위치한다. 속성속성값콜론(:)으로 연결되어 있고 여러 개의 속성값이 하나의 속성(property)에 적용되는 경우는 다음과 같이 공백으로 속성값을 구분한다. 

    

border: 10px solid white;


속성(property)속성값(value)은 합쳐서 하나의 단위를 이루고 이 단위를 선언(declaration)이라고 한다. 


그리고 선언(declaration)은 반드시 세미콜론(;)으로 마무리 한다. 

※ 이어지는 다음 선언이 없는 마지막 선언세미콜론(;)을 쓰지 않아도 되지만 그런 습관으로 오류가 발생할 수 있으므로 세미콜론(;)으로 마무리하는 것을 습관으로 하자.

     

여러 개의 선언(declaration)을 한 줄에 또는 여러 줄에 걸쳐서 한 번에 작성할 수 있다.

    

p { color: white; background-color: red; }


또는 


p {

    color: white;

    background-color: red;

  }


하나 또는 여러 개의 선언(declaration)들은 중괄호({ })로 둘러싸이는데 이렇게 중괄호({ })로 묶인 것선언(declaration) 블록이라고 한다. 

    

선택자중괄호 사이, 중괄호선언(declaration) 사이, 선언선언 사이에는 공백을 넣거나 줄을 바꿔 구별하는 것을 권장하는 것 같다. 실제로 공백을 넣지 않아도 작동하는 경우도 있지만 그렇지 않은 경우도 있어서 권장하는 것으로 알고 있다. 



Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0033 HTML에 CSS 적용하고 기본 문법 알아보기.apkg






0032 CSS 소개


HTMLCSS서로 매우 긴밀하게 연계되어 있다. 따라서 HTML에서는 CSS 적용을 염두에 두고 요소(element)속성(attribute)을 만들어 두었고 CSS HTML구조 위에서 디자인을 하도록 설계되어 있어 서로 함께 공부해야만 이해할 수 있는 내용들이 많다. 따라서 앞으로 HTMLCSS를 함께 다루기 위하여 지금 CSS의 기본 개념과 사용법을 익혀두고자 한다. 

   

CSSCascading Style Sheets의 약자다. CSS를 이용하여 다양한 기기(device)의 서로 다른 크기의 화면에서 웹페이지의 디자인, 레이아웃(layout) 등  보이는 스타일을 설정할 수 있다.

   

그렇다면 왜 CSS를 쓰는가? 얼핏 생각하기에는 HTML에서 한꺼번에 처리하면 좋을 것 같은데, 갑자기 이질적인 새로운 형식의 언어를 배워서 웹페이지를 꾸며야 한다니 뭔가 이상하다.

    

우선, CSS의 등장 배경에 관해서는 다음과 같이 요약할 수 있다. 

    

HTML은 웹페이지 디자인 및 요소 스타일링에 적합한 언어가 아니다. 과거에 그런 시도를 한 적은 있지만 업무량이 과도해져 참담한 실패로 끝나고 말았다.

따라서 이런 문제를 극복하기 위하여 W3C에서 CSS를 만들어냈고 덕분에 세련된 디자인을 효율적으로 웹 사이트에 적용할 수 있게 되었다.


HTML은 처음부터 웹페이지의 내용(content)를 구조화하기 위한 언어로 설계되었을 뿐 웹페이지의 디자인을 설정하기 위한 용도로 만들어진 언어가 아니고 그런 의도를 가진 적도 없다. 

    
초기의 웹페이지들은 그야말로 단순한 텍스트에 가까웠기 때문에 HTML에서 요구하는 스타일링도 이탤릭과 굵게 하기 정도로 몇 가지 되지 않았다. 하지만 점점 웹이 발전하고 컴퓨터의 연산 용량과 저장 용량이 커지면서 사진이나 그림 등의 이미지가 웹페이지에 들어가고 점차 입체적이고 직관적인 웹페이지로 발전하게 되었다. 
    
또, 웹페이지가 단순한 정보 게시 역할 위주로 활용되다가 트래픽을 끌어들이기 위한 경쟁적인 플랫폼이 되면서 보다 직관적으로 정보를 전달하는 세련된 웹페이지로 전환되었다. 
    
당연히, 웹페이지의 디자인에 대한 수요가 늘어날 수 밖에 없게 되었고 독보적인 웹페이지를 만들기 위하여 부족한 HTML을 보충할 다양한 플러그 인(plug-in)들이 난립하여 웹에 효율성, 보안 등 각종 문제를 일으켰다.
    

당연히 HTML에서 스타일링을 하는 방식의 실험도 있었다. 가령, HTML 3.2에서 <font> 같은 태그가 표준명세에 첨가되었는데, 이런 방식은 거대한 웹 사이트에 속한 수많은 개별 웹페이지의 글꼴(font)과 색깔(color)을 일일이 설정해야 했기 때문에 개발과정은 길어지고 그에 따른 비용은 늘어났으며 해당 작업을 하는 웹 개발자들에겐 지루하고 힘든 악몽같은 경험을 선사하는 최악의 상황이 만들어졌다.

   

이런 문제들을 해결하기 위해서 W3C에서 CSS를 만들어 HTML 페이지에서 스타일 설정을 대체하도록 했고 덕분에  이제는 하나의 스타일 시트 파일(.css)을 수정하면 전체 웹 사이트의 비주얼을 세련되고 효과적으로 수정할 수 있게 되었다. 

   
결국, 웹페이지에서 보이는 부분은 거의 무조건 CSS로 설정한다고 보면 된다. 


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0032 CSS 소개.apkg





0031 약어(character entity)로 특수문자 표시하기


HTML에서 예약된 문자(reserved characters)들은 어떤 기능을 하도록 되어 있기 때문에 해당 문자를 그래도 사용하면 브라우저는 이를 읽어서 엉뚱한 행동을 할 수 있다. 

    

가령, 다음과 같은 내용을 보자 <p>요소 안에 <html>이라는 문구를 넣고 싶다. 이때, <html>이라는 문구는 말 그대로 글자 그대로 화면에 보이길 바라면서 쓴 문구다. 하지만 실제로는 해당 문구는 브라우저 화면에 표시되지 않는다. 

    

<p>루트 요소인 <html>요소를 누락하는 실수를 저질러선 안된다.</p>


그러면 아래와 같이 <html>이라고 작성된 단어만 사라진다.



위의 경우에는 브라우저가 꺽쇠(< >)와 html이라는 단어의 조합문자가 아닌 태그라고 판단한 것이다.

    

브라우저는 오류가 있더라도 최대한 되는 방향으로 해석하기 때문에 HTML 태그가 정확하지 않아도 표시가 된다. 이 경우에는 그냥 <html>이라고 쓴 부분이 표시되지 않고 끝났지만 복잡한 웹 페이지가 될 수록 어떤 문제가 발생할지 알 수 없다. 특히, 브라우저는 그냥 텍스트도 표현되기 때문에 제대로 HTML 태그가 반영된 것인지 알 수 없는 경우가 많아 문제가 발생하더라도 오류가 어디서 생긴 것인지 알기 어려운 경우가 많으므로 항상 기본을 지켜 작성하도록 해야 한다.


이렇게 예약된 문자들을 오류 없이 안전하게 사용하려면 약어(character entity)를 사용해야 한다. 또한, 이 약어를 사용하면 키보드에 없는 다양한 특수 문자들도 사용할 수 있어 알아두면 매우 유용하다.

    

약어약어명(entity name)이나 약어값(entity number)으로 다음과 같은 형식으로 구성되어 있다. 

    

&entity_name;

or

&#entity_number;


이제 자주 사용되는 필수적인 몇 가지 약어명만 익혀보고 나머지는 필요할 때마다 찾아보는 것이 좋을 것 같다.

     

< : 약어명(&lt; less than)

> : 약어명(&gt; greater than)

& : 약어명(&amp; ampersand)

" : 약어명(&quot; double quotation mark)

' : 약어명(&apos; apostrophe)


약어명은 보통 해당 기호의 영문명을 축약해놓은 버전이라 기억하기 쉽지만 해당 약어명을 지원하지 않는 브라우저가 종종 있을 수 있다. 반면, 약어값은 기억하기 어렵지만 거의 대부분의 브라우저가 약어값을 지원한다.

    

마지막으로 약어명대소문자를 구분한다는 점을 유념하자.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0031 약어(character entity)로 특수문자 표시하기.apkg





0030 HTML 주석(comment) 달기


다른 모든 프로그래밍 언어처럼 HTML에도 주석(comment)을 달 수 있다. 

    

주석(comment)은 개발자가 작성한 코드에 부가하여 이런 저런 설명을 지칭하는 것으로 브라우저가 해당 텍스트를 실행하거나 표시하지 않게끔 만들어진 형식으로 작성된 텍스트로 나타난다. 가령, 이 코드를 작성했을 때 어떤 생각으로 작성했는지 본인의 기억을 환기하거나 다른 사람이 코드를 봤을 때 이해하기 쉽도록 주석(comment)을 붙인다.

   

HTML에서 주석은 다음과 같은 형식으로 작성한다. 

    

<!-- 여기에 이런 저런 주석을 단다. -->


주석은 꼭 1개의 행에 있어야할 필요 없이 여러 행에 걸쳐서 주석으로 처리할 수 있다. 

    

다음과 같이 0030.html을 작성하고 실행해보자. 

    

<!DOCTYPE html>

<html>

 <head><title>주석(comment)</title></head>

 <body>

   <h3>주석 처리된 문단</h3>

   <!--

    <p>

    이 문단은 주석 처리 되었다. <br />

    그래서 보이지 않을 것이다.

    </p>

   -->

   <h3>주석 처리되지 않은 문단</h3>

    <p>

    이 문단은 주석 처리가 되지 않았다. <br />

    그래서 보일 것이다.

    </p>

 </body>

</html>


실행해보면 아래와 같이 주석 처리된 문단이 전혀 나타나지 않는다.

   



HTML 문서유형선언(Document type declaration)에서 한 번 설명한 것처럼 왼쪽 꺽쇠(<) 다음에 느낌표(!)가 오면 요소(element)가 아니라는 뜻이다. 오른쪽 꺽쇠(>)에 붙는 것이 아니란 점에 주의하자.

    

주석은 오직 개발자가 소스코드를 볼 때에만 의미가 있다. 브라우저는 주석 처리된 문장을 표시하지도 않고 내부적으로 어떤 처리도 하지 않으며 완전히 깔끔하게 없는 것으로 무시한다. 

   

브라우저가 주석을 완전히 깔끔하게 무시하기 때문에 디버깅을 할 때 이러한 주석을 활용하면 매우 유용하다. 가령, 에러를 찾기 위해 코드를 하나하나 뒤져볼 때 해당 코드를 지우지 말고 주석 처리하면 임시적으로 그 코드를 분리시킬 수 있어 에러가 어떤 코드에서 시작된 것인지 찾기 쉬워진다.

    

그 외에도 주석을 잘 달면 가독성이 좋아지고 다른 사람이 해당 코드로 다시 작업을 할 때에도 접근하기 쉬워진다. 게다가 이러한 주석을 이용하여 자동으로 매뉴얼 등의 문서를 바로 만들어주는 프로그램도 있어 주석이 충실하면 문서화를 쉽게 할 수 있다. 이렇듯 주석을 충실하게 달았을 때 이점이 상당하므로 항상 충실하게 주석을 다는 습관을 갖도록 하자.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0030 HTML 주석(comment) 달기.apkg





0029 정의 목록(description list) 요소 다루기


HTML에는 순서가 있는(ol), 순서가 없는(ul), 정의(description) 목록(list)이 있다. 앞서 순서가 있는 목록순서가 없는 목록은 다루었으니 이번에는 정의 목록(list)을 다룰 차례다.

    

정의 목록(description list)은 용어나 명칭을 그 설명과 함께 제시한 목록(list)를 말한다.

     

정의 목록(description list) <dl> 요소로 목록을 정의하고 <dt> 요소로 용어나 명칭을 정의하며 <dd> 요소에 구체적인 설명을 작성하게끔 되어 있어 함께 사용해야만 각자 제역할을 할 수 있도록 만들어졌다.

   

dl = description list

dt = description term

dd = description description


사용 형식은 아래와 같다.

     

<dl>

 <dt>설명이 필요한 용어나 명칭</dd>

  <dd>용어나 명칭에 대한 설명을 서술</dt>

 <dt>설명이 필요한 용어나 명칭</dd>

  <dd>용어나 명칭에 대한 설명을 서술</dt>

</dl>


다음과 같이 영단어의 내용을 정의 목록으로 만들어 0029.html

   

<dl>

 <dt>description /dɪˈskrɪpʃən/</dt>

  <dd>기술하기</dd>

  <dd>서술하기</dd>

 <dt>definition /dèfəníʃən/</dt>

  <dd>정의</dd>

  <dd>한정</dd>

  <dd>선명도</dd>

</dl>


실행 결과는 다음과 같다. 



<dl>, <dt>, <dd> 요소 모두 블록 요소인 것을 알 수 있다. 

    

정의 목록이라는 명칭은 HTML 4.01까지 사용되던 definition list에서 나온 명칭이고 HTML 5부터는 definition list가 아니라 description list로 이름이 바뀌었다.

    

description list를 한국어로 단순 번역하면 서술 목록이나 설명 목록으로 번역하게 되는데 정의 목록이라는 말과 큰 차이가 없고 그 내용을 살펴보면 오히려 정의 목록이라는 말이 더 잘 어울리는 것 같다. 또, 여전히 많은 사람들이 이 목록 요소를 정의 목록이라고 부르고 있으므로 description list를 definition list에서와 동일하게 의 목록이라고 지칭한다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0029 정의 목록(description list) 요소 다루기.apkg






0026 HTML 목록(list) 요소 만들기


메뉴나 물건 리스트처럼 종종 리스트나 목록을 쓰는 경우가 있다. 그런 경우 그냥 <p> 요소로 리스트를 나열해서 보여줄 수 있지만 적합한 구조에 맞는 요소를 선택해서 사용해야 한다는 HTML마크업적인 측면을 고려목록(list)에 맞는 요소를 사용해주어야 한다. 

    

HTML의 목록은 순서가 있는 목록(ordered list)순서가 없는 목록(unordered list)의 두 가지가 있다. 그리고 목록에 속하는 개별 항목(item)들은 <li>요소로 만든다. 

    

순서가 없는 목록 → <ul></ul>

순서가 있는 목록 → <ol></ol>

개별 항목(item) → <li></li>


실제로 작성할 때는 다음과 같은 형식으로 작성한다.

    

<ol> or <ul>

 <li>항목(item)</li>

 <li>항목(item)</li>

 <li>항목(item)</li>

</ol> or </ul>


순서가 없는(unordered) 목록을 작성한 것은 다음과 같다. 



순서가 있는(ordered) 목록은 다음과 같이 작성한다. 


<ol>, <ul>, <li> 모두 줄바꿈(linebreak)이 있는 블록 요소이므로 각각 독립적으로 배치된다. 

    

<ol> 요소는 목록(list)의 앞에 목록 번호가 순서대로 주어지고 <ul> 요소는 목록(list) 앞에 순서가 없는 글머리 기호가 붙는다.

    

<li> 요소는 각 항목을 식별하는 데 사용되며, <ol>이나 <ul> 요소는 그 항목들을 묶는 데 사용되는 것으로 반드시 같이 사용되어야 한다. 

    

<ol>이나 <ul> 요소 안에 다른 요소를 넣고 싶다면 아래와 같이 <li> 요소 안에 중첩시켜 넣어야 하고 <li> 요소가 아닌 텍스트나 다른 요소를 넣지 말아야 한다. 

    

<ol> or <ul>

 <li><strong>항목(item)</strong></li>

 <li><em>항목(item)</em></li>

 <li><a href="URL">항목(item)</a></li>

 <img src="sun.jpg" /> 

</ol> or </ul>


물론, 목록(list)를 아래와 같이 중첩해서 넣을 수는 있다. 이런 것을 중첩(nested) 목록이라고 한다.


목록을 중첩할 경우에는 내부에 중첩된 목록이 각각 하나의 <li> 요소 안에 중첩되는 것을 주의해야 한다. 


위에서 제시한 HTML 들은 0026.html로 작성하였으니 참조하기 바란다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0026 HTML 목록(list) 요소 만들기.apkg





0024 블록(block) 요소인라인(inline) 요소


이제 기본적인 태그와 요소들에 대해서 상당수 알게 되었다. 그런데 요소들 화면에 표시할 때 브라우저가 하는 특이한 행동 하나가 눈에 띈다. 그것은 <body> 요소에서 <h1~6>요소, <p>, <blockquote> 요소들은 브라우저가 화면에 표시할 때 반드시 줄바꿈(linebreak)이 앞뒤로 나타나 행 전체를 차지한다. 반면, <img>, <a>, <strong>, <em>, <q> 등의 요소들은 줄바꿈 없이 나타나 행 전체를 차지하지 않고 딱 해당 요소의 내용이 차지하는 공간만큼만 공간을 차지한다. 

    

요소(element) 중에서 화면에 표시(display)될 때 항상 새로운 행에서 시작하고 요소가 위치한 가로폭을 전부 차지하는 요소블록(block) 요소라고 하고 새로운 행에서 시작하지 않고 딱 요소의 내용이 차지한 가로폭만큼만 차지하는 요소인라인(inline) 요소라고 한다. 그리고 모든 HTML 요소는 화면표시(display)를 함에 있어 블록 요소인지 인라인 요소인지가 기본값으로 설정되어 있다. 

    

가령, 다음처럼  0024.html파일을 만들어 보자.

    

<!DOCTYPE html>

    

<html>

<head><title>Block과 inline</title></head>

<body>

<h1>h1 요소</h1>

<p>

  단락을 결정하는 p요소는 위 아래로 줄바꿈이 발생한 것을 확인할 수 있다. 

 (줄바꿈)을 했지만 브라우저에는 줄바꿈을 하지 않은 것으로 나타난다. 한편 <strong>중요한 텍스트</strong>, <em>강조 텍스트</em>를 사용해도 줄바꿈은 일어나지 않고 있다. img <img src="sun.jpg"> 요소를 집어넣으면 어떨까? 하이퍼텍스트 링크인 a요소를 이렇게 넣어보자. <a href="https://deliciouslearning.tistory.com/">책 씹어먹는 즐거움</a> 이처럼 줄바꿈이 일어나지 않는 것을 확인할 수 있다. 하지만 다시 <p>p요소를 내부에 중첩킨 것</p>은 줄바꿈이 일어나는 것을 확인할 수 있다. 

</p>

</body>

</html>


<img> 요소로 웹페이지에 넣을 사진은 다음과 같다. 



그럼 다음과 같이 나타난다. 




위에 보이는 것처럼 블록 요소는 항상 앞과 뒤에 줄바꿈를 가진 것처럼 표시되며, 인라인 요소는 웹페이지에 있는 텍스트의 흐름에 포함되어 ‘라인 위에(in line)’ 나타난다.

    

블록 요소인라인 요소의 구분이 상당히 중요한 것 같다. 어떤 요소들은 구조적으로는 동일한 구조적 기능을 하지만 블록 요 인라인 요소라는 차이점만 존재하는 것 같은 요소들이 있다. 가령 앞서 0023 HTML에서 인용하기(Quotation)에서 공부한 <blockquote><q> 요소는 인용구를 블록 요소로 할 것인가 인라인 요소로 할 것인가 하는 부분이 가장 핵심적인 차이로 보인다. 

    

또, 앞으로 CSS와 함께 정말 자주 사용하게 될 <div><span> 같은 요소들은 HTML문서에서 섹션을 나누고 해당 섹션의 요소들을 묶는 컨테이너(container) 같은 기능만 하는 요소들인데 둘의 차이점은 오직 <div>블록 요소이고 <span>인라인 요소라는 것뿐이다.

    

그렇다면 왜 요소들을 블록인라인으로 구분하는 것이 중요한 것일까?

    

여기저기 뒤져본 결과로 개인적으로 추론해본건대, HTML 개발하면서, 블록 요소전체 윤곽(lay out)을 구성하고 인라인 요소 페이지를 세련되게 다듬는 식의 웹페이지 구축 방법론을 채택한 것으로 보인다. 


그리고 블록 요소 인라인 요소라는 특성 때문에 HTML에 다음과 같은 규칙들이 생기게 되었다.

    

거의 대부분 블록 요소는 내부에 블록 요소중첩(nesting)시킬 수 있다. 

거의 대부분의 인라인 요소인라인 요소를 내부에 중첩시킬 수 있다. 

거의 대부분 블록 요소는 내부에 인라인 요소중첩시킬 수 있다. 

하지만 인라인 요소는 내부에 블록 요소중첩시킬 수 없다.


또, CSS블록 요소인라인 요소를 스타일링 할 때 사용할 수 있는 속성들이 다르다. 이 부분은 추후 CSS를 다루면서 다시 다루도록 하자. 일단, 지금은 블록 요소인라인 요소가 있고, 웹페이지 구축 방법론으로 블록 요소전체 윤곽(lay out)을 구성하고 인라인 요소페이지를 세련되게 다듬는 방식을 채택했다는 점, 그리고 인라인 요소 내부에 블록 요소중첩시킬 수 없다는 점을 기억해 두도록 하자.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0024 블록(block) 요소와 인라인(inline) 요소.apkg





0023 HTML에서 인용하기(Quotation)


글을 쓰다보면 소설이나 뉴스 등 다른 글을 인용해야하는 상황이 종종 생긴다. 이런 상황을 위하여 HTML에도 글의 성격이 인용인지 단순한 텍스트인지 등의 요소를 구별할 수 있도록 이에 맞는 요소들을 갖추고 있다. 

    

<q> 요소는 짧은 인용구를 정의하는 요소다. 브라우저는 보통 <q> 요소의 주위에 큰 따옴표를 둘렀거나 굵게 표시한다.

   

<blockquote> 요소는 다른 자료로부터 거의 문단 단위 이상을 인용할 때 사용한다. 브라우저는 <blockquote> 요소를 보통 들여쓰기(indent)로 나타낸다. 

    

<q> 요소가 짧고 핵심적인 인용구라면, <blockquote> 요소는 책이나 시처럼 완전한 문단을 기억하는 인용구이다.

    

<abbr> 요소는 약어(abbreviation)이나 두문자(acronym)를 정의하는 요소이다.

    

<address> 요소는 해당 문건의 작가나 저작자의 연락처를 정의하는 요소이다. <address> 요소는 보통 이탤릭으로 표시되고 대부분의 브라우저는 <address> 요소 위아래로 줄바꿈(line break)을 집어넣는다.

     

<cite> 요소는 해당 작품의 작품명(타이틀)을 정의하는 요소이다. 브라우저에는 보통 이탤릭으로 표시된다.


이제 배운 내용들이 실제로 브라우저에 어떻게 나타나는지 확인해보기 위해서 다음과 같이 작성해서 0023.html 파일로 저장하고 실행해보자. 


<!DOCTYPE html>

   

<html>

<head><title>HTML로 인용하기 예제</title></head>

<body>

<p>

최근 말라리아로 고생하는 사람이 자주 보인다. 특히 해외여행으로 인한 감염이 많은 것으로 나타났다. 다음은 신문기사다.

</p>

<blockquote>

말라리아의 위험성은 해외에서 더 심각하다. <abbr title="world health orginization">who</abbr><q>2015년 전 세계 말라리아감염자가 2억 1400만명, 사망자가 43만8000명에 달한다</q>라고 밝혔다. 이 중 상당수는 아프리카에서 발생했고 국내에도 지난해 해외에서 감염되어 온 환자가 72명으로 전체 국외유입감염병 중 2번째로 많은 수가 감염되었다.

</blockquote>

<P>말라리아에 대해서 좀 더 알고 싶다면 로버트 데소비츠가 쓴 <cite>말라리아의 씨앗</cite>을 추천한다.

</p>

<address>

저자 : 방구석 책벌레<br>

블로그 : deliciouslearning.tistrory.com

</address>

</body>

</html>


그러면 크롬 브르우저에서 아래와 같이 나타난다. 



우선 <blockquote> 요소로 인용한 곳은 들여쓰기(indent)가 된 문단처럼 나타났다. 그리고 <abbr> 요소로 집어넣은 내용은 아래에 점선으로 밑줄이 그어졌다. <q>요소는 큰 따옴표("")로 내용을 묶었고, <cite> 요소와 <address> 요소로 묶인 내용들은 이탤릭체로 나타났다.

    

브라우저에 어떻게 표현되었는지는 별로 중요하지 않다. 중요한 것은 브라우저가 각각의 내용에서 어떤 것이 인용구이고 어떤 것이 두문자이고 어떤 것이 인용된 작품명인지 안다는 사실이 중요하다.그러면 검색엔진은 이 웹 페이지가 말라리아에 대한 신문기사나 공신력 있는 단체의 말을 인용하고 있으며, 말라리아의 씨앗이라는 작품을 소개하고 있다는 것을 알게 되고 저자 자신과 접촉할 수 있는 연락처를 제시하고 있는 신뢰할만한 문서라고 판단하여 적절하게 이 웹 페이지를 소개할 것이다. 또, <abbr> 요소를 적절히 사용함으로써 브라우저와 검색엔진, 번역 시스템 등에 잘못된 단어 사용으로 오해받지 않게 될 것이다.

   

게다가 CSS를 이용하면 인용구가 전부 적절한 요소로 묶여 있으므로 각각의 요소에 대한 스타일을 명확하게 지정할 수 있게 된다.

Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0023 HTML에서 인용하기(Quotation).apkg






0018 이미지를 보여주는 img 요소 03 이미지 다루기


5. HTML 페이지가 이미지를 다루는 법


HTML 페이지는 순수하게 텍스트일 뿐이어서 이미지가 중간에 삽입되거나 하지 않는다. 그렇다면 웹 브라우저는 <img /> 요소를 어떻게 보여주는가?

    

웹 브라우저는 웹페이지를 위에서 아래로 차례대로 읽으면서 텍스트들은 바로바로 화면에 표시하고 <img /> 요소를 읽으면 일단, <img /> 요소가 표시될 공간을 확보해놓고 다음을 읽으면서 계속 화면을 표시한다.

    

웹 브라우저는 표시할 이미지 파일을 서버에서 가져와서 해당 이미지를 위하여 확보된 공간에 로딩하기 시작한다. 이 과정은 웹페이지 파일을 읽어서 표시하는 과정과 별도로 이루어진다. 

    

<img /> 요소로 정의된 이미지들은 기술적으로는 HTML 페이지에 삽입되는 것이 아니라 HTML 페이지에 링크로 연결되는 것이다. <img /> 요소가 하는 일은 참조하려고 하는 이미지가 배치될 공간을 준비하는 것이다.

    

이 때, <img /> 요소에 속성으로 이미지가 들어갈 공간의 크기(size)를 정하지 않았을 경우 이미지가 나중에 로드되면서 공간이 벌어져 웹 페이지가 출렁거리는 것을 볼 수 있다.



6. 이미지 형식

웹에서 일반적으로 사용되는 이미지 형식은, JPEG, PNG, GIF이다. 
    
이러한 이미지 형식을 어떤 상황에 어떻게 써야하는지 간략하게 알아보자. 

JPEG 형식

    

가장 넓은 범위의 색(1,600만개의 색)을 지원하는 이미지 형식이므로 다양한 색이 연속적으로 표현되어야 하는 사진이나 스캐너 등에서 가장 흔히 사용되는 이미지 형식이다.

    

이미지 원본을 훼손하여 파일 크기가 감소되는 ‘손실이 많은’ 압축형식이다. 

   

그래픽 품질을 떨어뜨려 압축하면 용량이 작이지므로 웹에서 효율적으로 사용 가능

   

JPEG는 투명도와 애니메이션을 지원하지 않는다


PNG 형식

   

PNG는 몇 가지 단색이나 로고, 클립아트 같은 선이 있는 이미지, 텍스트가 있는 이미에 가장 잘 맞는다.

    

PNG는 수백만 가지의 다른 색(표현하고자 하는 색의 수에 따라서 PNG-8, PNG-24, PNG-32 세 가지로 분류)을 가진 이미지를 표현할 수 있다. 

    

PNG는 파일을 압축해 크기를 줄이지만, 원본을 훼손하지 않는 무손실 압축형식이다.

   

투명 모드 설정을 할 수 있어 이미지 밑으로 모든 것을 볼 수 있다.

    

JPEG와 비교하면 파일 크기는 커지는 경향이 있지만, 사용된 색상의 수에 따라 GIF보다 작거나 커질 수 있다. 


GIF 형식

    

PNG와 마찬가지로 GIF는 몇 가지의 단색이나, 로고, 클립아트 같은 선이 있는 이미지, 텍스트가 있는 이미지에 가장 잘 맞는다. 

    

GIF는 256가지 색상을 표현할 수 있다.

    

GIF는 무손실 압축형식이다. 

    

GIF는 오직 한 가지 색상만 ‘투명’하게 설정할 수 있다.

    

애니메이션을 지원한다. 

     

JPEG와 비교해 파일 크기가 크다.


결론적으로 사진이나 복잡한 그래픽에는 JPEG를 사용하고 단색이나 로고, 기하학적 모양의 이미지에는 PNGGIF를 사용하는 것이 적절하다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0018 이미지를 보여주는 img 요소 03 이미지 다루기.apkg





0011 <head> 요소와 그 내부에 중첩된 <title> 요소


HTML 문서의 큰 틀에서 <html> 요소 다음에는 <head></head> 요소가 등장한다.

     

<!DOCTYPE html>


<html lang="ko">

 <head>웹페이지 관련 정보들</head>

 <body>본문(웹페이지의 내용)</body>

</html>


<head>요소는 HTML 문서에 대한 메타데이터(metadata)를 담고 있는 가장 상위의 요소로써 <head> </head> 사이에는 다른 요소들이 중첩(nesting) 되어 웹페이지 관련된 다양한 정보(metadata)들을 웹 브라우저에 제시한다.

     

<head> 요소에 중첩되어 들어올 수 있는 요소는 다음의 6개 요소 뿐이다. 

     

<meta>, <title>, <script>, <link>, <style>, <base>


이 외의 요소들이 <head> 요소 내부에 중첩될 경우 웹 브라우저가 해당 요소를 자동으로 <body> 요소로 옮긴다.



   <head> 요소 내부에 중첩된 <title> 요소


<head>에 중첩되는 요소는 다른 요소들과 같이 설명해야 하므로 차차 제시하고 이번에는 <title> 요소만 사용해보자.

     

<title> 요소는 문서의 제목을 정의하는 요소인데 실제로 어떻게 나타나는지 메모장에서 아래와 같이 작성하고 title요소.html

로 저장한 후 실행시켜보자.

     

<!DOCTYPE html>

    

<html lang="ko">

 <head>

  <title>HTML Ankilog</title>

 </head>

 <body></body>

</html>


어떤 일이 벌어지는가?


브라우저 상단의 탭 제목<title> 요소의 내용인 HTML Ankilog로 표시된다.



 즐겨찾기에 등록될 페이지 제목이 <title> 요소의 내용인 HTML Ankilog로 표시된다.


마지막으로 검색엔진이 검색결과로 제시하는 페이지 제목을 <title> 요소의 내용인 HTML Ankilog로 표시한다.


즉, <head> 요소 내부의 <title> 요소의 내용은 다음과 같이 반영된다.

     

① 브라우저 상단의 탭 제목

② 즐겨찾기에 등록되는 페이지 제목

③ 검색엔진이 검색결과로 제시하는 페이지 제목


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0011 head 요소와 그 내부에 중첩된 title 요소.apkg








+ Recent posts