프론트엔드-코드/CSS

레이아웃

sdafdq 2023. 7. 17. 12:41
<!DOCTYPE html>
<html lang="ko">

<head>
  <meta charset="UTF-8">
  <meta name="author" content="Kim Pilsu">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="./css/style.css">

</head>

<body>
  <header id="header" class="wrap">
    <img src="./images/layout/header.png" alt="naver_header">
  </header>


  <div id="container" class="wrap">
    <div id="container_left">
      <img src="./images/layout/container_left.png" alt="naver_container">
    </div>
    <div id="container_right">
      <img src="./images/layout/container_right.png" alt="naver_container">
    </div>
    

  </div>


  <footer id="footer">
    <div class="wrap">
      <img src="./images/layout/footer.png" alt="naver_footer">
    </div>
  </footer>
</body>

</html>

 

 

@charset "utf-8";

*{margin: 0;padding: 0;}
li{list-style-type: none;}
a{text-decoration: none; color: inherit;}

.wrap{width: 1282px; margin: 0 auto; outline: 1px dotted red;}

#container_left{float: left; outline: 1px dotted red;}
#container_right{float: right; outline: 1px dotted red;}
#container::after{outline: 1px dotted red; display: block; clear: both; content: ''; }
#footer{background-color: #f5f6f7;}

 

인데... 

#container::after{outline: 1px dotted red; display: block; clear: both; content: ''; }

가 

display: block; clear: both; content: '';

이 부분이 영역 잡아주는? 그러니까 clear:both 해주는? 그런 거라고 한다..

float의 특성때문에.

float가 똑 떼다가 튀어나오게 하는거기 때문에 좀.. 자리를 잡지 않는다고 할까? 기존의 것들이랑 별개의 것들이라고 여기기 때문에.. 별개라기 보다는 그 흐름에서 뺀다.

 

마치 포토샾 레이어 처럼 위층의 ..

 

어 float는 기존의 흐름에서 벗어나게 시킨다. 그래서 float fixed 등을 이용해 어느 한 쪽에 고정도 시킬 수 있는거고,

즉 .wrap의 자식 요소에서 벗어난 느낌이랄까..? 그러니까 css에서 지정하는 용도로는 사용할 수 있지만, .wrap 입장에서 감쌀 자식들이 없기 때문에, 높이가 0이 된다. 그래서 배경색을 지정해도 아무것도 칠해지지 않는 것이다. 칠할 높이가 존재하지 않아서. 

 

#container::after{display: block; clear: both; content: ''; }

이거는 after, 후에 블록요소, clear: both로

 

clear: both는 일단 말 그대로 양쪽을 clear 시키고, 대신 문서흐름 상 위쪽의 다음 요소로 이동 시키는 것이다. 즉 float를 통해 문서흐름 상 벗어나게 시켰다면, 이 clear: both로 다시 문서흐름 상에 집어넣을 수 있다.

근데 양쪽을 clear, 다 지워버리니, 딱 블럭요소가 자리를 차지하는거랑 같지 않은가?

그래서 display: block 하고, clear: both, 뭔가 자리를 인식할 컨텐츠를 집어넣기 위해 content: ""하고, display:block하면 container를 문서 흐름상의 한 공간으로 인식시킬 수 있다. 

이렇게 안하면 문서흐름 상 자리를 차지하지 않기 때문에 의도한 바처럼 나타나지 않을 수 있다.

 

여튼 문서 흐름 상 자리를 차지 시키기 위한 삼종세트.

#container::after{display: block; clear: both; content: ''; }

 

float는 원래 이미지와 그림의 정렬을 위해서 있던 거임

 

형제요소에 clear: both; 줘도 같은 효과 나옴

 

clear: both는 float를 상속받지 않겠다는 거임

'프론트엔드-코드 > CSS' 카테고리의 다른 글

메뉴영역은 보통 높이까지 지정함.  (0) 2023.07.17
float 해제방법 5가지  (0) 2023.07.17
가상클래스 선택자  (0) 2023.07.12
선택자 2  (0) 2023.07.12
선택자  (0) 2023.07.11