2024. 9. 26. 18:13ㆍDevlog
제목을 어떻게 지어야 하나 많은 고민을 했다....
근데 단순히 저런 의미가 맞는 거 같다!
전체적인 웹을 디자인해놓고 보니 문득 콘텐츠가 너무 크다는 생각이 들었다
(폰트, 이미지포함).
그래서 단순히 마우스 휠로 축소를 해보니 괜찮은 느낌이었다.
문제는 만들어놓은 양이 꽤 돼서 하나하나 고치기도 힘든 느낌이었고,
단순히 전체 레이아웃을 축소하고 싶었다....
하지만 축소시도를 해보니 viewport만 축소돼서
콘텐츠는 그대로고 보이는 화면만 줄어들거나,
축소되어도 css폼이나 레이아웃은 그대로 따라가지 않아서 골치가 아팠다.
이런 식으로....
(gif파일의 출처는 아래 적어놨습니다)
내가 원하던 모습은 이거였다..
그러던 와중에
나를 구원해 줄
transform:scale() 기능을 알게 되었다!!!!!!!
(본론시작)
1. transform: scale()
1. transform: scale()을 활용한 중앙 정렬
transform: scale()의 기본 개념
transform: scale()은 요소의 크기를 조정하는 CSS 속성으로, 지정된 비율에 따라 요소를 확대하거나 축소할 수 있다. 이 속성을 사용할 때 요소의 크기가 변경되지만, 요소의 위치는 변하지 않는다. 따라서 요소를 축소하면서도
중앙에 정렬하려면 transform-origin 속성을 활용해 축소의 기준점을 설정하는 것이 중요하다.
아래는 React와 Styled-components 개발환경에서
transform: scale()으로 축소하면서 중앙에 정렬하는 예시이다.
transform: scale(0.5); 축소 비율
transform-origin: center; 축소의 기준점을 중앙으로 설정
margin: auto; 부모 컨테이너 내에서 중앙 정렬
import React from 'react';
import styled from 'styled-components';
// 중앙 정렬과 축소를 적용한 스타일 정의
const CenteredScaledDiv = styled.div`
width: 200px;
height: 200px;
background-color: #3498db;
transform: scale(0.5); /* 축소 비율 설정 */
transform-origin: center; /* 축소의 기준점을 중앙으로 설정 */
margin: auto; /* 부모 컨테이너 내에서 중앙 정렬 */
display: flex;
align-items: center;
justify-content: center;
`;
const App = () => {
return (
<CenteredScaledDiv>
축소된 중앙 요소
</CenteredScaledDiv>
);
};
export default App;
이 코드에서 transform: scale(0.5)는 요소를 50%로 축소하고,
transform-origin: center는 축소의 기준점을 중앙으로 설정한다
. 또한, margin: auto와 display: flex, align-items: center, justify-content: center를 사용하여
부모 컨테이너 내에서 요소가 중앙에 정렬되도록 했다.
(실제 코드에선 내가 컨테이너를 복잡하게 묶어놓은 이슈가 생겨서 몇 개를 제외하고 전체에 CSS를 입힌 후
개별적으로 CSS 입혔다.)
주요 속성 설명
- transform: scale(): 요소를 확대하거나 축소하는 CSS 속성.
- transform-origin: 변형의 기준점을 설정. center로 설정하면 요소의 중앙이 기준점이 된다.
- margin: auto: 부모 요소 내에서 자식 요소를 중앙에 정렬하는 데 사용한다.
2. zoom
1의 transform:scale 말고도 비슷한 기능의 zoom이라는 기능이 있다.
zoom의 기본 개념
zoom 속성은 요소의 크기를 조정하는 다른 방법으로, 주로 브라우저의 확대/축소 기능을 활용한다. 이 속성은 transform: scale()과는 다르게 표준 CSS 속성이 아니기 때문에 모든 브라우저에서 일관되게 동작하지 않을 수 있다. 하지만 간단한 축소 효과를 적용할 때 유용할 수 있다.
아래는 zoom을 사용하여 요소를 축소하면서 중앙에 정렬하는 예시이다.
zoom: 0.5; 축소 비율 설정
단순히 위의 코드를 붙이면 된다. 참 쉽다
import React from 'react';
import styled from 'styled-components';
// 중앙 정렬과 축소를 적용한 스타일 정의
const CenteredZoomedDiv = styled.div`
width: 200px;
height: 200px;
background-color: #e74c3c;
zoom: 0.5; /* 축소 비율 설정 */
margin: auto; /* 부모 컨테이너 내에서 중앙 정렬 */
display: flex;
align-items: center;
justify-content: center;
`;
const App = () => {
return (
<CenteredZoomedDiv>
축소된 중앙 요소
</CenteredZoomedDiv>
);
};
export default App;
zoom도 같은 방식으로 css문법을 작성하면 된다.
zoom:
브라우저의 확대/축소 기능을 사용하여 요소의 크기를 조정.
표준 CSS 속성은 아니며, 브라우저 호환성 문제가 있을 수 있다고 한다.
실제로 몇몇 부분에서는 zoom이 작동하지 않아, 본인은 1번 방법인
transform:scale() 방법으로 진행하였다!
요약
- transform: scale(): 표준 CSS 속성으로, 요소의 축소와 중앙 정렬을 유지하는 데 가장 적합하다. transform-origin을 활용해 축소의 기준점을 설정하고,
- margin: auto와 display: flex를 사용하여 부모 컨테이너 내에서 중앙 정렬을 보장한다.
- zoom: 특정 상황에서 사용할 수 있지만, 표준 CSS 속성이 아니기 때문에 브라우저 호환성 문제가 있을 수 있다. 가능하면 transform: scale()을 사용하는 것이 더 안전하다.
내가 딱 원하던 웹 화면이 마우스로 축소했을 때처럼
보이는 그 화면을 그대로 구현하게 해 주던 기능이었다.
앞으로 자주 사용할꺼같은 기능이다. 정상적이라면 전체적으로 css를 입힐 수 있어서
레이아웃 관리에도 좋을 거 같다는 생각이 들었다. (초보개발자의 생각이었습니다)
아래 블로그가 저의이해를 많이 도왔습니다. gif사진의 출처입니다
[React] 반응형으로 화면 비율 고정하기: 화면 크기가 변해도 해상도 유지하기
React로 게임 형식의 웹 프로젝트를 개발하면서 웹 페이지 반응형으로 고정 비율로만 화면이 보이게 하는 기능을 개발했다.이 기능을 개발하게 된 이유는 사실 작년에 비슷한 게임 형식의 웹 페
velog.io
'Devlog' 카테고리의 다른 글
GSAP란 무엇인가? -녹색 양말 만화 이음마당 (12) | 2024.10.02 |
---|---|
라이브러리 적용 방법: CDN, npm 설치, 다운로드 설치의 차이점 (6) | 2024.09.28 |
React] CRA에서 Vite로 마이그레이션 진행하기 (4) | 2024.09.24 |
CRA(Create React App) vs Vite (4) | 2024.09.20 |
Git에서 "LF will be replaced by CRLF" 경고 해결하기 (6) | 2024.09.19 |