ReactでMaterial UI(MUI)を使って開発していると、頻繁に登場するのがBox
、Container
、Paper
、Stack
といったラッパー系コンポーネントです。.
なかでも特に便利なのがBox
コンポーネント。ちょっとしたスタイルを付けたいときや、レイアウトを調整したいときに重宝します。
この記事では、Reactの『Material UI(MUI)のBoxコンポーネント』について、以下の内容をサンプルコードを用いてわかりやすく解説します。
- Material UIの
Box
コンポーネントとは? - Material UIの
Box
コンポーネントの使い方 component
属性でHTMLタグを変更する方法Box
コンポーネントの内部的な構造(どう描画されているのか?)
Material UIのBoxコンポーネントとは?
Box
コンポーネントは、Material UIが提供するスタイル可能な汎用コンテナです。
基本的にはHTMLの<div>
のように使えますが、以下のような特徴があります。
sx
属性でスタイルを簡単に指定できる(CSS-in-JS)- MUIのテーマ(spacing、paletteなど)と連携
- レスポンシブや擬似クラス(
:hover
等)にも対応 component
属性でHTMLタグを自由に切り替え可能
つまり、Box
コンポーネントはスタイルを柔軟に設定できる便利なdiv
と思ってOKです。
Material UIのBoxコンポーネントの使い方
Material UI(MUI)を利用するためには、Material UIとEmotionをReactプロジェクトにインストールする必要があります。プロジェクト配下で以下のコマンドを実行してインストールしましょう。
Material UIとEmotionをインストールするコマンド
npm install @mui/material @emotion/react @emotion/styled
Material UIは内部的にEmotionというスタイリングライブラリを使用しているので、@emotion/react
と@emotion/styled
をインストールしています。なお、Emotionは、JavaScriptでCSSを記述するために作られたCSS-in-JSライブラリです。
以下に、Material UIのBox
コンポーネントを使用したシンプルなサンプルコードを示しています。
import { Box } from '@mui/material';
function App() {
return (
<Box sx={{ p: 2, bgcolor: 'lightgray' }}>
これはBoxの中身です
</Box>
);
}
export default App;
このコードでは、以下のようなスタイルが適用されます。
p: 2
:paddingがMUIのテーマに基づいて適用されます(theme.spacing(2)
)bgcolor: 'lightgray'
:背景色が設定されます
Box
コンポーネントは通常の<div>
タグと同じように使えますが、sx
プロップを使うことで柔軟かつ直感的にスタイルを設定できるのが最大の魅力です。
なお、上記のサンプルコードを<div>
タグで書くと以下の様になります。
import { Box } from '@mui/material';
function App() {
return (
<div style={{ padding: '16px', backgroundColor: 'lightgray' }}>
これはBoxの中身です
</div>
);
}
export default App;
MUIのspacing(1)
は8pxに設定されているのがデフォルトです(theme.spacing(1) = 8px
)。したがって、p: 2
は padding: 16px
に相当します。
component属性でHTMLタグを変更する方法
Box
コンポーネントはデフォルトでは<div>
として描画されますが、component
属性を使うと他のHTMLタグにも変更可能です。
たとえば、セクション用の<section>
タグにしたい場合は以下のように記述します。
<Box component="form">
<Box component="img" alt="" src=""/>
<Box component="span"/>
<Box component="a" href=""/>
<Box component="strong" href=""/>
<Box component="h1" href=""/>
他にもこんな例があります。
<Box component="form">...</Box>
<Box component="img" src="..." alt="画像" />
<Box component="a" href="#">リンク</Box>
<Box component="h1">見出し</Box>
Boxコンポーネントの内部的な構造(どう描画されているのか?)
Box
コンポーネントは、次のようなシンプルな<div>
要素として描画されます。
<div class="MuiBox-root">
<!-- ここに中身が入る -->
</div>
MUIが自動でMuiBox-root
というクラスを付けてくれます。スタイルはテーマやsx
プロップを通して適用されます。
本記事のまとめ
この記事では、Reactの『Material UI(MUI)のBoxコンポーネント』について、以下の内容を説明しました。
- Material UIの
Box
コンポーネントとは? - Material UIの
Box
コンポーネントの使い方 component
属性でHTMLタグを変更する方法Box
コンポーネントの内部的な構造(どう描画されているのか?)
お読み頂きありがとうございました。
公式ページ
Material UIのBox
コンポーネントについて、詳しく知りたい方は以下の公式ページを参考にしてください。