Version 4 of dinhanhthi.com using GatbsyJS & TailwindCSS.
๐ธ UPDATE on May 01, 2022: I DISCONTINUE THIS PROJECT because Gatbsy doesn't support flexibility for sizes, positions,... for images in markdown files (I know we can use mdx with a custom component but I'd rather use markdown syntax with additional customizations). It's less flexible than 11ty. For this reason, I continue to use 11ty.
๐ A demo of what I did.
If you want to know how I migrate the styles from 11ty the current version to Gatsby.
๐ What I've done so far:
- Gatsby 4
- General layout, navigation with full buttons, search bar (search function isn't implemented yet).
- Dark / light mode.
- Fully integrated TailwindCSS + how to create custom classes, groups,....
- Page generation (without styles): custom page (about, index,...), categories, tags, single-post blog, single-post notes,...
- Integrated KaTeX for math equations.
- Code syntax highlighting.
- Eslint.
- Finish styling About page like the actual version.
gatsby develop # or `npm run dev`
# http://localhost:5555/
# http://localhost:5555/___graphql
# For a production build
gatsby build
# Note that: @react-icons/all-files lacks some icons
npm install react-icons --savenpm i
# Error: Cannot find module 'eslint'?
npm link eslintCheck the examples.
---
title: "All-in-One Components"
tags: [mlops, ml, thu nghiem]
---
import { LoremIpsum } from 'react-lorem-ipsum';
<LoremIpsum p={2} />
- Tag:
tags: [mlops, Thu Nghiem]=> slugs:mlops,thu-nghiem - Post icon:
icon: airflow.svgoricon: header/airflow.svg(all icons must be stored in/src/img/header/)
- Migrate remark to mdx
- gatsby-plugin-mdx
- Create and using shortcode like
<Youtube />: read this. - Mdx components
Read this using createNodeField.
Open dev tool > ctrl + shift + p > Emulate CSS prefers-color-scheme: dark / light.
Or go to 3 dots (next to settings) > More tools > Rendering > search for "prefers-color-scheme"
Just add them to src/main.scss.
http://localhost:5555/blog/blog-test/
Change default url of markdown /blog/ (read more)
// gatsby-node.js
const value = createFilePath({ node, getNode })
createNodeField({
name: 'slug',
node,
value: `/blog${value}`,
})How to install KaTeX with new version of Gatsby? The versions are important. If you are using Gatbsy v4, follow this.
โ Before continuing: If we wanna use markdown in caption of the image (bold text, link,...), we have to disable showCaptions in the below option and customize the css rule.

_This is a caption with **bold text** and `code`._
If we don't use markdown inside caption: Things in gatsby-config.js (The order is important, I don't know why!).
module.exports = {
plugins: [
'gatsby-transformer-sharp',
'gatsby-plugin-sharp',
'gatsby-remark-images',
{
resolve: 'gatsby-plugin-mdx',
options: {
gatsbyRemarkPlugins: [
'gatsby-remark-unwrap-images', // We need this to overcome the err <figcaption> cannot inside <p>
{
resolve: 'gatsby-remark-images',
options: {
maxWidth: 900, // Tip to get by default 100% width of the container
linkImagesToOriginal: false,
showCaptions: ['title', 'alt'],
// markdownCaptions: true, // if "true" => parsing error, I don't know why???
loading: 'lazy',
},
},
]
}
}
]
}# Alt as caption

# Title as caption

Custom elements here.
Using !important like !transition or sm:hover:!tw-font-bold (ref)
Using @apply for a group of classes, ref.
Also a custom class like
@tailwind base;
@layer base {
/* Paragraphs should have a bottom margin to separate them, by default. */
p {
@apply mb-3;
}
}๐ Read more.
Difference between base, components and utilities, read here.
base: override browser default styles, eg:p,html,...components: container's classes, eg:container,mx-auto,px-2,... We can add some custom things likebtnwith@apply.utilities: the meat of tailwind.- There are other layers too.