* 변형
- transform과 변형함수
- 변형(transform, 트랜스폼) : 특정 요소의 크기나 형태 등 스타일이 바뀌느느 것
- 기본형
transform: 함수
> 2차원 변형
- 수평이나 수직으로 웹 요소 변형
- 크기나 각도만 지정하면 됨
- 2차원 좌표 사용
- 종류
> 3차원 변형
- x축과 y축에 원근감 추가
- z축은 앞뒤로 이동 (보는 사람 쪽으로 다가올 수록 값이 더 커짐)
- 종류
- 웹 요소를 이동시키는 translate() 함수
- 지정한 방향으로 이동할 거리를 지정하면 해당 요소를 이동
- 기본형
transform: translate(tx, ty)
transform: translate3d(tx, ty, tz)
transform: translateX(tx)
transform: translateY(ty)
transform: translateZ(tz)
- transform: translate(tx, ty) - x축 방향으로 tx만큼, y축 방향으로 ty만큼 이동 (ty 값 주어지지 않으면 0으로 간주)
- transform: translate3d(tx, ty, tz) - x축 방향으로 tx만큼, y축 방향으로 ty만큼, z축 방향(앞뒤)로 tz만큼 이동
- transform: translateX(tx) - x축 방향으로 tx만큼 이동
- transform: translateY(ty) - y축 방향으로 ty만큼 이동
- transform: translateZ(tz) - z축 방향으로 tz만큼 이동
<예시>
...
#movex:hover { transform: translateX(50px); } /* x축으로 50px 이동 */
#movey:hover { transform: translateY(20px); } /* y축으로 20px 이동 */
#movexy:hover { transform: translate(10px, 20px); } /* x축으로 10px, y축으로 20px 이동 */
</style>
...
- 요소를 확대/축소하는 scale() 함수
- 지정한 크기만큼 요소를 확대/축소
- 기본형
transform: scale(sx, sy)
transform: scale3d(sx, sy, sz)
transform: scaleX(sx)
transform: scaleY(sy)
transform: scaleZ(sz)
- transform:scale(sx, sy) - x축 방향으로 sx만큼, y축 방향으로 sy만큼 확대. sy 값이 주어지지 않는다면 sx 값과 같다고 간주. 예) scale(2.0)는 scale(2,2)와 같은 함수이며 요소를 두 배로 확대.
- transform:scale3d(sx, sy, sz) - x축 방향으로 sx만큼, y축 방향으로 sy만큼, z축 방향으로 sz만큼 확대.
- transform:scaleX(sx) – x축 방향으로 sx만큼 확대.
- transform:scaleY(sy) - y축 방향으로 sy만큼 확대.
- transform:scaleZ(sz) -z축 방향으로 sz만큼 확대
<예시>
...
<style>
#scalex { transform: scaleX(2); } /* x축으로 2배 확대 */
#scaley { transform: scaleY(1, 5); } /* y축으로 1.5배 확대 */
#scale { transform: scale(0.7); } /* x, y축으로 0.7배 확대 */
</style>
...
- 요소를 회전시키는 rotate() 함수
- 각도만큼 웹 요소를 시계 방향이나 시계 반대 방향으로 회전
- 일반 각도(degree)나 레디안(radian)값 사용(1래디안=1/180˚)
> 2차원 rotate() 함수
- 기본형
transform: rotate(각도)
<예시>
...
<style>
#rotate1:hover { transform: rotate(40deg); }
#rotate2:hover { transform: rotate(-40deg); }
</style>
...
> 3차원 rotate() 함수
- 기본형
transform: rotate(rx, ry, 각도)
transform: rotate3d(rx, ry, rz, 각도)
transform: rotateX(각도)
transform: rotateY(각도)
transform: rotateZ(각도)
- perspective 속성
- 원근감을 표현하기 위해 사용하는 속성
- 원래 있던 위치에서 사용자가 있는 쪽으로 얼마나 이동하는지 나타냄
- 값(픽셀 단위)은 0보다 커야 하며 값이 클수록 사용자로부터 멀어짐
- perspective 속성은 변형하는 요소의 부모 요소에 정의해야 한다.
<예시>
- 이미지 회전하며 원근감 주기
...
.rotatex:hover { transform: rotateX(50deg); } /* x축으로 50도 회전 */
#pers { perspective: 300px; } /* 원근감 추가 */
</style>
...
<div class="origin">
<div class="rotatex">
<img src="images/sunset.jpg" alt="">
</div>
</div>
<div class="origin" id="pers">
<div class="rotatex">
<img src="images/sunset.jpg" alt="">
</div>
</div>
...
=> 원본 이미지 > 원근감 추가 안한 것 > 원근감 추가 한 것
- 3차원 회전
...
.origin {
...
perspective: 200px; /* 원근감 추가 */
}
.origin > divv {
...
transition: all 3s; /* 3초동안 회전하도록 트랜지션 적용 */
}
#rotatex:hover { transform: rotateX(55deg); } /* x축으로 55도 회전 */
#rotatey:hover { transform: rotateY(55deg); } /* y축으로 55도 회전 */
#rotatez:hover { transform: rotateZ(55deg); } /* z축으로 55도 회전 */
#rotatesyz:hover { transform: rotate3d(2.5, 1.2, -1.5, 55deg); } /* x, y, z축에 방향 벡터를 지정하고 55도 회전 */
</style>
...
<div class="origin">
<div id="rotatex"></div>
</div>
<div class="origin">
<div id="rotatey"></div>
</div>
<div class="origin">
<div id="rotatez"></div>
</div>
<div class="origin">
<div id="rotatesyz"></div>
</div>
...
- 요소를 비틀어 왜곡하는 skew() 함수
- 요소를 지정한 각도만큼 비틀어 왜곡
- 기본형
transform: skew(x각도, y각도)
transform: skewX(x각도)
transform: skewY(y각도)
- transform: skewX(ax) - x축을 따라 당김
- transform: skewY(ax) - y축을 따라 당김
- transform: skew(ax, ay) - 첫 번째 각도는 x축을 따라 당기는 각도 / 두번째 각도는 y축을 따라 당기는 각도 (두 번째 값이 주어지지 않으면 y축에 대한 각도를 0으로 간주)
<예시>
...
#skewx:hover { transform: skewX(30deg); } /* X축 기준으로 30도 비틀기 */
#skewy:hover { transform: skewY(15deg); } /* y축 기준으로 15도 비틀기 */
#skewxy:hover { transform: skew(-25deg, -15deg); } /* x축 기준으로 -25도, y축 기준으로 -15도 비틀기 */
</style>
...
* 트랜지션
- 트랜지션이란
: 웹 요소의 스타일 속성이 조금씩 자연스럽게 바뀌는 것
- 트랜지션과 속성
> transition-property 속성
- 트랜지션을 적용할 속성 선택
- 이 속성을 지정하지 않으면 모든 속성이 트랜지션 대상이 됨
- 기본형
transition-property: all | none | <속성 이름>
<예시>
transition-property: all; /* 해당 요소의 모든 속성에 트랜지션 적용 */
transition-property: background-color; /* 해당 요소의 배경색에 트랜지션 적용 */
transition-property: width, height; /* 해당 요소의 너비와 높이에 트랜지션 적용 */
> transition-duration 속성
- 트랜지션 진행 시간 지정
- 시간 단위는 초(seconds) 또는 밀리초(milliseconds)
- 트랜지션이 여러개라면 쉼표(,)로 구분해 진행 시간 지정
- 기본형
transition-duration: <시간>
<예시>
...
.box {
...
transition-property: width, height; /* 트랜지션 대상 - 너비, 높이 */
transition-duration: 2s, 1s; /* 트랜지션 시간 - 2초, 1초 */
}
.box:hover {
width: 200px;
height: 120px;
}
</style>
...
> transition-timing-function 속성
- 트랜지션의 시작과 중간, 끝에서의 속도 지정
- 기본형
transition-timing-function: linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier(n, n, n, n)
> transition-delay 속성
- 트랜지션이 언제부터 시작될지 지연 시간 지정
- 시간 단위는 초(seconds) 또는 밀리초(milliseconds). 기본값 0
- 기본형
transition-delay: <시간>
> transition-delay 속성
- 트랜지션 관련 속성을 한꺼번에 지정
- 시간 값 속성이 2개이므로 앞에 오는 시간값은 transition-duration, 뒤에 오는 시간 값은 transition-delay 속성으로 간주
- 기본형
transition: <transition-property값> | <transition-duration값> | <transition-timing-function값> | <transition-delay값>
<예시>
...
<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>
...
=> 마우스 올리면 사각형이 돌면서 색이 진해짐
* 애니메이션
- CSS 애니메이션에서 사용하는 속성
- 웹 요소에 애니메이션 추가
- 애니메이션을 시작해 끝내는 동안 원하는 곳 어디서든 스타일을 바꾸며 애니메이션을 정의할 수 있다.
- 키프레임(keyframe) : 애니메이션 중간에 스타일이 바뀌는 지점
- 애니메이션 관련 속성
> @keyframes 속성
- 애니메이션의 시작과 끝을 비롯해 상태가 바뀌는 지점 설정
- '이름'으로 애니메이셔녀 구별
- 기본형
@keyframes <이름> {
<선택자> { <스타일> }
}
- @keyframs의 선택자에서 속성값이 바뀌는 지점을 가리킴
- 시작 위치는 0%, 끝 위치 100%로 놓고 위치 지정
- 시작과 끝 위치만 사용한다면 from, to 키워드 사용 가능
> animation-name 속성
- 어떤 애니메이션을 사용할지 구별
- @keyframes 속성에서 만든 애니메이션 이름을 사용
- 기본형
animation-name: <키프레임 이름> | none
> animation-duration 속성
- 애니메이션 실행 시간 설정 (기본값 0)
- 사용 가능한 값은 초(s)나 밀리초(ms)
- 기본형
animation-duration: <시간>
<예시>
...
#box1 {
background-color: #4cff00; /* 연두색 박스 */
border: 1px solid transparent; /* 1px 투명 테두리 */
animation-name: shape; /* 애니메이션 지정 */
animation-duration: 3s; /* 애니메이션 실행 시간 */
}
#box2 {
background-color: #4cff00; /* 연두색 박스 */
border: 1px solid transparent; /* 1px 투명 테두리 */
animation-name: rotate; /* 애니메이션 지정 */
animation-duration: 3s; /* 애니메이션 실행 시간 */
}
@keyframes shape {
from { border: 1px solid transparent; } /* 1px짜리 투명 테두리에서 */
to {
border: 1px solid #000; /* 검은색 테두리로 변경 */
border-radius: 50%; /* 테두리를 둥글게 변경 */
}
}
@keyframes rotate {
from { transform: rotate(0deg); } /* 0도에서 시작해서 */
to { transform: rotate(45deg); } /* 45도까지 회전하기 */
}
</style>
...
<div class="box" id="box1"></div>
<div class="box" id="box2"></div>
...
> animation-direction 속성
- 애니메이션이 끝난 후 원래 위치로 돌아가거나 반대 방향으로 실행하도록 지정
- 기본형
animation-direction: normal | alternate
> animation-iteration-count 속성
- 애니메이션 반복 횟수 지정하기
- 기본형
animation-iteration-count: <숫자> | infinite
<예시>
...
#box1 {
background-color: #4cff00;
border: 1px solid transparent;
animation-name: shape;
animation-duratioon: 3s;
animation-iteration-count: infinite; /* 애니메이션 무한 반복 */
}
#box2 {
background-color: #8f06b0;
border: 1px solid transparent;
animation-name: rotate;
animation-duration: 3s;
animation-iteration-count: infinite; /* 애니메이션 무한 반복 */
}
@keyframes shape {...}
@keyframes rotate {...}
}
</style>
...
> animation-timing-function 속성
- 애니메이션 속도 곡선 지정
- 기본형
animation-timing-function: linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier(n, n, n, n)
> animation 속성
- 여러 개의 애니메이션 속성을 하나의 속성으로 줄여서 사용
- 지정하지 않은 속성은 기본 값 사용
- animation-duration 속성 값은 반드시 지정
<예시>
...
.box {
width: 100px;
height: 100px;
margin: 60px auto;
animation: rotate 1.5s infinite, background 1.5s infinite alternate;
}
@keyframes rotate { /* 0도 -> x축 -180도 회전 -> y축 -180도 회전 */
from { transform: perspective(120px) rotateX(0deg) rotateY(0deg); }
50% { transform: perspective(120px) rotateX(-180deg) rotateY(0deg); }
to ( transform: persepctive(120px) rotateX(-180deg) rotateY(-180deg); }
}
@keyframes background {
from { background-color: red; } /* 시작 배경은 빨강 */
50% { background-color: green; } /* 중간(50%) 배경색은 초록 */
to { background-color: blue; } /* 마지막(100%) 배경색은 파랑 */
}
</style>
...
'개발 공부 > HTML , CSS' 카테고리의 다른 글
[CSS] - 반응형 웹과 미디어 쿼리 (0) | 2023.12.19 |
---|---|
[CSS] - CSS 고급 선택자 (0) | 2023.12.18 |
[CSS] - 이미지와 그라데이션 효과로 배경 꾸미기 (0) | 2023.12.18 |
[CSS] - 레이아웃을 구성하는 CSS 박스 모델 (0) | 2023.12.15 |
[CSS] - 텍스트 스타일 (0) | 2023.12.14 |