지난 글에서도 이야기했듯이 이번에는 레이아웃에 대한 태그 – header, aside, footer, section, article에 대해서 살펴보겠습니다. 백문이 불여일견이니 일단 아래에 있는 코드를 봅시다.

좌측은 html 소스 내용이고, 우측은 브라우저에 보여지는 모습입니다. 태그가 들어가고 내용이 들어가니 조금 복잡해보일 수 있지만, 이것을 계층 구조로 정리하면 아래와 같은 모습입니다.

  • header
  • div
    • section
      • h1
      • p
    • article
      • h2
      • p
  • aside
  • footer

꼭 문서 개요를 짜놓은것 같죠? 지난 번에도 이야기했지만 다시 한 번 강조하자면, html은 ‘웹 문서’를 작성하는 마크업 언어입니다. 브라우저에서 읽기 좋도록 문서를 작성하는 방법이죠.

재미있는 점은 h1이나 h2 태그는 글자가 다른 글자보다 굵고 크게 써있다는걸 알 수 있습니다. 기본적으로 제목으로 쓰이는 태그이기 때문이죠. 이렇게 태그마다 기본적으로 설정되어 있는 값들이 있지만, 우리는 이걸 CSS(Cascading Style Sheet)라는 것을 이용해서 변경해줄 수 있습니다.

이제는 CSS를 추가한 모습을 보여드리겠습니다. CSS에 h1 태그에 대해서 빨간색으로 칠하라고 써놓은 것 보이시나요? h1 { color: red; } 이런 식으로 대괄호로 묶은 곳 안에다가 color는 red(빨간색)이야 하고 정의해주는겁니다. 서술한 내용이 한줄이거나 여러줄로 작성할 경우 마지막 내용에는 ;(세미콜론)을 생략해도 되지만, 개인적으로는 가능하면 모두 적어주는 습관이 좋다고 생각합니다.

See the Pen
layout
by 배현기 (@illustudio)
on CodePen.

위의 태그는 header, section, article, aside, footer 태그를 각각 백그라운드 컬러를 지정해서 구분이 되도록 나눠준 상태입니다. 지난 번에 이야기했던 것처럼 위의 태그들 모두 block 속성을 기본적으로 갖고 있기때문에 가로폭을 100%씩 차지하고 있습니다.

그래서 층층히 쌓인 상태로 웹브라우저에 보여지는 것입니다. 우리가 원하는 웹 사이트의 모습은 컨텐츠가 무조건 아래로 나열되야할 경우도 있지만, 좌우로 나열되야 하는 경우도 있습니다. 이럴때도 역시 CSS를 이용해서 배치를 해줄 수 있는데, 이럴때는 좀 복잡한 문제들이 발생합니다. 보통 float를 이용해서 배치하는 경우가 많았지만, 요즘은 flex도 구형브라우저가 아니라면 사용할 수 있기때문에 점차 사용이 늘어나고 있습니다.

좀 더 진화한 방식의 grid라는 속성도 생겼지만, 익스플로러에서 지원하지 않는 문제로 우리나라에서는 모바일웹이 아니고서야 사용할 방법이 없습니다.  좋은 기능이 나와도 쓸 수 없다는건  무척 아쉬운 부분이죠.

이번 글에서는 대략적으로 레이아웃에 대한 태그 – main이라던지 nav와 같은 태그들도 있지만, 문서의 얼개를 구현해 줄 수 있는 태그들을 이야기하며 css에 대한 간단한 소개도 선보였습니다.

 

HTML의 가장 기본적인 시작 구조

HTML은 기본적으로 이런 모양새를 갖고 있습니다. 가장 눈에 띄는 특징은 <html> </html> 이라는 구조인데요. <html>은 여는 부분 </html>은 닫는 부분입니다. html 문서의 요소들은 보통 “태그”라고 불리는데, 태그는 반드시 열었으면 꼭 닫아줘야합니다.

태그는 마지막에  닫아 주는게 중요합니다.

html문서는 저렇게 <html>로 열어서 </html>로 닫아주는 것이 일반적입니다.  그리고 html 안에는 꼭 들어가야하는 두가지 요소가 또 있습니다.

바로 head와 body인데요. head는 문서의 정보들이 들어갑니다. 누가 작성했으며, 어떤 규칙들을 적용할 것인지 미리 적어주는 곳입니다. SEO(검색엔진최적화)에 필요한 내용들도 대부분 head부분에서 작성되는 것들이 많습니다.

HEAD 태그는 이 문서가 어떤 문서인지 소개합니다

head는 주로 브라우저 화면상에서는 보이지 않지만 이 문서가 동작하거나 수행해야할 역할에 대해서 명시합니다. 그리고 body는 본격적으로 눈에 띄는 부분들을 작성해줍니다.

<!DOCTYPE html>이란 부분은 이 문서가  html5로 작성되었다는 것을 알려주는 부분입니다. html4 문법을 사용할때는 좀 더 많은 내용이 필요하지만 최근은 거의 대부분 html5를 사용하기 때문에 여기서는 가볍게 넘어가겠습니다.

태그에는 속성이란게 존재합니다

다른 태그들과 다르게 html 태그를 보면 lang=”ko”라는 부분이 보입니다. 이것을 속성이라고 부르는데, html 태그 속성 중에는 lang이라는 속성이 있습니다. 이름에서도 유추할 수 있듯이 language(언어) 속성인데, 이 문서가 “ko” 즉 한국어로 작성되었다는 이야기입니다. 영어권 문서로 작성할 경우엔 “en”이라고 작성해줍니다.

태그는 중복해서 여러번 쓰일 수 있습니다

이번엔 head부분에 더 많은 내용이 들어가 있죠? 먼저 meta 태그를 보겠습니다. 현재는 3번에 걸쳐서 쓰이고 있습니다만 더 내용이 필요하면 반복해서 쓸 수 있습니다. 그리고 다른 태그와 달리 meta 태그의 특징은 닫는 태그가 없습니다! 아까 강조하기를 반드시 태그는 닫는 태그가 필요하다고해놓고 처음 소개하는 태그부터 닫질 않는 태그를 소개하게 됐네요. 세상엔 항상 이렇게 예외라는게 존재합니다.

하지만 반드시 꼭 지켜줘야하는 것은 html, head, body 이 세가지 태그는 딱 한번씩만 쓰여야합니다. 중복해서 쓰면 안되요!

meta 태그에 대한 것은 처음 익히는 현재는 중요하지 않으니 그냥 넘어가도 되는 부분입니다. 나중에 알아도 되는 부분들이니 차츰 다음에 알아보도록 하죠.

title 태그는 문서의 타이틀을 알려줍니다

title 태그는 말 그대로 문서의 타이틀이 보여지는 부분입니다.

title 태그에 입력한 내용은 위의 이미지에서 보이듯 탭에 쓰여집니다. 문서 자체에는 아무 내용이 보이지 않지만, 맨 상단에 쓰여진 “Document”라는 내용이 바로 title에 입력된 내용입니다.

이렇게 title 태그 안에 내용을 문서 타이틀이라고 바꿔 적으면 브라우저에서도 아래와 같이 변합니다.

사실 title 태그는 사용자 입장에서 눈에 잘 띄는 곳이 아니다보니 보통 상호명을 적는 경우가 많은데, html 문서가 “웹문서”라는 것을 생각해보면 문서의 제목이 달려야하는 것이 맞습니다. title은 문서의 타이틀이 이런거다 하고 알려주는 역할을 합니다. 누구에게? 바로 검색엔진입니다.

검색엔진이 문서를 수집해갈 때 문서의 제목을 바로 이 부분에서 가져가기 때문이죠. 그렇다고 너무 욕심내서 많은 내용을 넣어선 안됩니다. 대략 40자 이하로 작성하는 것이 가장 좋습니다.

오늘은 이쯤 하고 다음엔 body 태그에 들어갈 내용들을 본격적으로 작성해보겠습니다.

관련글

HTML은 Hyper Text Markup Language의 약자로 혹자는 HTML도 언어라고 이야기하지만, 개발자들은 HTML은 언어가 아니라고 강력히 주장합니다.

HTMLHTML을 언어취급 할 수 없다는 직업의식이 부른 재앙… 출처 : 제타위키

각설하고, 일단 HTML은 기본적으로 ‘웹문서’를 작성하기 위해 필요합니다. 초기의 웹은 지금처럼 화려하고 다양한 기능을 갖춘 모습이 아니라 그저 말 그대로 정보를 공유하기 위한 ‘문서’였습니다. 파란 밑줄이 그어진 하이퍼 텍스트를 이용해 문서와 문서간에 이동을 하게 할 수 있는 기능이 부여된 그런 ‘웹 문서’ 말이죠.

그래서 HTML을 문서 자체로서 검색엔진이 읽기에 좋은 상태로 작성해주면 그것을 바로 검색엔진 최적화(SEO – Search Engine Optimization)라고 합니다. 때문에 HTML을 잘 이해하고 SEO에 맞춰서 작성하면 비지니스에도 큰 도움이 되는 셈입니다.

요즘은 누구보다 더 자신의 컨텐츠나 서비스를 알리고 싶어하는 세상입니다. 그것이 비지니스와 직결되기 때문이죠. SEO는 이제 필수가 자리잡은 세상입니다. SEO 조건에 충족시킨 문서라고 무조건 상위 노출이 되는 것은 아니지만, 그 조건을 무시한 문서보다는 상위 노출될 확률이 크죠.

조건이 충족된 문서는 가치있는 컨텐츠로 판단되어 검색엔진에서도 비교적 첫페이지에 노출시킬 확률이 크다는 이야기입니다.

때문에 HTML을 그저 div로 층층히 쌓아가기보다 header, section, article, nav와 같은 목적에 맞는 태그로 적절히 작성해주는 시맨틱( semantic, 의미론적)한 접근이 중요합니다.

이러한 부분은 직접 html 문서를 작성해가며 하나하나 짚어보도록 하겠습니다.

 

웹디자이너로써 코딩을 전혀 하지 않고 오로지 디자인에만 집중할 수 있는 환경에서 일하는 분들이 무척  부럽습니다. 그 분야에서 스페셜리스트로 인정받은 분들이라고 볼 수 있는지라, 저는 가볍게 겉만 핥으며 다니는 – 아주 라이트한 제네럴리스트로 늘 스페셜리스트에 대한 부러움을 갖고 있죠.

저는 주로 중소기업, 그것도 쇼핑몰에서 근무한 경력이 많다보니 자연스럽게 오만걸 다 하는 경우가 많았습니다. HTML/CSS도 사실 원해서 했다기보다 자연스럽게 제가 떠맡게 된 경우인데, 생각보다 재미있어서 계속 공부하게 되었습니다.

요즘은 UI프레임워크들이 많이 등장하면서 웹디자이너의 자리가 더더욱 좁아지고 있는데요. 개발자들이 디자이너 밥줄을 끊네 꼭 그런 이유가 아니어도, HTML/CSS로 자신의 디자인을 어떻게 구현하는지 이해하면 도움이 많이 됩니다. 

포토샵에서 디자인한 결과물이 웹브라우저로 올라가면 어떻게 되는지 이해한다는 것은 그것을 모르고 할 때와는 차원이 다른 경험이 될 것입니다. 포토샵에서 그려보기만 한 디자인은 디바이스의 크기에 따라 달라짐을 쉽게 예측하기 어렵습니다. 

마치 전단지와 리플렛이 홍보물이라는 큰 맥락은 같을지 몰라도 전단지와 달리 리플렛은 어떻게 접을 것인가에 따라서 보는 사람의 행동도 예측해야하듯 모바일과 태블릿 데스크탑 등 다양한 디바이스에 따라 변화가 필요합니다.

윈도우7의 서비스 지원이 종료되면서 구형브라우저도 함께 자취를 감추기를 기대하지만, 아직까지 익스플로러가 웹 레이아웃 구현의 발목을 잡고 있습니다. 레이아웃을 구현하는 기술은 flexbox를 넘어 grid-layout으로 진보해도 국내 환경상 여전히 float를 이용해야하는 경우가 많지요. 일단은 익스플로러에 대한 대응을 고려하지 않고 크롬 웹브라우저를 기준으로 학습을 진행할 예정입니다. 일단은 크롬으로 제작한 뒤 익스플로러 11을 기준으로 필요한 부분을 수정하거나 추가하는 방식으로 크로스 브라우징에 대응할 예정입니다.

그 동안 실무에서 사용했던 기억들을 되살려 조금씩 정리하며 공부한 것들을 다시 확인하는 기회를 가질겸 연재를 시작해봅니다.

학습목표 

  • HTML과 CSS의 차이와 용도 이해
  • 직접 디자인한 것들을 html/css로 구현해보기

준비물 

관련글

카페24 쇼핑몰을 운영하시는 분들 중에 웹디자이너 혹은 웹퍼블리셔의 도움 없이 혼자서 해결해나가는 분들이 있습니다. 간혹 이런 부분에 대해서 쇼핑몰 운영자들이 모여있는 커뮤니티에서 질문글이 올라오곤 하는데요.

아무래도 전문적으로 카페24 스킨을 수정해 온 사람들이라면 모를까 임시방편으로 해결해오던 습관 혹은 누군가 귀찮아서 대충 알려준 방법을 공유하는 모습들이 보입니다. 아마도 카페24 스킨을 수정할때 가장 빈번한 내용이 “배너”를 교체하거나 추가할때 필요한 내용들일 것입니다.

좀 과격하게 말씀드리자면 일단 과거에 table로 레이아웃을 잡던 방식으로 html을 배우신 분들은 ‘나도 html을 할 줄 안다’ 라고 생각하시지 않았으면 좋겠습니다. 그때와는 웹 문서를 만드는 방식이 너무 달라져버렸습니다. html 문서 안에서 스타일과 크기 등 모든 것을 해결하던 방식에서 이제는 html은 문서의 구조만 담당하고 css가 스타일과 색상, 배치, 크기 등을 담당하고 자바스크립트로 동적인 모션이나 데이터를 제어해주는 세상이 됐습니다. 역할이 분담이 된 셈인데, 이렇게 된 데는 다 이유가 있습니다.

예를 하나 들어볼께요.

이를테면 가로로 2단 그리드로 배치되는 이미지를 만드는 방식입니다.  간략하게 보자면 과거의 테이블로 레이아웃을 잡던 방식이라면 아래와 같은 방식을 취했겠죠.

테이블 코드에 대해서 잘 이해하고 다루는 사람이라면 한 눈에 “아 전체 가로폭은 1200픽셀이고 600픽셀씩 이미지를 배치해주는 코드구나” 이렇게 이해할 수 있을겁니다. 하지만 테이블 태그의 특성을 보면 일단 table > tbody > tr > td 이렇게 총 4번이나 안으로 들어가서 구조를 파악해야하므로 브라우저에서 그만큼 많은 단계를 거쳐야하고, 이런 부분이 많아질 수록 브라우저에서 이미지를 표현하는데 많은 시간이 걸립니다.

그래서 거기서 조금 더 나아간 방식이 style을 활용한 방식입니다.

한눈에 보기에도 훨씬 간결해졌죠? 하지만 이런 방식으로 코딩을 하면, 가로폭이 1200픽셀에서 1100픽셀로 바뀌거나 1400픽셀로 바뀌는 상황에서 또 저걸 찾아서 바꿔줘야한다는 문제가 있습니다. 물론 저 배너 하나뿐이라면 가서 바꾸면 되지만, 배너를 보통 하나만 쓰는 경우가 없죠.

그래서 아래와 같은 방식으로 개선해서 쓰게 됩니다.

조금 생소할 수 있지만, 여기서 처음 보이는 부분이 바로 class라는 부분입니다. class는 한번 지정해놓으면 얼마던지 쓸 수 있기 때문에 무척 편리합니다. 이를테면 아래와 같은 방법도 가능해요.

보시다시피 클래스가 3번이나 쓰였죠? 그래도 모두 같은 내용으로 1200픽셀이라는 폭이 허용됩니다. 그럼 나중에 1100으로 줄어들거나 1400으로 늘어나더라도 우리는 style 태그 안에 width:1200px이라는 값만 수정해주면 됩니다. 관리가 굉장히 편하겠죠? 여러번 반복해서 수정해야할 부분을 딱 한줄만 고쳐주면 전부 수정되니까요.

위의 방식도 문제가 되는 점이 있는데, style 태그가 작성된 html 문서 안에서만 저 내용이 적용된다는 점입니다. 보통 웹사이트는 html 문서 하나로만 구성되지 않습니다. 여러 페이지에 걸쳐서 width:1200px이라는 값이 필요할 수 있겠죠? 그래서 css 파일이 필요한겁니다.

어떤 문서건 head 태그 안에 <link rel=”stylesheet”  type=”text/css” href=”스타일 시트가 위치한 경로와 파일명”> 이 한줄만 넣어주면 공통적으로 스타일 시트를 재활용할 수 있습니다. html과 css 부분을 분리한 예제가 바로 아래와 같은 경우입니다.

See the Pen 스타일 시트를 활용하는 방법 by 배현기 (@illustudio) on CodePen.0

 

내용을 무척 길게 작성하게 되었는데, 이렇게 이야기하는 이유는 좀 더 미래를 보고 작업해야할 필요가 있다는 이야기를 하고 싶었습니다. ‘지금 당장 급하니까’라는 이유로 맨 처음에 설명한 inline 방식 – html 태그 안에 직접적으로 스타일을 정의하는 방식으로 style 적용한다던지, 아니면 html 문서 안에 style 태그로 적용 하는 방식으로 하면, 나중에 쌓아둔 숙제처럼 밀려오는 수많은 수정사항에 못이겨 관리하던 직원이 나가버리거나 사이트를 새로 만들거나 하는 사태가 벌어질겁니다.

이런 문제를 사전에 방지하려면 사실 처음부터 이런 부분에 잘 알고 있는 사람에게 일을 맡기는것이 좋겠죠. 그래서 혼자 운영하는 부분에서 정말 공부해야할 것이 많을겁니다. 그래서 사실 커뮤니티에서 알려주시는 분들도 좋은 의미에서 공유하시는거겠지만, 인라인 방식과 스타일 태그로 알려주는 방식은 차라리 알려주지 않느니만 못하다는것을 알았으면 좋겠습니다.

결국 이런 방식으로 html, css 파일로 나누어서 작성하게 된 이유는 모두 관리면에서 이점이 크기 때문입니다. 불필요한 작업은 최소화해야된다는거죠. 이런 방식을 따르지 않고 그저 작성한 사람 ‘혼자서만 알아보면 된다’, ‘나 당장 급한데로 해버릴꺼다’ 이런 식으로 일처리를 하기보단, 관리가 편한 방식을 따라서 작성하는 것이 좋습니다. 일단 다음에 관리해야할 사람이 망연자실할 정도로 후환(?)을 만들어 놓아서는 안되겠죠 ㅎㅎ