관리 메뉴

프로그래밍 삽질 중

[유튜브 강의]스크립트 없이 만드는 자동 슬라이드 효과 /* transform:translateX */ [HTML+CSS{코남}] 공부 본문

과거 프로그래밍 자료들/Html&CSS

[유튜브 강의]스크립트 없이 만드는 자동 슬라이드 효과 /* transform:translateX */ [HTML+CSS{코남}] 공부

평부 2021. 6. 5. 00:01

※ 학습 이유 : 메인화면에 넣은 움직이는 사진(+자동으로 넘기는 것도 포함) 화면 필요

※ 코드는 전적으로  코남님에게 있으며, 문제가 될 경우 내릴 예정

https://www.youtube.com/watch?v=idjslG3qpjs&t=651s (출처)

※ 스프링을 공부하고 있어 화면 표시 부분은 jsp로 진행

※ 총 진행 파일(html: ex.jsp / css: ex.css)

 

[구현 화면]

 

[html : ex.jsp]

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<!-- custom css file link  -->
<link rel="stylesheet" href="ex.css">
<meta charset="UTF-8">
<title>자동 슬라이드</title>
</head>
<body>
<div class="slidebox">
    <input type="radio" name="slide" id="slide01" checked>
    <input type="radio" name="slide" id="slide02">
    <input type="radio" name="slide" id="slide03">
    <input type="radio" name="slide" id="slide04">
    <ul class="slidelist">
        <li class="slideitem">
            <div>
                <label for="slide04" class="left"></label>
                <label for="slide02" class="right"></label>
                <a><img src="images/slideimg01.jpg"></a>
            </div>
        </li>
        <li class="slideitem">
            <div>
                <label for="slide01" class="left"></label>
                <label for="slide03" class="right"></label>
                <a><img src="images/slideimg02.jpg"></a>
            </div>
        </li>
        <li class="slideitem">
            <div>
                <label for="slide02" class="left"></label>
                <label for="slide04" class="right"></label>
                <a><img src="images/slideimg03.jpg"></a>
            </div>
        </li>
        <li class="slideitem">
            <div>
                <label for="slide03" class="left"></label>
                <label for="slide01" class="right"></label>
                <a><img src="images/slideimg04.jpg"></a>
            </div>
        </li>
    </ul>
</div>
</body>
</html>
cs

[css: ex.css]

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
{
    margin:0; /*브라우저 내 기본 설정값 초기화*/
    padding: 0;/*브라우저 내 기본 설정값 초기화*/
    box-sizing: border-box;
}
ul, li { /*ul, li의 리스트 스타일 제거*/
    list-style: none;
}
/*슬라이드에 직접 적용되는 스타일*/
[name="slide"] { display: none; } /*클래스 slidebox 내 name="slide"부분 */
.slidebox { 
    max-width: 1000px; 
    width: 100%;
    margin: 0 auto;    
}
.slidebox img { /*자신의 넓이 이상으로 커지지 않도록 함, 반응형 사용 가능*/
    max-width: 100%;
}
.slidebox .slidelist {
    white-space: nowrap;
    font-size:0; /*빈공간을 없애기 위함*/
    overflow: hidden; /*초과해서 이미지가 나올 경우 나오지 않게 함*/
}
.slidebox .slideitem {
    position: relative;
    display: inline-block; /*세로 정렬을 가운데 맞추기 위함*/
    vertical-align: middle;
    width: 100%;
    transition: all .35s; /*자연스러운 전환 속성을 위함*/
}
.slidebox .slideitem label {
    position: absolute; /*자율 배치하는 값*/
    z-index: 1; /*기본값 1*/
    top: 50%;
    transform: translateY(-50%); /*가운데 지정*/
    padding: 20px;
    border-radius: 50%; /*둥근 버튼 모양*/
    cursor: pointer; /*마우스가 올라가면 커서가 포인터로 바뀌도록 함*/
}
label.left {
    left: 20px;
    background-color: white;
    background-image:url('images/left-arrow.png');
    background-position: center center;
    background-size: 50%;
    background-repeat: no-repeat;
}
label.right {
    right: 20px;
    background-color: white;/*강의에서는 #5f5f5f;*/
    background-image:url('images/right-arrow.png');
    background-position: center center;
    background-size: 50%;
    background-repeat: no-repeat;
}
[id="slide01"]:checked ~ .slidelist .slideitem {transform:translateX(0); animation:slide01 10s infinite}
[id="slide02"]:checked ~ .slidelist .slideitem {transform:translateX(-100%); animation:slide02 10s infinite}
[id="slide03"]:checked ~ .slidelist .slideitem {transform:translateX(-200%); animation:slide03 10s infinite}
[id="slide04"]:checked ~ .slidelist .slideitem {transform:translateX(-300%); animation:slide04 10s infinite}
 
@keyframes slide01 {
    0% {left: 0%;} /*첫 번째 스크린*/
    25% {left: 0%;} /*두 번째로 위치 이동*/
    48% {left: -100%;} /*두 번째로 위치 이동, 두 번쨰 스크린*/
    50% {left: -100%;}/*세 번째로 위치 이동*/
    73%    {left: -200%;}/*세 번째로 위치 이동, 세 번쨰 스크린*/
    75% {left: -200%;}/*네 번째로 위치 이동, 네 번째 스크린*/
    98% {left: -300%;} /*네 번째 스크린*/
    100% {left:0%} /*첫 번째 스크린 이동*/
}
@keyframes slide02 {
    0% {left: 0%;} /*첫 번째 스크린*/
    23% {left: 0%;}
    25% {left: -100%;} 
    48% {left: -100%;} 
    50% {left: -200%;}
    73%    {left: -200%;}
    75% {left: 100%;}/*첫 스크린 이동*/
    98% {left: 100%;} /*첫 스크린 이동*/
    100% {left:0%}
}
@keyframes slide03 {
    0% {left: 0%;} /*첫 번째 스크린*/
    23% {left: 0%;}
    25% {left: -100%;} 
    48% {left: -100%;} 
    50% {left: 200%;}
    73%    {left: 200%;}
    75% {left: 100%;}/*첫 스크린 이동*/
    98% {left: 100%;} /*첫 스크린 이동*/
    100% {left:0%}
}
@keyframes slide04 {
    0% {left: 0%;} /*첫 번째 스크린*/
    23% {left: 0%;}
    25% {left: 300%;} 
    48% {left: 300%;} 
    50% {left: 200%;}
    73%    {left: 200%;}
    75% {left: 100%;}/*첫 스크린 이동*/
    98% {left: 100%;} /*첫 스크린 이동*/
    100% {left:0%}
}
cs

[배운 점]

1. 코남님이 움직이는 기능은 보통 js를 많이 쓰는데 반해, css로만 구현한 것이 있어 이 부분을 배울 수 있었음

2. 특히 자동으로 사진을 넘기는 부분을 꼭 알고 싶었는데 유투브로 배울 수 있어서 즐거웠음