CodeKitHub
Інструменти CSS

Генератор CSS cubic-bezier

Останнє оновлення:

Цей інструмент дозволяє сформувати кастомну CSS-криву плавності cubic-bezier() за допомогою чотирьох повзунків і переглянути її наживо перед копіюванням коду. Налаштуйте значення контрольних точок x1, y1, x2 і y2, спостерігайте, як миттєво оновлюються крива й елемент попереднього перегляду в русі, а потім скопіюйте transition-timing-function: cubic-bezier(...) прямо у вашу таблицю стилів.

Curve

Presets

Generated CSS

Also works with animation-timing-function.

Що це за інструмент?

cubic-bezier() — це CSS-функція часу, що керує тим, як анімоване чи перехідне значення прискорюється й уповільнюється з часом, замість руху зі сталою швидкістю. Вона визначається двома контрольними точками — (x1, y1) і (x2, y2) — які вигинають криву між фіксованою початковою точкою (0,0) і кінцевою точкою (1,1). Значення x мають лишатися між 0 і 1, але значення y можуть виходити за ці межі, створюючи ефекти перельоту чи відскоку.

Написання вручну — підбір чотирьох десяткових чисел, щоб отримати відчуття, яке не надто різке й не надто в'яле, — потребує багато спроб і помилок. Цей інструмент замінює цей метод прямим маніпулюванням: перетягніть повзунок, спостерігайте, як вигинається крива й рухається кулька попереднього перегляду, і скопіюйте CSS, коли рух відчувається правильним.

Джерело: CSS Easing Functions Level 1, W3C — специфікація, що визначає cubic-bezier() і п'ять іменованих ключових слів, на яких засновані готові набори цього інструмента.

Навіщо його використовувати?

  • Живий SVG-графік точно показує, як вигинається ваша крива між фіксованими початковою й кінцевою точками, з обома контрольними точками та їхніми маркерами, намальованими для наочності.
  • Кнопка відтворення анімує елемент попереднього перегляду по треку, використовуючи саме вашу криву, тож ви можете відчути рух, а не просто бачити статичний графік.
  • Готові набори в один клік для п'яти стандартних іменованих функцій плавності — ease, ease-in, ease-out, ease-in-out і linear — як описано в специфікації CSS Easing Functions.
  • Значення y можуть опускатися нижче 0 чи підійматися вище 1, дозволяючи будувати плавність із перельотом/відскоком, яку неможливо отримати через іменовані ключові слова.
  • Видає готовий до вставлення CSS для transition-timing-function — те саме значення також підходить для animation-timing-function.
  • Працює повністю у вашому браузері — нічого з того, що ви налаштовуєте, нікуди не завантажується. Безкоштовно, без реєстрації.

Як користуватися

  1. Перетягніть повзунки x1/y1, щоб задати першу контрольну точку, яка формує початок анімації.
  2. Перетягніть повзунки x2/y2, щоб задати другу контрольну точку, яка формує завершення анімації.
  3. Спостерігайте за чорною кривою на графіку — крива, що вигинається над діагоналлю на початку, означає, що рух починається швидко, а та, що лишається під нею, означає, що рух починається повільно.
  4. Натисніть Play, щоб побачити, як елемент попереднього перегляду рухається по треку, використовуючи вашу криву як transition-timing-function.
  5. Спробуйте готовий набір (ease, ease-in, ease-out, ease-in-out, linear) як відправну точку, а потім злегка підкоригуйте повзунки.
  6. Скопіюйте згенерований CSS і вставте його в правило transition чи animation.

Приклад

Введення

x1: 0.25, y1: 0.1, x2: 0.25, y2: 1

Результат

transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);

Це стандартне ключове слово CSS ease, записане у вигляді явних контрольних точок — швидкий старт, різке прискорення, а потім поступове уповільнення до кінця.

Чому значення y можуть виходити за межі 0–1

На відміну від осі x, яка представляє час і має проходити від 0 до 1, вісь y представляє прогрес анімованого значення і не має такого обмеження. Встановлення y1 нижче 0 чи y2 вище 1 змушує криву опускатися нижче початкового значення чи проскакувати за кінцеве значення, перш ніж стабілізуватися, — саме на цьому базуються ефекти перельоту й передчуття, які використовуються в натисканнях кнопок, появі модальних вікон і грайливих мікровзаємодіях інтерфейсу. Жодне з п'яти іменованих ключових слів (ease, ease-in, ease-out, ease-in-out, linear) не може цього дати — для цього потрібна кастомна cubic-bezier().

transition-timing-function проти animation-timing-function

Значення cubic-bezier(), яке генерує цей інструмент, працює однаково в обох властивостях. Використовуйте transition-timing-function, коли рух запускається зміною стану (наприклад, наведення курсору чи перемикання класу), і animation-timing-function усередині правила анімації, керованого @keyframes, коли потрібно, щоб те саме відчуття плавності застосовувалося автоматично чи в циклі.

Поширені патерни плавності

  • Чіткий відгук інтерфейсу (кнопки, перемикачі): тримайте контрольні точки близько до діагоналі з невеликим ухилом у бік ease-out, наприклад cubic-bezier(0.4, 0, 0.2, 1).
  • Стандартна крива Material Design: cubic-bezier(0.4, 0, 0.2, 1) — швидкий старт, м'яке завершення, широко використовується для переходів панелей і карток.
  • Відскок/переліт: підніміть y2 вище 1, наприклад cubic-bezier(0.34, 1.56, 0.64, 1), для грайливого відчуття появи.
  • Передчуття перед рухом: опустіть y1 нижче 0, щоб елемент злегка відтягнувся назад, перш ніж рухатися вперед.
  • Плавний ease-in-out для циклічних анімацій: тримайте криву майже симетричною відносно центру.

Поєднання з іншими CSS-інструментами

Крива плавності рідко застосовується сама по собі — зазвичай вона додається до елемента, якому також потрібні тіні, заокруглені кути чи градієнти. Створіть візуальне оформлення за допомогою інших CSS-інструментів нижче, а потім додайте функцію часу з цього інструмента до того самого правила чи оголошення transition/animation.

Генератор box-shadow · Генератор border-radius

Часті запитання

Що насправді означають чотири числа в cubic-bezier()?

Це координати двох контрольних точок, (x1, y1) і (x2, y2), які вигинають криву Безьє, що йде від фіксованої початкової точки (0,0) до фіксованої кінцевої точки (1,1). Вісь x представляє час, що минув (від 0 до 1), а вісь y представляє, наскільки просунулася анімована властивість, тому x1 і x2 мають лишатися в межах 0–1, тоді як y1 і y2 можуть виходити за ці межі.

У чому різниця між ease, ease-in, ease-out і ease-in-out?

ease (значення CSS за замовчуванням) починається швидко, а потім м'яко сповільнюється. ease-in починається повільно й прискорюється до кінця, корисно для елементів, що покидають екран. ease-out починається швидко й сповільнюється, корисно для елементів, що з'являються на екрані. ease-in-out повільний на обох кінцях і швидший посередині, даючи плавне, симетричне відчуття.

Чи можна використовувати те саме значення cubic-bezier() і для переходів, і для анімацій?

Так. transition-timing-function і animation-timing-function приймають абсолютно однаковий синтаксис cubic-bezier() і дають однакову криву плавності — єдина різниця в тому, до якої CSS-функції (переходу чи анімації на keyframes) прив'язана ця функція часу.

Чому моя крива виглядає «зламаною», коли y1 чи y2 дуже великі або від'ємні?

Це очікувано — виведення значень y далеко за межі 0–1 створює сильний переліт, коли анімоване значення значно проскакує за свою ціль, перш ніж стабілізуватися. Це валідний і часто навмисний ефект, але якщо він виглядає небажаним, поверніть y1 і y2 ближче до діапазону 0–1.

Чи краще кастомна крива, ніж просто використання іменованих ключових слів?

Не обов'язково — п'ять ключових слів (ease, ease-in, ease-out, ease-in-out, linear) покривають більшість повсякденних потреб і легше читаються в коді. Використовуйте кастомну cubic-bezier(), коли потрібне конкретне відчуття, яке ключові слова не забезпечують, наприклад відскок, різкіший клац чи відповідність специфікації руху конкретної дизайн-системи.

Схожі інструменти