Skip to content
るいラボ
原神ツール

Gatsby×ブログ - 記事の一部にスタイルを適用する方法

Gatsby1 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

venti
xiangling
barbara
fischl
ウェンティ香菱バーバラフィッシュル

  • 挿入後

Ver.1.0 - 2020/09/28

venti
xiangling
barbara
fischl
ウェンティ香菱バーバラフィッシュル

文字列とテーブルの間のスペースがなくなったことが確認できる.

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