1. HTML layout태그

layout태그는 웹 페이지의 개요을 설정하는 태그입니다.

laydout태그를 사용한다고 해서 특별한 기능이 추가되는 것은 아닙니다.

기능은 div태그와 동일하나, 코드의 가독성의 높여줍니다.

종류로는..

- header

- section

- nav

- footer

- aside  등이 있습니다.

화면은 위와같이 구성하면 개요가 어떤지 한눈에 알기 쉽습니다.

 

2. HTML 구조설계

웹페이지를 만드는 것은 문서의 잡는 것이기 때문에 문서구조를 만드는 것이 가장 먼저 할 일 입니다.

이런식으로 큰 layout을 먼저 잡습니다.

ul, li, button, img등의 태그를 사용하여 내용을 채워줍니다.

브라우저에서 실행하면 다음과 같이 보여집니다. 아직 CSS작업을 하지 않았기 때문에

흰바탕에 검은 글씨 이지만, 문서의 개요는 다 짜여졌습니다.

 

3. class와 id 속성

위의 실습에서 li태그, div태그, img태그들이 여러번 중복되어 사용된 것을 확인 할 수 있습니다.

그런데 만약 이 태그들을 구분하여 사용하고 싶다면 어떻게 해야할 까요??

 

- id 속성

  • 고유한 속성으로 한 HTML 문서에 하나만 사용 가능합니다.
  • 고유한 id값이 있으면 하나하나에 특별한 제어를 할 수 있으며 검색에도  용이합니다.

- class 속성

  • 하나의 HTML 문서 안에 중복해서 사용 가능합니다.
  • 하나의 태그에 여러개의 다른 class 이름을 공백을 기준으로 나열할 수가 있습니다.
  • 홈페이지 전체적인 스타일을 일관성 있게 지정하기 위해서는 class의 사용이 필수적입니다.

위의 실습 코드에서 <li><h3>What we do 를 일관성있게 관리하기 위해서는 id가아닌 class속성을 부여해야 합니다.

왜냐하면, 위의 태그는 문서에서 3회 사용되었기 때문입니다.

 

이렇게 id는 문서당 하나만 사용가능하기 때문에 제약이 많습니다.(id를 중복 사용한다고해서 오류가 발생하지는 않습니다.)

그래서 실제로 HTML문서를 작성할 때에는 id보다 class 사용을 지향합니다.

 

1. CSS 선언방법

먼저 CSS의 구성에 대해 알아보도록 하겠습니다.

선택자는 HTML의 태그, class, id속성 등을 통해 어떤 것을 꾸며줄지 선택합니다.

 

CSS를 HTML안에 선언하는 방식은 크게 3가지가 있습니다.

  • inlineHTML 태그 안에다 CSS를 선언하는 방식입니다.
  • internalstyle 태그로 지정합니다.
  • external외부파일(.css)로 지정하는 방식입니다. 가급적 이 방법으로 구현하는 것이 좋습니다.

inline
internal

위의 세 방식으로 같은 속성 값에 다른 value를 준다면,

inline > internal > external 순으로 가중치가 주어져서 적용됩니다.

만약, inline엔 빨강, internal엔 초록, external엔 보라색 value를 주었다면, 빨강색이 적용되는 것이죠!

 

3. 선택자

- tag로 지정하기

- id로 지정하기

- class로 지정하기

위의 3가지가 가장 대표적인 선택자 입니다. 위를 잘 응용하여 선택자를 다양하게 활용할 수 있습니다.

 

추가로, 상속관계를 표현하기 위한 자손 선택자와 후손 선택자가 있습니다.

자손이나 후손이나 그게 그말아니냐 하실 수 있습니다. 그러나 둘은 큰 차이점이 있습니다.

 

자손 선택자는 바로 직계 상속관계의 자식만 선택합니다.

후손 선택자는 직계 자식이 아니더라도 후손이라면 선택합니다.

 

자손 선택자를 사용한다면 div태그 바로 아래 p태그만 red가 적용됩니다.

그러나 후손 선택자를 사용하면, div태그 아래의 모든 p태그에 red가 적용됩니다.

 

5. Element가 배치되는 방법(CSS layout)

element를 화면에 배치하는 것을 layout 작업, Rendering과정이라고 합니다.

엘리먼트는 위에서 아래로 순서대로 블럭을 이루며 배치되는 것이 기본입니다.

그러나 웹 사이트는 보다 다양한 표현을 해야하기 때문에 css에서 추가적인 속성을 제공합니다.

 

  • display(block, inline, inline-block)
  • position(static, absolute, relative, fixed)
  • float(left, right)

- display

각태그는 기본으로 가지는 display속성을 가지고 있습니다. 거의 대부분의 태그는 block속성이지만,

span, a태그 등의 소수의 태그는 inline속성을 가지고 있습니다.

우리는 display 속성을 사용하여 css를 통해 display를 임의로 변경할 수 있습니다.

 

display속성을 사용하여 배치가 위아래, 좌우로 흐르면서 쌓이기만 하면, 다양한 배치가 어렵습니다.

그래서 position속성을 사용합니다.

 

- position

position속성을 기본으로 static입니다.

absolute는 기준점에 따라 특별한 위치에 배치합니다.

기준점은 top/left/right/bottom으로 설정합니다.

기준점을 어떤 엘리먼트로 하느냐는 상위 엘리먼트를 단계적으로 찾아가 결정하는데,

static이 아닌 position이 기준입니다. 즉, 상위 엘리먼트를 확인했는데 static이면 넘어가고, 상위엘리먼트를 확인하고......이런식으로 기준점을 찾습니다.

 

relative는 원래 자신이 위치해야 할 곳을 기준으로 이동합니다.

top/left/right/bottom으로 설정합니다.

absolute를 사용하기 위해 상위 엘리먼트에 relative를 선언하는 경우가 많습니다.

 

 fixed는 viewport(전체화면) 좌측, 맨 위를 기준으로 동작합니다.

 

- float

float속성을 통해서 원래의 flow에서 벗어나 둥둥 떠다닐 수 있습니다.

일반적인 배치에 따라 배치된 상태에서 float는, 벗어난 형태로 특벌히 배치됩니다. 

따라서 block엘리먼트가 float엘리먼트를 인식못하고 중첩되서 배치됩니다.

 

- 엘리먼트가 배치되는 방식 (box-model)

블록 엘리먼트의 경우 box의 크기와 간격에 관한 속성으로 배치를 추가 결정합니다.

margin, padding, border, outline으로 생성되는 것입니다.

box-shadow 속성도 box-model에 포함지어 설명할 수 있습니다.

box-shadow는 border 밖에 테두리를 그릴 수 있는 속성입니다.

 

- box-sizing과 padding

padding 속성을 늘리면 엘리먼트의 크기가 달라질 수 있습니다.

box-sizing 속성으로 이를 컨트롤 할 수 있습니다.

box-sizing 속성을 border-box로 설정하면 엘리먼트의 크기를 고정하면서 padding 값만 늘릴 수 있습니다.

 

 

학습을 마치며..

복잡한 layout을 직접 많이 만들어보는 것만이 자유자제로 element를 배치할 수 있는 실력을 갖추는 길인것 같다.

당연히 될 줄 알았던 것이 안되는 것을 경험하고,

생각한 방향으로 고치는 과정에서 많은 배움이 있었다.

 

이전에는 브라우저의 동작에 대해 개발자가 알 필요가 없다고 생각했었다고 합니다.

그런데 간혹 개발자의 의도와는 다르게 브라우저가 작동하는 것,

브라우저의 동작을 어떻게 빠르게 할 수 있을까에 대한 고민에서 브라우저의 동작에 대한 이해가 소개되기 시작했습니다.

브라우저의 구성

- UI : 화면에 보이는 홈버튼, 되돌아가기 버튼등이 이에 해당합니다.

  이는 os수준에서 설정됩니다. 예를들어, Mac은 브라우저 왼쪽에 빨강 초록 노랑 동그라미로, window는 브라우저 오른쪽 -, ㅁ, x로 작은 아이콘이 표시됩니다.

- 브라우저 엔진 : 소스코드를 실행해서 브라우저에 보여주는 역할을 합니다.

  이는 브라우저를 실행하기 위한 핵심 엔진입니다.

- 렌더링 엔진 : 화면에 직접 위치를 잡고 색을 칠해주는 등의 역할을 합니다.

- 네트워킹

- 자바스크립트 인터프리터 : 자바스크립트 코드를 해석하는 역할을 합니다.

 

브라우저 엔진의 메인 플로우

인터넷에서 특정 정보로 이동할 수 있는 주소 입력창이 있고 서버와 HTTP로 정보를 주고 받을 수 있는 네트워크 모듈도 포함하고 있습니다.

그리고 서버에서 받은 문서(HTML, CSS, Javascript)를 해석하고 실행하여 화면에 표현하기 위한 해석기(Parser)들을 가지고 있습니다.

브라우저마다 서로 다른 엔진을 포함하고 있습니다.

아래 그림이 대표적인 내용입니다.

HTML을 해석해 DOM Tree를 만들고, CSS를 해석해 Style Rules를 만듭니다.

 

그런데 DOM이 뭘까요..??

  • HTML문서와 문서의 각 요소들의 데이터로 만든 큰 오브젝트
  • 그 오브젝트를 조작하기 위한 인터페이스들(DOM API)

HTML문서를 프로그래밍 가능하도록 문서로 만든것! 이라고 정리할 수 있겠습니다.

(API : 쉽게말하자면 함수들의 묶음)

DOM은 xml, html등 마다 다르게 나옵니다.

우리는 스크립트 언어(자바스크립트)를 사용해 DOM에 접근할 수 있습니다.

 

이 과정에서 parsing과정이 필요하고 토큰단위로 해석되는 방식입니다.

CSS가 parsing되는 과정은 다음과 같습니다.

DOM Tree는 화면에 표시되어야 하기 때문에 CSS가 필요합니다.

스타일과 문서를 합하여 Render Tree를 만듭니다. 렌더트리는 화면 어디에 배치될 지, 어떻게 보일지를 결정합니다.

최종적으로 화면에 표시합니다.

 

학습을 마치며..

HTML과 CSS는 다른 언어인데 어떻게 한 화면에 표시될까...?하는 의문이 있었다.

오늘 학습을 통해 그 의문을 해소한 듯 하다.

 

 

사진 출처 https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

+ Recent posts