티스토리 뷰
소개
슬라이더 아이템수가 바뀔때마다 애니메이션 키프레임을 다시 계산 해주는게 번거로워서
SCSS를 이용하여 계산 부분을 함수화 시켰습니다. 아래사진은 완성된 슬라이더 모습입니다.
본론
HTML 구조 입니다
// .scene는 최상위 엘리멘트 입니다
<div class="scene">
// .slider는 자식들로 .item을 가집니다.
<div class="slider">
// .item은 각각의 .slider 아이템들을 나타냅니다
// 첫번째 .item 엘리멘트를 마지막에 추가합니다.
// 첫부분과 끝부분 엘리멘트를 똑같이 해주면
// 슬라이딩 애니메이션이 반복될때 무한히 반복하는 효과를 줄수 있습니다.
<div class="item item-1">1</div>
<div class="item item-2">2</div>
<div class="item item-3">3</div>
<div class="item item-1">1</div>
</div>
</div>
SCSS 부분 입니다.
// 각변수들은 색갈을을 나타냅니다.
$slider:#FFF493;
$primary:#87E892;
$secondary:#A1E3FF;
$tertiary:#B187E8;
// SCSS list를 이용해서 각 색갈들을 할당 합니다.
$color-list: $primary, $secondary, $tertiary;
// .item의 총 갯수
$total: 3;
//.item의 총 갯수 + 1
$total-extra: $total + 1;
// .scene 가로세로 크기와 overflow를 설정 합니다.
.scene{
max-width:300px;
height:150px;
overflow:hidden;
}
// width를 100% 와 총 .item의 갯수만큼 곱 합니다.
// flex를 사용해서 수평 정렬 합니다.
.slider {
background-color: $slider;
display: flex;
width: 100% * $total-extra;
height: 100%;
}
// flex 프로퍼티로 .item의 width를 정해줍니다.
.item{
flex:1;
font-size:2rem;
color:#fff;
display:flex;
justify-content:center;
align-items:center;
}
// SCSS @for 반복문으로 각각 .item의 배경색을 정해줍니다
@for $i from 1 through $total{
.item-#{$i}{
background-color: nth($color-list, $i);
}
}
.slider에 display와 .scene에 overflow 프로퍼티가 없을때
.slider에 display 프로퍼티를 flex로 설정해줄때
.scene에 overflow를 설정해줄때
SCSS로 @keyframes를 설정해줍니다
// $translate는 .item의 translateX 범위를 구한값 입니다.
// slider 애니메이션은 두가지 상태를 반복합니다
// 멈춰있는 상태($pause)와 움직이는 상태
// 멈춰있는 상태($pause)를 총시간의 90%로 잡고
// 이동하는 상태($slide)를 총시간의 10%로 잡았습니다.
// $pause는 .item이 멈춰 있어야할 시간입니다.
// $slide는 .item이 이동에 필요한 시간 입니다.
// $current는 각각의 프레임 변화값을 중첩해서 할당합니다.
$translate: 100% / $total-extra;
$pause: 90% / ($total);
$slide: 10% / ($total);
$current: 0%;
@keyframes slider {
@for $i from 1 through $total {
// 시작값을 정해줍니다
@if $i - 1 == 0 {
#{$current} {
transform: translateX(0);
}
}
// 멈춰있을때의 값을 계산합니다
$current: $current + $pause !global;
#{$current} {
transform: translateX($translate * -($i - 1));
}
// 이동할대의 값을 계산합니다
@if $i < $total {
$current: $current + $slide !global;
#{$current} {
transform: translateX($translate * -$i);
}
// 끝 날때 프레임
} @else {
100% {
transform: translateX($translate * -$i);
}
}
}
}
Conclusion
새로운 .item이 추가될때마다 $total의 값을 변경해주면 재계산되서 @keyframes가 생성됩니다.
CodePen
See the Pen Responsive Slider by thesoundfromthesky (@thesoundfromthesky) on CodePen.
'Web > CSS' 카테고리의 다른 글
Making a responsive slider with SCSS (0) | 2019.11.30 |
---|---|
CSS 요약 (0) | 2018.12.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- css slider
- wxWidgets
- 오류
- C++
- Generic()
- 도매인 가격비교
- CSS 슬라이더
- SCSS @for
- scss slider
- HTML
- slider
- .editorconfig
- C11
- xgettext
- #비주얼스튜디오
- _Generic()
- scanf()
- C
- gettext
- JS
- 1000 자리 계산기
- dropdown list
- Visual Studio 2017
- fyling fly
- CSS
- 도메인 가격비교
- responsive slider
- stdarg.h
- flying bee
- #C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함