DEV Community

kaede
kaede

Posted on

mui styled で Box に Accordion を入れて sx と styled の大きさ調整を試す。

何をどうやって作るのか

Image description

Gmail のまねをしてサイドバーを MUI Accordion を使って作る。

さらに sx や styled を使用してラッパーの Box や本体の大きさを変更する。


Accordion を 入れてみる

https://mui.com/components/accordion/

npm i @mui/icons-material 
Enter fullscreen mode Exit fullscreen mode

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'; 
Enter fullscreen mode Exit fullscreen mode

Accordion シリーズと拡張の時のアイコン、material の styled を import する。

Image description

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> 
Enter fullscreen mode Exit fullscreen mode

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> 
Enter fullscreen mode Exit fullscreen mode

Image description

Gmail の真似をするっピ!

Box sx width 200 で幅を狭くする

 <Box sx={{ width : 200}}> 
Enter fullscreen mode Exit fullscreen mode

Box で囲うことで幅を狭くできる

Image description

かなり狭くできた。


styled CustomizedBox で幅をせまくする

const CustomizedBox = styled(Box)` background: red; width: 100; `; 
Enter fullscreen mode Exit fullscreen mode
 <CustomizedBox > <Accordion> 
Enter fullscreen mode Exit fullscreen mode

Image description

全く狭くならない。

赤くなっているので背景は効いている。

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> ... 
Enter fullscreen mode Exit fullscreen mode

Image description

こうやって  Box の sx に指定すれば、それの幅も高さも変えられる。

Accordion の高さは有限だが幅は無限なので、横はぴっちりする。縦は Box がはみ出る。


Accordion sx で width を当てる

Image description

Accordion にも sx で幅を当てられる。

<Accordion sx={{width: 300}}> 
Enter fullscreen mode Exit fullscreen mode

box 400 に対して 300 にすると 100 だけ box がはみ出る。


Accordion に styled で width を当てる

const CustomizedAccordion = styled(Accordion)` background: gray; width: 100; height: 500; ` 
Enter fullscreen mode Exit fullscreen mode

Accordion にも styled では width も height も聞かない。

Image description


まとめ

Accordion と AccordionSummary、ExpandMoreIcon、AccordionDetails を使って閉じたり開いたりできるタイプのサイドバーのリンクを作れる

sx プロパティで幅や高さが変えられるが、styled では無理。

Top comments (0)