+
+
1페이지 뒤로 이동
+
+
+
+ {
+ // startPage부터 endPage까지 페이지 버튼 생성
+ Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i).map((page) => (
+ handlePageChange(page)}
+ >
+ {page}
+
+ ))
+ }
+
+
+
+
1페이지 앞으로 이동
+
+
+
+ )
+
+}
\ No newline at end of file
diff --git a/src/components/ProductBestList.module.css b/src/components/ProductBestList.module.css
new file mode 100644
index 000000000..f2eac9bfe
--- /dev/null
+++ b/src/components/ProductBestList.module.css
@@ -0,0 +1,110 @@
+.cardList {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 40px 1.87%;
+}
+
+.cardList li {
+ width: 18.5%;
+}
+
+.cardList li a {
+ display: block;
+}
+
+.cardList li a:hover .imgBox {
+ box-shadow: 10px 10px 20px rgba(0, 0, 0, .2);
+}
+
+.cardList li a:hover .imgBox img {
+ transform: scale(1.2);
+}
+
+.cardList li .imgBox {
+ position: relative;
+ padding-top: 100%;
+ margin-bottom: 16px;
+ border-radius: 16px;
+ overflow: hidden;
+ transition: all .5s;
+}
+
+.cardList li .imgBox img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ transition: all .5s;
+}
+
+.cardList li .textBox {
+ margin-bottom: 6px;
+}
+
+.cardList li .textBox h4 {
+ margin-bottom: 6px;
+ color: var(--gray02);
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 1.7;
+}
+
+.cardList li .textBox .price {
+ display: block;
+ font-weight: 700;
+ line-height: 1.6;
+ color: var(--gray02);
+}
+
+.cardList li .likeBox {
+ height: 18px;
+ display: flex;
+ align-items: center;
+ gap: 0 4px;
+}
+
+.cardList li .likeBox span {
+ display: flex;
+ align-items: center;
+ gap: 0 5px;
+ position: relative;
+ font-size: 12px;
+ font-weight: 500;
+ color: var(--gray03);
+}
+
+.cardList li .likeBox span::before {
+ content: '';
+ width: 14px;
+ height: 12px;
+ background: url(/public/images/like_btn.svg)no-repeat center;
+ background-size: cover;
+}
+
+.cardList.bestCardBox li {
+ width: 23.59%;
+}
+
+@media (max-width: 1199px) {
+
+ .cardList.bestCardBox li {
+ width: 49%;
+ }
+
+}
+
+@media (max-width: 767px) {
+
+ .cardList.bestCardBox {
+ gap: 20px 0;
+ }
+
+ .cardList.bestCardBox li {
+ width: 100%;
+ }
+
+}
\ No newline at end of file
diff --git a/src/components/ProductBestList.tsx b/src/components/ProductBestList.tsx
new file mode 100644
index 000000000..a6e73e213
--- /dev/null
+++ b/src/components/ProductBestList.tsx
@@ -0,0 +1,73 @@
+import { useEffect, useState } from "react";
+import axios from "axios";
+import { Link } from "react-router-dom";
+import style from "./ProductBestList.module.css"
+
+interface BestItemProps{
+
+ id: number;
+ images: string[];
+ name: string;
+ price: number;
+ favoriteCount: number;
+
+}
+
+export default function ProductBestList() {
+
+ const [bestItem, setBestItem] = useState