質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1460閲覧

React & Chakra-UIで作ったページ内でヘッダーの仕切り線がはみ出ないようにしたい。

pierogi.user

総合スコア19

Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2022/03/30 11:14

編集2022/04/01 08:17

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/>paddingmarginwidthmaxWなどを変えてみても添付画像の青色領域内に収められません。どうすればいいでしょうか?

あと、Home.tsxでは<Box/>を入れることによってChartCard.tsxの表示領域がヘッダーに被らないようにしています。つまり、この<Box/>がないとチャートタイトルと最新値がヘッダーの下に隠れてしまいます。できれば最小限の要素(<Box/>無し)でヘッダーとChartCard.tsxの表示が被らないようにしたいのですが、<Box/>は必要でしょうか?

よろしくお願いします。

React & Chakra-UIのバージョン
React: 17.0.2
Chakra-UI: 1.8.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こうですかね
イメージ説明
Containerを2つ作り、1つはHeader、1つはデータ表示領域にしています
Headerに関しては position: sticky を利用しているためデータ表示領域にBoxを指定しなくても被ることはないです

Home.tsx

1import { Container, Heading, Box, Spacer, Text } from "@chakra-ui/react" 2 3export const ChartCard = ({ dataName, chartCardData }: { dataName: string, chartCardData?: any[] }) => { 4 return ( 5 <Box 6 bgColor={'black'} 7 color={'white'} 8 > 9 <> 10 <Heading fontSize={"6rem"}>{dataName}</Heading> 11 <Spacer /> 12 <Text fontSize={"6rem"}>{`Some Title`}</Text> 13 </> 14 { 15 chartCardData ? 16 ( 17 <Box style={{ height: "300px" }}> 18 <div>チャートデータ</div> 19 </Box> 20 ) : null 21 } 22 </Box> 23 ) 24} 25 26export default () => { 27 return ( 28 <> 29 <Container 30 position={'sticky'} 31 top={0} 32 maxW="container.xl" 33 > 34 <Heading 35 color={'white'} 36 bgColor={'black'} 37 fontSize={"6rem"} 38 borderBottom={'solid 5px'} 39 borderColor={'red'} 40 > 41 {'HEAD TITLE'} 42 </Heading> 43 </Container> 44 <Container maxW="container.xl"> 45 <ChartCard dataName="testData" chartCardData={[null]} /> 46 <ChartCard dataName="testData" chartCardData={[null]} /> 47 <ChartCard dataName="testData" chartCardData={[null]} /> 48 <ChartCard dataName="testData" chartCardData={[null]} /> 49 <ChartCard dataName="testData" chartCardData={[null]} /> 50 <ChartCard dataName="testData" chartCardData={[null]} /> 51 </Container> 52 </> 53 ) 54}

投稿2022/04/16 09:46

tosaka-n

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pierogi.user

2022/04/17 04:23

ありがとうございます。 Containerを二つ作るのがポイントなんですね。 Headerに関してもうまくいきました。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問