rem, em, px 단위
rem, em, px 단위
Mantine 컴포넌트는 크기 관련 스타일(margin, padding, width 등)을 모두 rem 단위로 적용해요. 기본적으로 1rem은 대부분 브라우저의 기본 설정인 16px로 간주되며, 모든 컴포넌트는 사용자의 브라우저 font-size 설정 또는 html/:root 요소의 font-size에 맞춰 자동으로 크기가 조정돼요.
출처: 문서
본문
rem 단위
Mantine의 모든 컴포넌트는 크기 스타일(margin, padding, width 등)을 적용할 때 rem 단위를 사용해요. 기본적으로 1rem은 대부분 브라우저의 기본값인 16px로 간주해요. 모든 컴포넌트는 사용자의 브라우저 font-size 설정 또는 html/:root 요소의 font-size에 따라 크기가 조정돼요.
import { Slider } from '@mantine/core';
function Demo() {
return (
<Slider
onChange={(value) => {
document.documentElement.style.fontSize = `${value}%`;
}}
/>
);
}
rem 단위 조정
:root/html 요소의 font-size를 바꾸면서 Mantine 컴포넌트 크기도 함께 유지하고 싶다면, theme에 scale을 1 / htmlFontSize 값으로 설정하면 돼요.
예를 들어 html font-size를 10px로 설정하고 Mantine 컴포넌트를 그에 맞게 조정하려면 scale을 1 / (10 / 16)(16은 기본 font-size) = 1 / 0.625 = 1.6으로 설정하면 돼요:
:root {
font-size: 10px;
}
import { createTheme, MantineProvider } from '@mantine/core';
const theme = createTheme({
scale: 1.6,
});
function Demo() {
return (
<MantineProvider theme={theme}>
{/* Your app here */}
</MantineProvider>
);
}
em 단위
em 단위는 미디어 쿼리에서 rem 단위와 같은 방식으로 사용되지만, html/:root 요소에 지정된 font-size의 영향을 받지 않아요. 1em은 16px로 간주해요.
px 변환
일부 Mantine 컴포넌트의 props에는 숫자를 사용할 수 있어요. 숫자는 px로 취급되어 rem으로 변환돼요. 예를 들어:
import { ColorSwatch } from '@mantine/core';
function DemoPx() {
// ColorSwatch 크기를 px로 지정하면 자동으로 rem으로 변환돼요
// 이 경우 ColorSwatch의 너비와 높이는 32px / 16 = 2rem이 돼요
return <ColorSwatch size={32} />;
}
function DemoRem() {
// 이 데모는 앞선 것과 동일한 크기를 가져요
return <ColorSwatch size="2rem" />;
}
같은 변환이 style props에서도 일어나요:
import { Box } from '@mantine/core';
function Demo() {
// width: calc(2rem * var(--mantine-scale))
// height: calc(1rem * var(--mantine-scale))
return <Box w={32} h={16} />;
}
rem, em 함수
@mantine/core 패키지는 px를 rem/em으로 변환하는 rem, em 함수를 내보내요:
import { em, rem } from '@mantine/core';
// 숫자와 px 단위 값은 rem으로 변환돼요
rem(32); // -> calc(2rem * var(--mantine-scale))
em(32); // -> 2em
rem('16px'); // -> calc(1rem * var(--mantine-scale))
em('16px'); // -> 1em
rem('2rem'); // -> 2rem
em('2rem'); // -> 2rem
rem('50%'); // -> 50%
em('50%'); // -> 50%
rem('5vh'); // -> 5vh
em('5vh'); // -> 5vh
// 혼합된 값도 rem으로 변환돼요
rem('16px 2rem'); // -> calc(1rem * var(--mantine-scale)) 2rem
rem을 px로 변환
rem/em을 px로 변환하려면 @mantine/core에서 내보내는 px 함수를 사용하면 돼요:
import { px } from '@mantine/core';
px('2rem'); // -> 32
px('10rem'); // -> 160
css 파일에서 rem/em 함수 사용
postcss-preset-mantine이 설치되어 있다면 css 파일에서 rem, em 함수를 사용할 수 있어요:
.demo {
font-size: rem(16px);
@media (min-width: em(320px)) {
font-size: rem(32px);
}
}
css 파일에서 px를 rem으로 자동 변환
css 파일에서 px를 rem으로 자동 변환하려면 postcss-preset-mantine 설정에서 autoRem 옵션을 활성화하면 돼요:
module.exports = {
plugins: {
'postcss-preset-mantine': {
autoRem: true,
},
},
};