Google Advertisement

Create a Responsive Image Slider Using Pure CSS – No JavaScript Needed

Google Advertisement
πŸ”₯ Read with Full Features on Our Website

Learn how to design a fully functional, responsive image slider using only CSS. This step-by-step tutorial includes code examples and easy explanations for beginners.

Published on 03 May 2025
By Vandu

🎯 Design a CSS-Only Image Slider

Creating an image slider usually requires JavaScript, but you can build a beautiful and functional image slider using only CSS. In this tutorial, we’ll walk you through every step of creating a responsive CSS-only image slider with easy-to-understand code.


🧰 What You’ll Learn


🧱 Step 1: Basic HTML Structure

First, we’ll set up the HTML skeleton. This includes a container, radio inputs for navigation, slide images, and labels as controls.

<div class="slider">
  <input type="radio" name="slider" id="slide1" checked>
  <input type="radio" name="slider" id="slide2">
  <input type="radio" name="slider" id="slide3">

  <div class="slides">
    <div class="slide" id="s1">
      <img src="image1.jpg" alt="Image 1">
    </div>
    <div class="slide" id="s2">
      <img src="image2.jpg" alt="Image 2">
    </div>
    <div class="slide" id="s3">
      <img src="image3.jpg" alt="Image 3">
    </div>
  </div>

  <div class="navigation">
    <label for="slide1" class="nav-btn"></label>
    <label for="slide2" class="nav-btn"></label>
    <label for="slide3" class="nav-btn"></label>
  </div>
</div>
 

πŸ” Explanation:


🎨 Step 2: Styling the Slider with CSS

Google Advertisement

Now let’s add the styling that will make the slider work.

/* Basic setup */
.slider {
  width: 80%;
  max-width: 600px;
  margin: 40px auto;
  position: relative;
  overflow: hidden;
  border-radius: 10px;
  box-shadow: 0 0 10px rgba(0,0,0,0.3);
}

/* Hide radio buttons */
.slider input[type="radio"] {
  display: none;
}

/* Slide container */
.slides {
  display: flex;
  width: 300%;
  transition: transform 0.5s ease-in-out;
}

/* Individual slides */
.slide {
  width: 100%;
  flex-shrink: 0;
}

.slide img {
  width: 100%;
  display: block;
}

/* Navigation buttons */
.navigation {
  position: absolute;
  bottom: 10px;
  left: 50%;
  display: flex;
  gap: 10px;
  transform: translateX(-50%);
}

.nav-btn {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #ccc;
  cursor: pointer;
}

input#slide1:checked ~ .slides {
  transform: translateX(0%);
}
input#slide2:checked ~ .slides {
  transform: translateX(-100%);
}
input#slide3:checked ~ .slides {
  transform: translateX(-200%);
}

input#slide1:checked ~ .navigation label[for="slide1"],
input#slide2:checked ~ .navigation label[for="slide2"],
input#slide3:checked ~ .navigation label[for="slide3"] {
  background: #333;
}

πŸ” Explanation:


πŸ“± Step 3: Make It Responsive

Let’s make sure it works on mobile too.

@media (max-width: 600px) {
  .slider {
    width: 100%;
  }
}

πŸ§ͺ Step 4: Final Touches & Tips


πŸ“Έ Preview Screenshot (Optional for Blog)

You can add a screenshot of your final slider here.


πŸ’‘ Summary

In this tutorial, you learned how to:

βœ… Build a responsive image slider using only HTML and CSS
βœ… Use radio buttons to manage slider state
βœ… Animate slide transitions using CSS transforms and transitions
βœ… Style navigation and make it mobile-friendly


🏁 Final Code (Copy-Paste Ready)

<div class="slider">
  <input type="radio" name="slider" id="slide1" checked>
  <input type="radio" name="slider" id="slide2">
  <input type="radio" name="slider" id="slide3">

  <div class="slides">
    <div class="slide"><img src="image1.jpg" alt="Image 1"></div>
    <div class="slide"><img src="image2.jpg" alt="Image 2"></div>
    <div class="slide"><img src="image3.jpg" alt="Image 3"></div>
  </div>

  <div class="navigation">
    <label for="slide1" class="nav-btn"></label>
    <label for="slide2" class="nav-btn"></label>
    <label for="slide3" class="nav-btn"></label>
  </div>
</div>

<style>
.slider {
  width: 80%;
  max-width: 600px;
  margin: 40px auto;
  position: relative;
  overflow: hidden;
  border-radius: 10px;
  box-shadow: 0 0 10px rgba(0,0,0,0.3);
}
.slider input[type="radio"] { display: none; }
.slides {
  display: flex;
  width: 300%;
  transition: transform 0.5s ease-in-out;
}
.slide {
  width: 100%;
  flex-shrink: 0;
}
.slide img {
  width: 100%;
  display: block;
}
.navigation {
  position: absolute;
  bottom: 10px;
  left: 50%;
  display: flex;
  gap: 10px;
  transform: translateX(-50%);
}
.nav-btn {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #ccc;
  cursor: pointer;
}
input#slide1:checked ~ .slides {
  transform: translateX(0%);
}
input#slide2:checked ~ .slides {
  transform: translateX(-100%);
}
input#slide3:checked ~ .slides {
  transform: translateX(-200%);
}
input#slide1:checked ~ .navigation label[for="slide1"],
input#slide2:checked ~ .navigation label[for="slide2"],
input#slide3:checked ~ .navigation label[for="slide3"] {
  background: #333;
}
@media (max-width: 600px) {
  .slider { width: 100%; }
}
</style>
❀️ Like πŸ’¬ Comment πŸ”— Share
Google Advertisement
πŸ‘‰ View Full Version on Main Website β†—
Google Advertisement
πŸ‘‰ Read Full Article on Website