【保存版】ReactでMaterial UI IconsのカラーをCSS、ThemeProvider、useStylesで変更する方法
Material UI Icons npmパッケージのカラーをReactでオーバーライトする方法
方法 1: CSSスタイルを使用する
- CSSファイルを作成し、Material UI IconsのCSSクラスセレクタを定義します。
- desired color を
color
プロパティに設定します。 - CSSファイルをReactコンポーネントにインポート**します。
// CSSファイル (styles.css)
.MuiIconButton-root.MuiIconButton-colorSecondary {
color: #f44336; /* 赤色 */
}
// Reactコンポーネント
import React from 'react';
import './styles.css';
const MyComponent = () => {
return (
<IconButton color="secondary">
<FavoriteIcon />
</IconButton>
);
};
方法 2: muiThemeProvider を使用する
muiThemeProvider
コンポーネントを使用して、Material UI コンポーネント全体のテーマを定義します。theme
プロパティにpalette
オブジェクトを設定します。palette
オブジェクト内にicons
プロパティを追加し、color
プロパティにdesired color を設定します。
import React from 'react';
import { ThemeProvider } from '@mui/material/styles';
import { createTheme } from '@mui/material/theme';
import FavoriteIcon from '@mui/icons-material/Favorite';
const theme = createTheme({
palette: {
primary: {
main: '#f44336', /* 赤色 */
},
icons: {
color: '#f44336', /* 赤色 */
},
},
});
const MyComponent = () => {
return (
<ThemeProvider theme={theme}>
<IconButton>
<FavoriteIcon />
</IconButton>
</ThemeProvider>
);
};
方法 3: useStyles フックを使用する
useStyles
フックを使用して、Material UI コンポーネント用のカスタムCSSクラスを生成します。styles
オブジェクト内にMuiIconButton-root
とMuiIconButton-colorSecondary
のCSSクラスセレクタを定義します。classes
プロパティを使用して、生成されたCSSクラスをReactコンポーネントに適用します。
import React from 'react';
import { makeStyles } from '@mui/material/styles';
import FavoriteIcon from '@mui/icons-material/Favorite';
const useStyles = makeStyles({
root: {
color: '#f44336', /* 赤色 */
},
});
const MyComponent = () => {
const classes = useStyles();
return (
<IconButton className={classes.root}>
<FavoriteIcon />
</IconButton>
);
};
これらの方法のいずれかを使用して、Material UI Icons npmパッケージのカラーをReactでオーバーライトすることができます。どの方法を選択するかは、プロジェクトのニーズと好みにより異なります。
補足
- Material UI Icons npmパッケージは、Sass をサポートしています。そのため、CSSファイルではなくSassファイルを使用してスタイルを定義することもできます。
方法 1: CSSスタイルを使用する
// CSSファイル (styles.css)
.MuiIconButton-root.MuiIconButton-colorSecondary {
color: #f44336; /* 赤色 */
}
// Reactコンポーネント
import React from 'react';
import './styles.css';
const MyComponent = () => {
return (
<IconButton color="secondary">
<FavoriteIcon />
</IconButton>
);
};
説明:
styles.css
という名前のCSSファイルを作成します。.MuiIconButton-root.MuiIconButton-colorSecondary
というCSSクラスセレクタを定義します。このセレクタは、color="secondary"
プロパティを持つ IconButton コンポーネントに適用されます。color
プロパティに#f44336
という値を設定します。これにより、アイコンの色が赤色になります。MyComponent
コンポーネントで、IconButton
コンポーネントにcolor="secondary"
プロパティを設定します。MyComponent
コンポーネントをインポートしてレンダリングします。
結果:
このコードを実行すると、FavoriteIcon
アイコンが赤色で表示されます。
方法 2: muiThemeProvider を使用する
import React from 'react';
import { ThemeProvider } from '@mui/material/styles';
import { createTheme } from '@mui/material/theme';
import FavoriteIcon from '@mui/icons-material/Favorite';
const theme = createTheme({
palette: {
primary: {
main: '#f44336', /* 赤色 */
},
icons: {
color: '#f44336', /* 赤色 */
},
},
});
const MyComponent = () => {
return (
<ThemeProvider theme={theme}>
<IconButton>
<FavoriteIcon />
</IconButton>
</ThemeProvider>
);
};
ThemeProvider
コンポーネントをインポートします。createTheme
関数を使用して、新しいテーマオブジェクトを作成します。palette
プロパティに、primary
とicons
という2つのサブプロパティを設定します。primary.main
プロパティに#f44336
という値を設定します。これにより、Material UI コンポーネント全体のデフォルトの色が赤色になります。MyComponent
コンポーネントで、ThemeProvider
コンポーネント内にIconButton
コンポーネントをレンダリングします。
方法 3: useStyles フックを使用する
import React from 'react';
import { makeStyles } from '@mui/material/styles';
import FavoriteIcon from '@mui/icons-material/Favorite';
const useStyles = makeStyles({
root: {
color: '#f44336', /* 赤色 */
},
});
const MyComponent = () => {
const classes = useStyles();
return (
<IconButton className={classes.root}>
<FavoriteIcon />
</IconButton>
);
};
useStyles
フックをインポートします。useStyles
フックを使用して、classes
というオブジェクトを生成します。classes
オブジェクト内にroot
というCSSクラスセレクタを定義します。このセレクタは、MyComponent
コンポーネント内の IconButton コンポーネントに適用されます。MyComponent
コンポーネントで、classes.root
クラスをIconButton
コンポーネントのclassName
プロパティに設定します。
**結果
React で Material UI Icons の色をオーバーライトするその他の方法
inlineStyles プロパティを使用する
import React from 'react';
import FavoriteIcon from '@mui/icons-material/Favorite';
const MyComponent = () => {
return (
<IconButton
style={{ color: '#f44336' }} /* 赤色 */
>
<FavoriteIcon />
</IconButton>
);
};
IconButton
コンポーネントにstyle
プロパティを追加します。- オブジェクト内に
color
プロパティを追加し、#f44336
という値を設定します。
SvgIcon コンポーネントを使用する
import React from 'react';
import SvgIcon from '@mui/material/SvgIcon';
const MyFavoriteIcon = (props) => {
return (
<SvgIcon {...props}>
<path d="M14.31 12.98c4.31-2.42 5.12-7.34 1.69-11.23C17.94 3.03 14.1 1.11 9.41 1.11C4.72 1.11 1.86 3.03 .77 5.45C-0.83 7.87 1.64 10.56 5.95 13.98l8.36 5.24z" fill="#f44336" /> /* 赤色 */
</SvgIcon>
);
};
const MyComponent = () => {
return (
<IconButton>
<MyFavoriteIcon />
</IconButton>
);
};
MyFavoriteIcon
という名前のカスタムコンポーネントを作成します。MyFavoriteIcon
コンポーネントで、SvgIcon
コンポーネントをprops
として受け取ります。
useMediaQuery フックを使用する
import React from 'react';
import { useMediaQuery } from '@mui/material/styles';
import FavoriteIcon from '@mui/icons-material/Favorite';
const MyComponent = () => {
const isDarkMode = useMediaQuery('(prefers-color: dark)');
const styles = {
root: {
color: isDarkMode ? '#f44336' : '#000000', /* ダークモード時は赤色、ライトモード時は黒色 */
},
};
const classes = useStyles(styles);
return (
<IconButton className={classes.root}>
<FavoriteIcon />
</IconButton>
);
};
isDarkMode
変数に、useMediaQuery
フックを使用して、現在のテーマがダークモードかどうかを判定します。styles
オブジェクト内にroot
というCSSクラスセレクタを定義します。color
プロパティに、isDarkMode
変数の値に基づいて条件分岐を設定します。
reactjs sass