動かざることバグの如し

近づきたいよ 君の理想に

Mantine UIのCSS変更方法3種類の比較

mantineでは、コンポーネントにスタイルを適用させるために、Style props, sx prop, Styles APIの3つの方法が用意されています。

それぞれの方法には、メリットとデメリットがあります。以下に、それぞれの方法の特徴と使い分けのポイントをまとめてみました。

Style props

Style propsは、コンポーネントのルート要素に対して、CSSプロパティとしてスタイルを指定することができるプロパティです。例えば、以下のように書くことで、Textコンポーネントに太字、背景色、上マージンを適用できます。

<Text fw={'bold'} bg="orange.1" mt={'sm'}>nyaa</Text>

メリット

  • Style propsは、簡単にスタイルを指定できるため、開発速度が速くなります。
  • Style propsは、レスポンシブなスタイルをオブジェクト構文で指定できるため、メディアクエリを書く必要がありません。
  • Style propsは、テーマから値を参照できるため、一貫性のあるデザインを実現できます。

デメリット

  • Style propsは、コンポーネントのルート要素にしか適用できないため、ネストされた要素に対してはStyles APIを使う必要があります。
  • Style propsは、CSSプロパティとしてスタイルを指定するため、カスタムなロジックや関数を使うことができません。
  • Style propsは、プロパティ名が短縮されているため、可読性や予測性が低くなる可能性があります。

sx prop

sx propは、コンポーネントのルート要素に対して、関数としてスタイルを指定することができるプロパティです。例えば、以下のように書くことで、Textコンポーネントに太字、背景色、上マージンを適用できます。

<Text sx={(theme) => ({ fontWeight: 'bold', backgroundColor: theme.colors.orange[1], marginTop: theme.spacing.sm })}>nyaa</Text>

メリット

  • sx propは、関数としてスタイルを指定できるため、カスタムなロジックや関数を使うことができます。
  • sx propは、テーマから値を参照できるため、一貫性のあるデザインを実現できます。
  • sx propは、CSSプロパティと同じ名前を使うため、可読性や予測性が高くなります。

デメリット

  • sx propは、コンポーネントのルート要素にしか適用できないため、ネストされた要素に対してはStyles APIを使う必要があります。
  • sx propは、関数としてスタイルを指定するため、開発速度が遅くなる可能性があります。
  • sx propは、レスポンシブなスタイルをオブジェクト構文で指定することができません。

Styles API

Styles APIは、コンポーネント内の任意の要素に対して、classNamesやstylesプロパティを使ってスタイルを上書きすることができるAPIです。例えば、以下のように書くことで、Textコンポーネントに太字、背景色、上マージンを適用できます。

import { Text, createStyles } from '@mantine/core';

const useStyles = createStyles((theme) => ({
  mytext: {
    fontWeight: 'bold',
    backgroundColor: theme.colors.orange[1],
    marginTop: theme.spacing.sm
  }
}));

const Sample = () => {
  const { classes } = useStyles();
  return (
    <Text className={classes.mytext}>nyaa</Text>
  );
};

メリット

  • Styles APIは、コンポーネント内の任意の要素に対してスタイルを上書きできるため、柔軟性が高くなります。
  • Styles APIは、createStyles関数を使ってスタイルを定義できるため、カスタムなロジックや関数を使うことができます。
  • Styles APIは、テーマから値を参照できるため、一貫性のあるデザインを実現できます。

デメリット

  • Styles APIは、コンポーネントのドキュメントを参照しながらスタイル名を探す必要があります。
  • Styles APIは、classNamesやstylesプロパティを使ってスタイルを上書きするため、開発速度が遅くなる可能性があります。
  • Styles APIは、レスポンシブなスタイルをオブジェクト構文で指定することができません。

以上が、mantineの3つのスタイル適用方法の特徴と使い分けのポイントです。Style propsは、簡単にレスポンシブなスタイルを指定したい場合に便利です。sx propは、カスタムなロジックや関数を使ってスタイルを指定したい場合に便利です。Styles APIは、ネストされた要素に対してもスタイルを上書きしたい場合に便利です。それぞれの方法にはメリットとデメリットがあるので、自分のニーズや好みに合わせて選択してください。