К основному содержанию
скилл CX Codex

css-native · athevon — скилл для Claude Code: анимации на чистом CSS

Скилл для ИИ-агента, который подсказывает, как делать анимации и визуальные эффекты на нативном CSS без библиотек.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add AThevon/genjutsu --skill css-native -a claude-code
Открыть на GitHub

Что делает css-native

Скилл описывает, когда хватит возможностей самого CSS, а когда пора тянуть библиотеку. Внутри — таблица решений: до трёх анимаций на странице, скролл-параллакс, появление из display: none, тултипы, переходы между страницами. Для сложных таймлайнов из пяти и больше твинов автор советует GSAP, для прерываемых пружин — Framer Motion.

Дальше идут готовые сниппеты: animation-timeline: scroll() и view() с animation-range, View Transitions API для SPA и MPA, @starting-style вместе с transition-behavior: allow-discrete, anchor positioning для поповеров, container queries. Есть разделы про clip-path, backdrop-filter, mix-blend-mode и mesh-градиенты.

Скилл помечен как version-sensitive: имена API и поддержку в браузерах автор сверял по первоисточникам 2026-09-08, дата лежит в _jutsu/VERSIONS.md. Если она устарела, номера версий стоит перепроверить перед тем, как на них опираться. Скролл-анимации автор советует всегда оборачивать в @supports (animation-timeline: scroll()) и держать контент видимым по умолчанию — в Firefox релизной поддержки нет.

Какие задачи решает

  • сделать прогресс-бар, привязанный к прокрутке, без JS
  • показать появление модалки из display: none
  • выбрать между CSS и библиотекой анимаций
  • спозиционировать тултип относительно триггера
  • настроить переход между страницами в MPA

Примеры запросов агенту

  • Сделай прогресс-бар на animation-timeline: scroll(root block), без библиотек
  • Нужен плавный вход диалога из display: none через @starting-style, покажи код
  • Подскажи, когда для stagger хватит CSS, а когда брать GSAP

Как установить css-native

1Через Skills CLI (Vercel)

npx skills add AThevon/genjutsu --skill css-native -a claude-code

2Вручную: положить файлы

~/.claude/skills/css-native/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/css-native/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о css-native

Как установить css-native в Claude?

Выполни npx skills add AThevon/genjutsu --skill css-native -a claude-code. После этого файл скилла окажется в ~/.claude/skills/css-native/SKILL.md.

Что делает css-native?

Подсказывает агенту, как собрать анимации и визуальные эффекты на нативном CSS: скролл-таймлайны, View Transitions, @starting-style, anchor positioning, container queries. Плюс даёт готовые сниппеты.

Нужны ли библиотеки вместе с этим скиллом?

Скилл сам объясняет, когда без них не обойтись: сложные многошаговые таймлайны, прерываемые пружины, морфинг SVG-фигур. Для остального хватает CSS.

Исходный текст

SKILL.md · MIT
---
name: css-native
description: "Zero-dependency animations and visual techniques - scroll-driven, View Transitions, @starting-style, modern CSS."
metadata:
  internal: true
---

> **Version-sensitive.** Every API name, SDK gate and browser-support claim below was
> verified on **2026-09-08** against primary sources. What against, and when, is in
> `_jutsu/VERSIONS.md`. If that date is old, re-verify before acting on a version number.

# CSS Native - Zero-Dependency Animations & Visual Techniques

## When to Use CSS Native vs Library

| Situation | Decision |
|---|---|
| < 3 animations on the page | CSS native |
| Scroll-driven reveal/parallax | CSS native (`animation-timeline`), always inside `@supports (animation-timeline: scroll())` with the content visible by default - no Firefox release support |
| Enter/exit from `display: none` | CSS native (`@starting-style` + `transition-behavior: allow-discrete`) |
| Tooltip/popover positioning | CSS native (anchor positioning) |
| Page transitions (MPA or SPA) | CSS native (View Transitions API) |
| Complex multi-step timeline (5+ tweens) | GSAP |
| Stagger across dynamic list (unknown count) | CSS native (`animation-delay: calc(sibling-index() * 60ms)`), Baseline since Aug 2026. Reach for a library only if the stagger has to be interrupted or re-sequenced at runtime |
| Physics-based spring with interruption | Framer Motion |
| Morph between SVG shapes | GSAP MorphSVG |

Rule of thumb: if you can express it in a `@keyframes` + one `animation-timeline`, stay in CSS. The moment you need imperative control, sequence coordination, or runtime values - reach for a library.

---

## Scroll-Driven Animations

### Scroll Progress Timeline

Animate based on scroll position of a container.

```css
.progress-bar {
  animation: grow-width linear both;
  animation-timeline: scroll(root block);
}

@keyframes grow-width {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}
```

- `scroll(<scroller> <axis>)` - scroller: `nearest` | `root` | `self`, axis: `block` | `inline` | `x` | `y`
- Default: `scroll(nearest block)`

### View Progress Timeline

Animate as an element enters/exits the scrollport.

```css
.reveal {
  animation: fade-in linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 100%;
}

@keyframes fade-in {
  from { opacity: 0; transform: translateY(2rem); }
  to   { opacity: 1; transform: translateY(0); }
}
```

### animation-range

Controls which segment of the timeline drives the animation.

```css
/* Named ranges: cover | contain | entry | exit | entry-crossing | exit-crossing */
animation-range: entry 0% entry 100%;    /* animate during entry only */
animation-range: contain 0% contain 100%; /* animate while fully visible */
animation-range: entry 25% exit 75%;      /* custom start/end */
```

Use the [Scroll-driven Animations tool](https://scroll-driven-animations.style/tools/view-timeline/ranges/) to visualize ranges interactively.

---

## View Transitions API

### Same-Document (SPA)

```js
document.startViewTransition(() => {
  // Update the DOM synchronously
  updateContent();
});
```

```css
/* Control the transition animation */
::view-transition-old(root) {
  animation: fade-out 200ms ease-out;
}
::view-transition-new(root) {
  animation: fade-in 300ms ease-in;
}

/* Named transitions for specific elements */
.hero-image { view-transition-name: hero; }

::view-transition-group(hero) {
  animation-duration: 400ms;
  animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
```

### Cross-Document (MPA)

```css
/* Both pages need this */
@view-transition { navigation: auto; }

/* Outgoing page */
.card { view-transition-name: card-detail; }

/* Incoming page */
.detail-hero { view-transition-name: card-detail; }
```

### view-transition-class (group styling)

```css
.card { view-transition-class: card; }

::view-transition-group(*.card) {
  animation-duration: 350ms;
  animation-timing-function: var(--ease-spring);
}
```

---

## @starting-style

Native enter animations from `display: none` - no JS timing hacks.

```css
.dialog {
  opacity: 1;
  transform: translateY(0);
  transition: opacity 300ms ease, transform 300ms ease,
              display 300ms allow-discrete;

  @starting-style {
    opacity: 0;
    transform: translateY(-1rem);
  }
}

.dialog[hidden] {
  opacity: 0;
  transform: translateY(-1rem);
  display: none;
}
```

Key rules:
- `transition-behavior: allow-discrete` (or shorthand `allow-discrete` in the transition) enables transitioning `display` and `overlay`
- `@starting-style` block defines the "from" state when the element first renders
- Combine with `[popover]` and `<dialog>` for native modals with zero JS animation code

---

## Anchor Positioning

CSS-native positioning of tooltips, popovers, and floating UI relative to a trigger.

```css
.trigger {
  anchor-name: --my-trigger;
}

.tooltip {
  position: fixed;
  position-anchor: --my-trigger;
  position-area: top center;
  margin-bottom: 0.5rem;

  /* Fallback if no space on top */
  position-try-fallbacks: --bottom;
}

@position-try --bottom {
  position-area: bottom center;
  margin-top: 0.5rem;
}
```

Combine with `@starting-style` for animated tooltips:

```css
.tooltip[popover]:popover-open {
  opacity: 1;
  transform: scale(1);
  transition: opacity 150ms ease, transform 150ms ease,
              display 150ms allow-discrete, overlay 150ms allow-discrete;

  @starting-style {
    opacity: 0;
    transform: scale(0.96);
  }
}
```

---

## Container Queries + Contextual Animations

Adapt animations to the component's container size, not the viewport.

```css
.card-container {
  container-type: inline-size;
  container-name: card;
}

@container card (min-width: 400px) {
  .card-content {
    animation: slide-in-right 400ms var(--ease-out-expo);
  }
}

@container card (max-width: 399px) {
  .card-content {
    animation: fade-in 300ms ease;
  }
}
```

Container-relative units in keyframes:

```css
@keyframes slide-in-right {
  from { transform: translateX(10cqw); opacity: 0; }
  to   { transform: translateX(0); opacity: 1; }
}
```

---

## Advanced Visual Techniques

### clip-path Transitions

```css
.reveal {
  clip-path: inset(0 100% 0 0);
  transition: clip-path 600ms cubic-bezier(0.77, 0, 0.175, 1);
}
.reveal.visible {
  clip-path: inset(0 0 0 0);
}
```

Shape morphing: transition between `circle()`, `ellipse()`, `polygon()`, `inset()` - as long as the function type and point count match.

### backdrop-filter

```css
.glass {
  background: oklch(0.98 0.01 250 / 0.6);
  backdrop-filter: blur(12px) saturate(1.8);
  -webkit-backdrop-filter: blur(12px) saturate(1.8); /* Safari */
}
```

### mix-blend-mode

```css
.overlay-text {
  mix-blend-mode: difference;
  color: white; /* inverts over any background */
}
```

### Mesh Gradients (approximated)

```css
.mesh {
  background:
    radial-gradient(at 20% 30%, oklch(0.7 0.2 310) 0%, transparent 50%),
    radial-gradient(at 80% 60%, oklch(0.6 0.18 250) 0%, transparent 50%),
    radial-gradient(at 50% 80%, oklch(0.75 0.15 170) 0%, transparent 50%),
    oklch(0.15 0.02 280);
}
```

### conic-gradient Effects

```css
.spinner {
  background: conic-gradient(from 0deg, transparent 0%, oklch(0.7 0.15 250) 100%);
  border-radius: 50%;
  mask: radial-gradient(farthest-side, transparent calc(100% - 4px), black calc(100% - 4px));
  animation: spin 1s linear infinite;
}
```

---

## Do Not

| BAD | GOOD | Why |
|---|---|---|
| `transition: all 300ms` | `transition: opacity 300ms, transform 300ms` | `all` triggers transitions on every property change, causes unexpected animations, and prevents browser optimization |
| Animate `width`, `height`, `top`, `left` | Animate `transform`, `opacity`, `clip-path`, `filter` | Layout-triggering properties force reflow on every frame - composite-only properties run on GPU |
| Scroll-driven animations without fallback | `@supports (animation-timeline: scroll()) { ... }` | Firefox has **no** release-channel support at all (Nightly only, behind `layout.css.scroll-driven-animations.enabled`) and Safari only shipped it in 26 - about one visitor in six sees nothing |
| `@starting-style` without `transition-behavior` | Always pair with `allow-discrete` for display/overlay | Without it, `display: none` transitions are skipped entirely |
| Anchor positioning without `position-try-fallbacks` | Always define fallback positions | Element clips out of viewport if primary position has no space |
| `animation-fill-mode: forwards` on scroll-driven | Use `both` for scroll-driven animations | `forwards` can lock the element in its final state even when scrolling back |

---

## Deep dive

| Need | Reference |
|---|---|
| Browser-support tables, fallback patterns and progressive-enhancement strategies for scroll-driven animations, View Transitions, `@starting-style`, anchor positioning and container queries (plus accessibility and performance notes) | `references/modern-css.md` |

© AThevon · MIT · AThevon/genjutsu

Похожие скиллы

Всё по теме «Фронтенд и UI» →

Сначала — css-native от других авторов.

css-native dylantarre Скилл помогает агенту писать анимации на чистом CSS: @keyframes, transition, transform. Пригодится, когда нужны движения интерфейса без JS-библиотек. CX Codex +1 714установок modern-css paulirish Даёт агенту справочник по современному CSS для новых стилей, обновления старых правил и работы с новыми возможностями браузера. CX Codex +1 544установок page-transitions dylantarre Скилл для анимации смены маршрутов, модалок и навигации. Помогает агенту выбрать тайминги и тип перехода вместо случайных значений. CX Codex +1 667установок scroll-reveal-libraries freshtechbro Подключает лёгкие CSS-анимации появления элементов при прокрутке через библиотеку AOS. Помогает верстать лендинги и блоги без тяжеловесного JS-кода. CX Codex +1 2 400установок tailwindcss-animations JosiahSiegel Скилл по анимациям и переходам Tailwind CSS: встроенные утилиты, свои @keyframes, reduced-motion, Framer Motion. CX Codex +1 2 400установок transitions-dev Jakubantalik Набор из 12 готовых CSS-переходов для модалок, выпадающих меню, бейджей и карточек. Скилл учит ИИ внедрять чистую анимацию без библиотек и лишней разметки. CX Codex +1 1 900установок tailwind-css PaulRBerg Задаёт правила стилизации Tailwind CSS: запрещает ломать вёрстку старых версий синтаксисом v4, требует проверку сборки и инспекцию DOM. CX Codex +1 3 000установок

Из того же набора17

paint Запускает пайплайн дизайн-системы для веба, Compose и SwiftUI: от брейншторма арт-дирекшна до кода и аудита доступности. CX Codex +1 1 300установок motion-principles Скилл задаёт правила интерфейсной анимации: безопасные свойства, тайминги, кривые разгона и режим reduced-motion для веба, SwiftUI и Jetpack Compose. CX Codex +1 1 100установок design-audit Проверяет код фронтенда на проблемы с анимацией, доступностью и дизайн-токенами. Находит визуальные штампы ИИ и ошибки вёрстки перед сдачей проекта. CX Codex +1 1 000установок threejs-r3f Скилл по Three.js и React Three Fiber: правила сцен, хуков, постобработки и производительности. Пригодится, когда агент пишет 3D на React. CX Codex +1 1 000установок gsap Скилл помогает агенту писать анимации GSAP: таймлайны, каскадные эффекты и ScrollTrigger. Нужен для сложных движений и прокрутки. CX Codex +1 997установок canvas-generative Скилл для алгоритмической графики на Canvas 2D: частицы, flow fields, шум, фракталы и L-системы. Пригодится, когда нужна анимация или генеративная картинка в браузере. CX Codex +1 995установок framer-motion Подсказывает агенту правила работы с Framer Motion и Motion в React: анимации раскладки, жесты и хуки без лишних ререндеров. CX Codex +1 990установок desktop-principles Скилл с правилами десктопного UX: ховеры, точность указателя, горячие клавиши, несколько окон. Пригодится, когда интерфейс делают под macOS, Windows или Linux. CX Codex +1 982установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой