{"componentChunkName":"component---src-templates-blog-post-js","path":"/making_toc/","result":{"data":{"site":{"siteMetadata":{"title":"/dev/yukarinoki"}},"markdownRemark":{"id":"10fc1a66-77a8-5a68-8312-234748f2f918","excerpt":"概要 gatsbyで作られたブログに リンクが機能していて スクロールに追従する 目次をつける方法について MDX pluginは使わずにの元で実現しています。 graphQLでtable of contents を使うと、gatsbyのgraphQL…","html":"<h1 id=\"概要\" style=\"position:relative;\"><a href=\"#%E6%A6%82%E8%A6%81\" aria-label=\"概要 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>概要</h1>\n<p>gatsbyで作られたブログに</p>\n<ul>\n<li>リンクが機能していて</li>\n<li>スクロールに追従する<br>\n目次をつける方法について</li>\n</ul>\n<p>MDX pluginは使わずに<code class=\"language-text\">gatsby-transformer-remark</code>の元で実現しています。</p>\n<h2 id=\"graphqlでtable-of-contents\" style=\"position:relative;\"><a href=\"#graphql%E3%81%A7table-of-contents\" aria-label=\"graphqlでtable of contents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>graphQLでtable of contents</h2>\n<p><code class=\"language-text\">gatsby-transformer-remark</code>を使うと、gatsbyのgraphQLにいろいろな項目が追加されますが、そのなかに<code class=\"language-text\">table of contents</code>があります。  </p>\n<p>まず、これをblog postのtemplateから読み取りましょう。</p>\n<div class=\"gatsby-code-title\">template/blog-post.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> pageQuery <span class=\"token operator\">=</span> graphql<span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  query BlogPostBySlug($slug: String!) {\n    site {\n      siteMetadata {\n        title\n      }\n    }\n    markdownRemark(fields: { slug: { eq: $slug } }) {\n      id\n      excerpt(pruneLength: 160)\n      html\n      tableOfContents //←これ追加\n      frontmatter {\n        title\n        date(formatString: \"MMMM DD, YYYY\")\n        description\n      }\n    }\n  }\n</span><span class=\"token template-punctuation string\">`</span></span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>そして、得られた<code class=\"language-text\">tableOfContents</code>を（ここらへんは個人の実装のより異なりますが）、自分の作った<code class=\"language-text\">tableOfContents</code>用のcomponentに渡します。</p>\n<div class=\"gatsby-code-title\">templates/blog-post.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">BlogPostTemplate</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> data<span class=\"token punctuation\">,</span> pageContext<span class=\"token punctuation\">,</span> location <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> post <span class=\"token operator\">=</span> data<span class=\"token punctuation\">.</span>markdownRemark\n  <span class=\"token keyword\">const</span> siteTitle <span class=\"token operator\">=</span> data<span class=\"token punctuation\">.</span>site<span class=\"token punctuation\">.</span>siteMetadata<span class=\"token punctuation\">.</span>title\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> previous<span class=\"token punctuation\">,</span> next <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> pageContext\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>Layout \n      location<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>location<span class=\"token punctuation\">}</span> title<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>siteTitle<span class=\"token punctuation\">}</span>\n      rightSide<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>\n                  <span class=\"token operator\">&lt;</span><span class=\"token operator\">></span>\n                    <span class=\"token operator\">&lt;</span>Bio<span class=\"token operator\">/</span><span class=\"token operator\">></span> \n                    <span class=\"token operator\">&lt;</span><span class=\"token constant\">TOC</span> tocitems<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>data<span class=\"token punctuation\">.</span>markdownRemark<span class=\"token punctuation\">.</span>tableOfContents<span class=\"token punctuation\">}</span><span class=\"token operator\">/</span><span class=\"token operator\">></span> <span class=\"token comment\">// &lt;- これ</span>\n                  <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span><span class=\"token operator\">></span>\n                <span class=\"token punctuation\">}</span>\n     <span class=\"token operator\">></span> \n<span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>中略<span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token operator\">...</span>\n<span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>うけとる、TOC componentはこんな感じ。<code class=\"language-text\">tableOfContents</code>は生のhtmlなので<code class=\"language-text\">dengerouslySetInnerHTML</code>で渡します。</p>\n<div class=\"gatsby-code-title\">components/toc.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> styled <span class=\"token keyword\">from</span> <span class=\"token string\">\"styled-components\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> rhythm<span class=\"token punctuation\">,</span> scale <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"../utils/typography\"</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">TOCInner</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> className<span class=\"token punctuation\">,</span> tocitems <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n        <span class=\"token operator\">&lt;</span>div classname<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>className<span class=\"token punctuation\">}</span> dangerouslySetInnerHTML<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span>__html<span class=\"token operator\">:</span> tocitems<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n    <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token constant\">TOC</span> <span class=\"token operator\">=</span> <span class=\"token function\">styled</span><span class=\"token punctuation\">(</span>TOCInner<span class=\"token punctuation\">)</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\npadding: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\"> </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.25</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">;\npadding-top: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">\nfont-style: italic;\ncolor: var(--fg-demisub-color);\n</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token function\">scale</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">3</span> <span class=\"token operator\">/</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">;\n&amp; > a {\n  line-height: 0;\n}\n</span><span class=\"token template-punctuation string\">`</span></span>\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token constant\">TOC</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>この時点で見た目だけまともなのができますが、<strong>まだpage内リンクは機能していません</strong>　（ハリボテ・・・）</p>\n<h2 id=\"page内リンクが機能するようにする\" style=\"position:relative;\"><a href=\"#page%E5%86%85%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B\" aria-label=\"page内リンクが機能するようにする permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>page内リンクが機能するようにする</h2>\n<p>上で作ったtable of contentsが動かないのは、<strong>page内の<code class=\"language-text\">&lt;h1&gt; ~ &lt;h6&gt;</code>に<code class=\"language-text\">id</code>が設定されていないからです。</strong> なので<code class=\"language-text\">id</code>を設定するためにpluginを入れます。</p>\n<p><code class=\"language-text\">id</code>を設定してくれる<del>（と嘯いている）</del> pluginはいくつかありますが、<br>\n<code class=\"language-text\">gatsby-remark-autolink-headers</code>  を使ってください。<br>\n<a href=\"https://www.gatsbyjs.com/plugins/gatsby-remark-autolink-headers/\">https://www.gatsbyjs.com/plugins/gatsby-remark-autolink-headers/</a>  </p>\n<p><strong><code class=\"language-text\">gatsby-remark-slug</code>や<code class=\"language-text\">gatsby-remark-heading-slug</code>はgraphQLのtableOfContentsがなにも返さなくなるので使わないように</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">npm i gatsby-remark-autolink-headers</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<div class=\"gatsby-code-title\">gatsby-config.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\">resolve<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-transformer-remark</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n      options<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n          <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-remark-code-titles</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n          <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-remark-autolink-headers</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// &lt;- これ追加</span>\n          <span class=\"token punctuation\">{</span>\n            resolve<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-remark-images</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n            options<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n              maxWidth<span class=\"token operator\">:</span> <span class=\"token number\">590</span>\n            <span class=\"token punctuation\">}</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>そうするとリンクが機能するようになります。</p>\n<h2 id=\"スクロールに目次が追従するようにする\" style=\"position:relative;\"><a href=\"#%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AB%E7%9B%AE%E6%AC%A1%E3%81%8C%E8%BF%BD%E5%BE%93%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B\" aria-label=\"スクロールに目次が追従するようにする permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>スクロールに目次が追従するようにする</h2>\n<p>（僕なんかからすると）モダンなデザインに思えますが、現在ではcssに<code class=\"language-text\">position: sticky</code>を設定するだけでこのような動作を実現することができます。</p>\n<div class=\"gatsby-code-title\">toc.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token constant\">TOC</span> <span class=\"token operator\">=</span> <span class=\"token function\">styled</span><span class=\"token punctuation\">(</span>TOCInner<span class=\"token punctuation\">)</span>`\ntop<span class=\"token operator\">:</span> <span class=\"token number\">0</span>px<span class=\"token punctuation\">;</span>\npadding<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.25</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\npadding<span class=\"token operator\">-</span>top<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nmargin<span class=\"token operator\">-</span>top<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nmargin<span class=\"token operator\">-</span>left<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nmargin<span class=\"token operator\">-</span>right<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nposition<span class=\"token operator\">:</span> sticky<span class=\"token punctuation\">;</span> <span class=\"token comment\">// &lt;-これ</span>\n<span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>しかし、単純に<code class=\"language-text\">position: sticky</code>を設定するだけでは、うまく動かない場合がしばしばあります。  </p>\n<p>具体的には、</p>\n<ul>\n<li>親要素のどれかに、<code class=\"language-text\">overflow: hidden</code> <code class=\"language-text\">overflow: auto</code> が設定されている。</li>\n<li>その要素が動ける範囲がない</li>\n<li>その要素が固定される位置が明示されていない<br>\nなどの場合があります。</li>\n</ul>\n<p>僕の場合も動かず、原因は3番目でした。  </p>\n<p>要素の位置を明示するために</p>\n<div class=\"gatsby-code-title\">toc.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-javascript line-numbers\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token constant\">TOC</span> <span class=\"token operator\">=</span> <span class=\"token function\">styled</span><span class=\"token punctuation\">(</span>TOCInner<span class=\"token punctuation\">)</span>`\ntop<span class=\"token operator\">:</span> <span class=\"token number\">0</span>px<span class=\"token punctuation\">;</span> <span class=\"token comment\">// &lt;- これ</span>\npadding<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.25</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\npadding<span class=\"token operator\">-</span>top<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nmargin<span class=\"token operator\">-</span>top<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nmargin<span class=\"token operator\">-</span>left<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nmargin<span class=\"token operator\">-</span>right<span class=\"token operator\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token function\">rhythm</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nposition<span class=\"token operator\">:</span> sticky<span class=\"token punctuation\">;</span> \n<span class=\"token operator\">...</span><span class=\"token operator\">...</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>を指定したら動きました。</p>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h2>\n<p>CSSがうまく動かない系バグはエラーメッセージがないので原因究明が大変です。<code class=\"language-text\">position: sticky</code>が動かない <strong>理屈</strong> も分かり次第追記しようと思います。</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/making_toc/#%E6%A6%82%E8%A6%81\">概要</a></p>\n<ul>\n<li><a href=\"/making_toc/#graphql%E3%81%A7table-of-contents\">graphQLでtable of contents</a></li>\n<li><a href=\"/making_toc/#page%E5%86%85%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B\">page内リンクが機能するようにする</a></li>\n<li><a href=\"/making_toc/#%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AB%E7%9B%AE%E6%AC%A1%E3%81%8C%E8%BF%BD%E5%BE%93%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B\">スクロールに目次が追従するようにする</a></li>\n<li><a href=\"/making_toc/#%E3%81%BE%E3%81%A8%E3%82%81\">まとめ</a></li>\n</ul>\n</li>\n</ul>","frontmatter":{"title":"gatsby-blogにtable of contentを付ける","date":"November 19, 2020","description":"gatsbyで作られたブログに、リンクが機能していてスクロールに追従する目次をつける方法について"}}},"pageContext":{"slug":"/making_toc/","previous":{"fields":{"slug":"/per_cpu_var_and_relochide/"},"frontmatter":{"title":"per_cpu_variableとRELOC_HIDE()"}},"next":{"fields":{"slug":"/readings_Dec20/"},"frontmatter":{"title":"Dec 2020 読んだもの、やったこと"}}}}}