article과 section 구분
느닷없이
나와도 괜찮다.연관성
있는 문서의 구획을 나누고자 할 때margin-collapsing
container 요소에 overflow: hidden;
: 부모 요소에 overflow: hidden을 주면 자식 요소가 부모 요소 범위 밖으로 나가지 못하게 된다. 부모의 밖으로 나가지 못한 자식요소는 부모 요소 안에서만 있게 된다.
container 요소에 display: inline-block;
: 이 때 inline-block을 사용하면 div.parent와 div.other사이에 간격이 생기는 것을 볼 수 있는데 이는 vertical-align때문이다. vertical-align: top같은 것으로 해결할 수 있다.
vertical-align
이란 인라인 요소 안에서 인라인 요소들 끼리의 수직정렬을 맞춘다.container 요소에 border
주기
container 요소에 display: flow-root;
: flow-root는 모바일의 경우 ios(==safari) 13버전 부터 사용할 수 있다. (ios를 업데이트 하지 않으면, safari도 업데이트 되지 않는다.)
Position과 Transform
부모의 position 속성이 static이 아닌 가장 가까운 부모를 기준으로 움직인다.
position: absolute는 요소의 display 속성이 block으로 바꾼다.
top, bottom, left, right없이 position: absolute만 주면 움직이지 않는다. 대신 요소가 제자리에서 뜬다. => 따라서 요소를 제자리에서 띄우고 싶을 때는 position: absolute를 쓴다.
요소를 움직이고 싶을 때는 transform: translate()
가 더 효율적이다. position은 top, left, right, bottom까지 다 써야하기 때문이다.
인라인 요소
를 transform
을 사용해 움직이고 싶을 때는, display를 block
으로 바꿔줘야한다. position을 absolute로 바꾸면 block요소가 되기 때문에 움직인다. (🔥그래서 trasnform: translate()은 position: absolute랑 같이 사용해야 작동한다고 생각하는 사람이 많다🔥)
transform은 reflow
, repaint
를 일으키지 않는다.
reflow: 레이아웃 변경 시 영향 받는 모든 노드의 수치를 다시 계산하여 렌더 트리를 재생성하는 작업
repaint: reflow 과정이 끝난 후 재생성된 렌더 트리를 다시 그리는 작업으로 수치와 상관없는 스타일 변경시에는 reflow 과정을 생략한 repaint 작업만 수행한다.
transform
은 GPU
를 사용한다. GPU를 사용하면 transform 속성을 이용하는 요소의 렌더링 속도가 빨라진다. (왜? cpu는 하는 일이 많아서 바쁨 / GPU는 그래픽카드의 중앙처리 장치로 그래픽적인 요소를 표현하는데에 특화되어있는 칩)