본문 바로가기

HTML, CSS

(CSS) 자식 컨테이너에게 padding/margin을 주고도 스크롤이 생기지 않게 하는 방법

 

 

화면을 100%로 구성하는 와중에

 

자식 컨테이너에게 padding 혹은 margin을 주고 싶은 경우가 있다. 

 

하지만 이런 경우, 아래와 같이 코드를 작성하면 스크롤이 생겨버린다. 

 

먼저 아래 html, css를 적용하면 스크롤이 생기는 것을 확인할 수 있다.

 

<body>
  <div class="parents">
    <div class="child"></div>
  </div>
</body>
.parents{
  width: 100vw;
  height: 100vh;
}

.child{
  width: 100%;
  height: 100%;
  margin: 10px;
  border: 2px solid black;
}

 

 

 

부모 컨테이너에게 padding 을 주는 경우

기본 css를 리셋한 뒤, box-sizing: border-box;를 사용한다.

 

기본 브라우저 스타일로 마진과 패딩이 주어지기에 이를 모두 0으로 리셋하거나 reset.css를 사용하고,

 

box-sizing: border-box을 사용해 패딩 혹은 마진을 포함한 크기를 계산하면 스크롤이 생기는 것을 방지할 수 있다.

* {
  margin: 0; /*기본 마진 초기화*/
  padding: 0; /*기본 패딩 초기화*/
}

.parents{
  width: 100vw;
  height: 100vh;
  box-sizing: border-box; /* 중요 */
  padding: 10px; /* 패딩 적용 */
}

.child{
  width: 100%;
  height: 100%;
  border: 2px solid black;
}

 

 

 

자식 컨테이너에게 margin 을 주는 경우

부모 컨테이너를 플렉스 컨테이너로 설정해 자식 컨테이너가 부모 컨테이너의 정중앙에 위치하게 한다.

 

이로써 자식 컨테이너가 부모 컨테이너를 넘지 않게 된다.

 

또한 자식 컨테이너의 크기를 마진크기 * 2 만큼 빼줘야 잘 정렬된다.

* {
  margin: 0;
  padding: 0;
}

.parents{
  width: 100vw;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.child{
  width: calc(100% - 20px); /* 부모 컨테이너의 너비에서 마진을 뺀 값 */
  height: calc(100% - 20px); /* 부모 컨테이너의 높이에서 마진을 뺀 값 */
  margin: 10px; 
  border: 2px solid black; /* 마진 적용 */
}