[CSS] 다양한 중앙 정렬 방법

yeols·2023년 9월 2일

HTML + CSS

목록 보기
1/2

빔캠프 당신은..

나근 나근한 목소리로 급하지 않게 설명해 주시는 빔캠프님의 유튜브 라이브에서
다양한 block의 중앙정렬 방법을 알려주셨다.

매번 중앙 정렬하면 margin: 0 auto;text-align: center;, flex, grid만 사용할 줄 알았지 다른 방법은 필요 없을 줄 알았다.
거기다가 자주 쓰던 flex를 내가 생각하지 못하는 방법으로 중앙 정렬 시킬 수 있었다.

예제에 사용했던 html

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CONF</title>
    <link rel="stylesheet" href="css/styles.css">
  </head>
  <body>
    <div class="app">
      APP
    </div>
  </body>
</html>

본격 .app을 중앙으로 옮겨라! 가 시작된다.

position absolute 이용한 방법

.app {
  box-shadow: inset 0 0 20px red;
  width: 850px;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

위 방법은 positionabsolute로 바꾸어 lefttop50%를 주고, translate(-50%, -50%)를 주어 중앙정렬이 가능하게 만들었다.

또 다른 방법

.app {
  box-shadow: inset 0 0 20px red;
  position: absolute;
  inset: 0;
  width: 640px;
  height: 480px;
  margin: auto;
}

블록 레벨에서는 한 라인만 자신의 영역이기 때문에 마진 좌우만 auto가 먹히지만 inset:0 (left, right, top, bottom)이면 모든 화면의 영역이 자신의 영역이 되므로 마진 상하 좌우 auto가 먹을 수 있다.

flex를 이용한 방법

최근에는 보통 flexgrid를 많이 사용하는 것으로 알고있기에 크게 신경안쓰고 있었는데 내가 생각하지 못한 방법을 소개해 주셨다.

보통 내가 쓰는 flex 방법

body{
  display: flex;
  height: 100vh;
  justify-content: center;
  aligin-item: center
}

.app{
  box-shadow: inset 0 0 20px red;
  width: 600px;
  height: 400px;
}

위에 소개한 3가지 방법 모두 중앙 정렬이 가능하지만 브라우저의 크기가 컨텐츠보다 작아지면 위아래 모두 화면 밖으로 나가는 문제가 있다.

이를 보완해줄 방법이다.

body{
  display: flex;
  height: 100vh;
}

.app{
  box-shadow: inset 0 0 20px red;
  width: 600px;
  height: 400px;
  margin: auto auto;
}

그렇다. justify-content: centeraligin-item: center 를 지우고 부모의 height100vh를 줘서 .appmargin: auto auto;를 사용하여 중앙정렬을 할 수 있다.

화면이 작아졌을때 margin이 0이 되고 .app 상단 오른쪽끝에 붙어 상단 컨텐츠가 잘리는 상황이 없어진다. 그리고 스크롤을 만들어 하단으로 스크롤 할 수 있게 처리할 수 있다.!

정말 좋은 정보를 얻은거 같다.
이번주 주말은 성공한 주말인듯 하다. 😃

profile
흠..

0개의 댓글