DEV Community

Cover image for Creating CSS-Only Parallax Effects: Step-by-Step Guide
Christiana Uloma
Christiana Uloma

Posted on

Creating CSS-Only Parallax Effects: Step-by-Step Guide

Image description

Parallax effects make elements on a webpage move at different speeds, creating a sense of depth. It's a way to make things look more interesting.

Parallax effects are popular in web design because they make websites more engaging. They capture people's attention and make the website look better.

This article will show you how to create parallax effects using only CSS. You don't need JavaScript or other fancy technologies.

Let's get started!

What's parallax effect?

As said earlier, parallax effects involve moving elements on a webpage at different speeds, creating a sense of depth and immersion. It's like giving the illusion of objects in the foreground and background moving at different rates as you scroll or interact with the website.

Types: There are various types of parallax effects commonly used in web design, but in this case we will examine just two them:

  • One type is the "scrolling parallax" where different layers move at different speeds as you scroll.

  • Another type is the "mouse movement parallax" where elements respond to your mouse movement, creating an interactive effect.

Step1: To begin, create a new HTML file by opening a text editor (in this case, vs code) and saving the file with a ".html" extension. Here's a template to start with:

<!DOCTYPE html>
<html>
<head>
  <title>Your Page Title</title>
  <link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
  <!-- Your content goes here -->
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Next, organize the elements that you want to apply the parallax effect to. Typically, you will have multiple elements to create the illusion of depth.

Example:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="style.css">
  <title>Document</title>
</head>
<body>
  <!-- Create a parallax container with a background image -->
<div class="parallax bg-1"></div>

<!-- Add some content inside a white container -->
<div class="content">
  <h1>Parallax Example</h1>
  <p>This is a simple demonstration of how to create a parallax effect using html and css.</p>
</div>

<!-- Create another parallax container with a different background image -->
<div class="parallax bg-2"></div>

<!-- Add some more content inside a white container -->
<div class="content">
  <h1>Another Parallax Example</h1>
  <p>You can use different images and styles to create different parallax effects.</p>
</div>

<!-- Create a third parallax container with another background image -->
<div class="parallax bg-3"></div>

<!-- Add some final content inside a white container -->
<div class="content">
  <h1>Final Parallax Example</h1>
  <p>Hope you enjoyed this simple tutorial on how to create a parallax effect using html and css.</p>
</div>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Step2: To begin styling the parallax elements, you will start by defining the parallax container and adding the necessary background properties to create the scrolling effect.

Example:

/* Define the parallax container */
.parallax {
  /* Set a specific height */
  height: 500px;

  /* Create the parallax scrolling effect */
  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}
Enter fullscreen mode Exit fullscreen mode

In the above code, the height property determines the height of the parallax container, which can be adjusted to fit your design requirements. The background-attachment property set to fixed ensures that the background image remains fixed while the content scrolls.

The background-position property centers the background image, background-repeat is set to no-repeat to prevent the image from repeating, and background-size set to cover ensures the image covers the entire container.

Step3: Here, we will define the background image.

Example:

/* Define the background images */
.bg-1 {
  background-image: url("neom-4AADxUsnufQ-unsplash\ \(1\).jpg");
}

.bg-2 {
  background-image: url("aleksandr-popov--DhozujVOF8-unsplash.jpg");
}

.bg-3 {
  background-image: url("neom-4AADxUsnufQ-unsplash\ \(1\).jpg");
}
Enter fullscreen mode Exit fullscreen mode

The provided code includes three classes: .bg-1, .bg-2, and .bg-3, each representing a different background image.

Note, you can replace the image URLs with the paths to your desired images.

Step4: To style the content within the parallax container, follow this steps:

/* Define the content style */
.content {
  position: relative;
  background-color: white;
  padding: 20px;
}
Enter fullscreen mode Exit fullscreen mode

Here, the .content class is positioned relative and has a white background color with a padding of 20px. As said earlier, you can modify the styles within the .content class to match your design preferences.

Step5: Here, we will define the animations for the background images.

Example:

/* Define the animation for the background image */
@keyframes move-bg-1 {
  from {background-position: 0% 50%;}
  to {background-position: 100% 50%;}
}

/* Define the animation for the midground image */
@keyframes move-bg-2 {
  from {background-position: 0% 50%;}
  to {background-position: 50% 50%;}
}

/* Define the animation for the foreground image */
@keyframes move-bg-3 {
  from {background-position: 0% 50%;}
  to {background-position: 25% 50%;}
}
Enter fullscreen mode Exit fullscreen mode

In the above code, three separate keyframe animations move-bg-1, move-bg-2, and move-bg-3 were defined. Each of them specifies the background-position property to control the movement of the background images.

Also, the from keyword sets the initial position of the background image, while the to keyword sets the final position.

Step6: In this section, we will trigger the animations on hover. Here's how:

/* Trigger the animation when the user hovers over the container */
.parallax:hover {
  animation: move-bg-1 5s linear infinite;
}

.bg-2:hover {
  animation: move-bg-2 5s linear infinite;
}

.bg-3:hover {
  animation: move-bg-3 5s linear infinite;
}
Enter fullscreen mode Exit fullscreen mode

In the above code, when the .parallax container is hovered over, the move-bg-1 animation is applied, creating a parallax effect on the background image with a duration of 5 seconds and a linear timing function. Similarly, when the .bg-2 or .bg-3 classes are hovered over, the move-bg-2 or move-bg-3 animations are applied respectively, creating parallax effects on the midground and foreground images.

Step7: In this section, we combine the overall CSS code and display the output.

/* Define the parallax container */
.parallax {
  /* Set a specific height */
  height: 500px;

  /* Create the parallax scrolling effect */
  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

/* Define the background images */
.bg-1 {
  background-image: url("neom-4AADxUsnufQ-unsplash\ \(1\).jpg");
}

.bg-2 {
  background-image: url("aleksandr-popov--DhozujVOF8-unsplash.jpg");
}

.bg-3 {
  background-image: url("neom-4AADxUsnufQ-unsplash\ \(1\).jpg");
}

/* Define the content style */
.content {
  position: relative;
  background-color: white;
  padding: 20px;
}

/* Define the animation for the background image */
@keyframes
 move-bg-1 {
  from {background-position: 0% 50%;}
  to {background-position: 100% 50%;}
}

/* Define the animation for the midground image */
@keyframes
 move-bg-2 {
  from {background-position: 0% 50%;}
  to {background-position: 50% 50%;}
}

/* Define the animation for the foreground image */
@keyframes
 move-bg-3 {
  from {background-position: 0% 50%;}
  to {background-position: 25% 50%;}
}

/* Trigger the animation when the user hovers over the container */
.parallax:hover {
  animation: move-bg-1 5s linear infinite;
}

.bg-2:hover {
  animation: move-bg-2 5s linear infinite;
}

.bg-3:hover {
  animation: move-bg-3 5s linear infinite;
}
Enter fullscreen mode Exit fullscreen mode

Output:

Image description

Conclusion

Implementing a parallax effect in your HTML and CSS can add depth and visual interest to your website. By organizing the necessary elements, applying appropriate classes, and styling the parallax elements, you can create a captivating scrolling experience.

Thank you for reading! Feel free to say something in the comment section.

Top comments (2)

Collapse
 
kumarpritam1468 profile image
kumarpritam1468

Great onnee!!!, Would have been better if you provided the site link by hosting it free somewhere.

Collapse
 
jangelodev profile image
João Angelo

Hi Christiana Uloma,
Excellent content, very useful.
Thanks for sharing.