Trang chủ » HTML - CSS - Jquery » Responsive Card Slider bằng HTML CSS JavaScript sử dụng thư viện SwiperJs
HTML - CSS - Jquery
Responsive Card Slider bằng HTML CSS JavaScript sử dụng thư viện SwiperJs
25/06/2023
Card slider là tập hợp các thẻ được xếp theo chiều ngang và có tính năng trượt để xem các thẻ ẩn. Thẻ có thể chứa bất kỳ nội dung nào. Giống như thẻ hồ sơ, thẻ sản phẩm thương mại điện tử, thẻ blog tin tức, v.v...
Trong bài viết này mình sẽ chia sẻ với các bạn cách để tạo một Responsive Card Slider trong HTML CSS & JavaScript với SwiperJs. Card slider này sẽ bao gồm phân trang, các nút điều hướng và mũi tên để trượt thân thiện với mọi thiết bị di động.
Video hướng dẫn chi tiết
Code HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Card Slider</title>
<!--- CSS -->
<link rel="stylesheet" href="skin/css/style.css">
<!--- Swiper CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@9/swiper-bundle.min.css" />
</head>
<body>
<div class="wapper">
<div class="slide-container">
<div class="slide-content swiper mySwiper">
<div class="card-wrapper swiper-wrapper">
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/1.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/2.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/3.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/4.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/5.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/6.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/7.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/8.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/9.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
<div class="card swiper-slide">
<div class="image-content">
<span class="overlay">
</span>
<div class="card-image">
<img src="skin/images/10.jpg" alt="" class="card-img">
</div>
</div>
<div class="card-content">
<h2 class="name">Emma</h2>
<p class="description">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem dolores aut earum suscipit vitae, perspiciatis quae quasi sint tenetur iure vel totam in, odit odio minus! Dolor ipsum provident similique!
</p>
<button class="button">See More</button>
</div>
</div>
</div>
<div class="swiper-button-next swiper-navBtn"></div>
<div class="swiper-button-prev swiper-navBtn"></div>
<div class="swiper-pagination"></div>
</div>
</div>
</div>
<!--- Swiper JS -->
<script src="https://cdn.jsdelivr.net/npm/swiper@9/swiper-bundle.min.js"></script>
<!-- Initialize Swiper -->
<script>
var swiper = new Swiper(".mySwiper", {
slidesPerView: 3,
spaceBetween: 25,
loop:true,
centerSlide:'true',
fade:'true',
grabCursor:'true',
pagination: {
el: ".swiper-pagination",
clickable: true,
dynamicBullets:true,
},
navigation:{
nextEl:".swiper-button-next",
prevEl:".swiper-button-prev",
},
breakpoints:{
0:{
slidesPerView:1,
},
520:{
slidesPerView:2,
},
950:{
slidesPerView:3,
},
},
});
</script>
</body>
</html>
Code CSS
@import url('https://fonts.googleapis.com/css2?family=Roboto');
*{
margin: 0px;
padding: 0px;
box-sizing: border-box;
font-family: 'Roboto', sans-serif;
}
.wapper{
width: 100%;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: azure;
}
.slide-container{
width: 1120px;
max-width: 100%;
padding: 40px;
}
.slide-content{
margin: 0 40px;
overflow: hidden;
border-radius: 25px;
}
.card{
border-radius: 25px;
background-color: #fff;
}
.image-content,.card-content{
display: flex;
flex-direction: column;
align-items: center;
padding: 10px 14px;
}
.image-content{
position: relative;
row-gap: 5px;
}
.overlay{
position: absolute;
width: 100%;
height: 100%;
background-color: #4070f4;
left: 0;
top: 0;
border-radius: 25px 25px 0 25px;
}
.overlay::before,
.overlay::after{
content: '';
position: absolute;
width: 40px;
height: 40px;
right: 0;
bottom: -40px;
background-color: #4070f4;
}
.overlay::after{
border-radius: 0 25px 0 0;
background-color: #fff;
}
.card-image{
position: relative;
height: 150px;
width: 150px;
background-color: transparent;
border-radius: 50%;
border: solid 2px #fff;
}
.card-image .card-img{
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
border: solid 4px royalblue;
}
.card-content .name{
font-size: 18px;
font-weight: 500;
color: slategray;
}
.card-content .description{
font-size: 14px;
color:#707070;
text-align: center;
}
.card-content .button{
border: none;
font-size: 16px;
color: white;
padding: 8px 16px;
background-color: #4070f4;
border-radius: 6px;
margin: 14px;
cursor: pointer;
transition: all 0.3s ease;
}
.card-content .button:hover{
background: #265DF2;
}
.swiper-navBtn{
color: #6E93f7!important;
transition: color 0.3s ease;
}
.swiper-navBtn:hover{
color: #4070f4!important;
}
.swiper-navBtn::before,
.swiper-navBtn::after{
font-size: 40px!important;
}
.swiper-button-next{
right: 0!important;
}
.swiper-button-prev{
left: 0!important;
}
.swiper-pagination-bullet{
background-color: #6e93f7;
opacity: 1;
}
.swiper-pagination-bullet-active{
background-color: #4070f4;
}
@media screen and (max-width:768px) {
.slide-content{
margin: 0 10px;
}
.swiper-navBtn{
display: none;
}
}
Code Javascript
var swiper = new Swiper(".slide-content", {
slidesPerView: 3,
spaceBetween: 30,
pagination: {
el: ".swiper-pagination",
clickable: true,
},
});
Bài viết liên quan
21:27 . 05/09/2023
15:47 . 03/09/2023
21:16 . 18/08/2023
16:06 . 12/08/2023
20:51 . 29/06/2023
15:04 . 08/07/2022