Images
Importing assets with webpack
Import an image into the home page of the site and display it.
src\pages\index.js
import { graphql, Link } from "gatsby"import React from "react"import Layout from "../components/layout"import { PageTitle } from "../components/page-title"+ import homePagePhoto from "../images/home-page-photo.jpeg"export default function Home({ data }) {return (<Layout><PageTitle>Home</PageTitle>- <img src="https://source.unsplash.com/600x300/?house" alt="house" />+ <img+ className="rounded-md shadow-md"+ style={{ width: "600px", height: "300px" }}+ src={homePagePhoto}+ alt="corporate,office,building"+ />...<p className="mt-6">...</p>...</Layout>)}...Import an image for the about page and display it.
src\pages\about.js
import React from "react"import Layout from "../components/layout"import { PageTitle } from "../components/page-title"+ import aboutPhoto from "../images/about-photo.png"export default function About() {return (<Layout><PageTitle>About</PageTitle>+ <img+ className="rounded-md shadow-md"+ style={{ width: "600px", height: "300px" }}+ src={aboutPhoto}+ alt="corporate building"+ />- <p>+ <p className="mt-6">...</Layout>)}Import the logo image into the header component and display it.
First remove the
bottom-padding
on theheader
element (pb-10
).src\components\header.js
- <header className="pt-5 col-start-1 col-end-3 border-b-2 border-solid border-gray-600">+ <header className="pt-5 col-start-1 col-end-3 border-b-2 border-solid border-gray-600 pb-10">import React from "react"import { useStaticQuery, graphql, Link } from "gatsby"+ import acmeLogo from "../images/acme-logo.png"export const NavLink = ({ children, to }) => {...}export default function Header() {const data = useStaticQuery(graphql`query {site {siteMetadata {title}}}`)return (<header className="col-start-1 col-end-3 border-b-2 border-solid border-gray-200 flex flex-row justify-start ">- <Link to="/" className="text-4xl mx-4 flex justify-self-start">- {data.site.siteMetadata.title}- </Link>+ <img src={acmeLogo} alt="Acme Logo" /><nav className="pt-4 pr-80 flex flex-row justify-end min-w-full"><NavLink to="/">Home</NavLink><NavLink to="/about">About</NavLink></nav></header>)}Remove the
background-color
on thebody
element because the logo background is white. We could have given the logo a transparent background but this will work for now.src\styles\global.css
@tailwind base;@tailwind components;@tailwind utilities;- body {- @apply bg-gray-100;- }
Using the Gatsby Image plugin
Install the following packages:
npm install gatsby-plugin-image gatsby-plugin-sharp gatsby-source-filesystem gatsby-transformer-sharpAdd the plugins to your
gatsby-config.js
:gatsby-config.js
module.exports = {siteMetadata: {title: `Acme Inc.`,description: `A corporate site`,},plugins: [{resolve: `gatsby-source-filesystem`,options: {name: `src`,path: `${__dirname}/src`,},},`gatsby-transformer-remark`,`gatsby-plugin-emotion`,"gatsby-plugin-postcss",+ `gatsby-plugin-image`,+ `gatsby-plugin-sharp`,+ `gatsby-transformer-sharp`,],}Replace the main
<img>
in the home page with a<StaticImage>
from the Gatsby image plugin.src\pages\index.js
...- import homePagePhoto from "../images/home-page-photo.jpeg"+ import { StaticImage } from "gatsby-plugin-image"...<PageTitle>Home</PageTitle>- <img- className="rounded-md shadow-md"- style={{ width: "600px", height: "300px" }}- src={homePagePhoto}- alt="corporate,office,building"- />+ <StaticImage+ imgClassName="rounded-md shadow-md"+ placeholder="blurred"+ loading="eager"+ width={600}+ height={300}+ src="../images/home-page-photo.jpeg"+ alt="corporate office building"+ />...Throttle the network in Chrome DevTools's Network tab to see a blurred home page image initially load.
Try some other placeholder settings from the documentation.
In
header.js
, style the navigation to the right and the logo to the left using flexbox.src\components\header.js
<header className="... flex flex-row justify-start pr-80 "><nav className="... flex flex-row justify-end min-w-full">If time permits, replace the main
<img>
in the about page (src\pages\about.js
) with a<StaticImage>
from the Gatsby image plugin using the last step as an example.