Tailwind CSS

Tailwind CSS Travel Site - 8. Footer Section & PurgeCSS

Updated:

In this lesson, we are going to be building the footer section of our travel site, and integrating PurgeCSS to reduce our bundle size

The final result will look like:

You can pick up where we last left off, by cloning the previous tutorial's branch with git.

git clone git@github.com:robertguss/howtocode.io-tailwind-css-landing-page.git

git checkout 7-testimonial-section

For the footer, I am just going to modify a footer I found from Sitepoint.

First, let's create a new footer.html partial in src/partials and include it in our index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Home | FunTravel</title>
    <link rel="stylesheet" href="./css/main.css" />
  </head>

  <body>
    <include src="./partials/nav.html"></include>
    <include src="./partials/hero.html"></include>
    <include src="./partials/quote-form.html"></include>
    <include src="./partials/popular-destinations.html"></include>
    <include src="./partials/features.html"></include>
    <include src="./partials/callouts.html"></include>
    <include src="./partials/testimonial.html"></include>
    <include src="./partials/footer.html"></include>

    <script src="./js/main.js"></script>
  </body>
</html>

Add the following markup to footer.html

<div class="w-full bg-blue-900">
  <div class="flex flex-wrap text-center text-white">
    <!-- ABOUT COLUMN -->

    <div class="w-full md:w-1/3 p-5 border-r border-blue-800 md:text-left">
      <div class="my-6 ml-3 text-xl font-semibold">ABOUT US</div>
      <p class="p-3 text-gray-400">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ac est
        massa. Donec eget elementum sapien, tincidunt tempor nunc. Cras sodales
        id ipsum at convallis.
      </p>
      <p class="p-3 text-gray-400">
        Morbi tristique massa nec massa auctor, at scelerisque felis
        consectetur. Morbi tempus et odio sit amet feugiat. Maecenas dignissim a
        turpis in molestie. Fusce tincidunt vestibulum iaculis.
      </p>
    </div>

    <!-- CONTACTS COLUMN -->

    <div class="w-full md:w-1/3 p-5 border-r border-blue-800">
      <div class="my-6 text-xl font-semibold">CONTACT US</div>
      <p class="mt-8 text-gray-400">
        A108 Adam Street <br />
        New York, NY 535022 <br />
        United States <br />
        <strong>Phone:</strong> +1 5589 55488 55 <br />
        <strong>Email:</strong> info@funtravel.com
      </p>
    </div>

    <!-- FORM COLUMN -->

    <div class="w-full md:w-1/3 p-5">
      <div class="mt-6 text-xl font-semibold">SAY Hi!</div>
      <form class="w-4/5 mx-auto mt-2 px-6 pt-6 pb-4 rounded">
        <div class="flex items-center mb-4">
          <input
            class="w-full h-10 p-2 border-b border-blue-800 bg-blue-900 text-white"
            type="text"
            placeholder="Username"
          />
        </div>
        <div class="flex items-center mb-4">
          <input
            class="w-full h-10 p-2 border-b border-blue-800 bg-blue-900 text-white"
            type="text"
            placeholder="Email"
          />
        </div>
        <div class="mb-6">
          <textarea
            class="w-full h-24 px-2 pt-2 border-b-2 border-blue-800 bg-blue-900 text-white"
            placeholder="Message"
          ></textarea>
        </div>
        <div class="flex justify-between items-center">
          <button
            class="w-full py-2 px-4 rounded bg-blue-500 hover:bg-blue-700 text-white font-bold"
            type="button"
          >
            SEND
          </button>
        </div>
      </form>
    </div>
  </div>
</div>

Our footer looks like:

Our complete travel site looks like:

Purge CSS

Now that we have completed our site, we need to get it ready for production. Let's run our build command for parcel and take a look at how big our bundle size is.

npm run build

You should see something similar to the following

Built in 8.45s.

dist/main.4a75d9d1.css 853.15 KB 3.77s dist/hero.ba103b23.jpg 454.1 KB 80ms dist/main.4a75d9d1.css.map 324.13 KB 35ms dist/jonathan.3233769a.jpg 25.58 KB 79ms dist/index.html 13.76 KB 4.59s dist/travel-tickets-colour.0885fda2.svg 8.21 KB 78ms dist/carry-on-colour.1cebe4f7.svg 4.63 KB 914ms dist/main.f84e1103.js 1.11 KB 45ms dist/main.f84e1103.js.map 99 B 34ms

Notice how large our main.css file is! It is over 853kb!!. The reason is that the entire Tailwind CSS library is being included. However, we only want to include the classes we are actually using, which is where Purge CSS comes in.

First we need to install PurgeCSS

  npm install @fullhuman/postcss-purgecss --save-dev

Then we need to add it to our postcss.config.js file

const purgecss = require("@fullhuman/postcss-purgecss")({
  // Specify the paths to all of the template files in your project
  content: ["./src/**/*.html"],

  // Include any special characters you're using in this regular expression
  defaultExtractor: (content) => content.match(/[\w-/:]+(?<!:)/g) || [],
});

module.exports = {
  plugins: [
    require("tailwindcss"),
    require("autoprefixer"),
    ...(process.env.NODE_ENV === "production" ? [purgecss] : []),
  ],
};

We are only enabling PurgeCSS in production mode. So PurgeCSS will not run when we are using the dev server, only when we do a production build.

We then need to make a slight modification to our main.css file:

/* purgecss start ignore */
@tailwind base;
@tailwind components;
/* purgecss end ignore */
@tailwind utilities;

.better-to-buy:before {
  content: "";
  position: absolute;
  z-index: -1;
  width: 100%;
  height: 115%;
  top: 0;
  -webkit-transform: skewY(-12deg);
  transform: skewY(-12deg);
  background: #f6f9fc;
}

.heading-container {
  height: 65vh;
  top: -50px;
}

.hero img {
  height: 65vh;
}

.quote-form {
  margin-top: -45px;
  opacity: 0.99;
  z-index: 10;
}

.quotes {
  top: -50px;
  left: -50px;
  z-index: -1;
}

.testimonial {
  z-index: 2;
}

.travel-tickets {
  right: 0;
  top: -200px;
  transform: rotate(-15deg);
  z-index: -1;
}

This is all of the custom CSS we needed in order to build our travel site!

Let's run our build command again and see the results:

npm run build

Built in 2.83s.

dist/hero.ba103b23.jpg 454.1 KB 51ms dist/jonathan.3233769a.jpg 25.58 KB 48ms dist/index.html 13.76 KB 1.50s dist/main.b9e98fe1.css 8.45 KB 1.28s dist/travel-tickets-colour.0885fda2.svg 8.21 KB 47ms dist/main.b9e98fe1.css.map 5.07 KB 5ms dist/carry-on-colour.1cebe4f7.svg 4.63 KB 49ms dist/main.f84e1103.js 1.11 KB 47ms dist/main.f84e1103.js.map 99 B 2ms

Our main.css file is now only 8.45KB!! 🔥

So that wraps up this tutorial. I hope you enjoyed it and learned how powerful and fun it is to build sites with Tailwind CSS.

You can download a copy of the completed tutorial from the repo here. Each section of the tutorial is within its own branch. The branch for this article is 1-installing-tailwind-css

Or you can do it via git with:

git clone git@github.com:robertguss/howtocode.io-tailwind-css-landing-page.git

git checkout 8-footer-purge-css
Previous
7. Testimonial Section