Search

코드스피츠 css 렌더링 1-2

subtitle
float
Tags
front-end
css
draft
Created
2021/02/20
2 more properties
코드스피츠 css 렌더링 강의 내용 정리

Float

bfc, ifc가 아닌 line box로 그려짐
1.
line box 공식
float div가 등장하면 bfc가 새로 생김. float bfc는 위에 생김.
float은 새로운 bfc를 만듦.
2. text, inline guard
float는 inline 요소에 대해 가드로 작동함. 즉, 자신의 영역은 못 건드리게 함. = 따라서 inline 요소는 float 요소를 인식
반면, block 요소에 대해서는 가드하지 않음 = block 요소는 float 요소를 인식하지 않음
인라인 요소는 hello는 float에 의해 밀려남. DOM 구조와 상관없이 World도 인라인 요소이므로 밀려남.
block 요소들은 float를 신경쓰지 않고 모두 자신의 width를 차지
3. line box
line box 내에서 float가 차지한 영역은 신경쓰지 않음 → 처음 float을 뺀 나머지 영역이 line box 영역이 됨.
line box는 height도 봄. 3번째 float에서 쓸 영역은 100height만 있으면 되므로 줄어듦
4번째까지는 그릴 수 있으나 5번째는 width 150이므로 나머지 가용 영역을 쓸 수 없음
그래서 나머지 가용 영역은 버리고, 마지막 4번째 밑을 바운더리로 잡고 해당 가용 영역 안에 넣을 수 있으면 5번째를 넣음. 만약에 그래도 부족하면 그 다음으로 적은 height 바운더리인 3번째, 그래도 부족하면 1번째와 2번째 밑을 바운더리로 잡음
5번째 왼쪽도 공간이 부족하므로 5번째 밑을 베이스라인으로 잡고 6번째를 생성
그 다음으로 적은 height는 2번이므로 2번을 베이스라인으로 잡고 7번을 그림
float = right보다 더 오른쪽에 그리지 않고, left보다 더 왼쪽에 그리지 않음
그럼 남은 공간은 빨강, 초록 박스를 제외한 공간
인라인 요소인 ABC는 3, 4 박스 사이에 위치하게 됨

overflow

css 2.1 visual formatting model에 정의되어 있음
visible, hidden, scroll, inherit, auto
일반적인 브라우저는 auto가 visible과 일치함
기본값은 대부분 auto = 자식의 크기가 커지면 부모도 같이 커짐 (geometry의 크기가 직접 변함)
scroll: 내 geometry를 넘어가는 콘텐츠가 생기면 스크롤 바를 만듦
내 geometry가 너비 200인데 너비 300짜리 콘텐츠가 안에 생기면 가로 스크롤바 생김
overflow-x / y
overflow를 x축, y축 따로 관리하는 스펙
놀랍게도 module lv.3 "draft" 상태: recommendtation까지 갔다가 draft로 바뀜
transform, border radius가 나오면서 이것들과의 충돌을 해결하여 draft로 새로 제안됨
text-overflow
css2.1 module lv.3
clip, ellipsis
overflow가 hidden, scroll 속성을 가질 때 → 이 때만 float랑 관련 있음
(overflow)이 값을 갖는 요소로부터 새로운 BFC를 만든다는 규약이 있음
first line box bound를 인식해서 만듦
3번째 div는 overflow:hidden 속성이 없으므로 새로운 BFC를 만들지 않고 두번째 BFC에 속하게 됨
마지막 레드 C의 line box 밑을 베이스라인으로 했을 때, 오렌지 D는 height가 부족해 그릴 공간이 없음 → 그래서 요소는 화면에서 사라지고 공간만 차지함
오렌지 D만큼 height 가 밀린 상태에서 블랙 박스 생성
7번 공간에서 float 왼쪽에는 가용영역이 없으므로(left 보다 더 왼쪽에 위치할 수 없고 right보다 더 오른쪽에 위치할 수 없음) 레드 E는 사라짐
빨간 박스가 overflow: auto인데 ABC8까지 안늘어나는 이유는?
단, line box때문에 가드 작동으로 밀려난 경우는 overflow: auto여도 늘어나지 않음.
렌더링 시스템과 프레그먼트 시스템의 차이: 렌더링 시스템에서 geometry를 설정해도, fragment의 라인 박스 시스템때문에 ABC8까지 그려짐. 따라서 geometry 영역만큼 칠하는 background: red는 abc1까지만 칠한 것. 즉, 라인 박스로 인해 밀려난 인라인 콘텐츠는 공간을 차지 하지 않음.
홀라홀라~!
여기까지를 고전 레이아웃이라고 함