일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JAVA 개발 환경 설정
- ::first-line
- rowspan
- :active
- table
- select
- textarea
- Head
- 속성 선택자
- tag
- ::first-letter
- HTML정의
- JavaScript
- Ol
- ul
- 전체 선택자
- colspan
- BR
- !doctype html
- option
- 인라인 레벨 요소
- 한정수 강사님
- BODY
- img
- Border
- Li
- ::before
- Python
- Title
- Form
- Today
- Total
개발 공부 기록하기
DAY 27. 트랜지션(transition) 본문
transition: 변화, 전환
웹 요소의 배경색이나 스타일 속성이 시간에 따라 바뀌는 것.
위의 영상에서처럼 transition을 사용하면 완전히 색, 모양, 테두리 등을 바꿀 수 있다.
트랜지션transition의 속성 요약
종류 | 설명 |
---|---|
transition-property | 트랜지션의 대상 지정. |
transition-duration | 트랜지션을 실행할 시간 지정. |
transition-timing-function | 트랜지션의 실행 형태 지정. |
transition-delay | 트랜지션의 지연 시간 지정. |
transition | 위의 모든 속성을 한꺼번에 정함. |
트랜지션 대상 지정: transition-property
어떤 속성에 트랜지션을 적용할 것인지 지정한다.
transition-property: all | none | 속성이름1, 속성이름2...
속성값 | 설명 |
---|---|
all or 아예 transition-property를 안 씀 |
요소의 모든 속성에 트랜지션이 적용됨. default 값. |
none | 트랜지션을 하는 동안 아무 속성도 안 바뀜. |
속성이름 | 트랜지션을 적용할 속성을 원하는 것만 지정함. 여러 개의 속성을 지정하고 싶을 때는 쉼표(,)로 구분해 나열함. |
트랜지션 진행 시간 지정: transition-duration
트랜지션의 진행 시간을 지정해 속성이 자연스럽게 바뀌도록 애니메이션 효과를 만들 수 있다.
transition-duration: 시간;
시간 단위는 초(s),
그보다 더 세밀하게 조정하는 밀리초(ms)
가 있다.
또한, 시간 값을 0이나 그보다 작은 음수로 나타낸다면, 애니메이션 효과가 즉시 나타난다.
그냥 바뀌어버림;;
예제 1.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Transition</title>
<style>
.box {
margin: 20px auto;
width: 100px;
height: 100px;
background-color: #07f;
border: 1px solid #222;
transition-property: width, height; /* 트랜지션 적용할 대상 - 너비, 높이 */
transition-duration: 2s, 1s; /* 트랜지션 시간 - 2초, 1초 */
}
.box:hover {
width: 200px;
height: 120px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
↓
위의 예제에서는 width와 height(속성 2개)를 트랜지션 하는 데,
각각 2초와 1초의 시간(2개의 시간)을 주도록 되어있다.
하지만, transition-property에서 지정한 속성값의 개수와 transition-duration에서 지정한 속성값의 개수가 다르다면 어떻게 될까?
책에서는 속성 순서대로 시간값을 반복해서 적용한다고 되어있다.
그게 그래서 어떻게 적용된다는 것인지 바로 이해되지 않아서 MDN 사이트에 들어가 검색해보았다.
만약에
transition-property 속성값 개수 > transition-duration 속성값 개수
로 가정한다면,
div {
transition-property: opacity, left, top, height;
transition-duration: 3s, 5s;
}
││
div {
transition-property: opacity, left, top, height;
transition-duration: 3s, 5s, 3s, 5s;
}
와 같이 적용된다는 뜻이고,
반대로,
transition-property 속성값 개수 < transition-duration 속성값 개수
로 가정한다면,
div {
transition-property: opacity, left;
transition-duration: 3s, 5s, 2s, 1s;
}
││
div {
transition-property: opacity, left;
transition-duration: 3s, 5s;
}
처럼 transition-duration에 적힌 뒤쪽 두 개의 속성값은 버려버리는 결과를 나타내게 된다.
cf,
opacity: 불투명함.
즉, 불투명도를 지정하는 속성이라고 한다.
트랜지션 속도 곡선 지정: transition-timing-function
트랜지션 효과의 시작, 중간, 끝에서 속도를 지정해서 전체 속도 곡선을 만든다.
미리 정해진 키워드 or 베지에 곡선을 이용해 표현한다.
transition-timing-function: linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier(x1, y1, x2, y2) ;
속성값 | 설명 |
---|---|
linear | 시작부터 끝까지 똑같은 속도로 진행함. |
ease | 처음엔 천천히 시작함 → 점점 빨라짐 → 마지막엔 천천히 끝남. default값. |
ease-in | 느리게 시작함. |
ease-out | 느리게 끝냄. |
ease-in-out | 느리게 시작하고 느리게 끝냄. |
cubic-bezier(x1, y1, x2, y2) | 베지에 함수를 정의해서 사용함. 0 ≤ x1, y1, x2, y2 ≤ 1 |
예제 2.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>transition-timing-function</title>
<style>
#ex div {
float: left;
width: 100px;
height: 50px;
margin: 5px 10px;
padding: 5px;
color: white;
background-color: #006aff;
border-radius: 5px;
text-align: center;
font-weight: bold;
}
#ex:hover div {
height: 400px;
}
#ex .linear {
transition: 3s linear;
}
#ex .ease {
transition: 3s ease;
}
#ex .ease-in {
transition: 3s ease-in;
}
#ex .ease-out {
transition: 3s ease-out;
}
#ex .ease-in-out {
transition: 3s ease-in-out;
}
</style>
</head>
<body>
<div id="ex">
<div class="linear"> linear </div>
<div class="ease"> ease </div>
<div class="ease-in"> ease-in </div>
<div class="ease-out"> ease-out </div>
<div class="ease-in-out"> ease-in-out </div>
</div>
</body>
</html>
↓
베지에 함수를 이용하는 예제는 책에 없었다.
따로 공부를 하려고 검색해봤는데, 아주 정리 잘 해두신 분이 있어서 링크를 가져왔다.
이해하는 데 도움됐어요 감사합니다😊
https://basemenks.tistory.com/281
트랜지션 지연 시간 설정: transition-delay
트랜지션을 언제부터 시작할 것인지 지정한다.
transition-delay: 시간;
지정한 시간만큼 기다렸다가 애니메이션이 시작된다.
transition-duration처럼 초(s), 밀리초(ms) 단위를 사용하고, default값은 0이다.
(내가 만든) 예시 1.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>transition-delay</title>
<style>
#ex div {
float: left;
width: 100px;
height: 50px;
margin: 5px 10px;
padding: 5px;
color: white;
background-color: #006aff;
border-radius: 5px;
text-align: center;
font-weight: bold;
}
#ex:hover div {
height: 400px;
}
#ex .linear {
transition: 3s linear;
}
#ex .lineardelay {
transition: 3s 2s linear;
}
</style>
</head>
<body>
<div id="ex">
<div class="linear"> linear </div>
<div class="lineardelay"> delay </div>
</div>
</body>
</html>
↓
transition
위에서 했던 transition-property, transition-duration, transition-timing-function, transition-delay를 별도로 작성할 것 없이 transition 하나로 통합해서 작성할 수 있다.
시간값으로 작성하는 transition-duration, transition-delay를 둘 다 작성할 경우에는,
먼저 쓰인 값을 duration, 뒤에 쓰인 값을 delay로 간주한다.
그 외의 것들은 각각의 속성값의 형태가 다르니까 순서는 상관 없다.
transition: <transition-property값> | <transition-duration값> | <transition-timing-function값> | <transition-delay값> ;
예제 3.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>transition통합</title>
<style>
.box {
margin: 50px auto;
width: 100px;
height: 100px;
background-color: #fb5;
border: 1px solid #222;
transition: 2s ease-in; /* 대상: all, 시간 2초, 함수: ease-in */
}
.box:hover { /* 여기 적힌 속성이 모두 트랜지션 대상 */
width: 200px;
height: 200px;
background-color: #f50;
transform: rotate(270deg);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
↓
책에 나온 실습 - 마우스 오버하면 상품 정보 표시하기.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CSS3 애니메이션</title>
<link rel="stylesheet" href="css/product.css">
</head>
<body>
<div id="container">
<h1>신상품 목록</h1>
<ul class="prod-list">
<li>
<img src="images/prod1.jpg">
<div class="caption">
<h2>상품 1</h2>
<p>상품 1 설명 텍스트</p>
<p>가격 : 12,345원</p>
</div>
</li>
<li>
<img src="images/prod2.jpg">
<div class="caption">
<h2>상품 2</h2>
<p>상품 2 설명 텍스트</p>
<p>가격 : 12,345원</p>
</div>
</li>
<li>
<img src="images/prod3.jpg">
<div class="caption">
<h2>상품 3</h2>
<p>상품 3 설명 텍스트</p>
<p>가격 : 12,345원</p>
</div>
</li>
</ul>
</div>
</body>
</html>
+
#container {
width:1000px;
margin:20px auto;
}
h1 {
text-align:center;
}
.prod-list {
list-style:none;
padding:0;
}
.prod-list li {
float: left;
padding: 0;
margin: 10px;
overflow: hidden;
}
.prod-list img {
margin:0;
padding:0;
float:left;
z-index:5;
}
↓
이렇게 제시된 예제에
① 상품 설명 글 안 보이게 불투명도를 0으로 지정하기
.prod-list .caption {
position: absolute;
top: 200px; /* 기준 위치보다 200px 아래로 */
width: 300px;
height: 200px;
padding-top: 20px;
background: rgba(0, 0, 0, 0.6); /* 반투명한 검정 배경 */
opacity: 0; /* 화면에 보이지 않게 */
transition: all 0.6s ease-in-out; /* 부드럽게 나타나도록 트랜지션 추가 */
z-index: 10; /* 다른 요소보다 위에 있도록 */
}
를 추가하고,
② position: absolute;를 정확하게 적용하기
→ .caption 요소의 부모 요소는 <li>니까 <li> 요소 스타일에 position: relative;를 추가로 적어 넣기
.prod-list li {
float: left;
padding: 0;
margin: 10px;
overflow: hidden;
position: relative;
}
그다음,
③ 마우스 포인터를 올리면 상품 설명 글 보여주기
→ 상품 설명 글을 그림 위로 이동, 불투명도를 1로 수정할 수 있도록 추가로 적어 넣기.
.prod-list li:hover .caption {
opacity: 1; /* 설명 글을 화면에 나타나게 */
transform: translateY(-200px); /* 설명 글을 위쪽으로 200px 이동 */
}
④ 마지막으로, 그림 위에 나타난 상품 설명 글씨가 안 보이니까 흰색으로 바꾸도록 추가로 적어 넣기.
.prod-list .caption h2, .prod-list .caption p {
color: #fff;
text-align: center;
}
↓
'프밍 > CSS' 카테고리의 다른 글
DAY 29. 단원 마무리 문제 풀기 (0) | 2022.12.31 |
---|---|
DAY 28. CSS 애니메이션 (1) | 2022.12.30 |
Section 7. CSS 선택자의 세계(1) (0) | 2022.12.21 |
DAY 26. 변형(transform) (1) | 2022.12.14 |
Section 6. CSS 기초(2) (1) | 2022.12.12 |