๐Ÿ‘€์ปดํฌ๋„ŒํŠธ

  1. mantine ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•˜๊ณ  ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ docs props๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ style props๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.

    Style props

  2. ๋Œ€ํ‘œ props

    import { Box } from '@mantine/core';
    
    // margin-top: theme.spacing.xs
    <Box mt="xs" />
    
    // margin-top: theme.spacing.md * -1
    <Box mt="-md" />
    
    // margin-top: auto
    <Box mt="auto" />
    
    // margin-top: 1rem
    <Box mt={16} />
    
    // margin-top: 5rem
    <Box mt="5rem" />
    
    // color: theme.colors.blue[theme.fn.primaryShade()]
    <Box c="blue" />
    
    // background: theme.colors.orange[1]
    <Box bg="orange.1" />
    
    // color: theme.colorScheme === 'dark' ? theme.colors.dark[2] : theme.colors.gray[6]
    <Box c="dimmed" />
    
    // background: #EDFEFF
    <Box bg="#EDFEFF" />
    
    // background: rgba(0, 34, 45, 0.6)
    <Box bg="rgba(0, 34, 45, 0.6)" />
    
  3. props์— {}๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด px๊ธฐ์ค€ ๊ฐ’์ด rem์œผ๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

    // X
    <Box w="1rem" />
    <Box w="16px" />
    // O
    <Box w={16} />
    
  4. props color๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ useMantineTheme() ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

    const TempLoader = () => {
      const theme = useMantineTheme();
      const { colorScheme } = useMantineColorScheme();
      const dark = colorScheme === 'dark';
    
      return (
        <Conatiner>
          <Loader color={dark ? theme.colors.gray[0] : theme.colors.dark[8]} />
        </Conatiner>
      );
    };
    
  5. style props๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์Šคํƒ€์ผ์€ styled ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  6. <MantineProvider />๋กœ theme์„ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— styled ์ปดํฌ๋„ŒํŠธ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    // example
    const Temp = styled(Container)`
    	// ...
    	background-color: `${(({theme}) => theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[0])}`;
    `
    
  7. styled ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋Š” rem() ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ px to rem(vscode extention)์„ ํ™œ์šฉํ•˜์—ฌ px์„ rem์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  8. styled ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” css variable์„ ํ™œ์šฉํ•œ๋‹ค.

    // example
    const Temp = styled(Container)`
    	// ...
    	padding: var(--mantine-spacing-md);
    `
    
  9. mantine์˜ ์ค‘์ฒฉ๋œ ์ปดํฌ๋„ŒํŠธ(nested elements, ex: Modal, Slide ๋“ฑ)์€ docs์— ์žˆ๋Š” props๋ฅผ ๊ผญ ์‚ดํŽด๋ณด๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. static selector๋กœ ์ปดํฌ๋„ŒํŠธ Styles API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    Styled components

    MantineProvider

  10. Mantine UI์— ์žˆ๋Š” ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ, ์œ„ ์ปจ๋ฒค์…˜์— ๋งŒ์กฑํ•˜๋„๋ก ๋ณ€ํ˜•ํ•œ๋‹ค.

๐Ÿ–ผ๏ธํ…Œ๋งˆ

  1. ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ useMantineColorScheme() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ๊ฑด๋ถ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    // example
    const Temp = () => {
    	const { colorScheme } = useMantineColorScheme()
    	const dark = colorScheme === 'dark'
    	
    	return (
    		<Container>
    			<Button color={dark ? 'gray' : 'black'} />
    		</Container>
    		)
    }
    
  2. props๋กœ ํ•ด๊ฒฐ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ (ex: backgroundColor, ์ปฌ๋Ÿฌ๋ฅผ theme.colors์˜ key๋งŒ ํ—ˆ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋“ฑ)

    // example
    const Temp = styled(Container)`
    	// ...
    	background-color: `${({theme}) => theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[0])}`;
    `
    

๐Ÿ”ŒReact Router