원래 자식이 float를 하게 되면 부모는 집나간 자식을 찾지 못해 이렇게 height가 0으로 쪼그라들게 되었다.
하지만 overflow: hidden;
을 주게 되면 부모가 집나간 자식을 찾을 수 있게 된다!
지난시간에 이렇게 망가졌던 레이아웃이다.
하지만 parent에게 overflow: hidden;
속성을 주게 되면?
parent도 자식들의 height를 찾게 된다.
clear는 오로지 float로 인해서 망가진 레이아웃을 고치기 위해 존재하는 속성이다.
위의 요소에 이렇게 float 속성을 주게 되면
당연히 아래의 block이 위에 겹치게 올라오게 된다.
하지만 clear: left
속성을 주게 되면 float: left
가 된 녀석을 감지하고 아래로 내려가게 되고,
parent는 아래 자식을 기준으로 자식의 height의 합을 계산할 수 있게 된다
clear: left
는 float: left
를,
clear: right
는 float: right
를 각각 알아차리게 되고,
clear: both
의 경우, float: left
와 float: right
모두 알아차려 영향을 받지 않게 된다.
이런 상품카드를 가로로 배치하려한다고 하자.
하지만 float
만 해주게 되면 레이아웃이 와장창 될 것이다.
그럼 이렇게 의미 없는 div를 넣어서 레이아웃을 잡아 주어야 하는데...
스타일적인 이슈 때문에 html 마크업을 넣어주어야 하다니..
임의의 html 요소를 만드는 대신에, css로 fake 요소 (가상 요소)를 만들면 된다.
이렇게 ::before
과 ::after
은 각각 가장 첫 번째 자식, 가장 마지막 자식으로 가상 요소가 생기게 된다.
<div class="pseudo">Red</div>
<div class="pseudo">Yellow</div>
<div class="pseudo">Blue</div>
.pseudo::before {
content: '✨';
}
가상 요소는 반드시 content를 넣어주어야 한다 !!
이렇게 가상의 요소를 넣어줄 수 있다.
다시 원래로 돌아와서....
.parent::after {
content: '';
display: block;
clear: left;
}
※ clear 속성은
display: block;
인 애들에게만 사용할 수 있으므로 주의하자!