xhtml & css - 구조와 연출(2)

자, 지난 번 글에서 html과 CSS가 어떻게 만나고 작동하는지 잠깐 봤습니다.

그럼 오늘부터 본격적으로 '구조'에 관해서 들여다 보죠.

지난번에 써먹었던 test.html과 test.css를 불러와 봅니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" version="-//W3C//DTD XHTML 1.1//EN" xml:lang="en">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
   <link rel="stylesheet" media="screen" type="text/css" href="./test.css" />
   <title>테스트용 html</title>
  
</head>

<body>


</body>
</html>

body    {background-color:green;}

자 그럼 <body>와 </body>사이에 다음 엘리먼트를 집어 넣어 한 구획을 만들어보도록 하죠.

<div id="container">
</div>

<div></div>는 division이죠. 아님 말고요. ㅋㅋ 일단 여기서 중요한 속성인 id는 현재의 division에 '고유명칭'을 부여하는 겁니다. '고유'한 명칭이니까, 한 페이지 당 오직 '하나'만 쓰일 수 있겠죠? 이 외에 한 페이지 내부에서 '동일한 방식'으로 여러 번 등장하는 division은 id 속성외에 class 속성으로 명칭을 부여하면 됩니다.

그러면, 왜 이런 '명칭'을 부여하느냐?

바로 CSS에서 해당 명칭이 사용된 division에 연출을 사용하기 위해서지요. 해당 id나 해당 class에만 독립적으로 연출을 할 수 있거든요.

여기서 오해를 하시면 안되는게 저 id와 class는 <div></div>에만 쓰이는 것이 아니라 꽤 여러 엘리먼트에 쓰이게 됩니다. 뭐 그건 차차 얘기하기로 하고.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" version="-//W3C//DTD XHTML 1.1//EN" xml:lang="en">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
   <link rel="stylesheet" media="screen" type="text/css" href="./test.css" />
   <title>테스트용 html</title>
  
</head>

<body>

<div id="container">
</div>

</body>
</html>

html 파일을 이렇게 저장하시고 브라우저로 열어 보세요. 아마 아무런 변화도 없을 겁니다. 왜냐구요? 일단 'container'라는 이름을 가진 division에 아무런 컨텐츠가 없어서 구역이 나누어져 있어도 보이질 않는 거죠.

그러나 저 <div>와 </div>사이에 - id 속성은 편의상 생략 - 글씨를 넣어보죠. 그리고 저장 후 새로 고침을 하면?


브라우저의 좌측 상단에 여러분이 써 넣은 글이 한 줄로 나타날 겁니다. 위와 같이 두 줄로 나온 이유는 제가 브라우저 창 크기를 줄여서 그런 거죠.

자, 저렇게 '글씨'를 넣은 부분이 바로 division의 컨텐츠 영역입니다. 그럼 지금부터 마진과 보더, 패딩이라는 개념을 알아보도록 하죠.

우선 전체적인 개념은 이렇습니다.

컨텐츠

패딩

보더

마진

가장 내부에 '컨텐츠'가 들어가고, 그 주위를 패딩이 감쌉니다. 택배 상자를 생각해 보면 택배 내용물이 컨텐츠고, 그 안에 충격 흡수 뽁뽁이가 패딩인 셈이죠. 그렇다면 보더는 택배 상자 그 자체가 되겠죠? 보더는 주로 '외곽선'의 개념으로 알려져 있어요. 그리고 마진은 택배 상자와 상자 사이의 '공간'. 즉 division 사이의 여백을 의미해요. 마찬가지로 이 개념은 division뿐만 아니라 여러 '블록 엘리먼트'에서 공히 쓰이는 개념입니다. '블록 엘리먼트'와 '인라인 엘리먼트'라는 개념은 구조와 연출 끝나면 바로 설명 드릴 거예요.

어쨌든, 하나의 '구획'이 가지는 영역의 크기는 위에 이야기 된 4가지 영역의 '총합'과 같아요.

지금부터 그것을 CSS를 통해 설명해 보죠.

CSS의 body 아랫줄에 다음과 같이 입력합니다.

#container    {background-color:yellow;}

저장하시고 새로 고침을 눌러 보세요.


자, 어떤가요? 글씨가 들어간 컨텐츠의 배경색이 '노랑'으로 바뀌었죠? 재미난 것은 컨텐츠의 좌측과 상단은 여백이 없는데 하단에는 여백이 생겼죠? 그것은 사실 여백이 아니라 줄 간격입니다. line-height라는 값을 CSS에서 조정해주지 않으면 저렇게 기본 값으로 여백처럼 보이죠.

그럼 여기서 약간의 수정을 해 봅시다.

컨텐츠의 '가로 크기'인 width 값을 줘 보죠. CSS로 갑니다.

#container    {background-color:yellow; width:200px;}

파란색 부분을 추가해 줍니다. width 앞의 한 칸 여백은 있거나 말거나 상관없습니다. 아예 엔터를 쳐서 다음 줄로 내려도 상관없습니다. 중괄호 - { } - 안에만 있으면 됩니다.


저장하고 새로고침하면 위와 같은 가로 200px의 노란색 컨텐츠 영역이 생깁니다. 창의 크기를 늘여도 200px에서 딱 끊기고 글씨가 다음 줄로 내려갑니다.

그럼 여기서 잠깐.

px란 무엇인가? 군대 내부의 충성클럽이 아닙니다.

pixel의 축약형인데, 픽셀은 화소죠. 디카 얘기할 때, '몇 만 화소야?' 하는 개념과 크게 다르지 않습니다. 일반적으로 컴퓨터 모니터는 1인치 - 2.54cm - 당 72픽셀을 가지고 있습니다. 1인치 길이 안에 - 그것이 가로든 세로든 - 72개의 화소, 즉 점이 박혀있다는 얘기죠.

위에서 가로인 width를 200px 이라 지정해 주었기 때문에 저 컨텐츠는 가로로 200개의 점이 군집되어 이루어진 영역입니다. 저 노란색은 200개의 점이 가로로 모이고, 세로로는 늘어난 길이만큼 다시 점이 찍힌 거죠.

픽셀은 여러분 모니터의 '해상도'에서도 나옵니다. 자주 접하게 되는 1024*768 해상도니  800*600 해상도니 하는 얘기는 가로 1024픽셀, 세로 768픽셀의 점들로 구성된 - 곱하기 해 보면 전체 점의 개수가 나오겠죠? - 해상도란 이야기지요. 생각보다 '점'이 적죠?

어쨌든 다시 돌아가보죠.

자 이젠 패딩을 줘 봅시다.

다시 CSS에 추가를 합니다.

#container    {background-color:yellow; width:200px; padding:10px;}

이젠 자동으로 저장하고 새로 고침이 되시죠?


자, 어떻습니까? 노란색 영역이 더욱 커졌죠? 왜일까요?

자 width 값은 '컨텐츠 영역'만 해당됩니다. 그리고 위에서 밝힌 바와 같이, 하나의 구획 - 여기서는 division - 은 "컨텐츠 영역 + 패딩 영역 + 보더 영역 + 마진 영역"으로 이루어진다고 했죠. 그럼 width 값에, 패딩 값을 더해주었으니 영역이 커지는 것은 당연하겠죠?

그럼 여기서 픽셀 값을 어떻게 주느냐를 잠깐 알아보죠. 위와 같이

padding:10px;

이라고 주게 되면 위, 오른쪽, 아래, 왼쪽. 4방향 모두 10픽셀씩 '패딩'을 주게 됩니다. 자 제가 '위, 오른쪽, 아래, 왼쪽'이라고 순서를 준 이유는 패딩 값을 각각 따로 주고 싶을 때의 방법이 저런 '시계방향' 순이기 때문이에요.

예를 들어

padding:3px 7px 12px 64px;

이렇게 4개 값을 주면 '위=3픽셀', '오른쪽=7픽셀', '아래=12픽셀', '왼쪽=64픽셀'로 주어지게 되는 겁니다. 이건 띄어쓰기 하셔야 해요.

사실 위에 보여드린 예는 '축약형'에 들어가죠.

축약형의 또 다른 예로

padding:12px 42px;

요렇게 두 개만 주게 되면 첫 번째 값은 '위와 아래', 두 번째 값은 '오른쪽과 왼쪽'이 됩니다.

반면, 아예 한쪽 값만 주는 방법도 있어요.

padding-left:38px;

이러면 왼쪽 패딩값만 주게 되죠.

이런 방식은 '마진'에서도 동일하게 적용된답니다.

자, 그럼 보더로 넘어가보죠.

또 다시 CSS를 엽니다.

#container    {background-color:yellow; width:200px; padding:10px; border:4px solid blue;}

뭔가 복잡해 보이죠? 사실 4px만 주셔도 보더는 생기는데, 좀더 쉽게 알아보려고 나머지 옵션도 준 겁니다. 결과를 볼까요?


자, 보시다시피 '파란색 - blue', '실선 - solid'가 굵기 4픽셀 짜리로 생겼죠. 컨텐츠와 패딩의 바깥에 저렇게 자리 잡습니다. 실선 외에도 점선, 두 줄 등등의 속성이 있죠. 컬러도 마음대로 바꾸셔도 되고, 안 하시면 각 브라우저 별 기본 값이 잡히죠.

자, 마지막으로 마진을 잡아 볼까요?

#container    {background-color:yellow; width:200px; padding:10px; border:4px solid blue; margin:20px;}

마진을 좌우상하 모두 20픽셀을 줬습니다.

결과는?


오우 좌측과 상단에 공간이 확 생겼죠? 그런데 왼쪽 마진과 상단의 마진이 크기가 다르죠? 분명 마진 값을 20픽셀로 동일하게 줬는데 말이죠.

자 그럼 여기서 문제.

위로 두 번째 그림을 보면 굳이 마진 값을 주지 않았는데도 보더 왼쪽과 상단에 약간의 여백이 있습니다. 이건 뭘까요? 그리고 '마진'에는 왜 배경색인 '노랑'이 안 나타날까요?

우선 첫 번째 질문에 대한 답은, 브라우저의 '마진 기본값'이 <body></body>영역에 할당되어 그렇게 나타나는 겁니다. 마진 값을 직접 지정하지 않으면 브라우저가 기본으로 정합니다. 그런데 우린 CSS에서 body 영역에 대한 연출에서 '마진값'을 정하지 않았거든요.

더불어 양쪽 - 오른쪽과 왼쪽 - 의 마진은 서로 겹치지 않지만, 상하의 마진은 만나게 될 경우 서로 '포개집니다'. 그러니 body의 기본 마진과 container의 마진값이 창의 왼쪽과 상단에서 각각 다른 결과로 나타나게 되는 거죠.

그리고 두 번째로 마진에는 배경색인 '노랑'이 나타나지 않아요. 이는 아까 택배 상자를 예로 설명 드렸는데 박스 자체 - 보더죠? - 의 외부에 있는 '마진'에게, 한마디로 '바깥'여백인 마진에게 배경색이 그대로 적용되면 말이 안 되죠? 택배 박스 외부로 내용물의 아우라가 나오면 그건 그때부터 택배 박스가 아니라 인디아나 존스에 나오는 성물이 되죠.

자 그럼 CSS를 수정해 봅시다.

body    {background-color:green; margin:0px;}
#container    {background-color:yellow; width:200px; padding:10px; border:4px solid blue; margin:20px;}

body 영역에 마진값 0px을 추가했네요.

결과를 보면?


자 좌측과 상단의 여백이 맞죠?

그럼 또,

body    {background-color:green; margin:0px;}
#container    {background-color:yellow; width:200px; padding:10px; border:4px solid blue; margin:0px;}

컨테이너의 마진을 0px로 바꾸면?


마진이 사라졌으니까 왼쪽과 상단에 짝 달라 붙죠.

좌상단에 붙는 이유는 다름이 아니라 브라우저가 문서를 읽어나가면서 보여주는 순서가 좌상단에서 우하단으로 흘러가기 때문이에요.

자 그럼 여기서 재미난 것을 붙여보죠.

body    {background-color:green; margin:0px;}
#container    {background-color:yellow; width:200px; padding:10px; border:4px solid blue; margin:0px auto;}

위에서 설명했듯이, 마진 속성의 값을 2개로 넣을 경우 앞 부분은 '위와 아래', 뒷 부분은 '오른쪽과 왼쪽'입니다. 그럼 저렇게 오토로 주면?


브라우저의 '중앙'에 들어가게 됩니다. 좀 더 정확한 개념으로 말하자면 해당 division이 속한 가로축의 중앙에 놓이는 거죠. center의 개념이 아니라 양쪽의 마진이 '자동'으로 잡혀서 중앙에 놓이는 겁니다.

그럼 위 아래도 오토로 줄 수 있을까요? 아니요. 그건 안 되네요^^

자 그럼 오늘은 여기까지 이야기하고 '구조와 연출'에 대한 기본 개념을 마칩니다.

다음 글에서는 '블록 엘리먼트'와 '인라인 엘리먼트'에 대해서 다뤄보죠.

정말.

갈길이 멀군요 -0-

Posted by 함장

2006/12/04 23:43 2006/12/04 23:43
, ,
Response
No Trackback , 23 Comments
RSS :
http://harmjang.com/rss/response/2630597

xhtml & css - 구조와 연출(1)

지난 번 글에서 html과 CSS가 분리된다는 얘기를 했었죠.

html은 문서의 ‘구조(Structure)’ 에 해당하고, CSS를 통해서 그 문서의 ‘연출(Presentation)’을 담당하게 된다는 얘기입니다.

그럼 본격적으로 html의 ‘body’ 영역에 들어가는 구조들과, 그 구조들이 어떻게 ‘연출’되는지 살펴보도록 하죠.

자, 우선 기본적인 xhtml 형식을 갖춘 html을 만들어봅시다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" version="-//W3C//DTD XHTML 1.1//EN" xml:lang="en">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

   <title>테스트용 html</title>
  
</head>

<body>


</body>
</html>

이런 html 파일을 메모장을 통해 작성해 test.html로 저장해 보죠. 그냥 아무데나 저장하지 말고 ‘test’라는 폴더를 만든 뒤 그 안에 저장합시다.

그리고 인터넷 익스플로러로 test.html 파일을 열어보면


‘허연’ 모습만 덩그러니 놓여있는 빈 창이 뜹니다. 그래도 상단 제목 표시줄에는 당당히 ‘테스트용 html’이라고 나와 있죠.

그럼 여기서 CSS가 ‘활동’하는 영역은 저 <body>와 </body> 사이의 영역입니다. 웹브라우저의 창 내부에서 이루어지는 모습을 ‘연출’하는 거죠.

자 그럼 또 다시 메모장을 열어서 CSS 파일을 맹글어 봅시다.

body    {background-color:green;}

요렇게만 적고 파일명을 ‘test’ 확장자 ‘css’로 해서 - 한 마디로 test.css - 저장합니다. 마찬가지로 아까 만든 test 폴더 안에 html 파일과 같은 위치에 저장합니다.

자 윈도우 사용자 중에서 중요한 점. 시작 -> 설정 -> 제어판으로 가셔서 좌측에 ‘클래식 보기로 전환’을 누르시면 우측에 ‘폴더 옵션’이라는 것이 뜰 겁니다. 더블 클릭 하셔서 ‘보기’탭을 선택하시고 ‘알려진 파일 형식의 파일 확장명 숨기기’라는 항목을 언체크 하셔야 메모장에서 자동으로 저장되는 텍스트 파일의 확장자 ‘txt’가 눈에 띕니다. html 파일이든 CSS 파일이든 txt로 저장되어서는 안 됩니다.

그럼 여기서 우리가 CSS 파일에 무엇을 적었는지 살펴보죠

맨 앞의 body는 <body>와 </body> 사이를 의미합니다. 후에 ‘#머시기’ 라던가 ‘.머시기’등이 등장할 겁니다만 그건 그 때 설명하도록 하고. 어쨌든, 저 body 영역에 대해 ‘연출’을 지정하는 내용입니다. 그 내용은 반드시 중괄호 - { } - 사이에 들어가야 하죠.

body와 중괄호 사이의 여백은 그냥 키보드의 tab 키를 눌러서 띄운 공간일 뿐입니다. 구별하기 편하라고 띄운 공간일 뿐 신경쓰실 필요는 없습니다. 더 많이 띄우셔도 되고, 공간 없이 붙이셔도 됩니다.

그리고 중괄호 안은 ‘background-color’라는 속성 - 배경색이죠 - 대한 정의로 콜론 - : - 을 써서 정의합니다. 속성값은 ‘green’으로 줬죠. 색 이름을 써도 되고, 아니면 ‘#222222’ 같은 hex코드로 이루어진 색상 번호를 입력해도 됩니다. 색상 번호는 웹에서 ‘색상표’로 검색하면 즐비하게 나오니 이용하시길 바래요.

그리고 맨 마지막. 괄호를 닫기 전에 ‘세미콜론’ - ; - 을 사용하여 지정을 완료해 주어야 합니다.

아니 괄호를 닫아주면 완료지 왜 세미콜론으로 닫냐고요?

프로그램 언어에 활용되는 것에 대한 설명을 드리기엔 머리가 아플 것 같으니 이렇게 이해하도록 하죠.

우리가 하나의 ‘영역’에 ‘하나’의 속성만 주면서 ‘연출’을 시도하진 않을 겁니다. 그렇다면 하나의 ‘영역’에 복수의 속성을 주기 위해서 ‘구분할 수 있는 도구’가 필요하겠죠. 그게 바로 ‘콜론’입니다.

그렇다면 지금은 한 줄이니, 세미콜론이 필요없지 않느냐고요?

아닙니다. 세미콜론은 일종의 마침표 역할도 하는 겁니다. background-color로 시작된 선언의 마침표는 세미콜론이 되는 거죠. 그럼 괄호는 무엇이냐고요? 괄호는 ‘영역’에 대한 연출 지정의 ‘마침표’가 되는 셈인 거죠.

자 그렇다면 이제 CSS 파일을 저장하고. 지난 글에서 배운 ‘link’를 통해 html 파일과 CSS 파일을 연결해 줍시다.

아까 저장한 test.html을 메모장에서 열어, <head>와 </head> 사이에 이 구문을 추가해 주죠.

<link rel="stylesheet" media="screen" type="text/css" href="./test.css" />

무슨 뜻인지 아시겠죠? 어제 보여준 ‘screen’에 나타나는 CSS 파일 연결 구문에서 href 속성의 값만 파일명이 test.css로 바뀌었죠? 그리고 같은 test 폴더 안에 위치했으니까 주소도 "./"으로 시작하죠?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" version="-//W3C//DTD XHTML 1.1//EN" xml:lang="en">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  
<link rel="stylesheet" media="screen" type="text/css" href="./test.css" />

   <title>테스트용 html</title>
  
</head>

<body>


</body>
</html>

자, 저는 메타 엘리먼트와, 타이틀 엘리먼트 사이에 넣었어요. 그리고 저장을 하고. 새로 test.html 파일을 인터넷 익스플로러로 열어 봅니다.


자, 어찌 됐나요? 배경이 녹색으로 가득해졌죠?

이 상태에서 text.css 파일의 파일명만 text1.css로 바꾸시고, 인터넷 익스플로러 창을 새로 고침 해보세요.

녹색이 사라지죠?

이게 ‘구조’와 ‘연출’이 분리된. 그러니까 html로 구조를 짜고, CSS로 ‘연출’을 하게 되면 나타나는 현상에 대한 기본 원리입니다. 링크된 text.css 파일을 찾을 수 없으니까 '연출'을 나타낼 수 없는 거죠.

그러면 다음 글부터 좀 더 확장된 개념을 알아나가 봅시다.

Posted by 함장

2006/12/01 00:25 2006/12/01 00:25
, ,
Response
No Trackback , 10 Comments
RSS :
http://harmjang.com/rss/response/2630596

자, 지난 번에 html 문서의 첫 부분에 나오는 DOCTYPE은 돌아 봤고, 이젠 본격적으로 xhtml로 접어들어 보죠.

<html>
   <head>
       <title>untitled</title>
   </head>
   <body>
   </body>
</html>

지난 번에 본 것과 같이 html의 기본 구조는 이러 합니다.

오늘은 head 영역에 들어가는 link 엘리먼트에 대해 알아보죠.

태터 스킨을 뜯어보신 분들은 몇 가지를 발견하셨을 거예요.

<link rel="alternate" type="application/rss+xml" title="[##_title_##]" href="[##_rss_url_##]" />
<link rel="stylesheet" media="screen" type="text/css" href="./style.css" />
<link rel="stylesheet" media="print" type="text/css" href="./images/print.css" />
<link rel="shortcut icon" href="[##_blog_link_##]favicon.ico" />

각 'link'들은 'rel'이라는 속성값과, 'media', 'type', 'href' 등의 속성값을 가지고 있어요.

첫 번째와 네 번째는 제 이야기와 관련이 없으니 넘어가도록 하고, 두 번째와 세 번째에 있는 'rel="stylesheet"'에 관한 이야기를 해보도록 하죠.

우선 'link'엘리먼트는 말 그대로 '연결'시켜주는 걸 의미해요. 그런데 '스타일시트'의 속성값을 가진 것과 연결하겠다는 거죠. 그럼 스타일시트란 무엇인가? 당연히 '스타일'을 정해주는 것이겠죠? 이에 대해서는 하단에 설명하기로 하고

'media'가 튀어나옵니다. 'screen'과 'print'로 나뉘죠. 스크린은 우리가 바라보는 모니터를 뜻하고 프린트는 말 그대로 '출력'할 때를 의미합니다. 'type' 속성 값은 'text/css'로, 그리고 'href'는 웹에 조금만 관심 있으시다면 익숙한 속성이겠죠? 네, 위치를 의미합니다.

"./style.css"의 의미는 현재 html문서와 '동일한 폴더' - 사실 폴더의 개념을 쓰기에 모호하긴 하지만 - 에 위치한 style.css 파일을 의미합니다.

한마디로

<link rel="stylesheet" media="screen" type="text/css" href="./style.css" />

'스타일시트'로 '모니터 화면에 보여줄' '텍스트 css'로 이루어진' 'style.css'파일을 이 html과 '연결'하라는 이야기죠.

'href'의 파일 위치나, 파일명은 무엇이든 상관이 없어요.

자 그럼 여기서 이야기 할 것은.

왜 'html'과 'CSS'를 분리하느냐이죠.



다시 기본으로 돌아갑니다.

html은 하이퍼 텍스트 마크업 랭귀지라는 걸 알았어요. CSS는 그 HTML이 어떻게 '나타나는가'에 대한 문서죠.

예를 들어 누군가가 html에 어떤 행사의 '식순'을 적어주면 CSS를 통해서 그 식순에 꽃무늬 테두리를 두르거나, 순서에 '번호'를 먹이거나 아니면 그냥 '점'만 찍거나 등의 '표현'을 제어할 수 있는 거죠.

그러면 '분리'를 통해서 얻을 수 있는 이득이란?

예를 들어 html에서 서론, 본론, 결론이 있는 글을 썼다고 해요. 그런데 각각 '서론', '본론', '결론'에 해당하는 것의 글자 크기를 동일하고 같은 글꼴을 쓰려고 html의 '형식'을 같게 해둔다면. CSS에서 한 번 고치는 것으로 '서론', '본론', '결론' 세 가지를 바꿀 수 있게 되는 거죠.

만약에 '태터툴즈'의 스킨이 아니라 웹페이지라면, 그리고 그 페이지가 '여러 문서'이고, 형식이 '같은 것'으로 이루어져 있다면.

CSS 파일 하나 손 보는 것으로 모든 페이지의 '모습'이 바뀌는 겁니다.

하나의 CSS파일로 여러 개의 html에 대응 시킬 수 있어요. 그냥 '링크'만 걸어주면 되는 거죠. 그리고 반대로 하나의 html에 여러 개의 CSS 파일을 사용할 수도 있어요. 물론 잘 쓰는 방법은 아니지만.

어쨌든 '개념'은 이러합니다.

그럼 다음 글부터 html의 '구조'와 CSS의 역할에 대해서 좀 더 이야기 해 보죠.

Posted by 함장

2006/11/29 15:58 2006/11/29 15:58
, ,
Response
No Trackback , 4 Comments
RSS :
http://harmjang.com/rss/response/2630592

xhtml & css - DOCTYPE에 관하여

엽기민원님께서 가라사대,

아니, 자기가 쓰는 코드가 뭔지는 알고 쓰셔야 하지 않겠습니까?

그렇습니다. 앞으로 이 연재는 우리가 흔히 '태터'의 skin.html 파일과 style.css 파일에서 볼 수 있는 코드 중에 큼직 큼직한 것들을 골라 아주 기초적인 골격들을 이루는 요소요소들을 짚어보는 식으로 나갈 겁니다.

적어도 아무데서나 복사해서 짜집기 해 쓰더라도. 뭔지는 알고 쓰자는 취지에서 시작합니다.

태터의 스킨 파일을 만들고 싶어서, 혹은 구경하고 싶어서 skin.html 파일을 열어보신 분들도 많을 겁니다. 물론 열어도 무슨 얘긴지 몰라서, 머리 아프다고 닫으신 분들도 많겠지요. 그래도 열어보신 만큼의 호기심과 열정만 있다면 가벼운 스킨 정도는 만들 수 있습니다.

처음에 나오는 것은 아마 <!DOCTYPE....으로 시작하는 구문일 겁니다. - 물론 바로 <html>로 시작하는 페이지도 있습니다만 - Document Type 이라는 얘기인데 문서가 어떤 형태로 짜져있는지 알려주는 부분입니다.

이 부분이 왜 필요한지 썰을 풀어보자면.

우리가 웹브라우저 - 한국인이 가장 많이 쓰는 인터넷 익스플로러, 매킨토시의 사파리, 제가 지금 이 글을 쓰면서 사용하는 파이어폭스 등등.. - 에서 주소창에 '주소'를 입력하면 웹브라우저는 그 주소가 연결된 웹 서버로 달려가 요청을 합니다

무슨 요청인지 들여다보기 위해 약간의 상상력을 더해보죠. 한 도서관이 있습니다. 그 안에는 무수한 책이 놓여져 있지만 우리가 들어갈 수는 없습니다. 다만 앞에 앉아 있는 사서에게 부탁을 하면 찾아주는 시스템입니다. 우리는 이 사서에게 '몇 번 서가의 몇 번째 줄, 네 번째 책'을 찾아 달라고 할 수도 있고 - 이게 바로 브라우저의 주소 창에 인터넷 주소를 직접 입력하는 방법이죠 - 도서명이나 출판사명 만으로 검색을 부탁할 수도 있습니다 - 이건 아시다시피 검색사이트겠죠? - 그러면 사서가 검색 결과를 보여주고 우리가 원하는 책의 위치를 확인하면 찾을 수 있겠죠.

그런데 문제는 이 사서가 하는 일이 서가의 '책'을 가져오는 것이 아니라 한장 한장 '페이지'를 복사해서 온다는 점입니다. 예를 들어 '3번 서가 다섯 번째 줄, 여섯 번째 책'을 사서에게 부탁하면 사서는 그 책의 '차례' 페이지를 복사해 옵니다. - 사이트에서는 index.html이 되겠지요 - 그러면 우리는 그 차례 목록을 보고 읽고 싶은 부분을 요구합니다 - 메뉴를 클릭하죠 - 그러면 사서는 또 가서 그 페이지를 복사해 옵니다.

반복적 응답방식으로 보자면 상당히 거추장스러운 시스템으로 보이겠지만, 원리는 이러합니다. 우리가 브라우저를 통해 지정된 인터넷 주소에 속한 웹서버에 문서를 요구하고 - 문서 이름인 파일명을 모를 경우엔 색인 페이지 꼴인 index.html을 먼저 보여주죠 - 웹서버는 해당 문서를 우리 컴퓨터로 보내게 되고, 저장 후에 그 페이지를 브라우저 상에서 볼 수 있는 것이죠.

그럼 다시 '문서 형식'으로 돌아가서, 어떤 것들이 있는지 확인해 보죠.

거금 5만원을 들여 구매한 Mac용 TextMate의 HTML 템플릿


이건 제가 쓰는 에디터에 들어있는 HTML 문서 형식들입니다. 에디터를 굳이 쓰실 필요없이  HTML과 CSS 작성에는 윈도우의 메모장을 사용하시면 됩니다. 저장하실 때 확장자만 txt가 아닌 html과 css로 저장하시면 되지요.

위의 스크린 샷에서 보시다시피 HTML도 문서 종류가 다양합니다. 우선 HTML인가 XHTML인가, 그리고 Strict인가 Transitional인가 아니면 Frameset인가. 버젼 번호도 메겨져 있지요.

하나씩 둘러 봅니다.

우선 HTML은 여러분들이 지금까지 수만번도 넘게 봐온 '웹페이지'들을 만들어주는 언어입니다. Hyper-text Markup Language의 약자죠. 어렸을 때는 '슈퍼맨'이 사람(man)을 초월한(super) 것으로 알았고, 슈퍼마켓은 시장(market)을 초월한(super) 것으로 알았는데 '하이퍼 텍스트'는 글자를 초월했다는 의미일까요?

어쨌거나 텍스트를 4차원의 세계 - 문서 사이를 빛의 속도로 옮겨 다니게 해 주는 - 로 이끌어주는 HTML은 글자에서도 알 수 있듯 웹에서 출력되는 문서의 모습을 '조판' 해주는 부호들로 이루어진, '언어'입니다.

우선 가볍게 HTML의 기본 양식을 보죠.

<html>
   <head>
       <title>untitled</title>
   </head>
   <body>
   </body>
</html>

자, Markup Language - 굳이 해석하자면 조판 부호 언어죠? - 라는 걸 잊지 맙시다. <html>과 </html>은 그 사이의 영역이 html 문서라는 걸 가르쳐줍니다. 그럼 나머지도 이해 가시겠죠? <head>와 </head>사이는 브라우저에서 보이지는 않지만 문서의 머릿글에 해당하는 영역 - 이 사이에 있는 <title>과 </title>사이에 있는 글은 브라우저 내용 부분이 아니라 브라우저 창의 맨 위에 문서의 제목을 나타냅니다. -, <body>와 </body>사이는 브라우저에서 나타나는 영역.

쉽죠?

저걸 그대로 메모장에 넣고 파일명을 '아무거나.html'로 저장해 보세요. '아무거나'에는 말 그대로 아무거나 넣으셔도 됩니다. 그리고 그 파일을 브라우저로 열어보면


이와 같은 브라우저 가장 상단에 <title>과 </title>사이에 있던 글이 표시되고, 내용은 아무 것도 없게 되죠. 왜냐고요? <body>와 </body>사이에 아무 것도 안 넣었으니까요

참고로 위의 저 형식은 '보기 쉬우라고' 저렇게 들여 쓴 겁니다.

예를 들어 이렇게 써도 상관없다는 거죠.

<html><head><title>untitled</title></head><body></body></html>

그래도 결과는 동일합니다. 왜냐하면 HTML 문서에서는 '한칸 띄어쓰기'를 초과하는 모든 공백에 대해서 무시하기 때문이거든요. 대신 '한칸 띄어쓰기'는 분명히 '자리'를 차지한다는 것은 잊지 마세요. 이것으로 인해 저와 같은 초보들이 자주 실수하는 사례도 후에 설명하도록 하죠.

암튼, HTML의 기본 문서 구조는 저러합니다. XHTML은 기존 HTML과 기본 구조는 같으며 Markup Language 뺄 건 빼고 XML이라는 프로그램 언어를 가변 가능하도록하여 적용한 것입니다.

많이 돌아다녔죠? 그럼 이제 본격적으로 DOCTYPE에 대해서 얘기해 보죠.

위와 같은 HTML의 기본 골격은 변한 적이 없습니다. 그러나 세부적인 Markup Language 들은 변해왔죠. 사라진 것들도 많습니다. 그렇게 되면서 버젼이 발달해 온 거죠.

초기 인터넷을 이용해 보신 분들이라면 어떤 홈페이지에 들어갈 때 대문 화면에서 늘 보던 문구가 기억날 겁니다.

"이 홈페이지는 800*600 해상도에 최적화 되었습니다"라던가
넷스케이프 브라우저의 배너와, 인터넷 익스플로러 배너를 양쪽에 배치하고
"넷스케이프 사용자 입장"이나 "인터넷 익스플로러 사용자 입장"이라는

페이지 말입니다. 요즘은 보기 어렵죠. 해상도로 인해서 페이지를 못 볼정도로 디자인을 하는 홈페이지도 없거니와, 넷스케이프는 사라진 전설이 되었으니까요.

여기서 중요한 점은 '넷스케이프 사용자 입장'과 '인터넷 익스플로러 사용자 입장'이 '따로' 있었다는 겁니다.

두 개의 브라우저가 지원하는 HTML이 달랐기 때문에 - 통일이 안 되어 있었단 얘기죠 -
HTML로 페이지를 제작하는 사람들은 두 개의 브라우저를 위해서 페이지를 각각 따로 만들어야 했죠.

그 후로 인터넷 익스플로러가 승리하고, HTML 언어의 표준에 해당하는 사항들이 발표되는 컨소시엄이 이어지면서 HTML의 모습들도 서서히 통합이 이루어 진 것이죠.

그런데도 브라우저마다 HTML을 읽어 사용자들에게 보여주는 방법에는 저마다 차이가 있고, 그 기본값도 차이가 있기 때문에. 우리는 브라우저에게

"이 HTML은 '이러이러한 형식'으로 이루어질 겁니다!"

하고 선언해 주어야 합니다. 그러면 그 아래의 <html>과 </html>사이의 Markup Language들은 해당 '형식'에 맞게 해석을 해서 브라우저가 보여주는 거죠.

그럼 위의 여섯가지 HTML 문서의 형식이 어떻게 다른지 볼까요?

HTML - 4.01 Strict


Document type을 처음에 저렇게 지정해 주고, <html>을 시작했죠. lang="en"이란 언어가 "영어"로 이루어져 있다는 얘기입니다. 틀렸죠, 저기 제 이름은 한글인데. 그러면 lang="ko"로 해주면 됩니다. - 사실 틀린 건 아니에요 - <meta>로 시작하는 코드도 보입니다. 뭔가 주저리주저리 어려워 보이죠? 사실 간단한 겁니다.

http - 어디서 많이 봤죠? 인터넷 주소 제일 앞에 있죠 - 에 정보를 보내는 방법으로는 - 저는 이걸 그냥 Equipment라고 생각했는데 equivalent의 준말이라는 지적이 코멘트에 있습니다. http가 Hyper-text Transfer Protocol이라고 하이퍼 텍스트를 전송하는 규약인데 이것을 전송하는 방식의 항목 값을 지정하는 거라서 '장비'일 거라고 생각했는데 아닌가 봅니다. - '컨텐트-타입'을 쓴다는 얘기, 컨텐트는 문자열이 utf-8로 이루어진 text/html로 만들어진다는 얘기입니다.

그냥 정의내리는 구문일 뿐이니 저걸 다 외워야 하나 걱정하실 필요는 없어요. 저건 저도 안 외우고 이렇게 에디터의 기본값을 끌어 쓰니까요. <title>아래에 두 개의 <meta>는 저 문서가 매크로메이츠의 '텍스트 메이트'를 사용해서 작성된다는 얘기와 문서의 저작자가 저라는 의미입니다. 꼭 들어가야 하는 건 아니에요.

<!-- 와 -->는 주석처리를 위해 쓰입니다. 주석은 니켈, 망간.... 이런 게 아니라 문서에서 해당 부분에 자잘한 설명 따위를 곁들이기 위해서 사용되죠. 저 표시 사이에 있는 내용은 브라우저에서 볼 때 눈에 나타나지 않습니다.

어쨌든 중요한 건 맨 처음 줄. <!DOCTYPE....으로 시작하는 구문입니다. Strict는 말 그대로 4.01에서 규정한 Markup Language만 허용한다는 얘깁니다. 엄격하게 말이죠. 그래서 4.01 이전에 쓰이고 4.01부터 폐기된 Markup Language들은 쓰이면 안됩니다.

그러나

그런다고 브라우저에서 안 보여지느냐?

그건 아닙니다. 브라우저마다 다릅니다. 선언한 문서 형식과 다르더라도 해당 Markup Language에 맞게 보여 줄 수도, 아닐 수도 있죠.

그럼 왜 굳이 사서 이런 고생을 하느냐고요? 위에서 언급한 것처럼 브라우저마다 기본값으로 적용하는 문서 형식이 있습니다. 그런데 우리의 문서는 문서 형식의 선언 없이 쓰게 될 경우 표현하고 싶었던 부분이 브라우저에서 원치않는 모습으로 나타날 수도 있습니다.

디자인이 깨지거나, 원치 않던 구조의 모습이 나오게 되는 거죠.

이를 방지하기 위함입니다.

그런데 우리는 해당 문서에 선언된 Markup Language에 대해서 아직 잘 모릅니다. 저렇게 선언한다고 우리가 저걸 그대로 준수해서 작성할 기반 지식이 없죠. 이 지식은 차츰 쌓이는 것이고, 저 문서 형식의 선언은 브라우저와의 약속일 뿐입니다.

브라우저에게 고하노니, 이 문서는 '이런 형식'으로 작성되어 있을 것이다.

아시겠죠? 그럼 우리가 작성한 게 확실한지 어떻게 알아 보냐고요? 위에서 언급한 컨소시엄에서 제공하는 유효성 검사 사이트가 있습니다.

http://validator.w3.org

여기에서 작성한 html이나 해당 사이트의 주소를 통해 알아볼 수 있는 거죠.

나머지 5가지도 돌아보죠.

HTML - 4.0 Transitional


XHTML - 1.0 Frameset


XHTML - 1.0 Strict


XHTML - 1.0 Transitional


XHTML - 1.1


위의 것들을 일일이 설명할 필요 없이. 앞으로 연재되는 모든 것은 XHTML 1.1로 작성할 겁니다. 많은 Markup Language를 다룰 것도 아닌데다가, 정말 간단한 기초 골격과 기본 개념만 설명할 것이기 때문에. 여러분들을 헷갈리게 하는 것 보다 가장 최신 표준에 가까운 것으로 설명하는 게 나을 겁니다.

최상위의 <!DOCTYPE...과 <meta http-equiv....만 잊지 마세요. <html>에 붙어있는 xml 관련 속성들은 골아프니 잠시 접어두죠.

어쨌든 앞으로 이런 '형식'의 XHTML문서를 작성해보는 겁니다.

첫 장 치고는 너무 길었나요?

전 컴퓨터 전공이 아니라서 틀린 부분이 있을 수 있으니 심한 질타 부탁드립니다 (__;a

-----------------------------------------------------

2006년 11월 15일 수요일 오후 1시 43분에 2BWithU 님의 코멘트로 수정

Posted by 함장

2006/11/14 21:22 2006/11/14 21:22
, ,
Response
No Trackback , 34 Comments
RSS :
http://harmjang.com/rss/response/2630588

태터 앤 프렌즈에 아무런 도움이 못 되고 있는데 이런 기회를 발판 삼아 몇 가지 건드리면서 연재를 해볼까 합니다.

연재될 글은 이런 분들에게 유용할 수 있습니다.

1. html이고 나발이고 암 것도 모르는 데 함 들여다 보고 싶다.
2. 태터 스킨을 맹글어보고 싶다.
3. 내가 예전에 html 홈페이지는 맹글어 본 적있는데, 요즘 거 머시기 xhtml 이런 건 잘 모른다.
4. 나모 웹 에디터로 맹글어 본 적 있는 데 뭔가 좀 아쉽다.
5. css가 뭐로?
6. 브라우저가 뭐야? 거 인터넷 익스플로러 뿐 아니야?

이런 분들은 읽으시면 시간 아깝습니다.

1. 난 코더가 될테닷.
2. 웹 표준 따위 필요 엄썻, <table>은 우리에게 무한 자유를 선사한다!
3. 포로샵을 써서 이쁘게 만들어 볼테닷.
4. 스킨 그런 거 왜 만들어? 받아쓰면 되잖아?

영진공을 태터 1.1로 업데해서 관리자 모드로 들어가봤는데 정말 멋지더군요. 티스토리가 어서 빨리 업데되기를 바라는 건 무리겠지만, 1.1이 정말 매혹적입니다.

그에 따라, 바뀐 시스템에 맞춰 스킨을 제작하는 분들도 바빠지실 텐데. 리체님께서 css로 디자인 하는 것에 대해 연재를 시작하는 것 같고, 1.1이 나와서 사람들이 '모에~' 하고 불타오르는 것 같기도 하여, 관심있는 분들에게 xhtml의 기본적인 사항과 html과 더불어 기초 지식이 없는 사람들이 접근할 경우 쉽게 범하는 몇 가지 오류들에 대해서 설명해 보고자 작은 연재물을 시작해볼까 합니다.

Posted by 함장

2006/11/13 22:10 2006/11/13 22:10
, ,
Response
No Trackback , 14 Comments
RSS :
http://harmjang.com/rss/response/2630584


블로그 이미지

수정 자본주의자의 삶

- 함장

Archives

Authors

  1. 함장

Calendar

«   2010/03   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Site Stats

Total hits:
1887085
Today:
133
Yesterday:
238