CSS react-slick을 이용한 slider 구현
react-slick
React slick은 React로 구축된 캐러셀 구성 요소입니다.
회전하면서 콘텐츠를 보여주는 모습이 회전목마를 닮아 Carousel이라 부릅니다.
설치
npm install react-slick --save
yarn add react-slick
//이외에도 기본적인 slick-carousel 모듈을 같이 설치해 주겠습니다.
npm install slick-carousel --save
yarn add slick-carousel
//설치후 Import css 해줍니다.
import "~slick-carousel/slick/slick.css";
import "~slick-carousel/slick/slick-theme.css";
구현
기본적인 react-slick의 사용 샘플입니다. 아래 샘플에 설정 값만 넣어주시면 사용 가능합니다.
//sample
import React from "react";
import Slider from "react-slick";
class SimpleSlider extends React.Component {
render() {
var settings = {
dots: true,
infinite: true,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1,
};
return (
<Slider {...settings}>
<div>
<h3>1</h3>
</div>
<div>
<h3>2</h3>
</div>
<div>
<h3>3</h3>
</div>
<div>
<h3>4</h3>
</div>
<div>
<h3>5</h3>
</div>
<div>
<h3>6</h3>
</div>
</Slider>
);
}
}
옵션에 대해서 알아보겠습니다.
var settings = {
dots: true, // 캐러셀의 점을 보여주는지에 대한 옵션입니다.
infinite: true, // 마지막 장 다음에 첫번째가 나오게 할 것인지에 대한 옵션입니다.
speed: 500, // 다음 사진으로 넘어가는 속도를 설정하는 옵션입니다.
slidesToShow: 1, // 몇장씩 보이게 하는지에 대한 옵션입니다.
slidesToScroll: 1, // 한번에 몇장씩 넘기는지에 대한 옵션입니다.
autoplay: true // 사진을 자동으로 넘기는지에 대한 옵션입니다.
autoplaySpeed: 4000,
};
코드
구현하기에 앞서 아래 코드로만 구현하게되면 사진에 마우스를 가져가면 border 오른쪽이 hover기능에서 구현이 안되는걸 볼수있습니다.
//App.css
* {
box-sizing: border-box;
}
위 처럼 바꿔 줘야합니다. border-box로 설정하는 것이 일반적으로 css로 스타일링을 하는데 있어서 관행으로 여겨집니다. 이에 관한 내용은 따로 정리해서 업로드하겠습니다.
import React from "react";
import styled from "styled-components";
import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
function ImgSlider() {
let settings = {
dots: true,
Infinity: true,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1,
autoplay: true,
};
return (
<Carousel {...settings}>
<Wrap>
<img src="/images/slider-badging.jpg" alt="" />
</Wrap>
<Wrap>
<img src="/images/slider-badag.jpg" alt="" />
</Wrap>
</Carousel>
);
}
export default ImgSlider;
const Carousel = styled(Slider)`
margin-top: 20px;
// 버튼에 대한 css 입니다.
li.slick-active button::before {
color: white;
}
ul li button {
&:before {
color: white;
}
}
button {
z-index: 1;
}
//.slick-list에 visible 값을 주면 전 사진과 앞 사진의 끝부분이 보여집니다.
.slick-list {
overflow: visible;
}
`;
const Wrap = styled.div`
cursor: pointer;
img {
border: 4px solid transparent;
border-radius: 4px;
width: 100%;
height: 100%;
box-shadow: rgb(0 0 0 /69%) 0px 26px 30px -10px, rgb(0 0 0 / 73%) 0px 16px 10px -10px;
transition-duration: 300ms;
&:hover {
border: 4px solid rgba(249, 249, 249, 0.8);
}
}
`;
error
구현 시작후 아래 애러가 나왔습니다.
검색해보니 div가 없어서 발생했다고 해서 div를 Wrap에 넣어줬습니다.
react-dom.development.js:25058 Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
댓글남기기