브라우저 작동 원리(9)-CSS2 시각 모델
캔버스
CSS2의 명세는 캔버스를 서식 구조가 표현되는 공간
이라고 설명합니다 (브라우저가 내용을 그리는 공간)
캔버스 공간 각각의 면적은 무한하지만 브라우저는 초기 viewport
의 크기를 기반으로 초기 너비를 설정합니다
CSS2 명세에 따르면 캔버스는 기본적으로 투명하기 때문에 다른 캔버스와 곂치는 경우 비쳐보이고, 투명하지 않을 경우 브라우저에서 정의한 색이 지정됩니다
CSS 박스 모델
CSS의 박스 모델은 document 트리
에 있는 요소를 위해 생성되고 시각적 서식 모델(visual formatting model)에 따라서 배치된 사각형 박스를 설명합니다
각 박스는 컨텐츠 영역
과 선택적으로 지정하는 패딩(padding), 테두리(border), 여백(margin)
영역이 있습니다
각 노드는 이런 박스를 0~n
개 생성합니다
모든 요소는 만들어질 때 박스의 종류를 결정하는 display
속성을 가지는데 그 종류는 다음과 같습니다
block
- 블록 상자를 만든다inline
- 하나 또는 그 이상의 인라인 상자를 만든다none
- 박스를 만들지 않는다
기본 값은 inline
이지만 브라우저의 스타일 시트는 요소별로 다른 기본 값을 정의합니다.
예시)div
의 기본 display
값은 block
위치(Positioning) 결정 방법
위치를 결정하는데에는 3가지 방법이 있습니다
Normal
- 객체는 문서(document) 안의 자리에 따라 위치가 결정됩니다. 이것은렌더 트리
에서 객체의 자리가DOM 트리
의 자리와 같고,박스 유형
과면적
에 따라 배치됨을 의미합니다Float
- 객체는 우선 일반적인 흐름에 따라 배치된 왼쪽이나 오른쪽으로 정렬됩니다Absolute
- 객체는DOM 트리
자리와는 다른렌더 트리
에 놓입니다
위치는 position
과 float
에 의해서 결정됩니다
static
과relative
로 설정하면 일반적인 흐름에 따라 위치가 결정absolute
와fixed
로 설정하면 절대적인 위치
position
속성을 정의하지 않으면 static
이 기본값이 되며 일반적인 흐름에 따라 위치가 결정됩니다. 만약 static
이 아닌 다른 값을 선택하면 top, bottom, left, right
으로 위치를 지정할 수 있습니다
박스의 배치는 다음과 같은 요소들에 영향을 받습니다
박스 유형(display, inline ...)
박스 크기(width, height ...)
위치 결정 방법(position, float)
추가적인 정보 - 이미지 크기와 화면 크기 등
박스 유형
Block box
: 브라우저 창에서 사각형 블록을 형성합니다
Inline box
: 블록을 형성하지 않고 다른 블록 내부에 포함됩니다
블록
은 다른 블록 아래에 수직으로 배치되고(다른 블록과 같은줄 불가능) 인라인
은 수평으로 배치됩니다
인라인 박스
는 line
이나 inline 박스
안에 배치됩니다
line
은 적어도 내부의 가장 큰 박스만큼 크지만 baseline
정렬(요소의 하단이 line의 바닥이 아닌 다른 요소를 기준을으로 정렬된 경우)이라면 더 커질 수 있습니다
포함하는 width가 충분하지 않으면 인라인은 여러 줄의 line
으로 재배치 되는데 이건 주로 paragraph
안에서 발생합니다
포지셔닝(Positioning)
Relative
relative
포지셔닝은 일반적인 흐름에 따라 위치를 결정한 다음 필요한 만큼 이동합니다
Float
float
박스는 라인의 왼쪽이나 오른쪽으로 이동합니다. 흥미로운 점은 다른 박스가 이 주변을 flow
한다는 것입니다
html을 이렇게 작성한다면
<p>
<img src="http://helloworld.naver.com/image.gif" alt="image.gif" width="100" height="100" style="float:right">
Lorem ipsum dolor sit amet, consectetuer...
</p>
이렇게 보일 것입니다
absolute와 fixed
absolute
와 fixed
는 일반적인 flow
와는 별개로 위치가 결정되고 flow
에 관여하지도 않으며, 면적
은 부모에 따라 상대적으로 정해집니다
fixed
인 경우 viewport로부터 위치를 결정합니다
fixed
된 박스는 스크롤을해도 따라 움직이지 않습니다
층(layer) 표현
층
은 CSS의 z-index
속성에 의해서 명시됩니다. 층은 3차원 표현이고 z 축
을 따라서 위치가 정해집니다
박스는 스택(stacking contexts)
으로 구분됩니다. 각 스택에서 뒤쪽 요소가 먼저 그려지고 앞쪽 요소는 사용자에게 가까운 쪽으로 나중에 그려집니다. 가장 앞에 위치한 요소는 곂치는 이전 요소를 가립니다
스택은 z-index
속성에 따라 순서를 결정합니다. 박스가 z-index
가지면 그 박스는 지역 스택(local stack)
을 형성합니다. viewport는 바깥쪽의 스택(outer stack)
입니다
이 예제를 살펴보면
<style type="text/css">
div {
position: absolute;
left: 2in;
top: 2in;
}
</style>
<p>
<div style="z-index:3;background-color:red;width:1in;height:1in"></div>
<div style="z-index:1;background-color:green;width:2in;height:2in"></div>
</p>
이렇게 보일 것입니다
붉은색 박스가 초록색 박스보다 마크업에서 먼저 나오기 때문에 일반적이라면 먼저 그려져야하지만, z-index
로 인해 root box
가 가지는 스택상에서 더 앞에 위치하게됩니다
참고 및 출처
https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
https://d2.naver.com/helloworld/59361
Author And Source
이 문제에 관하여(브라우저 작동 원리(9)-CSS2 시각 모델), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@trollering12312/브라우저-작동-원리9-CSS2-비주얼-모델저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)