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