Skip to content

Commit 443bfc6

Browse files
authored
Merge pull request #1722 from Rnbsov/patch-106
Обновление статьи "CSS-анимации"
2 parents 4e63e68 + 1aa0cf4 commit 443bfc6

File tree

2 files changed

+41
-15
lines changed

2 files changed

+41
-15
lines changed

7-animation/1-bezier-curve/article.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1+
12
# Кривые Безье
23

34
Кривые Безье используются в компьютерной графике для рисования плавных изгибов, в CSS-анимации и много где ещё.
45

56
Это очень простая вещь, которую стоит изучить один раз, а затем чувствовать себя комфортно в мире векторной графики и продвинутых анимаций.
67

8+
```smart header="Немного теории"
9+
Эта статья даёт теоретическое, но очень необходимое представление о том, что такое кривые Безье, в то время как [следующая](info:css-animations#bezier-curve) показывает, как мы можем использовать их для CSS-анимаций.
10+
11+
Пожалуйста, найдите время, чтобы прочитать и понять концепцию, это сослужит вам хорошую службу.
12+
```
13+
714
## Опорные точки
815

916
[Кривая Безье](https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D0%91%D0%B5%D0%B7%D1%8C%D0%B5) задаётся опорными точками.
@@ -69,12 +76,10 @@
6976

7077
- Эти точки соединяются. На рисунке ниже соединяющий их отрезок изображён <span style="color:#167490">синим</span>.
7178

72-
7379
| При `t=0.25` | При `t=0.5` |
7480
| ------------------------ | ---------------------- |
7581
| ![](bezier3-draw1.svg) | ![](bezier3-draw2.svg) |
7682

77-
7883
4. На получившемся <span style="color:#167490">синем</span> отрезке берётся точка на расстоянии, соответствующем `t`. То есть, для `t=0.25` (левый рисунок) получаем точку в конце первой четверти отрезка, для `t=0.5` (правый рисунок) – в середине отрезка. На рисунках выше эта точка отмечена <span style="color:red">красным</span>.
7984

8085
5. По мере того, как `t` "пробегает" последовательность от `0` до `1`, каждое значение `t` добавляет к кривой точку. Совокупность таких точек для всех значений образует кривую Безье. Она <span style="color:red">красная</span> и имеет параболическую форму на картинках выше.
@@ -109,7 +114,6 @@
109114
**Запускайте и приостанавливайте примеры, чтобы ясно увидеть отрезки и то, как строится кривая.**
110115
```
111116

112-
113117
Кривая, которая выглядит как `y=1/t`:
114118

115119
[iframe src="demo.svg?p=0,0,0,0.75,0.25,1,1,1&animate=1" height=370]
@@ -140,7 +144,6 @@
140144
Для таких кривых существуют математические формулы, например, [полином Лагранжа](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D0%BE%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%87%D0%BB%D0%B5%D0%BD_%D0%9B%D0%B0%D0%B3%D1%80%D0%B0%D0%BD%D0%B6%D0%B0). В компьютерной графике [сплайн-интерполяция](https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D0%B1%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%BF%D0%BB%D0%B0%D0%B9%D0%BD) часто используется для построения плавных кривых, соединяющих множество точек.
141145
```
142146

143-
144147
## Математика
145148

146149
Кривая Безье может быть описана с помощью математической формулы.

7-animation/2-css-animations/article.md

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# CSS-анимации
23

34
CSS позволяет создавать простые анимации без использования JavaScript.
@@ -187,6 +188,7 @@ stripe.onclick = function() {
187188
[codetabs src="train"]
188189

189190
CSS:
191+
190192
```css
191193
.train {
192194
left: 0;
@@ -254,7 +256,14 @@ CSS:
254256

255257
Это, конечно, "мягкий" вариант. Если значение `y` будут `-99` и `99`, то поезд будет гораздо сильнее "выпрыгивать" за пределы.
256258

257-
Как сделать кривую Безье необходимую для конкретной задачи? Существует множество инструментов, например можно использовать с сайта <https://cubic-bezier.com/>.
259+
Как сделать кривую Безье необходимую для конкретной задачи? Существует множество инструментов.
260+
261+
- К примеру, мы можем сделать это на сайте <https://cubic-bezier.com>.
262+
- Браузернные инструменты разработчика также имеют специальную поддержку для создания кривых Безье в CSS:
263+
1. Откройте инструменты разработчика при помощи `key:F12` (Mac: `key:Cmd+Opt+I`).
264+
2. Выберете вкладку `Elements`, затем обратите внимание на под-панель `Styles` в правой стороне.
265+
3. Свойства CSS со словом `cubic-bezier` будут иметь иконку перед этим словом.
266+
4. Кликните по иконке, чтобы отредактировать кривую.
258267

259268
### Шаги
260269

@@ -266,7 +275,19 @@ CSS:
266275

267276
[codetabs src="step-list"]
268277

269-
Давайте сделаем так, чтобы цифры двигались не плавно, а появлялись одна за другой раздельно. Для этого скроем все что находится за красным "окошком" и будем сдвигать список влево по шагам.
278+
В HTML, вереница цифр заключена в `<div id="digits">` фиксированной длины:
279+
280+
```html
281+
<div id="digit">
282+
<div id="stripe">0123456789</div>
283+
</div>
284+
```
285+
286+
Div-элемент `#digit` имеет фиксированную ширину и границу, поэтому он выглядит как красное окно.
287+
288+
Мы сделаем таймер: цифры будут появляться одна за другой, дискретно.
289+
290+
Чтобы добиться этого, мы скроем `#stripe` за пределами `#digit`, используя `overflow: hidden`, а затем, шаг за шагом будем сдвигать `#stripe` влево.
270291

271292
Всего будет 9 шагов, один шаг для каждой цифры:
272293

@@ -277,17 +298,17 @@ CSS:
277298
}
278299
```
279300

280-
В действии:
281-
282-
[codetabs src="step"]
283-
284301
Первый аргумент временной функции `steps(9, start)` -- количество шагов. Трансформация будет разделена на 9 частей (10% каждая). Временной интервал также будет разделён на 9 частей, таким образом свойство `transition: 9s` обеспечивает нам 9 секунд анимации, что даёт по одной секунде на цифру.
285302

286303
Вторым аргументом является одно из ключевых слов: `start` или `end`.
287304

288305
`start` -- означает, что в начале анимации нам необходимо перейти на первый шаг немедленно.
289306

290-
Мы можем наблюдать это во время анимации: когда пользователь нажимает на цифру, значение меняется на `1` (первый шаг) сразу и в следующий раз меняется уже в начале следующей секунды.
307+
В действии:
308+
309+
[codetabs src="step"]
310+
311+
Щелчок по цифре немедленно изменяет её на `1` (первый шаг), а затем изменяется в начале следующей секунды.
291312

292313
Анимация будет происходить так:
293314

@@ -297,6 +318,8 @@ CSS:
297318
- `8s` -- `-90%`
298319
- (на протяжении последней секунды отображается последнее значение).
299320

321+
Здесь первое изменение было немедленным из-за `start` в `steps`.
322+
300323
Альтернативное значение `end` означало бы, что изменения нужно применять не в начале, а в конце каждой секунды.
301324

302325
Анимация будет происходить так:
@@ -307,18 +330,18 @@ CSS:
307330
- ...
308331
- `9s` -- `-90%`
309332

310-
Пример `step(9, end)` в действии (обратите внимание на паузу между первым изменением цифр):
333+
Пример `step(9, end)` в действии (обратите внимание на паузу перед первым изменением цифры):
311334

312335
[codetabs src="step-end"]
313336

314-
Также есть сокращённые значения:
337+
Существуют также некоторые заранее определённые сокращения для `steps(...)`:
315338

316339
- `step-start` -- то же самое, что `steps(1, start)`. Оно означает, что анимация начнётся сразу и произойдёт в один шаг. Таким образом она начнётся и завершится сразу, как будто и нет никакой анимации.
317340
- `step-end` -- то же самое, что `steps(1, end)`: выполнит анимацию за один шаг в конце `transition-duration`.
318341

319-
Такие значения используются редко, потому что это не совсем анимация, а точнее будет сказать одношаговые изменения.
342+
Такие значения используются редко, потому что это не совсем анимация, а точнее будет сказать одношаговые изменения. Мы упоминаем их здесь для полноты картины.
320343

321-
## Событие transitionend
344+
## Событие: "transitionend"
322345

323346
Когда завершается анимация, срабатывает событие `transitionend`.
324347

0 commit comments

Comments
 (0)