DEV Community

Cover image for Building a Responsive Four Card Feature Section
Brian Meinert
Brian Meinert

Posted on

Building a Responsive Four Card Feature Section

Building a Responsive Four Card Feature Section

Introduction

In this blog post, I will walk you through the process of building a responsive Four Card Feature Section. This project is a solution to the Frontend Mentor Four Card Feature Section challenge. The goal is to create a layout that displays four feature cards in a diamond formation on desktop screens and a column layout on mobile screens.

Project Overview

The Four Card Feature Section is a simple yet elegant design that showcases four key features of a product or service. Each card contains a title, a description, and an icon. The cards are color-coded to differentiate between the features.

Technologies Used

  • HTML5
  • CSS3
  • CSS Grid
  • Flexbox
  • Google Fonts

Project Structure

The project consists of three main files:

index.html

: The HTML structure of the project.

styles.css

: The main CSS file for styling the project.

medias.css

: The CSS file for media queries to handle responsive design.

HTML Structure

The HTML structure is straightforward. It includes a main container that holds the title section and the card section. Each card is represented by a div element with a class of card and specific classes for each feature.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Frontend Mentor | Four card feature section</title>
  <link rel="stylesheet" href="./styles.css">
  <link rel="stylesheet" href="./medias.css">
  <link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
</head>
<body>
  <main>
    <section class="container">
      <section class="title-container">
        <h1 class="text-preset-1">Reliable, efficient delivery</h1>
        <h2 class="text-preset-1-bold">Powered by Technology</h2>
        <p class="text-preset-2 title-text">Our Artificial Intelligence powered tools use millions of project data points to ensure that your project is successful</p>
      </section>
      <section class="card-section">
        <div class="card supervisor-card">
          <div class="rectangle color1"></div>
          <div class="card-text">
            <h3 class="text-preset-3 card-title">Supervisor</h3>
            <p class="text-preset-4 card-info">Monitors activity to identify project roadblocks</p>
          </div>
          <picture class="icon image1"></picture>
        </div>
        <div class="card team-builder-card">
          <div class="rectangle color2"></div>
          <div class="card-text">
            <h3 class="text-preset-3 card-title">Team Builder</h3>
            <p class="text-preset-4 card-info">Scans our talent network to create the optimal team for your project</p>
          </div>
          <picture class="icon image2"></picture>
        </div>
        <div class="card karma-card">
          <div class="rectangle color3"></div>
          <div class="card-text">
            <h3 class="text-preset-3 card-title">Karma</h3>
            <p class="text-preset-4 card-info">Regularly evaluates our talent to ensure quality</p>
          </div>
          <picture class="icon image3"></picture>
        </div>
        <div class="card calculator-card">
          <div class="rectangle color4"></div>
          <div class="card-text">
            <h3 class="text-preset-3 card-title">Calculator</h3>
            <p class="text-preset-4 card-info">Uses data from past projects to provide better delivery estimates</p>
          </div>
          <picture class="icon image4"></picture>
        </div>
      </section>
    </section>
  </main>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

CSS Styling

The CSS is divided into two files:

styles.css

for the main styling and

medias.css

for media queries.

styles.css

This file contains the base styles, including global resets, text presets, and mobile layout styles.

/* Global Styles */
*,
*::before,
*::after {
  box-sizing: border-box;
}

* {
  margin: 0;
}

body {
  background-color: #FAFAFA;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

/* Text Presets */
.text-preset-1 {
  color: #4D4F62;
  font-family: "Poppins", sans-serif;
  font-size: 1.5rem;
  font-weight: 300;
  letter-spacing: 0.01rem;
}

.text-preset-1-bold {
  color: #4D4F62;
  font-family: "Poppins", sans-serif;
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: 0.01rem;
}

.text-preset-2 {
  color: #4D4F62;
  text-align: center;
  font-family: "Poppins", sans-serif;
  font-size: 0.938rem;
  font-weight: 400;
  line-height: 1.563rem;
  letter-spacing: 0.007rem;
  opacity: 0.5;
}

/* Mobile Layout */
main {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 375px;
}

.title-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 10.063rem;
  width: 19.438rem;
  margin: 5.313rem 2rem 4.875rem 2rem;
}

.card-section {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  margin: 0 2rem 4.875rem 2rem;
}

.card {
  display: flex;
  flex-direction: column;
  background: #FFFFFF;
  border-radius: 0.5rem;
  box-shadow: 0px 15px 30px -11px rgba(131, 166, 210, 0.50);
  height: 13.875rem;
  width: 19.438rem;
}

.rectangle {
  width: 100%;
  height: 0.222rem;
  border-top-left-radius: 0.5rem;
  border-top-right-radius: 0.5rem;
}

.color1 {
  background-color: #44D3D2;
}

.color2 {
  background-color: #EA5454;
}

.color3 {
  background-color: #FCAE4A;
}

.color4 {
  background-color: #549EF2;
}

.card-title {
  padding-top: 1.75rem;
  padding-left: 1.75rem;
}

.card-info {
  padding-left: 1.75rem;
  padding-right: 1.75rem;
  padding-bottom: 1.75rem;
}

.icon {
  height: 3.563rem;
  width: 3.563rem;
  margin-right: 1.75rem;
  padding-top: 1.75rem;
  padding-right: 1.75rem;
  padding-bottom: 1.75rem;
  align-self: flex-end;
}

.image1 {
  background: url(./images/icon-supervisor.svg) 50%/cover no-repeat;
}

.image2 {
  background: url(./images/icon-team-builder.svg) 50%/cover no-repeat;
}

.image3 {
  background: url(./images/icon-karma.svg) 50%/cover no-repeat;
}

.image4 {
  background: url(./images/icon-calculator.svg) 50%/cover no-repeat;
}
Enter fullscreen mode Exit fullscreen mode

medias.css

This file contains the media queries to handle the responsive design. It adjusts the layout for larger screens, arranging the cards in a diamond formation.

@media (min-width: 75rem) {
  main {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    margin-top: 5rem;
  }

  .text-preset-1, .text-preset-1-bold {
    font-size: 2.25rem;
  }

  .container {
    width: 100%;
    max-width: 75rem;
    gap: 4rem;
  }

  .title-container {
    width: 100%;
    max-width: 33.75rem;
    margin: 2rem auto;
  }

  .card-section {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    grid-template-rows: repeat(4, 1fr);
    gap: 2rem;
    width: 100%;
    margin: 0 auto;
  }

  .card {
    width: 21.875rem;
    height: 15.625rem;
  }

  .rectangle {
    height: 0.5rem;
  }

  .card-title {
    padding-top: 1rem;
    padding-left: 1rem;
  }

  .card-info {
    padding-left: 1rem;
    padding-right: 1rem;
    max-width: 19rem;
  }

  .icon {
    height: 4rem;
    width: 4rem;
    margin-top: 2rem;
    margin-right: 1.75rem;
    margin-bottom: 1.75rem;
    padding-top: 1rem;
    padding-right: 1rem;
    padding-bottom: 1rem;
  }

  .supervisor-card {
    grid-column: 2 / 3;
    grid-row: 2 / 4;
  }

  .team-builder-card {
    grid-column: 3 / 4;
    grid-row: 1 / 3;
  }

  .karma-card {
    grid-column: 3 / 4;
    grid-row: 3 / 5;
  }

  .calculator-card {
    grid-column: 4 / 5;
    grid-row: 2 / 4;
  }
}
Enter fullscreen mode Exit fullscreen mode

Key Learnings

  1. CSS Grid: Using CSS Grid allowed me to create a complex layout with ease. The diamond formation of the cards was achieved by positioning the cards in specific grid columns and rows.
  2. Responsive Design: Media queries were essential in making the design responsive. The layout changes from a column layout on mobile screens to a diamond formation on desktop screens.

Conclusion

Building the Four Card Feature Section was a great learning experience. It helped me improve my skills in CSS Grid, Flexbox, and responsive design. I encourage you to try this project and see how you can customize it to fit your needs.

You can view the live project here and the source code here.

Top comments (0)