Korean_hamster
지현의 개발자 성장과정
Korean_hamster
전체 방문자
오늘
어제
  • 분류 전체보기 (122)
    • Front-End Developer (79)
      • Project (12)
      • HTML (8)
      • CSS (17)
      • Computer Science (9)
      • JavaScript (20)
      • React (13)
    • 이런저런 생각 (7)
    • 주간 성장회고 (24)
    • English (0)
    • 리뷰 (2)
    • Books (5)

블로그 메뉴

  • 방명록

공지사항

인기 글

태그

  • HTML
  • fetch
  • 깃
  • 프론트앤드
  • 비전공개발자
  • 멋사
  • 면접관님
  • 프론트앤드스쿨
  • CS
  • 깃헙
  • 반응형웹
  • flex
  • 리액트
  • AtomicHabits
  • 라우터
  • 멋쟁이사자처럼
  • js
  • CSS
  • 비전공자개발자
  • sass

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Korean_hamster
Front-End Developer/CSS

니가 누구던지 센터로 가버려 - CSS 중앙정렬 4가지 방법

니가 누구던지 센터로 가버려 - CSS 중앙정렬 4가지 방법
Front-End Developer/CSS

니가 누구던지 센터로 가버려 - CSS 중앙정렬 4가지 방법

2022. 4. 7. 23:16

CSS에서의 가운데정렬이란 초심자에게 가장 헷갈리는 컨셉 중 하나이다.

인라인요소/블럭라인 요소에 따라 다르고, 또 같은 속성이라 하더라도 상황에 따라 되는게 있고 안되는게 있다(?)

 

오늘은 딱, 깔끔하게, 

거의 모든 상황에서 먹히는 4가지 중앙정렬 방법을 정리해보려 한다.

이 중에 상황에 따라+선호에 따라 맞춰 사용하면 되겠다.

 


전제조건

 

  • 부모 div class="container" 안에 자식 div="box-1"을 만들었다.
  • 정확한 결과를 위해, 적용된 마진 패딩값을 0으로 설정하고, box-sizing: border-box;를 준다.
  • 뷰포트 안 어디라도 이동이 가능하기 위해 부모 cotainer div의 height를 100vh로 설정했다.
<div class="container">
 <div class="box-1"></div>
</div>
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  height: 100vh;
}

.box-1 {
  height: 120px;
  width: 120px;
  background-color: skyblue;
  border: 2px solid black;
  
}

완성! 중앙으로 보내보자.


1. Flexbox 이용하기

 

  • 부모 container 에 display:flex를 적용해 준 다음
  • 메인축의(가로선)을 기준으로 중간으로 보내버리는 justify-content: center; 와
  • 반대축의(세로선)을 기준으로  중간으로 보내는 align-items: center; 를 적용한다.
.container {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

 

 

 

 

flex에 관해서는

https://jihyun-hamster.tistory.com/37  Flex 별 거 아냐 - 부모요소 편

(자식요소편은 업로드 예정)

포스팅이 있으니 참고하시라.

 


2. Grid 이용하기

 

  • 부모 container 에 display:grid를 적용해 준 다음,
  • 메인축의(가로선)을 기준으로 중간으로 보내버리는 justify-content: center; 와
  • 반대축의(세로선)을 기준으로  중간으로 보내는 align-items: center; 를 적용한다.

 

 

.container {
height: 100vh;
display: grid;
justify-content: center;
align-content: center;
}

 

 


3. Position 이용하기

 

Position은 부모요소에 position: relative; / 자식요소에 position: absolute; 속성을 부여하며

이제 여기(부모요소)가 니 무대야~ 여기 안에서만 놀아~ 라고 공간을 한정해주는 것이다.

 

그다음 중앙정렬을 위해서, 자식요소에

top: 50%; 을 주어 위에서부터 50%만큼(무대의 절반만큼) 밑으로 내려오게 해주고,

left: 50%; 을 주어 왼쪽에서부터 50%만큼 오른쪽으로 오게 해주면 가운데에 오지 않을까?

 

.box-1 {
  height: 120px;
  width: 120px;
  background-color: skyblue;
  border: 2px solid black;
  position: absolute;
  top: 50%;
  left: 50%;
}

아니다. 박스는 아래와 같은 이상한 위치로 오게 된다.

이는 div박스의 특성 때문인데,

div박스는 '왼쪽 위 모서리'가 센터로 지정되어있다.

그럼 이 박스를 왼쪽 위로 어느정도 옮겨주어 박스의 중앙부분이 중심으로 오도록 해야겠지?

 

이를 해결하기 위해서는 transform: translate(-50%, -50%) 코드를 추가해주어야 한다.

.box-1 {
  height: 120px;
  width: 120px;
  background-color: skyblue;
  border: 2px solid black;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%)
}

사실 이  transform: translate(-50%, -50%)이 이해가 되질 않아 정말 많은 설명과 문서를 뒤졌는데, 가장 깔끔한 설명은 stack overflow에서 찾았다.

https://stackoverflow.com/questions/46184458/transform-translate-50-50/46184660#:~:text=The%20%2D50%25%20transform%20basically%20means,that%20in%20the%20y%2Daxis.

 

쉽게 말하자면

  • 내 너비의 50%만큼만 x축을 따라서 왼쪽으로 옮겨줘!
  • 내 높이의 50%만큼만 y축을 따라서 위로 옮겨줘!

라는 의미인 거다.

왼쪽 위로 내 반만큼만 옮겨줘!

 

 

*추가

 

마찬가지로 만약 박스를 수평선 안에서 가운데 오게하고 싶을 때는

역시나 같은 방법으로 transform: translate(-50%)을 줘서 왼쪽으로 박스너비의 반만큼 이동시켜주면 깔끔하게 해결된다!

(수직선도 마찬가지겠죠?)

 


4.  Margin 이용하기

 

  • 마진을 이용해서 가운데정렬을 할 때에는, 무조건! 부모 요소에 display: flex;를 주고 시작하자. 
  • margin: auto; 를 주면 부모요소와 자식요소간의 빈 공간을 자동으로 차지하게 되어 중앙정렬이 된다.

 

 


어느 상황에서 어느 중앙정렬이 가장 좋은지는 사실 경험치가 쌓여야만 한다고 생각한다.

하지만 위의 4가지 방식은 CSS를 다루는 데에 있어서 핵심적이기 때문에 꼭! 습득해두어야겠다.

 

아래는 큰 도움이 된 포스팅 링크와 영상(같은분)을 추가한다.

https://www.freecodecamp.org/news/how-to-center-objects-using-css/

 

How to Center Anything in CSS Using Flexbox and Grid ✨

Today I'm gonna show you how you can center and align your content with CSS. Along the way, we'll look at various alignment techniques. So, let's get started! 🥇 Table of Contents -> * How to Use Flexbox to * center anything horizontally * center

www.freecodecamp.org

https://www.youtube.com/watch?v=RTEzXS_CT5w 

 

저작자표시 (새창열림)

'Front-End Developer > CSS' 카테고리의 다른 글

배운 flex로 있어보이는 반응형 Nav 바 만들어보기  (2) 2022.04.10
Flex 별 거 아냐 - 자식요소편  (0) 2022.04.09
Flex 별 거 아냐 - 부모요소 편  (2) 2022.04.07
Let's Conquer CSS Margin Collapse  (4) 2022.04.06
How to move bullet points in css?  (0) 2022.04.02
  • 전제조건
  • 1. Flexbox 이용하기
  • 2. Grid 이용하기
  • 3. Position 이용하기
  • 4.  Margin 이용하기
Korean_hamster
Korean_hamster
Keep pushing myself to the limits

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.