`position: absolute`인 요소를 화면에 배치하는 방법에 대해서 면접 질문을 받았는데,,, 적절히 대답을 하지 못했다.
프로젝트를 하면서 `display: flex; justify-contents: center; align-item: center`를 주로 사용했기 때문에.
질문을 받고 내가 생각한 방법은 아래와 같다.
div {
position: absolute;
top: 50%;
left: 50%;
width: 100px;
height: 100px;
}
이 방법에 문제는 좌측 상단이 화면 중앙에 오지 실제 div 태그가 화면 중앙에 위치하지는 않는다.
이를 듣고 다시 생각한 방법은 아래와 같다.
.div {
position: absolute;
top: calc(50% - 100px);
left: calc(50% - 100px);
width: 100px;
height: 100px;
}
`calc`를 사용해서 width와 height를 빼주면 화면 중앙에 위치할 것이라고 생각했지만, 이 역시도 제대로 위치하지 않는다.
그리고 이 방법의 문제는 width와 height가 반응형이라면? 그에 대해 적절히 대응하지 못할 것이다.
면접관은 두 번째 답변을 듣고 `transform`을 사용해서 배치한다고 말을 해줬다. 그래서 궁금해서 찾아봤다. 어떻게 작성하는지.
.div {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
이렇게 작성하면 화면 가운데 정확히 배치할 수 있다.
왜 그럴까?
우선, `transform`은 요소에 회전, 크기 조절, 기울이기, 이동 효과 등을 부여할 수 있도록 해준다.
`translate`은 요소의 수평/수직 위치를 조정해준다.
`position: absolute; top: 50%; left: 50%`로 요소의 좌측 끝을 화면 중앙에 배치하고
`translate`으로 배치된 요소의 수평/수직 위치를 이동한 %의 마이너스만큼 조정함으로써 가능하다.
'개발 > Front-end' 카테고리의 다른 글
[RN] RN 버전에 따른 안드로이드 앨범 접근 권한 문제 해결 (0) | 2023.02.17 |
---|---|
<hr> 태그, vw를 사용해서 부모 컴포넌트에 상관없이 width 할당하기 (0) | 2022.04.18 |
[이슈리포트] Next.js 프로젝트에서 도메인 별로 다른 정보 뿌려주기 (0) | 2022.04.04 |
[이슈리포트] i18n과 라우팅 변경하기 (0) | 2022.03.23 |
[TIL] react-router의 Link와 a 태그 (0) | 2021.11.05 |