Creating a Vacation themed website using Tailwind CSS
Tags: tailwindcss, css, frontend
Published: 2021-06-08 15:34:21

---
title: Creating a Vacation themed website using Tailwind CSS
published: true
description: Learn how to build a web page with tailwind css
tags: tailwindcss, css, frontend
//cover_image: https://direct_url_to_image.jpg
---
[TailwindCSS](https://tailwindcss.com/) is a [utility first](https://tailwindcss.com/docs/utility-first/) framework for building custom web page designs. It provides easy to grasp CSS classes for creating web pages. 

It can be used alongside any front-end framework or library. Its main objective is to help you rapidly create custom designs. You can find more details on their official [website](https://tailwindcss.com/).

In this article, we’d recreate a design on dribbble called [Vacarion](https://dribbble.com/shots/5276650-Vacarion-Trip-Planner-Landing-Page-Concept) using Tailwind CSS. You can find the design below:


![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1580907060139_vacarion_preview.png)


You can find a working demo of the application [here](https://youthful-goodall-f27fb3.netlify.app/).


> N/B: We will make use of [Parcel](https://parceljs.org/) as a dev server and build runner, If you haven’t used parcel before now, you can read about it [here](https://parceljs.org/).


## Project Setup

To get started, we'd create a new project:

    mkdir vacarion && cd vacarion && npm init

The command above creates a folder named `vacarion` with a **package.json** file inside it.


> The `npm init` command will present you with several prompts. You can easily accept all the default value provided for each prompt.

Next, install TailwindCSS and Parcel:


    npm install parcel-bundler tailwindcss --save-dev

Add Parcel and tailwind's config to finish the setup: 

Update the `scripts` section of your **package.json** file with the following commands:


    // package.json
    ...
    "scripts": {
      "start": "npm run run:css && parcel index.html",
      "run:css": "npx tailwind build tailwind.css -o vendor.css"
    },
    ...

The `run:css` command generates and outputs tailwind’s css code to the **vendor.css** file using the [directives](https://tailwindcss.com/docs/functions-and-directives/) in the **tailwind.css** **file**.

The `start` command runs the `run:css` command to build the stylesheet before it starts the development server that watches the **index.html** file.

Run the following command to create all the project files:


    touch index.html {index,tailwind}.css

Paste the starter snippet below into the **index.html** file:

    //index.html
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <link
          href="https://fonts.googleapis.com/css?family=Raleway:300,400,600,700,900&display=swap"
          rel="stylesheet"
        />
        <link href="./vendor.css" rel="stylesheet" />
        <link href="./index.css" rel="stylesheet" />
        <script src="https://unpkg.com/feather-icons"></script>
        <title>Vacation Site</title>
      </head>
      <body>
        <h1>Getting Started</h1>
        <script>
          feather.replace();
        </script>
      </body>
    </html>

We’ll use the [Raleway](https://fonts.google.com/specimen/Raleway) font-family and an icon set called [Feathericons](https://feathericons.com/). We’ve also included our stylesheets and initialised Feathericons using the `feather.replace()` method right before the end of our body tag.

Open the **tailwind.css** file and include the following build directives for Tailwind:

    /* tailwind.css */
    
    @tailwind base;
    @tailwind components;
    @tailwind utilities;

The directives above will inject tailwind's `base`, `components`, and `utilities` styles into your CSS. The directives will be swapped at build time into **vendor.css** with all of its generated CSS.

To initialise the font in the project, add the code in the snippet to your **index.css** file:


    /* index.css */
    
    * {
      font-family: 'Raleway', sans-serif;
    }

Now that we have all our files ready, let’s start up the server using the `start` command:


    npm start

Navigate to http://localhost:1234 in your browser and you should see the following view:

![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1580927124149_Screenshot+2020-02-05+at+7.24.46+PM.png)


Once you see this view, you’re ready to get started.


## Building the header

Let’s start by recreating the header section:


![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1580927872937_Screenshot+2020-02-05+at+7.36.46+PM.png)


All the items are lined horizontally and there’s a huge space separating the brand name and the navigation items. 

 Update the body of your **index.html** file with the following snippet:


    <header class="w-4/5 mx-auto py-6 flex justify-between items-center">
      <!-- Brand name -->
      <div>
        <h1 class="text-2xl text-gray-800 font-bold">Vacarion</h1>
      </div>
      
      <!--menu-->
      <div>
        ...
      </div>
    </header>

We used 3 pure CSS classes and 6 tailwind classes to create the header menu.


- `w-4/5`: the header doesn’t span the width of the page in the design. **W-4/5** is used to set an element to a percentage based width. It fills **80%** of the screen. You can find more width targeted classes [here](https://tailwindcss.com/docs/width).
- `mx-auto`: since the header only covers **80%** of the screen, we use this class to center it by giving setting auto margins on both sides.
- `py-6`: gives the header a vertical padding of **1.5 rem**.
- `flex`: sets display to `flex` so the menu items appear horizontally.
- `justify-between`: put spaces between the menu items.
- `items-center`: centers the menu items vertically.
- `text-2xl` : Sets the text a size to **1.5rem.**
- `text-gray-800` : sets the text color to a dark shade of gray.
- `font-bold` : sets the font weight to **700**.

The brand name and container element have been styled, let’s do the navigation items next. Add the following;

```
<header class="w-4/5 mx-auto py-6 flex justify-between items-center">
  <!-- menu -->
  <div>
    <ul class="flex">
      <li class="mx-4">
        <span class="font-bold text-gray-700">Home</span>
      </li>
      <li class="mx-4">
        <span class="font-medium text-gray-500">Trip Planner</span>
      </li>
      <li class="mx-4">
        <span class="font-medium text-gray-500">Blogs</span>
      </li>
      <li class="mx-4">
        <span class="font-medium text-gray-500">Categories</span>
      </li>
      <li class="mx-4">
        <span class="font-medium text-gray-500">Stories</span>
      </li>
      <li class="mx-4">
        <span class="font-medium text-gray-500">Contact</span>
      </li>
      <li class="mx-4">
        <span class="font-light text-gray-500">
          <i data-feather="search" class="text-gray-400"></i>
        </span>
      </li>
    </ul>
  </div>
</header>
```
- `flex` utility class is used to display the navigation items horizontally. 
- `mx-4` gives all the list items a margin of 4px on both sides. 

On your browser, your new site should look like the screenshot below:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1580933876855_Screenshot+2020-02-05+at+9.16.32+PM.png)


## Building the Hero Section
The hero section features two sections, the first is the area with image and the heading text while the second is a floating area with a call to action button.
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581118486461_hero-annotation.png)

First we’ll do the background image and the heading area before we do the slideshow indicators:
    
```
<!-- index.html -->
    ...
    <body>
      <header>
        ...
      </header>
      <div class="w-11/12 flex ml-auto relative">
          <section class="py-16 px-16 hero w-full flex justify-between">
            <div>
              <!-- heading area -->
            </div>
            <div>
              <!-- Indicators area -->
            </div>
          </section>
          <! -- floating call to action -->
        </div>
    </body>
```
- We gave the hero section a width of `91%` using the `w-11/12` class and pushed it to the right by giving it an auto margin on the left with `ml-auto`. We’ve also set its position to `relative` as it will be the reference of our floating call to action div.

- To set the background image, add some custom styles to the **index.css** file.
```
    .hero {
      background: url('./assets/imgs/beach-bg.jpg') no-repeat;
      height: 500px;
      width: 100%;
    }
```
 You can find all image assets used in this GitHub [repository](https://github.com/paulayuk/vacarion)
 
- Add the following snippet where you have the `heading area` comment:
```
    <!-- heading area -->
    <h1 class="text-white text-5xl font-hairline leading-tight">
      <span class="font-semibold"> Discover</span> a touch <br />
      of nature's <br />
      clarity
    </h1>
    <div class="mt-10">
      <div class="h-10 w-10 border border-blue-300 flex justify-center items-center">
        <i data-feather="play" class="text-white fill-current h-4"></i>
      </div>
    </div>
```
- Let’s walkthrough some of the new classes we’re using here:
    - `leading-tight`: is used to reduce the line height. You can check the docs for more classes prefixed with `leading-` [here](https://tailwindcss.com/docs/line-height/#app).
    - `fill-current`: is used to fill the SVG background with the text color.
    - `h-10 & w-10` - sets the height and width of the box to 2.5 rem.
    - `border & border-blue-300`: sets a border around the element and gives it the color blue.

**NB:** calling `feather.replace()` swaps the `i` element with SVGs. The classes assigned to the `i` element are transferred.

Next up, is the slide indicators area. The container element (**the section tag**) has a class of `justify-between` so the container element for the indicators will be pushed to the far right. 

Add the following code snippet where you have the indicators area comment:
    
```
<!-- Indicators area -->
    
    <h2 class="text-3xl tracking-wide font-extrabold text-white">01</h2>
    <div class="flex flex-col mt-8 items-center">
      <div class="h-2 w-2 border border-white rounded-full mb-4"></div>
     <div class="h-2 w-2 border border-white bg-white rounded-full mb-4"></div>
      <div class="h-2 w-2 border border-white rounded-full mb-4"></div>
      <div class="h-2 w-2 border border-white rounded-full mb-4"></div>
    </div>
    <div class="flex flex-col items-center text-white mt-8">
      <i data-feather="chevron-up" class="mb-3 h-4 w-4"></i>
      <i data-feather="chevron-down" class=" h-4 w-4"></i>
    </div>
```
- Let’s walkthrough some of the new classes used:
    - `flex-col` : used to to position flex items vertically.
    - `rounded-full` : Used to create pills and circles.
    - `tracking-wide`: Adds a letter-spacing of **0.025em** to the element.

Now, let’s deal with the floating area. We’ll need to add some custom styles to deal with the absolute positioning. First, let’s define the structure. Add the following in the space defined for the **floating call to action**:
```
    <! -- floating call to action -->
    
    <div class="absolute flex py-6 px-8 justify-between items-center w-3/4 shadow-xl bg-white floating-sub-hero">
    <div>
      <p class="uppercase mb-0 text-gray-400 text-xxs font-bold tracking-wider">
        Asian
      </p>
      <h2 class="text-2xl mb-0 tracking-wide font-normal">
        <b>Indonesia</b>
      </h2>
    </div>
    <div class="flex">
      <div class="flex flex-col items-end">
        <p class="text-gray-400 uppercase font-bold text-xs tracking-wider m-0">
          Summer tour
        </p>
        <p class="text-left uppercase text-xs mb-0 mt-2 font-black">
          Nov 2018
        </p>
      </div>
      <div class="ml-5">
        <div class="h-12 w-12 bg-blue-600 flex items-center justify-center shadow">
          <p class="text-white m-0 text-3xl font-hairline">+</p>
        </div>
      </div>
    </div>
    </div>
```
- Then add the following to the `index.css` file:
   
```
.floating-sub-hero {
      bottom: -7%;
      left: 10%;
    }
```
- We give the hero a bottom value of **-7%** to cause the overlay effect and a left value of **10%** to move it away from the edge.
 
- In your browser, You should see a view similar to this when you navigate to http://localhost:1234
![Photo by Pedro Monteiro on Unsplash](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581222811387_Screenshot+2020-02-09+at+5.33.12+AM.png)


## The planner section
- The planner section is divided into two sections with the first containing a little writeup about the planner and the second section contains the different plans in a card format. Here’s the area in question:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581223946967_vacarion-planner.png)

- Here’s how the HTML skeleton of the area would look like:
```
    <div class="w-4/5 mx-auto mt-32">
      <section class="flex">
        <div class="w-2/5">
          <!-- explore plans section -->
        </div>
        <div class="ml-auto w-2/4 flex">
          <!-- cards section -->
        </div>
      </section>
    </div>
```

- For the explore section, replace the comment with the following snippet:
```   
 <!-- explore area -->
    <div>
      <h2 class="text-3xl font-light">
        Trip Planner
      </h2>
      <div class="h-1 bg-gray-300 w-10 mt-2"></div>
    </div>
    <p class="text-sm text-gray-500 font-normal my-4 leading-loose">
      Lorem, ipsum dolor sit amet consectetur adipisicing elit. Molestias
      mollitia enim aliquid debitis, dolor deserunt nihil in culpa vitae
      quibusdam qui earum cum! Similique eveniet at magnam laboriosam
      consequatur illo.
    </p>
    <button
      class="bg-blue-600 py-3 px-5 text-xs font-semibold text-white flex justify-center items-center mt-4 shadow-lg"
    >
      Explore <i data-feather="arrow-right" class="ml-1 h-4"></i>
    </button>
```

Add the following in the trip plans card section. For the sake of brevity, the code for the card item will be posted once, copy and paste it twice and update the contents of the second card to match the design:

```
    <!-- card -->
    <div class="w-2/5 mr-auto tour-card">
      <div>
        <div class="relative image-section">
          <img
            src="./assets/imgs/beach-chills.jpg"
            alt="Umbrellas at the beach"
          />
          <div
            class="absolute bg-white p-2 shadow-lg right-0 bottom-0 flex items-center justify-center w-16"
          >
            <span class="text-xxs absolute font-bold dollar-sign">$</span>
            <p class="m-0 text-base font-semibold">479</p>
          </div>
        </div>
        <p class="text-sm font-medium mt-2">
          Tour Pantai Selatan Yogyakarta Inter Matter
        </p>
        <div class="flex mt-2">
          <p class="uppercase text-gray-500 font-semibold text-xxs">
            15 days tour
          </p>
          <div class="flex ml-10">
            <i
              data-feather="star"
              class="h-3 fill-blue mr-1 text-blue-600 w-3"
            ></i>
            <i
              data-feather="star"
              class="h-3 fill-blue mr-1 text-blue-600 w-3"
            ></i>
            <i
              data-feather="star"
              class="h-3 fill-blue mr-1 text-blue-600 w-3"
            ></i>
            <i
              data-feather="star"
              class="h-3 fill-blue mr-1 text-blue-600 w-3"
            ></i>
            <i data-feather="star" class="h-3 text-gray-400 w-3"></i>
          </div>
        </div>
      </div>
    </div>
```

 The image assets used for this can be found in this [repository](https://github.com/paulayuk/vacarion). After duplicating the card, use this  [image](https://github.com/paulayuk/vacarion/blob/master/assets/imgs/beach-overview.jpg)
- For this section, we used a few custom styles. Copy the following styles into the `index.css` file:

```
    // index.css
    
    .text-xxs {
      font-size: 9px;
    }
    .dollar-sign {
      top: 11px;
      left: 11px;
    }
    .fill-blue {
      fill: #3182ce;
    }
    
    img {
      max-width: 100%;
      max-height: 100%;
    }
    
    .tour-card .image-section {
      width: 200px;
      height: 250px;
    }
```
- You should see a view on your browser similar to the one shown below:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581279986481_Screenshot+2020-02-09+at+9.21.09+PM.png)

![](/static/img/pixel.gif)

- Below the trip planner is a small section talking about the company blog. The section we are working can be seen below:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581416425736_Screenshot+2020-02-11+at+11.12.45+AM.png)

- Add the following snippet below the trip planner section:

```
    <div class="w-11/12 mr-auto mt-32">
      <section class="flex items-center">
        <div class="w-1/2">
          <img src="./assets/imgs/beach-trees.jpg" alt="Trees at the beach" />
        </div>
        <div class="w-2/5 ml-auto">
          <div>
            <h2 class="text-3xl font-light">
              Blogs
            </h2>
            <div class="h-1 bg-gray-300 w-10 mt-2"></div>
          </div>
          <p class="text-sm text-gray-500 font-normal my-4 leading-loose">
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Molestias
            mollitia enim aliquid debitis, dolor deserunt nihil in culpa vitae
            quibusdam qui earum cum! Similique eveniet at magnam laboriosam
            consequatur illo.
          </p>
          <button
            class="bg-blue-600 py-3 px-5 text-xs font-semibold text-white flex justify-center items-center mt-4 shadow-2xl"
          >
            Read More <i data-feather="arrow-right" class="ml-1 h-4"></i>
          </button>
        </div>
      </section>
    </div>
```
- Navigate to http://localhost:1234 to see the latest changes:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581417259169_Screenshot+2020-02-11+at+11.33.57+AM.png)

## The Categories
- The area showcasing the different categories is in form of a slider. We'd focus on the display than the functionality:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581419686452_Screenshot+2020-02-11+at+12.05.36+PM.png)

We’d split the implementation of this section into three parts for the sake of brevity. The skeleton for this section should look like this:

```
    <div class="mt-32">
      <section class="w-4/5 mx-auto flex justify-between items-center">
        <!-- header and arrow buttons -->
      </section>
      <section class="flex justify-between slideshow px-6 mt-4">
        <!-- category cards -->
      </section>
      <section class="mt-16">
        <!-- Slider indicators -->
      </section>
    </div>
```
- The header is split into three sections: the header text, the write up and the arrow buttons. We’D use the `flex` class and `justify-between` to space the contents:

```
    <!-- header and arrow buttons -->
    <div class="w-1/5 mr-auto">
      <h2 class="text-3xl font-light">
        Categories
      </h2>
      <div class="h-1 bg-gray-300 w-10 mt-2"></div>
    </div>
    <div class="w-1/2">
      <p class="text-sm text-gray-500 font-normal my-4 leading-loose">
        Lorem, ipsum dolor sit amet consectetur adipisicing elit. Molestias
        mollitia enim aliquid debitis, dolor deserunt Nihil in culpa vitae
        quibusdam qui earum cum! Similique eveniet at magnam laboriosam
        consequatur illo.
      </p>
    </div>
    <div class="flex justify-center w-1/5 ml-auto">
      <div>
        <button
          class="bg-white text-gray-500 border border-gray-400 py-4 px-4 text-xs font-semibold flex justify-center items-center mr-3"
        >
          <i data-feather="arrow-left" class="h-4"></i>
        </button>
      </div>
      <div>
        <button
          class="bg-blue-600 py-4 px-4 text-xs border border-blue-600 font-semibold text-white flex justify-center items-center shadow-xl"
        >
          <i data-feather="arrow-right" class="h-4"></i>
        </button>
      </div>
    </div>
```
Next is the slider, the snippet below is for just one of the slides, you can copy and paste it three more times and update the content to get the all the slides present:

```
    <!-- category card -->
    <div class="card relative">
      <img src="./assets/imgs/beach-seats.jpg" alt="" />
      <div class="absolute overlay-text w-full flex flex-col items-center">
        <p class="text-white text-xl tracking-tight">Waterfall</p>
        <p class="text-xs text-gray-500 font-semibold uppercase mt-1">
          43 Adventures
        </p>
      </div>
    </div>
```
- To get the slider working, you can use the dependency free library [GlideJs](https://github.com/glidejs/glide) or you can make use of [Slick](https://kenwheeler.github.io/slick/) that depends on Jquery.


- And then for the indicators, we’ll have a simple setup as seen below:

```
    <!-- slide indicators -->
    <div class="flex mx-auto justify-center">
      <div class="h-1 w-10 bg-gray-400 mr-4"></div>
      <div class="h-1 w-10 bg-gray-400 mr-4"></div>
      <div class="h-1 w-10 bg-blue-600 mr-4"></div>
      <div class="h-1 w-10 bg-gray-400 mr-4"></div>
      <div class="h-1 w-10 bg-gray-400"></div>
    </div>
```

- And then add the following custom styles to the `index.css` file:
```
    /* index.css */
    .slideshow .card {
      width: 24%;
      height: 300px;
    }
    .slideshow .card .overlay-text{
      bottom: 20px;
    }
    .slideshow .card img{
      object-fit: cover;
      width: 100%;
      filter: brightness(50%);
    }
```

- You should see a view similar to the one below in your browser:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581423408042_Screenshot+2020-02-11+at+1.16.33+PM.png)

- You can find the assets used [here](https://github.com/paulayuk/vacarion). Visit http://localhost:1234 to view the changes.

## The stories section
- This section features an interesting background that I couldn’t find and my rusty Sketch skills weren’t enough to fully replicate it so I took a screenshot of the design and patched it to get the background. I’ll add a link to the patched background, you can always have a go at recreating the design or using a separate image.
- Before we get started, this is the section in question:
![That social connection](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581427696864_Screenshot+2020-02-11+at+2.25.25+PM.png)

- We’d handle this section in two parts, the heading and sub-heading and then the user profile card. We won’t be attempting the background using Tailwind as it’ll most likely be a background image. Here is how the skeleton of this section will look:

```
    <div class="mt-40">
      <!-- heading and sub-heading -->
      <div class="travel-stories flex justify-between">
        <!-- user card -->
      </div>
    </div>
```

For the heading, we’d deploy the following setup:

```
    <div class="flex flex-col items-center">
      <h2 class="text-4xl font-hairline text-gray-800 text-center">
        Share your stories
      </h2>
      <div class="h-1 bg-gray-400 w-12 mt-2"></div>
    </div>
    <div class="mt-10 mx-auto">
      <p class="text-sm font-hairline text-center text-gray-600">
        Join a community of awesome people, share your stories <br />
        and share them with people all over the world
      </p>
    </div>
```

- And then for the stories we’ll attempt a hack to achieve the positioning of the story card. My first thought was to opt for an absolute positioning of the card but I tried the method shown in the code snippet below instead:

```
    <!-- story card -->
    <div class="w-1/5"></div>
    <div class="w-1/5"></div>
    <div class="w-1/5"></div>
    <div class="w-1/5">
      <div class="w-full shadow-2xl mt-12">
        <div class="flex justify-center">
          <img
            src="https://randomuser.me/api/portraits/women/44.jpg"
            alt=""
            class="rounded-full border h-24 w-24"
          />
        </div>
        <div class="px-5 py-4 bg-white">
          <h3 class="text-center tracking-wide">Cynthia Mayoris</h3>
          <p
            class="text-center text-xs text-gray-500 uppercase tracking-wider font-semibold"
          >
            New York, USA
          </p>
          <div class="flex justify-center mt-4">
            <div class="flex mr-4">
              <span data-feather="user" class="fill-current h-4 w-4 mr-1"></span>
              <p class="text-xxs font-bold">
                12k
              </p>
            </div>
            <div class="flex">
              <span data-feather="heart" class="fill-current h-4 w-4 mr-1"></span>
              <p class="text-xxs font-bold">
                3k
              </p>
            </div>
          </div>
        </div>
        <div>
          <button
            class="w-full bg-blue-600 py-6 px-5 text-xs border border-blue-600 font-semibold text-white flex justify-center items-center shadow-xl"
          >
            View Stories <i data-feather="arrow-right" class="h-4 ml-3"></i>
          </button>
        </div>
      </div>
    </div>
    <div class="w-1/5"></div>
```
- I created a grid containing five items and placed the card in the fourth column, giving us the positioning we desired. We added custom styles to set the background, copy and add them to the `index.css` file:

```
    .travel-stories{
      background: url('/stories-bg.jpg') no-repeat;
      background-size: cover;
      height: 550px;
    }
```
You can find the background image used [here](https://github.com/HackAfro/vacarion-project). You’ll find it all patched up.
- We can head to the browser again for updates. You should find the stories section showing up looking like the screenshot below:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581432679012_Screenshot+2020-02-11+at+3.51.03+PM.png)

- 
## Testimonials Section
- The testimonials section will also feature a slider so my recommendations for Javascript sliders will come in handy here also. We’ll take on this section in bits as we’ve done before, it is divided into three columns. The columns can be seen below:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581432850773_Screenshot+2020-02-11+at+3.53.58+PM.png)

- The writeup and the rating on the left, the user photo in the middle and the header and buttons on the right. The slider indicators are below. First, we’ll define the skeleton of the section:

```
    <div class="mt-32">
      <section class="w-4/5 flex mx-auto">
        <div class="w-1/3 px-3">
         <!-- Review text and rating -->
        </div>
        <div class="w-1/3 px-4 flex justify-center">
          <!-- User photo -->
        </div>
        <div class="w-1/3 px-4">
          <!-- Header and arrow buttons -->
        </div>
      </section>
      <section class="mt-12">
       <!-- slider indicators -->
      </section>
    </div>
- For the review section, the markup should look like this:
    <!-- Review text and rating -->
    <div class="flex justify-end mb-4">
      <i
        data-feather="star"
        class="h-3 fill-blue mr-1 text-blue-600 w-3"
      ></i>
      <i
        data-feather="star"
        class="h-3 fill-blue mr-1 text-blue-600 w-3"
      ></i>
      <i
        data-feather="star"
        class="h-3 fill-blue mr-1 text-blue-600 w-3"
      ></i>
      <i
        data-feather="star"
        class="h-3 fill-blue mr-1 text-blue-600 w-3"
      ></i>
      <i data-feather="star" class="h-3 text-gray-400 w-3"></i>
    </div>
    <p class="text-sm font-hairline text-gray-600">
      Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quibusdam
      iure cupiditate necessitatibus aut, placeat dignissimos tempora
      accusantium beatae? Vitae placeat eum aperiam amet saepe porro
      commodi. Eos odio numquam totam?
    </p>
    <div class="mt-3">
      <p class="text-sm font-hairline text-right">Barry Underwood</p>
      <p
        class="text-xs text-gray-400 uppercase font-semibold mt-1 text-right"
      >
        Traveler
      </p>
    </div>
```

- Next is the reviewer photo. A simple photo given a width and height:
```
    <!-- User photo -->
    <img
      src="./assets/imgs/photo-male.jpg"
      alt="Someone's face"
      class="h-56 w-56"
    />
```
  Photo by [**Italo Melo**](https://www.pexels.com/@italo-melo-881954?utm_content=attributionCopyText&utm_medium=referral&utm_source=pexels) from [**Pexels**](https://www.pexels.com/photo/portrait-photo-of-smiling-man-with-his-arms-crossed-standing-in-front-of-white-wall-2379004/?utm_content=attributionCopyText&utm_medium=referral&utm_source=pexels)**.** You can find the image used here.
  
- And then the header and the arrow buttons:
```
    <!-- Header and arrow buttons -->
    <div>
      <h2 class="text-4xl font-hairline text-gray-700">
        What people <br />
        says
      </h2>
      <div class="h-1 bg-gray-300 w-10 mt-2"></div>
    </div>
    <div class="flex justify-start mt-12 ml-auto">
      <div>
        <button
          class="bg-white text-gray-500 border border-gray-400 py-4 px-4 text-xs font-semibold flex justify-center items-center"
        >
          <i data-feather="arrow-left" class="h-4"></i>
        </button>
      </div>
      <div>
        <button
          class="bg-blue-600 py-4 px-4 text-xs border border-blue-600 font-semibold text-white flex justify-center items-center shadow-xl"
        >
          <i data-feather="arrow-right" class="h-4"></i>
        </button>
      </div>
    </div>
```
 
 Adding the slider indicators last. We can use a similar markup we used for the indicators categories section. This it how it looks for this section:
 
 ```
    <!-- slider indicators -->
    <div class="flex justify-center">
      <div class="h-1 w-10 bg-gray-400 mr-4"></div>
      <div class="h-1 w-10 bg-gray-400 mr-4"></div>
      <div class="h-1 w-10 bg-gray-400 mr-4"></div>
      <div class="h-1 w-10 bg-blue-600 mr-4"></div>
      <div class="h-1 w-10 bg-gray-400 mr-4"></div>
      <div class="h-1 w-10 bg-gray-400"></div>
    </div>
```
- Our project is near completion, this is how it currently looks:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581450167163_Screenshot+2020-02-11+at+8.41.13+PM.png)

## The footer
- The application features a minimalistic footer setup, it showcases the social media links and some of the pages relating to policy and privacy. The footer looks this way:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581450616053_Screenshot+2020-02-11+at+8.50.02+PM.png)

- The inline links and social icons can be achieved using a `flex` display coupled with `justify-between` to space the content. Let’s see how the markup of the footer will look:

```
    <footer id="footer" class="py-8 mt-32">
      <section class="w-4/5 mx-auto flex justify-between">
        <div>
          <p class="text-sm text-white m-0">&copy; Vacarion 2020 All Rights Reserved</p>
        </div>
        <div>
          <ul class="flex text-white items-center">
            <li class="mr-5"><a href="#" class="text-sm">Terms & Conditions</a></li>
            <li class="mr-5"><a href="#" class="text-sm">Privacy</a></li>
            <li class="mr-5"><a href="#" class="text-sm">Policy</a></li>
            <li class="mr-5"><a href="#" class="text-sm">Cookies</a></li>
          </ul>
        </div>
        <div>
          <ul class="flex items-center">
            <li class="mr-4 h-8 w-8 rounded-full flex justify-center bg-white items-center"><i class=" h-4 w-4" data-feather="instagram"></i></li>
            <li class="mr-4 h-8 w-8 rounded-full flex justify-center bg-white items-center"><i class=" h-4 w-4" data-feather="twitter"></i></li>
            <li class="mr-4 h-8 w-8 rounded-full flex justify-center bg-white items-center"><i class=" h-4 w-4" data-feather="linkedin"></i></li>
            <li class="mr-4 h-8 w-8 rounded-full flex justify-center bg-white items-center"><i class=" h-4 w-4" data-feather="facebook"></i></li>
            <li class="mr-4 h-8 w-8 rounded-full flex justify-center bg-white items-center"><i class=" h-4 w-4" data-feather="youtube"></i></li>
          </ul>
        </div>
      </section>
    </footer>
```

- To add the background color to the footer, add the following style to the `index.css` file:
```
    #footer {
      background-color: #13283a;
    }
```
- Here is how it looks when viewed on the browser:
![](https://paper-attachments.dropbox.com/s_8C591703388526B1BECAC08CE55736083238D2670C09EA358C1521A13565CACA_1581452023048_Screenshot+2020-02-11+at+9.13.24+PM.png)

- You can find the full page demo of the application [here](https://youthful-goodall-f27fb3.netlify.app/).
## Conclusion
- In this article, we’ve seen how we can do a full page website design using utility classes from Tailwind. In total, we wrote 50 lines of custom pure CSS, which is amazing. You can take the current setup a step further by making the site responsive also using utility classes provided by Tailwind. You can find a tutorial in the Tailwind docs on responsive design [here](https://tailwindcss.com/course/responsive-design/#app).

- The complete code used in this tutorial can be found [here](https://github.com/paulayuk/vacarion). The demo can be viewed using this [link](https://youthful-goodall-f27fb3.netlify.app/).