ReactとChakra-UIを使ってチャートを表示するページを作っています。チャートの表示にはreact-chartjs-2
(chart.jsをreactで使うためのラッパーライブラリ)を使っています。
レイアウトは、下記添付画像のようにページの上端にヘッダーを表示して、その下にチャートタイトル(testData部分)、最新値(null部分)、チャート(縦軸値、横軸値のみが表示されている部分)を表示するコンポーネントを縦に並べています。添付画像は例なのでチャート自体は空にしています。
下記添付画像のようにヘッダーとチャートタイトルの間に白線を仕切りとして入れているのですが、padding、margin領域にはみ出してしまいます。
ページの表示は、Home.tsx
で全てのコンテンツを収める<Container/>
を定義して<Flex/>
でヘッダーを表示し、ChartCard.tsx
でチャートタイトル、最新値、チャートを表示しています。
Typescript(React:Home.tsx)
1export const Home: VFC = memo(() => { 2 3 //ここにチャートデータ取得のコード 4 5 return ( 6 <> 7 <Container maxW="container.xl" w="full"> 8 <Flex as="nav" align="center" wrap="nowrap" padding="0" position="fixed" 9 backgroundColor="black" w="100%" maxW="container.xl" borderBottom="solid"> 10 <Image margin="5px" boxSize="60px" src="/logo512.png"/> 11 <Heading as="h1" marginLeft="5px" mr="auto">dataChart</Heading> 12 </Flex> 13 <Box h="70px"/> 14 <ChartCard dataName="testData"/> 15 <ChartCard dataName="testData"/> 16 <ChartCard dataName="testData"/> 17 <ChartCard dataName="testData"/> 18 <ChartCard dataName="testData"/> 19 </Container> 20 </> 21 22 ) 23})
Typescript(React:ChartCard.tsx)
1export const ChartCard: VFC<Props> = (props) => { 2 3 //ここにチャート表示のためのデータ加工のコード 4 5 return ( 6 <> 7 <Flex> 8 <Heading as='h1' fontSize={"6rem"}>{cardTitle}</Heading> 9 <Spacer/> 10 <Text fontSize={"6rem"}>{`${lastNumber.value}${lastNumber.unit}`}</Text> 11 </Flex> 12 { 13 chartCardData ? 14 ( 15 <Box style={{height: "300px"}}> 16 <Line data={data} options={options}/> 17 </Box> 18 ) : null 19 } 20 </> 21 ) 22}
Home.tsx
の<Flex/>
のborderBottom="solid"
で白線を表示させているのですが、この<Flex/>
のpadding
、margin
、width
やmaxW
などを変えてみても添付画像の青色領域内に収められません。どうすればいいでしょうか?
あと、Home.tsx
では<Box/>
を入れることによってChartCard.tsx
の表示領域がヘッダーに被らないようにしています。つまり、この<Box/>
がないとチャートタイトルと最新値がヘッダーの下に隠れてしまいます。できれば最小限の要素(<Box/>
無し)でヘッダーとChartCard.tsx
の表示が被らないようにしたいのですが、<Box/>
は必要でしょうか?
よろしくお願いします。
React & Chakra-UIのバージョン
React: 17.0.2
Chakra-UI: 1.8.6

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/17 04:23