Đăng nhập

Hướng Dẫn Tạo Image Slider Bằng HTML, CSS và JavaScript

Từng dòng code là một bài học — tạo image slider chuyên nghiệp chỉ với HTML, CSS, JS.

Bạn đã từng thấy những slideshow ảnh mượt mà với hiệu ứng chuyển cảnh đẹp mắt? Trong bài hướng dẫn này, chúng ta sẽ cùng nhau xây dựng một image slider hiện đại giống như các website chuyên nghiệp — không cần thư viện ngoài, chỉ với HTML, CSS và JavaScript thuần túy.

Bạn sẽ học cách tạo hiệu ứng chuyển ảnh, thêm nút điều hướng trái/phải, hiển thị chấm tròn điều khiển ảnh, và đặc biệt là hiểu rõ từng dòng code qua từng bước một cách dễ dàng.

Dù bạn mới bắt đầu học web hay đã học lâu nhưng muốn làm chủ front-end, đây là bài hướng dẫn bạn không nên bỏ qua!

Sau bài hướng dẫn này, bạn sẽ:

  • Hiểu cách hoạt động của một slider ảnh
  • Biết tổ chức HTML, dùng CSS để tạo hiệu ứng chuyển động
  • Biết điều khiển slider bằng JavaScript
  • Biết cách tự động hoá (auto play), bắt sự kiện (click, chấm tròn)

1. Cấu trúc tổng thể slider gồm những phần gì?

Một image slider cơ bản gồm:

Thành phầnVai trò
.slider-containerÔ bao toàn bộ slider
.sliderChứa tất cả các ảnh (.slide)
.slideMỗi ảnh đơn lẻ
.prev / .nextNút điều hướng trái/phải
.dots / .dotDãy chấm tròn dưới ảnh (pagination)

2. Viết HTML: Giao diện cơ bản

<div class="slider-container">
  <div class="slider">
    <img src="..." class="slide active" />
    <img src="..." class="slide" />
    ...
  </div>

  <button class="nav prev">&#10094;</button>
  <button class="nav next">&#10095;</button>

  <div class="dots">
    <span class="dot active"></span>
    <span class="dot"></span>
    ...
  </div>
</div>

Giảng giải:

  • <img class="slide">: mỗi ảnh đều là một “slide”
  • class="active" giúp ta biết ảnh nào đang được hiển thị
  • &#10094;&#10095; là mã ký tự cho mũi tên trái/phải
  • <span class="dot">: tạo các chấm để điều hướng ảnh

3. Viết CSS: Thiết kế giao diện đẹp, đổ bóng, hiệu ứng mượt

.slider-container {
  position: relative;
  width: 600px;
  height: 300px;
  box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);
  border-radius: 10px;
  overflow: hidden;
}

Giảng giải:

  • position: relative giúp định vị các nút con (absolute)
  • box-shadow: tạo đổ bóng đẹp
  • overflow: hidden: che những slide không active

.slide {
  position: absolute;
  opacity: 0;
  transition: opacity 0.5s ease-in-out;
}
.slide.active {
  opacity: 1;
}

Giảng giải:

  • Tất cả slide chồng lên nhau (absolute)
  • Mỗi lần chỉ hiển thị 1 slide có opacity: 1
  • transition làm cho việc chuyển ảnh mượt

.nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: white;
  border-radius: 50%;
  cursor: pointer;
}

Giảng giải:

  • Nút nằm giữa chiều cao (top 50% + transform)
  • Làm tròn (border-radius: 50%) và có hiệu ứng hover

4. Viết JavaScript: Điều khiển slider bằng code

const slides = document.querySelectorAll('.slide');
const dots = document.querySelectorAll('.dot');

Giải thích:

  • Tìm tất cả slide và chấm để xử lý sau

let currentIndex = 0;
let slideInterval = setInterval(nextSlide, 4000);

Giải thích:

  • currentIndex: lưu ảnh đang hiển thị
  • setInterval: tự động chuyển ảnh mỗi 4 giây

function showSlide(index) {
  slides.forEach((slide, i) => {
    slide.classList.toggle('active', i === index);
    dots[i].classList.toggle('active', i === index);
  });
}

Giải thích:

  • Với mỗi ảnh và mỗi chấm, ta kiểm tra i === index để bật active đúng cái cần

function nextSlide() {
  currentIndex = (currentIndex + 1) % slides.length;
  showSlide(currentIndex);
}
  • Chuyển tới slide kế tiếp (quay vòng bằng %)
  • Cập nhật giao diện bằng showSlide()

next.addEventListener('click', () => {
  nextSlide();
  resetTimer();
});
  • Gắn sự kiện click vào nút > để chuyển slide thủ công

function resetTimer() {
  clearInterval(slideInterval);
  slideInterval = setInterval(nextSlide, 4000);
}
  • Khi người dùng click điều hướng, ta reset lại thời gian chờ → tránh chuyển gấp

Bài tập mở rộng (nâng cao):

Tính năng nâng cấpGợi ý thực hiện
Dừng slider khi hoverDùng mouseover, mouseout để clearInterval()
Swipe trên điện thoạiDùng touchstart, touchend
Hiển thị số ảnh hiện tạiThêm text “1/4”, thay đổi theo index
Dùng hiệu ứng slide (không opacity)Dùng transform: translateX()

Kết luận

Bạn vừa hoàn thành một slider ảnh thực chiến:

  • Thiết kế giao diện đẹp mắt
  • Dùng HTML/CSS để trình bày
  • Dùng JavaScript để điều khiển logic
  • Mở rộng dễ dàng

Chúc mừng bạn đã nắm được một trong những kỹ thuật front-end quan trọng!

Đăng ngày 04/08/2025 • bởi Thái Hưng

Thảo luận

🔒 Bạn phải đăng nhập để gửi bình luận.
Quay lại danh sách bài viết

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.