CSS дозволÑÑ ÑобиÑи пÑоÑÑÑ Ð°Ð½ÑмаÑÑÑ Ð²Ð·Ð°Ð³Ð°Ð»Ñ Ð±ÐµÐ· JavaScript.
JavaScript можна викоÑиÑÑовÑваÑи Ð´Ð»Ñ ÐºÐµÑÑÐ²Ð°Ð½Ð½Ñ CSS-анÑмаÑÑÑÑ Ñа покÑаÑÐµÐ½Ð½Ñ ÑÑ, додавÑи зовÑÑм ÑÑÐ¾Ñ Ð¸ кодÑ.
CSS-пеÑÐµÑ Ð¾Ð´Ð¸
ÐÐ´ÐµÑ CSS-пеÑÐµÑ Ð¾Ð´Ñв дÑже пÑоÑÑа. Ðи опиÑÑÑмо влаÑÑивÑÑÑÑ Ñ Ñк Ñаме ÑÑ Ð·Ð¼Ñни маÑÑÑ Ð±ÑÑи анÑмованÑ. Ðоли влаÑÑивÑÑÑÑ Ð·Ð¼ÑнÑÑÑÑÑÑ, бÑаÑÐ·ÐµÑ Ð°Ð½ÑмÑÑ Ñей пеÑÐµÑ Ñд, ÑобÑо змÑÐ½Ñ Ð·Ð½Ð°ÑеннÑ.
ТобÑо вÑе, Ñо нам поÑÑÑбно, Ñе змÑниÑи влаÑÑивÑÑÑÑ, а плавний пеÑÐµÑ Ñд бÑде здÑйÑнÑваÑиÑÑ Ð±ÑаÑзеÑом.
ÐапÑиклад, наведений нижÑе CSS анÑмÑÑ Ð·Ð¼Ñни background-color пÑоÑÑгом 3 ÑекÑнд:
.animated {
transition-property: background-color;
transition-duration: 3s;
}
ЯкÑо ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°Ñ ÐºÐ»Ð°Ñ .animated, бÑдÑ-Ñка змÑна background-color анÑмÑÑÑÑÑÑ Ð¿ÑоÑÑгом 3 ÑекÑнд.
ÐаÑиÑнÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ Ð½Ð¸Ð¶Ñе, Ñоб анÑмÑваÑи Ñон:
<button id="color">ÐаÑиÑни мене</button>
<style>
#color {
transition-property: background-color;
transition-duration: 3s;
}
</style>
<script>
color.onclick = function() {
this.style.backgroundColor = 'red';
};
</script>
Ð 4 влаÑÑивоÑÑÑ Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ñв CSS:
transition-propertytransition-durationtransition-timing-functiontransition-delay
ÐаÑаз ми ÑÑ
ÑозглÑнемо, а поки зазнаÑимо, Ñо загалÑна влаÑÑивÑÑÑÑ transition дозволÑÑ Ð¾Ð³Ð¾Ð»Ð¾ÑÑваÑи ÑÑ
Ñазом Ñ Ð¿Ð¾ÑÑдкÑ: property duration timing-function delay, а Ñакож анÑмÑваÑи декÑлÑка влаÑÑивоÑÑей одноÑаÑно.
ÐапÑиклад, ÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ° анÑмÑÑ color Ñ font-size одноÑаÑно:
<button id="growing">ÐаÑиÑни мене</button>
<style>
#growing {
transition: font-size 3s, color 2s;
}
</style>
<script>
growing.onclick = function() {
this.style.fontSize = '36px';
this.style.color = 'red';
};
</script>
Ð¢ÐµÐ¿ÐµÑ ÑозглÑнемо влаÑÑивоÑÑÑ Ð°Ð½ÑмаÑÑÑ Ð¿Ð¾ ÑеÑзÑ.
transition-property
У transition-property ми пиÑемо ÑпиÑок влаÑÑивоÑÑей Ð´Ð»Ñ Ð°Ð½ÑмаÑÑÑ, напÑиклад: left, margin-left, height, color. Ðбо можемо напиÑаÑи âallâ, Ñо ознаÑÐ°Ñ âанÑмÑваÑи вÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑâ.
ÐаÑважÑе, Ñо Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ, ÑÐºÑ Ð½Ðµ можна анÑмÑваÑи. Ðднак бÑлÑÑÑÑÑÑ Ð·Ð°Ð³Ð°Ð»ÑÐ½Ð¾Ð²Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð²Ð»Ð°ÑÑивоÑÑей Ñ Ð°Ð½ÑмаÑÑйними.
transition-duration
У transition-duration задаÑ, ÑкÑлÑки ÑаÑÑ Ð¼Ð°Ñ ÑÑиваÑи анÑмаÑÑÑ. Ð§Ð°Ñ Ð¼Ð°Ñ Ð±ÑÑи в ÑоÑмаÑÑ ÑаÑÑ CSS: в ÑекÑндаÑ
s або мÑлÑÑекÑндаÑ
ms.
transition-delay
У transition-delay ми вказÑÑмо заÑÑÐ¸Ð¼ÐºÑ Ð¿ÐµÑед анÑмаÑÑÑÑ. ÐапÑиклад, ÑкÑо transition-delay доÑÑвнÑÑ 1s, а transition-duration â 2s, Ñо анÑмаÑÑÑ Ð¿Ð¾ÑинаÑÑÑÑÑ ÑеÑез 1 ÑекÑÐ½Ð´Ñ Ð¿ÑÑÐ»Ñ Ð·Ð¼Ñни влаÑÑивоÑÑÑ, а загалÑна ÑÑивалÑÑÑÑ ÑÑановиÑиме 2 ÑекÑнди.
ÐÐ¾Ð¶Ð»Ð¸Ð²Ñ Ð¹ негаÑÐ¸Ð²Ð½Ñ Ð·Ð½Ð°ÑеннÑ. Ð¢Ð¾Ð´Ñ Ð°Ð½ÑмаÑÑÑ Ð²ÑдобÑажаÑÑÑÑÑ Ð²ÑдÑазÑ, але поÑаÑкова ÑоÑка анÑмаÑÑÑ Ð±Ñде пÑÑÐ»Ñ Ð·Ð°Ð´Ð°Ð½Ð¾Ð³Ð¾ знаÑÐµÐ½Ð½Ñ (ÑаÑÑ). ÐапÑиклад, ÑкÑо transition-delay доÑÑвнÑÑ -1s, а transition-duration доÑÑвнÑÑ 2Ñ, Ñо анÑмаÑÑÑ Ð¿Ð¾ÑинаÑÑÑÑÑ Ð· ÑеÑедини, а загалÑна ÑÑивалÑÑÑÑ ÑÑановиÑиме 1 ÑекÑндÑ.
Ð¦Ñ Ð°Ð½ÑмаÑÑÑ Ð¿ÐµÑемÑÑÑÑ ÑиÑла з 0 на 9 за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ translate CSS:
stripe.onclick = function() {
stripe.classList.add('animate');
};#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: linear;
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
ÐаÑиÑнÑÑÑ Ð´Ð»Ñ Ð°Ð½ÑмаÑÑÑ:
<div id="digit"><div id="stripe">0123456789</div></div>
<script src="script.js"></script>
</body>
</html>ÐлаÑÑивÑÑÑÑ transform анÑмÑÑÑÑÑÑ Ñак:
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
}
У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð²Ð¸Ñе пÑÐ¸ÐºÐ»Ð°Ð´Ñ JavaScript Ð´Ð¾Ð´Ð°Ñ ÐºÐ»Ð°Ñ .animate до елеменÑа â Ñ Ð¿Ð¾ÑинаÑÑÑÑÑ Ð°Ð½ÑмаÑÑÑ:
stripe.classList.add('animate');
Ðи Ñакож могли б ÑозпоÑаÑи ÑÑ Ð´ÐµÑÑ Ñз ÑеÑедини, ÑоÑно вказавÑи ÑиÑло, напÑ. вÑдповÑдно до поÑоÑÐ½Ð¾Ñ ÑекÑнди, викоÑиÑÑовÑÑÑи негаÑивне знаÑÐµÐ½Ð½Ñ transition-delay.
ЯкÑо ви заÑаз клаÑнеÑе по ÑиÑÑÑ â анÑмаÑÑÑ Ð¿Ð¾ÑнеÑÑÑÑ Ð· поÑоÑÐ½Ð¾Ñ ÑекÑнди:
stripe.onclick = function() {
let sec = new Date().getSeconds() % 10;
stripe.style.transitionDelay = '-' + sec + 's';
stripe.classList.add('animate');
};#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: linear;
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
ÐаÑиÑнÑÑÑ Ð´Ð»Ñ Ð°Ð½ÑмаÑÑÑ:
<div id="digit"><div id="stripe">0123456789</div></div>
<script src="script.js"></script>
</body>
</html>JavaScript ÑобиÑÑ Ñе за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð´Ð¾Ð´Ð°Ñкового ÑÑдка:
stripe.onclick = function() {
let sec = new Date().getSeconds() % 10;
// напÑиклад, -3s запÑÑÐºÐ°Ñ Ð°Ð½ÑмаÑÑÑ Ð· 3-Ð¾Ñ ÑекÑнди
stripe.style.transitionDelay = '-' + sec + 's';
stripe.classList.add('animate');
};
transition-timing-function
ФÑнкÑÑÑ ÑаÑÑ Ð¾Ð¿Ð¸ÑÑÑ, Ñк пÑоÑÐµÑ Ð°Ð½ÑмаÑÑÑ Ð¼Ð°Ñ ÑозподÑлÑÑиÑÑ Ñ ÑаÑÑ. ÐапÑиклад, поÑинаÑÑÑÑÑ Ð¿Ð¾Ð²ÑлÑно, а поÑÑм Ñде Ñвидко, Ñи навпаки.
СпоÑаÑÐºÑ Ñе здаÑÑÑÑÑ Ð½Ð°Ð¹ÑкладнÑÑÐ¾Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ. Ðле вÑе ÑÑÐ°Ñ Ð´Ñже пÑоÑÑо, ÑкÑо ми пÑидÑлимо ÑÑÐ¾Ð¼Ñ ÑÑÐ¾Ñ Ð¸ ÑаÑÑ.
Ð¦Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ð¿ÑÐ¸Ð¹Ð¼Ð°Ñ Ð´Ð²Ð° Ñипи знаÑенÑ: кÑива ÐезÑÑ Ð°Ð±Ð¾ кÑоки. ÐоÑнемо з кÑивоÑ, оÑкÑлÑки вона викоÑиÑÑовÑÑÑÑÑÑ ÑаÑÑÑÑе.
ÐÑива ÐезÑÑ
ФÑнкÑÑÑ ÑаÑÑ Ð¼Ð¾Ð¶Ð½Ð° вÑÑановиÑи Ñк кÑÐ¸Ð²Ñ ÐезÑÑ Ð· 4 конÑÑолÑними ÑоÑками, ÑÐºÑ Ð·Ð°Ð´Ð¾Ð²Ð¾Ð»ÑнÑÑÑÑ Ñмовам:
- ÐеÑÑа конÑÑолÑна ÑоÑка:
(0,0). - ÐÑÑÐ°Ð½Ð½Ñ ÐºÐ¾Ð½ÑÑолÑна ÑоÑка:
(1,1). - ÐÐ»Ñ Ð¿ÑомÑжниÑ
ÑоÑок знаÑеннÑ
xмаÑÑÑ Ð±ÑÑи в ÑнÑеÑвалÑ0..1,yможе бÑÑи бÑдÑ-Ñким.
СинÑакÑÐ¸Ñ ÐºÑÐ¸Ð²Ð¾Ñ ÐезâÑ Ð² CSS: cubic-bezier(x2, y2, x3, y3). ТÑÑ Ð½Ð°Ð¼ поÑÑÑбно вказаÑи лиÑе 2-Ð³Ñ Ñ 3-ÑÑ ÐºÐ¾Ð½ÑÑолÑÐ½Ñ ÑоÑки, ÑÐ¾Ð¼Ñ Ñо 1-Ñа ÑÑкÑована на (0,0), а 4-Ñа â (1,1).
ФÑнкÑÑÑ ÑаÑÑ Ð¾Ð¿Ð¸ÑÑÑ, ÑвидкÑÑÑÑ Ð¿ÑоÑеÑÑ Ð°Ð½ÑмаÑÑÑ.
- ÐÑÑÑ
xâ Ñе ÑаÑ, де0â поÑаÑок,1â кÑнеÑÑtransition-duration. - ÐÑÑÑ
yвизнаÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð¿ÑоÑеÑÑ, де0â поÑаÑкове знаÑÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ,1â кÑнÑеве.
ÐайпÑоÑÑÑÑий ваÑÑÐ°Ð½Ñ â коли анÑмаÑÑÑ Ð¹Ð´Ðµ ÑÑвномÑÑно, з Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ð¾Ñ Ð»ÑнÑÐ¹Ð½Ð¾Ñ ÑвидкÑÑÑÑ. Ðа Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÐºÑÐ¸Ð²Ð¾Ñ Ñе можна визнаÑиÑи cubic-bezier(0, 0, 1, 1).
ÐÑÑ Ñк виглÑÐ´Ð°Ñ ÑÑ ÐºÑива:
â¦Ð¯Ðº баÑимо, Ñе пÑоÑÑо пÑÑма лÑнÑÑ. Рплином ÑаÑÑ (x) завеÑÑÐµÐ½Ð½Ñ (y) анÑмаÑÑÑ Ð¿Ð¾ÑÑÑйно змÑнÑÑÑÑÑÑ Ð²Ñд 0 до 1.
ÐоÑÑг Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð½Ð¸Ð¶Ñе ÑÑÑ Ð°ÑÑÑÑÑ Ð·Ð»Ñва напÑаво з поÑÑÑÐ¹Ð½Ð¾Ñ ÑвидкÑÑÑÑ (клаÑнÑÑÑ Ð¿Ð¾ нÑомÑ):
.train {
position: relative;
cursor: pointer;
width: 177px;
height: 160px;
left: 0;
transition: left 5s cubic-bezier(0, 0, 1, 1);
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<img class="train" src="https://js.cx/clipart/train.gif" onclick="this.style.left='450px'">
</body>
</html>ÐлаÑÑивÑÑÑÑ transition заÑнована на ÑÑй кÑивÑй:
.train {
left: 0;
transition: left 5s cubic-bezier(0, 0, 1, 1);
/* наÑиÑкаÑÑи на поÑÑг влаÑÑивÑÑÑÑ left ÑÑÐ°Ñ 450px, анÑмаÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑÑ */
}
â¦Ð Ñк ми можемо показаÑи, Ñо поÑÑг галÑмÑÑ?
Ðи можемо викоÑиÑÑаÑи ÑнÑÑ ÐºÑÐ¸Ð²Ñ ÐезâÑ: cubic-bezier(0.0, 0.5, 0.5 ,1.0).
ÐÑаÑÑк:
Як баÑимо, пÑоÑÐµÑ Ð¿Ð¾ÑинаÑÑÑÑÑ Ñвидко: кÑива злÑÑÐ°Ñ Ð²Ð³Ð¾ÑÑ, а поÑÑм вÑе повÑлÑнÑÑе Ñ Ð¿Ð¾Ð²ÑлÑнÑÑе.
ÐÑÑ ÑÑнкÑÑÑ ÑаÑÑ Ð² дÑÑ (наÑиÑнÑÑÑ Ð½Ð° поÑÑг):
.train {
position: relative;
cursor: pointer;
width: 177px;
height: 160px;
left: 0px;
transition: left 5s cubic-bezier(0.0, 0.5, 0.5, 1.0);
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<img class="train" src="https://js.cx/clipart/train.gif" onclick="this.style.left='450px'">
</body>
</html>CSS:
.train {
left: 0;
transition: left 5s cubic-bezier(0, .5, .5, 1);
/* наÑиÑкаÑÑи на поÑÑг влаÑÑивÑÑÑÑ left ÑÑÐ°Ñ 450px, анÑмаÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑÑ */
}
ÐÑнÑÑ ÐºÑлÑка вбÑдованиÑ
кÑивиÑ
: linear, ease, ease-in, ease-out Ñа ease-in-out.
linear ÑкоÑоÑÐµÐ½Ð½Ñ Ð²Ñд cubic-bezier(0, 0, 1, 1) â пÑÑма лÑнÑÑ, ÑÐºÑ Ð¼Ð¸ вже опиÑÑвали.
ÐнÑÑ Ð½Ð°Ð·Ð²Ð¸ Ñ ÑкоÑоÑеннÑми наÑÑÑпниÑ
cubic-bezier:
ease* |
ease-in |
ease-out |
ease-in-out |
|---|---|---|---|
(0.25, 0.1, 0.25, 1.0) |
(0.42, 0, 1.0, 1.0) |
(0, 0, 0.58, 1.0) |
(0.42, 0, 0.58, 1.0) |
* â Ñипово, ÑкÑо ÑÑнкÑÑÑ ÑаÑÑ Ð½Ðµ вÑÑановлена, викоÑиÑÑовÑÑÑÑÑÑ ease.
Тож ми могли б викоÑиÑÑовÑваÑи ease-out Ð´Ð»Ñ Ð½Ð°Ñого поÑÑгÑ, Ñо ÑповÑлÑнÑÑÑÑÑÑ:
.train {
left: 0;
transition: left 5s ease-out;
/* Ñе Ñаме Ñк transition: left 5s cubic-bezier(0, .5, .5, 1); */
}
Ðле виглÑÐ´Ð°Ñ Ñе ÑÑÐ¾Ñ Ð¸ ÑнакÑе.
ÐÑива ÐезÑÑ Ð¼Ð¾Ð¶Ðµ змÑÑиÑи анÑмаÑÑÑ Ð²Ð¸Ð¹Ñи за Ð¼ÐµÐ¶Ñ ÑÑ Ð´ÑапазонÑ.
ÐонÑÑолÑÐ½Ñ ÑоÑки на кÑивÑй можÑÑÑ Ð¼Ð°Ñи бÑдÑ-ÑÐºÑ ÐºÐ¾Ð¾ÑдинаÑи y: навÑÑÑ Ð½ÐµÐ³Ð°ÑÐ¸Ð²Ð½Ñ Ð°Ð±Ð¾ велиÑезнÑ. Ð¢Ð¾Ð´Ñ ÐºÑива ÐезâÑ Ñакож бÑде дÑже низÑÐºÐ¾Ñ Ð°Ð±Ð¾ виÑокоÑ, Ñо змÑÑÑÑ Ð°Ð½ÑмаÑÑÑ Ð²Ð¸Ñ
одиÑи за Ð¼ÐµÐ¶Ñ Ð½Ð¾ÑмалÑного дÑапазонÑ.
У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ñе пÑÐ¸ÐºÐ»Ð°Ð´Ñ ÐºÐ¾Ð´ анÑмаÑÑÑ:
.train {
left: 100px;
transition: left 5s cubic-bezier(.5, -1, .5, 2);
/* клÑк на поÑÑÐ·Ñ Ð²ÑÑановлÑÑ Ð²Ð»Ð°ÑÑивÑÑÑÑ left на 450px */
}
ÐлаÑÑивÑÑÑÑ left Ð¼Ð°Ñ Ð±ÑÑи анÑÐ¼Ð¾Ð²Ð°Ð½Ð¾Ñ Ð²Ñд 100px до 400px.
Ðле ÑкÑо ви клаÑнеÑе по поÑÑгÑ, ви побаÑиÑе, Ñо:
- СпоÑаÑÐºÑ Ð¿Ð¾ÑÑг повеÑÑаÑÑÑÑÑ Ð½Ð°Ð·Ð°Ð´:
leftÑÑÐ°Ñ Ð¼ÐµÐ½Ñим нÑж100px. - ÐоÑÑм вÑн ÑÑÑ
аÑÑÑÑÑ Ð²Ð¿ÐµÑед, ÑÑоÑ
и далÑ, нÑж
400px. - РпоÑÑм Ð·Ð½Ð¾Ð²Ñ Ð½Ð°Ð·Ð°Ð´ â до
400px.
.train {
position: relative;
cursor: pointer;
width: 177px;
height: 160px;
left: 100px;
transition: left 5s cubic-bezier(.5, -1, .5, 2);
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<img class="train" src="https://js.cx/clipart/train.gif" onclick="this.style.left='400px'">
</body>
</html>Ð§Ð¾Ð¼Ñ Ñе вÑдбÑваÑÑÑÑÑ, ÑÑÐ°Ñ Ð·ÑозÑмÑлим, ÑкÑо ми подивимоÑÑ Ð½Ð° гÑаÑÑк Ð´Ð°Ð½Ð¾Ñ ÐºÑÐ¸Ð²Ð¾Ñ ÐезâÑ:
Ðи пеÑемÑÑÑили кооÑдинаÑÑ y 2-Ð¾Ñ ÑоÑки нижÑе нÑлÑ, а Ð´Ð»Ñ 3-Ð¾Ñ ÑоÑки ми зÑобили ÑÑ Ð±ÑлÑÑе за 1, ÑÐ¾Ð¼Ñ ÐºÑива виÑ
одиÑÑ Ñз âзвиÑайногоâ квадÑанÑа. ÐооÑдинаÑа y виÑ
одиÑÑ Ð·Ð° âÑÑандаÑÑнийâ дÑапазон 0..1.
Як вÑдомо, y вимÑÑÑÑ âзавеÑÑÐµÐ½Ð½Ñ Ð¿ÑоÑеÑÑ Ð°Ð½ÑмаÑÑÑâ. ÐнаÑÐµÐ½Ð½Ñ y = 0 вÑдповÑÐ´Ð°Ñ Ð¿Ð¾ÑаÑÐºÐ¾Ð²Ð¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ, а y = 1 â кÑнÑевомÑ. Таким Ñином, знаÑÐµÐ½Ð½Ñ y<0 пеÑемÑÑÑÑ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ð·Ð° Ð¼ÐµÐ¶Ñ Ð¿Ð¾ÑаÑкового left Ñ y>1 â за оÑÑаннÑй left.
Це ÑоÑно âмâÑкийâ ваÑÑанÑ. ЯкÑо ми введемо знаÑÐµÐ½Ð½Ñ y Ñк-Ð¾Ñ -99 Ñа 99 Ñо поÑÑг виÑкоÑиÑÑ Ñз дÑÐ°Ð¿Ð°Ð·Ð¾Ð½Ñ Ð·Ð½Ð°Ñно бÑлÑÑе.
Ðле Ñк зÑобиÑи кÑÐ¸Ð²Ñ ÐезÑÑ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного завданнÑ? ÐнÑÑÑÑменÑÑв багаÑо.
- ÐапÑиклад, ми можемо Ñе зÑобиÑи на ÑайÑÑ https://cubic-bezier.com/.
- ÐнÑÑÑÑменÑи ÑозÑобника бÑаÑзеÑа Ñакож маÑÑÑ ÑпеÑÑалÑÐ½Ñ Ð¿ÑдÑÑÐ¸Ð¼ÐºÑ ÐºÑивиÑ
ÐезÑÑ Ð² CSS:
- ÐÑдкÑийÑе ÑнÑÑÑÑменÑи ÑозÑобника за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ F12 (Mac: Cmd+Opt+I).
- ÐибеÑÑÑÑ Ð²ÐºÐ»Ð°Ð´ÐºÑ
Elements, ÑÐ¾Ð´Ñ Ð·Ð²ÐµÑнÑÑÑ ÑÐ²Ð°Ð³Ñ Ð½Ð° панелÑStylesпÑавоÑÑÑ. - CSS влаÑÑивоÑÑÑ Ð·Ñ Ñловом
cubic-bezierмаÑимÑÑÑ Ð·Ð½Ð°Ñок пеÑед Ñим Ñловом. - ÐаÑиÑнÑÑÑ Ñей знаÑок, Ñоб ÑедагÑваÑи кÑивÑ.
ÐÑоки
ФÑнкÑÑÑ ÑаÑÑ steps(кÑлÑкÑÑÑÑ ÐºÑокÑв[, start/end]) дозволÑÑ ÑоздÑлиÑи пеÑеÑ
Ñд на кÑлÑка кÑокÑв.
ÐобаÑимо Ñе на пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð· ÑиÑÑами.
ÐÑÑ ÑпиÑок ÑиÑÑ, без Ð¶Ð¾Ð´Ð½Ð¾Ñ Ð°Ð½ÑмаÑÑÑ, пÑоÑÑо Ñк оÑнова:
#digit {
border: 1px solid red;
width: 1.2em;
}
#stripe {
display: inline-block;
font: 32px monospace;
}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="digit"><div id="stripe">0123456789</div></div>
</body>
</html>У HTML ÑмÑга ÑиÑÑ Ñкладена в <div id="digits"> ÑÑкÑÐ¾Ð²Ð°Ð½Ð¾Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸:
<div id="digit">
<div id="stripe">0123456789</div>
</div>
Div з #digit Ð¼Ð°Ñ ÑÑкÑÐ¾Ð²Ð°Ð½Ñ ÑиÑÐ¸Ð½Ñ Ñа ÑамкÑ, ÑÐ¾Ð¼Ñ Ð²Ð¸Ð³Ð»ÑÐ´Ð°Ñ Ñк ÑеÑвоне вÑкно.
Ðи зÑобимо ÑаймеÑ: ÑиÑÑи бÑдÑÑÑ Ð·âÑвлÑÑиÑÑ Ð¾Ð´Ð½Ð° за одноÑ, диÑкÑеÑно.
Щоб доÑÑгÑи ÑÑого, ми пÑиÑ
оваÑмо #stripe за межами #digit за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ overflow: hidden, а поÑÑм кÑок за кÑоком бÑдемо пеÑемÑÑаÑи #stripe лÑвоÑÑÑ.
ÐÑде 9 кÑокÑв, кÑок-Ñ Ñд Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ ÑиÑÑи:
#stripe.animate {
transform: translate(-90%);
transition: transform 9s steps(9, start);
}
ÐеÑÑим аÑгÑменÑом steps(9, start) Ñ ÐºÑлÑкÑÑÑÑ ÐºÑокÑв. ÐеÑеÑвоÑÐµÐ½Ð½Ñ Ð±Ñде ÑоздÑлено на 9 ÑаÑÑин (по 10% кожна). ЧаÑовий ÑнÑеÑвал Ñакож авÑомаÑиÑно дÑлиÑÑÑÑ Ð½Ð° 9 ÑаÑÑин, ÑÐ¾Ð¼Ñ transition: 9s Ð´Ð°Ñ Ð½Ð°Ð¼ 9 ÑекÑнд на вÑÑ Ð°Ð½ÑмаÑÑÑ â 1 ÑекÑнда на ÑиÑÑÑ.
ÐÑÑгий аÑгÑÐ¼ÐµÐ½Ñ â Ñе одне з двоÑ
ÑлÑв: start Ñи end.
ÐнаÑÐµÐ½Ð½Ñ start ознаÑаÑ, Ñо на поÑаÑÐºÑ Ð°Ð½ÑмаÑÑÑ Ð½Ð°Ð¼ поÑÑÑбно негайно зÑобиÑи пеÑÑий кÑок.
РдÑÑ:
#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: steps(9, start);
}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
ÐаÑиÑнÑÑÑ Ð´Ð»Ñ Ð°Ð½ÑмаÑÑÑ:
<div id="digit"><div id="stripe">0123456789</div></div>
<script>
digit.onclick = function() {
stripe.classList.add('animate');
}
</script>
</body>
</html>ÐлÑк на ÑиÑÑÑ Ð¾Ð´ÑÐ°Ð·Ñ Ð·Ð¼ÑнÑÑ ÑÑ Ð½Ð° 1 (пеÑÑий кÑок), а поÑÑм змÑнÑÑ Ð½Ð° поÑаÑÐºÑ Ð½Ð°ÑÑÑÐ¿Ð½Ð¾Ñ ÑекÑнди.
ÐÑоÑÐµÑ Ñде Ñак:
0sâ-10%(пеÑÑа змÑна на поÑаÑÐºÑ 1-Ð¾Ñ ÑекÑнди, вÑдÑазÑ)1sâ-20%- â¦
8sâ-90%- (оÑÑÐ°Ð½Ð½Ñ ÑекÑнда показÑÑ Ð¾ÑÑаÑоÑне знаÑеннÑ).
ТÑÑ Ð¿ÐµÑÑа змÑна бÑла миÑÑÑва ÑеÑез start Ñ steps.
ÐлÑÑеÑнаÑивне знаÑÐµÐ½Ð½Ñ end ознаÑаÑиме, Ñо змÑÐ½Ñ ÑлÑд заÑÑоÑовÑваÑи не на поÑаÑкÑ, а в кÑнÑÑ ÐºÐ¾Ð¶Ð½Ð¾Ñ ÑекÑнди.
ÐÑже, пÑоÑÐµÑ Ð´Ð»Ñ steps(9, end) бÑде виглÑдаÑи Ñак:
0sâ0(пÑоÑÑгом пеÑÑÐ¾Ñ ÑекÑнди нÑÑого не змÑнÑÑÑÑÑÑ)1sâ-10%(пеÑÑа змÑна в кÑнÑÑ 1-Ð¾Ñ ÑекÑнди)2sâ-20%- â¦
9sâ-90%
ÐÑÑ steps(9, end) в дÑÑ (звеÑнÑÑÑ ÑÐ²Ð°Ð³Ñ Ð½Ð° паÑÐ·Ñ Ð¼Ñж змÑÐ½Ð¾Ñ Ð¿ÐµÑÑÐ¾Ñ ÑиÑÑи):
#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: steps(9, end);
}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
ÐаÑиÑнÑÑÑ Ð´Ð»Ñ Ð°Ð½ÑмаÑÑÑ:
<div id="digit"><div id="stripe">0123456789</div></div>
<script>
digit.onclick = function() {
stripe.classList.add('animate');
}
</script>
</body>
</html>ÐÑнÑÑÑÑ Ñакож ÑкоÑоÑÐµÐ½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð´Ð»Ñ steps(...):
step-startâ Ñе Ñаме, Ñо йsteps(1, start). ТобÑо анÑмаÑÑÑ Ð¿Ð¾ÑинаÑÑÑÑÑ Ð²ÑдÑÐ°Ð·Ñ Ñ Ð·Ð°Ð¹Ð¼Ð°Ñ 1 кÑок. Ðона поÑинаÑÑÑÑÑ Ð¹ закÑнÑÑÑÑÑÑÑ Ð¾Ð´ÑазÑ, нÑби не бÑло анÑмаÑÑÑ.step-endâ Ñе Ñаме, Ñо йsteps(1, end): зÑобÑÑÑ Ð°Ð½ÑмаÑÑÑ Ð·Ð° один кÑок Ñ ÐºÑнÑÑtransition-duration.
Ð¦Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ ÑÑдко викоÑиÑÑовÑÑÑÑÑÑ, ÑÐ¾Ð¼Ñ Ñо Ñе наÑпÑÐ°Ð²Ð´Ñ Ð½Ðµ анÑмаÑÑÑ, а однокÑокова змÑна. Ðи згадÑÑмо ÑÑ ÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²Ð½Ð¾Ñи.
ÐодÑÑ: transitionend
Ðоли закÑнÑÑÑÑÑÑÑ CSS анÑмаÑÑÑ, запÑÑкаÑÑÑÑÑ Ð¿Ð¾Ð´ÑÑ transitionend.
Ðона ÑиÑоко викоÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´ÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð°Ð½ÑмаÑÑÑ. Також ми можемо обʼÑднÑваÑи анÑмаÑÑÑ Ð· ÑÑ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ.
ÐапÑиклад, ÑкÑо наÑиÑнÑÑи на коÑÐ°Ð±ÐµÐ»Ñ Ñ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ñе пÑикладÑ, вÑн поÑÐ¸Ð½Ð°Ñ Ð¿Ð»Ð¸ÑÑи ÑÑди й назад, ÑоÑÐ°Ð·Ñ Ð²Ñе Ð´Ð°Ð»Ñ Ð¹ Ð´Ð°Ð»Ñ Ð¿ÑавоÑÑÑ:
ÐнÑмаÑÑÑ ÑнÑÑÑÑÑÑÑÑÑ ÑÑнкÑÑÑÑ go, Ñка повÑоÑно запÑÑкаÑÑÑÑÑ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ ÑазÑ, коли закÑнÑÑÑÑÑÑÑ Ð¿ÐµÑеÑ
Ñд, Ñ Ð·Ð¼ÑнÑÑ Ð½Ð°Ð¿ÑÑмок на пÑоÑилежний:
boat.onclick = function() {
//...
let times = 1;
function go() {
if (times % 2) {
// пливÑи пÑавоÑÑÑ
boat.classList.remove('back');
boat.style.marginLeft = 100 * times + 200 + 'px';
} else {
// пливÑи лÑвоÑÑÑ
boat.classList.add('back');
boat.style.marginLeft = 100 * times - 200 + 'px';
}
}
go();
boat.addEventListener('transitionend', function() {
times++;
go();
});
};
ÐбâÑÐºÑ Ð¿Ð¾Ð´ÑÑ Ð´Ð»Ñ transitionend Ð¼Ð°Ñ ÐºÑлÑка ÑпеÑиÑÑÑниÑ
влаÑÑивоÑÑей:
event.propertyName- ÐлаÑÑивÑÑÑÑ, Ñка завеÑÑила анÑмаÑÑÑ. Ðоже бÑÑи коÑиÑна коли ми анÑмÑÑмо кÑлÑка влаÑÑивоÑÑей одноÑаÑно.
event.elapsedTime- Ð§Ð°Ñ (Ñ ÑекÑндаÑ
), Ñкий ÑÑивала анÑмаÑÑÑ, без
transition-delay.
Keyframes
Ðи можемо обâÑднаÑи кÑлÑка пÑоÑÑиÑ
анÑмаÑÑй Ñазом за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¿Ñавила CSS @keyframes.
Ðоно визнаÑÐ°Ñ âÑмâÑâ анÑмаÑÑÑ Ñа пÑавила â Ñо, коли Ñ Ð´Ðµ анÑмÑваÑи. ÐикоÑиÑÑовÑÑÑи влаÑÑивÑÑÑÑ animation, ми можемо пÑиÑднаÑи анÑмаÑÑÑ Ð´Ð¾ елеменÑа Ñа вказаÑи додаÑÐºÐ¾Ð²Ñ Ð¿Ð°ÑамеÑÑи.
ÐÑÑ Ð¿Ñиклад Ñз поÑÑненнÑми:
<div class="progress"></div>
<style>
@keyframes go-left-right { /* ÑмâÑ Ð°Ð½ÑмаÑÑÑ: "go-left-right" */
from { left: 0px; } /* поÑаÑок анÑмаÑÑÑ Ð²Ñд left: 0px */
to { left: calc(100% - 50px); } /* кÑнеÑÑ Ð°Ð½ÑмаÑÑÑ Ð´Ð¾ left: 100%-50px */
}
.progress {
animation: go-left-right 3s infinite alternate;
/* заÑÑоÑÑваÑи анÑмаÑÑÑ "go-left-right" до елеменÑа
ÑÑивалÑÑÑÑ 3 ÑекÑнди
кÑлÑкÑÑÑÑ ÑазÑв: неÑкÑнÑенно
ÑоÑÐ°Ð·Ñ Ð·Ð¼ÑнÑваÑи напÑÑмок
*/
position: relative;
border: 2px solid green;
width: 50px;
height: 20px;
background: lime;
}
</style>
РбагаÑо ÑÑаÑей пÑо @keyframes Ñа деÑалÑна ÑпеÑиÑÑкаÑÑÑ.
ÐмовÑÑно, @keyframes не знадобиÑÑÑÑ Ð²Ð°Ð¼ ÑаÑÑо, Ñ
Ñба ÑкÑо на ваÑиÑ
ÑайÑаÑ
вÑе поÑÑÑйно ÑÑÑ
аÑÑÑÑÑ.
ÐÑодÑкÑивнÑÑÑÑ
ÐÑлÑÑÑÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑей CSS можна анÑмÑваÑи, оÑкÑлÑки бÑлÑÑÑÑÑÑ Ñз ниÑ
Ñ ÑиÑловими знаÑеннÑми. ÐапÑиклад, width, color, font-size вÑÑ Ñ ÑиÑлами. Ðоли ви анÑмÑÑÑе ÑÑ
, бÑаÑÐ·ÐµÑ Ð¿Ð¾ÑÑÑпово змÑнÑÑ ÑÑ ÑиÑла ÐºÐ°Ð´Ñ Ð·Ð° кадÑом, ÑÑвоÑÑÑÑи плавний еÑекÑ.
Ðднак не вÑÑ Ð°Ð½ÑмаÑÑÑ Ð²Ð¸Ð³Ð»ÑдаÑимÑÑÑ Ñак гладко, Ñк Ñ Ð¾ÑÑлоÑÑ Ð±, оÑкÑлÑки ÑÑÐ·Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð·Ð¼ÑнÑÑÑÑÑÑ Ð¿Ð¾-ÑÑзномÑ.
ЯкÑо говоÑиÑи бÑлÑÑе пÑо ÑÐµÑ Ð½ÑÑÐ½Ñ Ð´ÐµÑалÑ, коли вÑдбÑваÑÑÑÑÑ Ð·Ð¼Ñна ÑÑилÑ, бÑаÑÐ·ÐµÑ Ð²Ð¸ÐºÐ¾Ð½ÑÑ 3 кÑоки Ð´Ð»Ñ Ð²ÑдÑвоÑÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ виглÑдÑ:
- Layout: пеÑеÑÐ°Ñ ÑваÑи геомеÑÑÑÑ, а поÑÑм Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ елеменÑа
- Paint: пеÑеÑÐ°Ñ ÑваÑи, Ñк вÑе Ð¼Ð°Ñ Ð²Ð¸Ð³Ð»ÑдаÑи на ÑвоÑÑ Ð¼ÑÑÑÑÑ , вклÑÑаÑÑи Ñон, колÑоÑи,
- Composite: вÑдÑвоÑиÑи кÑнÑÐµÐ²Ñ ÑезÑлÑÑаÑи в пÑкÑелÑÑ Ð½Ð° екÑанÑ, заÑÑоÑÑваÑи CSS-пеÑеÑвоÑеннÑ, ÑкÑо вони ÑÑнÑÑÑÑ.
ÐÑд ÑÐ°Ñ CSS-анÑмаÑÑÑ Ñей пÑоÑÐµÑ Ð¿Ð¾Ð²ÑоÑÑÑÑÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ кадÑа. Ðднак влаÑÑивоÑÑÑ CSS, ÑÐºÑ Ð½Ñколи не впливаÑÑÑ Ð½Ð° геомеÑÑÑÑ Ð°Ð±Ð¾ положеннÑ, напÑиклад, color, можÑÑÑ Ð¿ÑопÑÑкаÑиÑÑ ÐºÑок Layout. ЯкÑо color змÑнÑÑÑÑÑÑ, бÑаÑÐ·ÐµÑ Ð½Ðµ обÑиÑлÑÑ Ð½Ð¾Ð²Ñ Ð³ÐµÐ¾Ð¼ÐµÑÑÑÑ, вÑн пеÑеÑ
одиÑÑ Ð´Ð¾ кÑокÑв Paint â Composite. Ð Ñ ÐºÑлÑка влаÑÑивоÑÑей, ÑÐºÑ Ð±ÐµÐ·Ð¿Ð¾ÑеÑеднÑо пеÑеÑ
одÑÑÑ Ð´Ð¾ Composite. Ðи можеÑе знайÑи довÑий ÑпиÑок влаÑÑивоÑÑей CSS Ñа на ÑкиÑ
еÑапаÑ
вони запÑÑкаÑÑÑÑÑ ÑÑÑ https://csstriggers.com.
ÐбÑиÑÐ»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ зайнÑÑи багаÑо ÑаÑÑ, оÑобливо на ÑÑоÑÑÐ½ÐºÐ°Ñ Ñз Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ ÐºÑлÑкÑÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв Ñ ÑÐºÐ»Ð°Ð´Ð½Ð¾Ñ ÑÑÑÑкÑÑÑоÑ. РзаÑÑимки ÑакÑиÑно помÑÑÐ½Ñ Ð½Ð° бÑлÑÑоÑÑÑ Ð¿ÑиÑÑÑоÑв, Ñо пÑизводиÑÑ Ð´Ð¾ âÑÑемÑÑннÑâ, Ð¼ÐµÐ½Ñ Ð¿Ð»Ð°Ð²Ð½Ð¾Ñ Ð°Ð½ÑмаÑÑÑ.
ÐнÑмаÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑей, ÑÐºÑ Ð¿ÑопÑÑкаÑÑÑ Layout кÑок, пÑаÑÑÑÑÑ ÑвидÑе. ÐавÑÑÑ Ð»ÑпÑе, нÑж коли пÑопÑÑкаÑÑÑÑÑ ÐºÑок Paint.
ÐлаÑÑивÑÑÑÑ transform Ñ ÑÑдовим вибоÑом, оÑкÑлÑки:
- ÐеÑеÑвоÑÐµÐ½Ð½Ñ CSS впливаÑÑÑ Ð½Ð° блок ÑÑлÑового елеменÑа в ÑÑÐ»Ð¾Ð¼Ñ (повеÑÑаÑÑÑ, пеÑевеÑÑаÑÑÑ, ÑозÑÑгÑÑÑÑ, змÑÑÑÑÑÑ Ð¹Ð¾Ð³Ð¾).
- CSS-пеÑеÑвоÑÐµÐ½Ð½Ñ Ð½Ñколи не впливаÑÑÑ Ð½Ð° ÑÑÑÑÐ´Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи.
â¦Ð¢Ð¾Ð¼Ñ бÑаÑзеÑи заÑÑоÑовÑÑÑÑ transform пÑÑÐ»Ñ Ð½Ð°ÑвниÑ
обÑиÑÐ»ÐµÐ½Ñ Layout Ñа Paint на кÑоÑÑ Composite.
ÐнÑими Ñловами, бÑаÑÐ·ÐµÑ Ð¾Ð±ÑиÑлÑÑ Ð¼Ð°ÐºÐµÑ (ÑозмÑÑи, положеннÑ), ÑозÑаÑбовÑÑ Ð¹Ð¾Ð³Ð¾ за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ colors, background ÑоÑо на еÑÐ°Ð¿Ñ Paint, а поÑÑм заÑÑоÑовÑÑ transform до елеменÑÑв, ÑÐºÑ ÑÑого поÑÑебÑÑÑÑ.
ÐмÑни (анÑмаÑÑÑ) влаÑÑивоÑÑÑ transform нÑколи не запÑÑкаÑÑÑ ÐºÑоки Layout Ñа Paint. ÐÑлÑÑе Ñого, бÑаÑÐ·ÐµÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑ Ð³ÑаÑÑÑний пÑиÑкоÑÑÐ²Ð°Ñ (ÑпеÑÑалÑний ÑÑп на ЦРабо вÑдеокаÑÑÑ) Ð´Ð»Ñ CSS-пеÑеÑвоÑенÑ, Ñо ÑобиÑÑ ÑÑ
дÑже еÑекÑивними.
Ðа ÑаÑÑÑ, влаÑÑивÑÑÑÑ transform дÑже поÑÑжна. ÐикоÑиÑÑовÑÑÑи transform Ð´Ð»Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñа, ви можеÑе обеÑÑаÑи Ñа кÑÑÑиÑи його, ÑозÑÑгÑваÑи Ñа зменÑÑваÑи, пеÑемÑÑÑваÑи Ñа багаÑо ÑнÑого. Ð¢Ð¾Ð¼Ñ Ð·Ð°Ð¼ÑÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑей left/margin-left ми можемо викоÑиÑÑовÑваÑи transform: translateX(â¦), transform: scale Ð´Ð»Ñ Ð·Ð±ÑлÑÑÐµÐ½Ð½Ñ ÑозмÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñа ÑоÑо.
ÐлаÑÑивÑÑÑÑ opacity нÑколи не запÑÑÐºÐ°Ñ Layout (в Mozilla Gecko Ñакож пÑопÑÑкаÑÑÑÑÑ Paint). Ðи можемо викоÑиÑÑовÑваÑи його Ð´Ð»Ñ ÐµÑекÑÑв вÑдобÑаженнÑ/пÑиÑ
овÑÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ поÑиленнÑ/згаÑаннÑ.
ÐоÑÐ´Ð½Ð°Ð½Ð½Ñ transform з opacity зазвиÑай може виÑÑÑÑваÑи бÑлÑÑÑÑÑÑ Ð½Ð°ÑиÑ
поÑÑеб, забезпеÑÑÑÑи плавнÑ, ÑÑкÑÐ°Ð²Ñ Ð°Ð½ÑмаÑÑÑ.
ÐапÑиклад, ÑÑÑ ÐºÐ»Ñк на ÐµÐ»ÐµÐ¼ÐµÐ½Ñ #boat Ð´Ð¾Ð´Ð°Ñ ÐºÐ»Ð°Ñ Ñз transform: translateX(300) Ñа opacity: 0, Ñаким Ñином змÑÑÑÑÑи його ÑÑÑ
аÑиÑÑ Ð½Ð° 300px пÑавоÑÑÑ Ñ Ð·Ð½Ð¸ÐºÐ°Ñи:
<img src="https://js.cx/clipart/boat.png" id="boat">
<style>
#boat {
cursor: pointer;
transition: transform 2s ease-in-out, opacity 2s ease-in-out;
}
.move {
transform: translateX(300px);
opacity: 0;
}
</style>
<script>
boat.onclick = () => boat.classList.add('move');
</script>
ÐÑÑ Ð±ÑлÑÑ Ñкладний пÑиклад Ñз @keyframes:
<h2 onclick="this.classList.toggle('animated')">наÑиÑнÑÑÑ Ð½Ð° мене, Ñоб поÑаÑи/зÑпиниÑи</h2>
<style>
.animated {
animation: hello-goodbye 1.8s infinite;
width: fit-content;
}
@keyframes hello-goodbye {
0% {
transform: translateY(-60px) rotateX(0.7turn);
opacity: 0;
}
50% {
transform: none;
opacity: 1;
}
100% {
transform: translateX(230px) rotateZ(90deg) scale(0.5);
opacity: 0;
}
}
</style>
ÐÑдÑÑмки
CSS-анÑмаÑÑÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ Ð¿Ð»Ð°Ð²Ð½Ð¾ (або покÑоково) анÑмÑваÑи змÑÐ½Ñ Ð¾Ð´Ð½ÑÑÑ Ð°Ð±Ð¾ кÑлÑÐºÐ¾Ñ Ð²Ð»Ð°ÑÑивоÑÑей CSS.
Це пÑÐ´Ñ Ð¾Ð´Ð¸ÑÑ Ð´Ð»Ñ Ð±ÑлÑÑоÑÑÑ Ð·Ð°Ð´Ð°Ñ. Ðи Ñакож можемо викоÑиÑÑовÑваÑи JavaScript Ð´Ð»Ñ Ð°Ð½ÑмаÑÑÑ, ÑÑÐ¾Ð¼Ñ Ð¿ÑиÑвÑÑений наÑÑÑпний ÑоздÑл.
ÐÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð°Ð½ÑмаÑÑÑ CSS поÑÑвнÑно з JavaScript:
- ÐÑоÑÑÑ ÑеÑÑ ÑоблÑÑÑÑÑ Ð¿ÑоÑÑо.
- Швидка Ñа легка Ð´Ð»Ñ Ð¿ÑоÑеÑоÑа.
- ÐнÑмаÑÑÑ JavaScript Ñ Ð³Ð½ÑÑкими. Ðони можÑÑÑ ÑеалÑзÑваÑи бÑдÑ-ÑÐºÑ Ð»Ð¾Ð³ÑÐºÑ Ð°Ð½ÑмаÑÑÑ, навÑÑÑ âвибÑÑ â елеменÑа.
- Ðе ÑÑлÑки влаÑÑивоÑÑÑ Ð·Ð¼ÑнÑÑÑÑÑÑ. Ð JavaScript ми можемо ÑÑвоÑÑваÑи Ð½Ð¾Ð²Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи Ñк ÑаÑÑÐ¸Ð½Ñ Ð°Ð½ÑмаÑÑÑ.
У пеÑÑиÑ
пÑикладаÑ
ÑÑого ÑоздÑÐ»Ñ Ð¼Ð¸ анÑмÑвали font-size, left, width, height ÑоÑо. У ÑеалÑниÑ
пÑоекÑаÑ
ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи transform: scale() Ñ transform: translate() Ð´Ð»Ñ ÐºÑаÑÐ¾Ñ Ð¿ÑодÑкÑивноÑÑÑ.
ÐÑлÑÑÑÑÑÑ Ð°Ð½ÑмаÑÑй можна ÑеалÑзÑваÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ CSS, Ñк опиÑано в ÑÑÐ¾Ð¼Ñ ÑоздÑлÑ. РподÑÑ transitionend дозволÑÑ Ð·Ð°Ð¿ÑÑкаÑи JavaScript пÑÑÐ»Ñ Ð°Ð½ÑмаÑÑÑ, ÑÐ¾Ð¼Ñ Ð²Ð¾Ð½Ð° добÑе ÑнÑегÑÑÑÑÑÑÑ Ð· кодом.
Ðле в наÑÑÑÐ¿Ð½Ð¾Ð¼Ñ ÑоздÑÐ»Ñ Ð¼Ð¸ зÑобимо кÑлÑка анÑмаÑÑй JavaScript, Ñоб Ð¾Ñ Ð¾Ð¿Ð¸Ñи бÑлÑÑ ÑÐºÐ»Ð°Ð´Ð½Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¸.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)