Some checks failed
Deploy Application / deploy (push) Has been cancelled
284 lines
5.4 KiB
Markdown
284 lines
5.4 KiB
Markdown
# View Transitions API
|
|
|
|
View Transitions API für nahtlose Übergänge zwischen Seiten und Zuständen.
|
|
|
|
## Baseline Status
|
|
|
|
**Baseline 2023**: View Transitions API ist Baseline Newly available.
|
|
|
|
## Übersicht
|
|
|
|
Die View Transitions API ermöglicht nahtlose Übergänge zwischen verschiedenen Seitenzuständen ohne zusätzliche JavaScript-Bibliotheken.
|
|
|
|
## Verwendung
|
|
|
|
### Automatische Navigation Transitions
|
|
|
|
Die View Transitions API wird automatisch für Navigation verwendet:
|
|
|
|
```css
|
|
@view-transition {
|
|
navigation: auto;
|
|
}
|
|
```
|
|
|
|
### Manuelle View Transitions
|
|
|
|
```javascript
|
|
import { transitionNavigation, transitionContentUpdate } from './modules/admin/view-transitions.js';
|
|
|
|
// Navigation Transition
|
|
transitionNavigation(() => {
|
|
window.location.href = '/new-page';
|
|
});
|
|
|
|
// Content Update Transition
|
|
transitionContentUpdate(() => {
|
|
document.getElementById('content').innerHTML = newContent;
|
|
});
|
|
```
|
|
|
|
## Benannte Bereiche
|
|
|
|
### Admin-Bereiche
|
|
|
|
Die folgenden Bereiche haben benannte View Transitions:
|
|
|
|
- `admin-sidebar` - Sidebar-Navigation
|
|
- `admin-content` - Hauptinhalt
|
|
- `admin-header` - Header-Bereich
|
|
- `admin-popover` - Popover-Elemente
|
|
|
|
### CSS-Definition
|
|
|
|
```css
|
|
.admin-sidebar {
|
|
view-transition-name: admin-sidebar;
|
|
}
|
|
|
|
.admin-content {
|
|
view-transition-name: admin-content;
|
|
}
|
|
|
|
.admin-header {
|
|
view-transition-name: admin-header;
|
|
}
|
|
|
|
[popover].admin-popover {
|
|
view-transition-name: admin-popover;
|
|
}
|
|
```
|
|
|
|
## JavaScript Helper
|
|
|
|
### Verfügbare Funktionen
|
|
|
|
#### `supportsViewTransitions()`
|
|
|
|
Prüft, ob View Transitions unterstützt werden:
|
|
|
|
```javascript
|
|
import { supportsViewTransitions } from './modules/admin/view-transitions.js';
|
|
|
|
if (supportsViewTransitions()) {
|
|
// View Transitions verfügbar
|
|
}
|
|
```
|
|
|
|
#### `transitionNavigation(callback)`
|
|
|
|
Startet eine View Transition für Navigation:
|
|
|
|
```javascript
|
|
import { transitionNavigation } from './modules/admin/view-transitions.js';
|
|
|
|
transitionNavigation(() => {
|
|
window.location.href = '/new-page';
|
|
});
|
|
```
|
|
|
|
#### `transitionContentUpdate(callback)`
|
|
|
|
Startet eine View Transition für Content-Updates:
|
|
|
|
```javascript
|
|
import { transitionContentUpdate } from './modules/admin/view-transitions.js';
|
|
|
|
transitionContentUpdate(() => {
|
|
document.getElementById('content').innerHTML = newContent;
|
|
});
|
|
```
|
|
|
|
#### `transitionPopover(popoverElement, callback)`
|
|
|
|
Startet eine View Transition für Popover:
|
|
|
|
```javascript
|
|
import { transitionPopover } from './modules/admin/view-transitions.js';
|
|
|
|
const popover = document.getElementById('my-popover');
|
|
transitionPopover(popover, () => {
|
|
popover.showPopover();
|
|
});
|
|
```
|
|
|
|
#### `initViewTransitions()`
|
|
|
|
Initialisiert alle View Transitions automatisch:
|
|
|
|
```javascript
|
|
import { initViewTransitions } from './modules/admin/view-transitions.js';
|
|
|
|
initViewTransitions();
|
|
```
|
|
|
|
## CSS-Animationen
|
|
|
|
### Standard-Animationen
|
|
|
|
```css
|
|
::view-transition-old(admin-sidebar),
|
|
::view-transition-new(admin-sidebar) {
|
|
animation: fade 0.15s ease-out;
|
|
}
|
|
|
|
::view-transition-old(admin-content),
|
|
::view-transition-new(admin-content) {
|
|
animation: fade 0.15s ease-out;
|
|
}
|
|
|
|
::view-transition-old(admin-header),
|
|
::view-transition-new(admin-header) {
|
|
animation: slide-down 0.2s ease-out;
|
|
}
|
|
```
|
|
|
|
### Custom Animationen
|
|
|
|
```css
|
|
::view-transition-old(custom-area),
|
|
::view-transition-new(custom-area) {
|
|
animation: custom-animation 0.3s ease-in-out;
|
|
}
|
|
|
|
@keyframes custom-animation {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.95);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### 1. Benannte Bereiche verwenden
|
|
|
|
Verwende `view-transition-name` für präzise Animationen:
|
|
|
|
```css
|
|
.important-content {
|
|
view-transition-name: important-content;
|
|
}
|
|
```
|
|
|
|
### 2. Performance beachten
|
|
|
|
View Transitions sollten schnell sein (0.15s - 0.3s):
|
|
|
|
```css
|
|
::view-transition-old(content),
|
|
::view-transition-new(content) {
|
|
animation-duration: 0.15s;
|
|
}
|
|
```
|
|
|
|
### 3. Accessibility respektieren
|
|
|
|
Respektiere `prefers-reduced-motion`:
|
|
|
|
```css
|
|
@media (prefers-reduced-motion: reduce) {
|
|
::view-transition-old(*),
|
|
::view-transition-new(*) {
|
|
animation: none;
|
|
}
|
|
}
|
|
```
|
|
|
|
### 4. Fallback für nicht unterstützende Browser
|
|
|
|
```javascript
|
|
if (supportsViewTransitions()) {
|
|
transitionNavigation(() => {
|
|
// Navigation
|
|
});
|
|
} else {
|
|
// Fallback ohne Transition
|
|
window.location.href = '/new-page';
|
|
}
|
|
```
|
|
|
|
## Admin-spezifische Patterns
|
|
|
|
### Navigation Links
|
|
|
|
Navigation Links verwenden automatisch View Transitions:
|
|
|
|
```html
|
|
<a href="/admin/users" class="admin-nav__link">Users</a>
|
|
```
|
|
|
|
### Content Updates
|
|
|
|
Content-Updates können mit View Transitions animiert werden:
|
|
|
|
```javascript
|
|
transitionContentUpdate(() => {
|
|
document.querySelector('.admin-content').innerHTML = newContent;
|
|
});
|
|
```
|
|
|
|
### Popover Transitions
|
|
|
|
Popover verwenden automatisch View Transitions beim Öffnen/Schließen.
|
|
|
|
## Browser-Support
|
|
|
|
- Chrome 111+
|
|
- Firefox 129+
|
|
- Safari 18+
|
|
- Edge 111+
|
|
|
|
## Migration
|
|
|
|
### Von Custom Transitions migrieren
|
|
|
|
**Vorher:**
|
|
```javascript
|
|
// Custom Transition
|
|
element.style.transition = 'opacity 0.3s';
|
|
element.style.opacity = '0';
|
|
setTimeout(() => {
|
|
updateContent();
|
|
element.style.opacity = '1';
|
|
}, 300);
|
|
```
|
|
|
|
**Nachher:**
|
|
```javascript
|
|
// View Transitions API
|
|
transitionContentUpdate(() => {
|
|
updateContent();
|
|
});
|
|
```
|
|
|
|
## Weitere Ressourcen
|
|
|
|
- [MDN: View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API)
|
|
- [web.dev: View Transitions](https://web.dev/view-transitions/)
|
|
|