Gatsby×ブログ - 記事の一部にスタイルを適用する方法
— Gatsby — 1 min read
記事を書いてて,その記事にしか使わないスタイルを,サックリ適応させる方法.
Boxで囲う
とりあえず感の強いやり方
使用プラグイン:gatsby-plugin-theme-ui
1---2/*** Frontmatter ***/3---4import { Box } from "theme-ui"5
6<Box sx={{7 "p": {8 mb: 0,9 },10 "table": {11 mt: 0,12 "td": {13 px: [0, "4px", "4px"],14 },15 },16}}>17
18/*** 内容 ***/19
20</Box>
上記のプログラムを挿入した時の例
- 挿入前
Ver.1.0 - 2020/09/28
ウェンティ | 香菱 | バーバラ | フィッシュル |
- 挿入後
Ver.1.0 - 2020/09/28
ウェンティ | 香菱 | バーバラ | フィッシュル |
文字列とテーブルの間のスペースがなくなったことが確認できる.
sx={{/*中身*/}}
に入れるものは,こちらのリンクを参考に
Theme UI sx prop
MDXProviderを使う
同じスタイルを複数箇所で使うようになった時
コンポーネントを作成
@components/MDXRenderer.jsx
1import * as React from "react"2import { MDXProvider } from "@mdx-js/react"3import { MDXRenderer } from "gatsby-plugin-mdx"4import { Box } from "theme-ui"5
6const style = {7 MyBox: props => (8 <Box sx={{9 "p": {10 mb: 0,11 },12 "table": {13 mt: 0,14 "td": {15 px: [0, "4px", "4px"],16 },17 },18 }} {...props} />19 ),20}21
22const MyMdx = (props) => {23 return (24 <MDXProvider components={style}>25 <MDXRenderer>{props.children}</MDXRenderer>26 </MDXProvider>27 )28}29
30export default MyMdx
MDXRenderer
を読み込んでる場所のインポートを修正
@components/post.tsx
1...2//import { MDXRenderer } from "gatsby-plugin-mdx" //削除3import MDXRenderer from "@components/MDXRenderer"4...
記事は<div>
みたいな感覚で囲う
投稿記事
1//import は必要なし2...3<MyBox>4/*** スタイルを適用する内容 ***/5</MyBox>6...
改善できそうな問題点
これらのやり方だと,スタイルを適用するためだけの<div>
が余分に生まれてしまう.
基本無視できる程度だと思うが,規模が大きくなってきたら改善したほうが良いかもしれない.
他にも,CSSの優先度が高くなりがち.
別で上書きする前提なら,他のやり方が良いかもしれない.
— Gatsby —