Sass와 함께 사용하기
Sass와 함께 사용하기
이 가이드는 Sass를 postcss-preset-mantine과 함께 사용하는 방법을 설명해요. mantine.dev 웹사이트의 예시들은 postcss-preset-mantine만 사용한다는 점에 주의하세요 – Sass와 함께 쓰려면 수정해야 해요.
출처: 문서
본문
Sass modules
Sass modules를 CSS modules처럼 사용할 수 있어요:
-
파일에
*.module.scss/*.module.sass확장자를 사용해 modules를 활성화해요 -
전역 스타일에는
*.scss/*.sass확장자를 사용해요
Vite와 함께 사용
sass를 설치해요:
yarn add --dev sass-embedded
vite.config.js 파일에 Mantine 리소스를 추가해요:
import path from 'node:path';
import react from '@vitejs/plugin-react';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [react()],
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler',
additionalData: `@use "${path.join(process.cwd(), 'src/_mantine').replace(/\\\\/g, '/')}" as mantine;`,
},
},
},
});
src/_mantine.scss 파일을 만들어요:
@use 'sass:math';
// Define variables for your breakpoints,
// values must be the same as in your theme
$mantine-breakpoint-xs: '36em';
$mantine-breakpoint-sm: '48em';
$mantine-breakpoint-md: '62em';
$mantine-breakpoint-lg: '75em';
$mantine-breakpoint-xl: '88em';
@function rem($value) {
@return #{math.div(math.div($value, $value * 0 + 1), 16)}rem;
}
@mixin light {
[data-mantine-color-scheme='light'] & {
@content;
}
}
@mixin dark {
[data-mantine-color-scheme='dark'] & {
@content;
}
}
@mixin hover {
@media (hover: hover) {
&:hover {
@content;
}
}
@media (hover: none) {
&:active {
@content;
}
}
}
@mixin smaller-than($breakpoint) {
@media (max-width: $breakpoint) {
@content;
}
}
@mixin larger-than($breakpoint) {
@media (min-width: $breakpoint) {
@content;
}
}
// Add direction mixins if you need rtl support
@mixin rtl {
[dir='rtl'] & {
@content;
}
}
@mixin ltr {
[dir='ltr'] & {
@content;
}
}
완료! 이제 breakpoint 변수, rem 함수, hover, light/dark 믹스인을 사용할 수 있어요:
// example.module.scss
.title {
// light-dark function is handled by PostCSS
color: light-dark(
var(--mantine-color-black),
var(--mantine-color-white)
);
font-size: mantine.rem(100px);
font-weight: 900;
letter-spacing: mantine.rem(-2px);
@include mantine.light {
background-color: red;
}
@include mantine.dark {
background-color: blue;
}
@include mantine.smaller-than(mantine.$mantine-breakpoint-md) {
font-size: mantine.rem(50px);
}
}
Next.js와 함께 사용
sass를 설치해요:
yarn add --dev sass-embedded
next.config.mjs 파일에 Mantine 리소스를 추가해요:
import path from 'node:path';
export default {
// ...other config
sassOptions: {
implementation: 'sass-embedded',
additionalData: `@use "${path.join(process.cwd(), '_mantine').replace(/\\\\/g, '/')}" as mantine;`,
},
};
프로젝트의 루트 폴더에 _mantine.scss 파일을 만들어요:
@use 'sass:math';
// Define variables for your breakpoints,
// values must be the same as in your theme
$mantine-breakpoint-xs: '36em';
$mantine-breakpoint-sm: '48em';
$mantine-breakpoint-md: '62em';
$mantine-breakpoint-lg: '75em';
$mantine-breakpoint-xl: '88em';
@function rem($value) {
@return #{math.div(math.div($value, $value * 0 + 1), 16)}rem;
}
@mixin light {
[data-mantine-color-scheme='light'] & {
@content;
}
}
@mixin dark {
[data-mantine-color-scheme='dark'] & {
@content;
}
}
@mixin hover {
@media (hover: hover) {
&:hover {
@content;
}
}
@media (hover: none) {
&:active {
@content;
}
}
}
@mixin smaller-than($breakpoint) {
@media (max-width: $breakpoint) {
@content;
}
}
@mixin larger-than($breakpoint) {
@media (min-width: $breakpoint) {
@content;
}
}
// Add direction mixins if you need rtl support
@mixin rtl {
[dir='rtl'] & {
@content;
}
}
@mixin ltr {
[dir='ltr'] & {
@content;
}
}
완료! 이제 breakpoint 변수, rem 함수, hover, light/dark 믹스인을 사용할 수 있어요:
// example.module.scss
.title {
// light-dark function is handled by PostCSS
color: light-dark(
var(--mantine-color-black),
var(--mantine-color-white)
);
font-size: mantine.rem(100px);
font-weight: 900;
letter-spacing: mantine.rem(-2px);
@include mantine.light {
background-color: red;
}
@include mantine.dark {
background-color: blue;
}
@include mantine.smaller-than(mantine.$mantine-breakpoint-md) {
font-size: mantine.rem(50px);
}
}