何をどうやって作るのか
Gmail のまねをしてサイドバーを MUI Accordion を使って作る。
さらに sx や styled を使用してラッパーの Box や本体の大きさを変更する。
Accordion を 入れてみる
https://mui.com/components/accordion/
npm i @mui/icons-material
icons が必要なので別途 import する
import Accordion from '@mui/material/Accordion';
import AccordionSummary from '@mui/material/AccordionSummary';
import AccordionDetails from '@mui/material/AccordionDetails';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { styled } from '@mui/material';
Accordion シリーズと拡張の時のアイコン、material の styled を import する。
mui のサンプルをコピーしてくるとこうなる。
Accordion 1 のコードに注力してみる。
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1a-content"
id="panel1a-header"
>
<Typography>Accordion 1</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
Accordion のなかに
AccordionSummary で開く時に押すところのラベルを書く。
開く時のアイコンを指定できる。
この中に Typography で文字を書く。
AccordionDetails には開いた時に表示される中身。
この中にも Typography で文字を書く。
そして Acoordion を閉じる。これがワンセット。
<div>
<Accordion>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1a-content"
id="panel1a-header"
>
<Typography>Categories</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Social 2548
</Typography>
</AccordionDetails>
<AccordionDetails>
<Typography>
Updastes 16,185
</Typography>
</AccordionDetails>
</Accordion>
</div>
Gmail の真似をするっピ!
Box sx width 200 で幅を狭くする
<Box sx={{ width : 200}}>
Box で囲うことで幅を狭くできる
かなり狭くできた。
styled CustomizedBox で幅をせまくする
const CustomizedBox = styled(Box)`
background: red;
width: 100;
`;
<CustomizedBox >
<Accordion>
全く狭くならない。
赤くなっているので背景は効いている。
Box には styled で width を当てることはできないと予測。
https://mui.com/system/box/#api
mui の box の欄には sx しか書いていないので、そう言うことっぽい。
Box sx で width と height を当てる
<Box sx={{
width : 400,
height: 400,
background: 'red',
}}>
<Accordion>
...
こうやって Box の sx に指定すれば、それの幅も高さも変えられる。
Accordion の高さは有限だが幅は無限なので、横はぴっちりする。縦は Box がはみ出る。
Accordion sx で width を当てる
Accordion にも sx で幅を当てられる。
<Accordion sx={{width: 300}}>
box 400 に対して 300 にすると 100 だけ box がはみ出る。
Accordion に styled で width を当てる
const CustomizedAccordion = styled(Accordion)`
background: gray;
width: 100;
height: 500;
`
Accordion にも styled では width も height も聞かない。
まとめ
Accordion と AccordionSummary、ExpandMoreIcon、AccordionDetails を使って閉じたり開いたりできるタイプのサイドバーのリンクを作れる
sx プロパティで幅や高さが変えられるが、styled では無理。
Top comments (0)