汎用コンポーネントとしてBoxコンポーネントが用意されてます。これはスタイル調整用のプロパティを複数持ち、それらを組み合わせて主にレイアウト調整を行えます。
Boxコンポーネントは、以下のどちらかの方法で取り込んで使います。
import Box from '@material-ui/core/Box';
// import {Box} from '@material-ui/core';値の設定の仕方
また各プロパティは数値や文字列といった値の他に配列やオブジェクトも置けます。配列やオブジェクトにした場合、それはレスポンシブな CSS として解決されます。
例えば Material UI デフォルトのブレークポイントは以下の通りで、
const breakpoints = {
values: {
xs: 0,
sm: 600,
md: 960,
lg: 1280,
xl: 1920
}
};この時width: ['100%', 300]のように値を設定すると、xsサイズの時は'100%'、それ(sm)以上の時は、300pxのように解釈されます。配列だと続きのブレークポイントで解決されてしまいますが、mdから300pxにしたい場合はオブジェクトで以下のようにします。
また一部のプロパティは、テーマにある値が使えます。その場合 CSS で扱える値かテーマのパスを指定できます。例えばz-indexが設定できるzIndexプロパティはtheme.zIndexオブジェクトの値が使えます。これはデフォルトで以下のようなものになってます。
const zIndex = {
mobileStepper: 1000,
speedDial: 1050,
appBar: 1100,
drawer: 1200,
modal: 1300,
snackbar: 1400,
tooltip: 1500
};よってzIndexは(無意味に)以下のように使えます。
もしテーマにある値は配列の場合はそのインデックス値、関数の場合は引数を渡します。
Boxコンポーネントは以下のようなセクションに分類されるプロパティを持ってます。
Borders
Display (Flexbox)
Palette
Positions
Shadows
Sizing
Spacing
Typography
Borders
Borders は、要素の境界線に関するプロパティです。これには以下のようなプロパティがあります。
borderborderTopborderLeftborderRightborderBottomborderColorborderRadius
border
border系のプロパティは、CSS のborderが扱える値かtheme.bordersに定義済のキー名が渡せます。
borderColor
borderColorは CSS のborder-colorで扱える値かtheme.paletteに定義済みのキー名が渡せます。
borderRadius
borderRadiusは、CSS のborder-radiusで扱える値かtheme.shapeに定義済のキー名が渡せます。デフォルトでtheme.shapeにはborderRadius: 4という値が登録されているので、これを使えます。
Display
入れ物についてのBorders以下のようなプロパティが使えます。
displayoverflowtextOverflowvisibilitywhiteSpace
また厳密には Display の分類ではありませんが、以下のような Flexbox 用のプロパティもあります。
flexDirectionflexWrapjustifyContentalignItemsalignContentorderflexflexGrowflexShrinkalignSelf
これらに関して、関連するテーマ値はありません。
Palette
Borders以下のようなプロパティが使えますテキスト色と背景色のプロパティを持ちます。値には CSS の色値かtheme.platteの値が使えます。
colorbgcolor
Positions
positiontopleftrightbottomzIndex
zIndex以外は CSS て扱える値を渡します。
zIndex
zIndexには数値の他にtheme.zIndex以下のパスが指定できます。theme.zIndexはデフォルトで以下のような値になってます。
const zIndex = {
mobileStepper: 1000,
speedDial: 1050,
appBar: 1100,
drawer: 1200,
modal: 1300,
snackbar: 1400,
tooltip: 1500
};
// Shadows
boxShadow
boxShadow
boxShadowには CSS のbox-shadowが扱える値かtheme.shadowsの値が使えます。theme.shadowsはデフォルトで以下のような配列値になっており、使う際はそのインデックス値を使います。
const shadows = [
'none',
'0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)',
'0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)',
'0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)',
'0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)',
'0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)',
'0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)',
'0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)',
'0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)',
'0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)',
'0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px…gba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)',
'0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px…gba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)',
'0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px…gba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)',
'0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px…gba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)',
'0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px…gba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)',
'0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px…gba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)',
'0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2p…gba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)',
'0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2p…gba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)',
'0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2p…gba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)',
'0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2p…gba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)',
'0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3…gba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)',
'0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3…gba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)',
'0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3…gba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)',
'0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3…gba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)',
'0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3…gba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)'
];Sizing
widthmaxWidthminWidthheightmaxHeightminHeight
これらに関して、関連するテーマ値はありません。ただし値に関して1以下の(小数点含む)値を渡すと、それはパーセント値に変換されて使われます。これは以下のように値が変換される為です。
// `value`は指定した値
value => {
if (value <= 1) {
return `${value * 100}%`;
}
return value;
};よって1は1pxではなく100%として扱われます。
Spacing
Borders以下のようなプロパティが使えますテキスト色と背景色のプロパティを持ちます要素の位置情報に関するプロパティがありますbox-shadow を指定できるプロパティがあります要素の大きさに関するプロパティがあります要素周りの空白についてのプロパティがあります。これは主にpaddingとmarginについて以下で設定できます。
pm
公式ドキュメントではpとmプロパティが使われてますが、paddingやmarginプロパティも用意されてます。
このプロパティの値へは数値を渡します。それはtheme.spacing関数の引数に使われ、その戻り値の値が実際に設定される値になります。
デフォルトのtheme.spacing値は8で、p={2}のように使うと8 x 2で16pxが設定されます。この基準値を変えたい場合は以下のようにテーマを作ります。
const theme = createMuiTheme({
spacing: 2
});またpやmの後ろにt、l、r、bと続けるとそれぞれ、paddingTop、paddingLeft、paddingRight、paddingBottomのような1辺だけの値を設定できます。これらも省略しない名前のプロパティも用意されてます。
他にxとyと続けて、xの場合はpaddingTopとpaddingBottomと縦軸、yの場合はpaddingLeftとpaddingRightと横軸、を同時に設定する為のプロパティもあります。
Typography
fontFamilyfontSizefontStylefontWeightletterSpacinglineHeighttextAlign
この内上の4つに関しては、CSS で扱える値の他にtheme.typographyの値が使えます。
デフォルトのtheme.typographyは以下のようなBorders以下のようなプロパティが使えますテキスト色と背景色のプロパティを持ちます要素の位置情報に関するプロパティがありますbox-shadow を指定できるプロパティがあります要素の大きさに関するプロパティがあります要素周りの空白についてのプロパティがありますテキスト周りのプロパティがありますオブジェクトです。
const typography = {
htmlFontSize: 16,
fontFamily:
'"Roboto", "Helvetica", "Arial", sans-serif',
fontSize: 14,
fontWeightLight: 300,
fontWeightRegular: 400,
fontWeightMedium: 500,
fontWeightBold: 700,
h1: {
fontFamily:
'"Roboto", "Helvetica", "Arial", sans-serif',
fontWeight: 300,
fontSize: '6rem',
lineHeight: 1.167,
letterSpacing: '-0.01562em'
},
h2: {/* ... */},
h3: {/* ... */},
h4: {/* ... */},
h5: {/* ... */},
h6: {/* ... */},
subtitle1: {/* ... */},
subtitle2: {/* ... */},
body1: {/* ... */},
body2: {/* ... */},
button: {/* ... */},
caption: {/* ... */},
overline: {/* ... */},
};