-
Nouveautés de Safari et WebKit
Découvrez comment les dernières technologies web de Safari et WebKit peuvent vous aider à créer des expériences exceptionnelles. Nous mettrons en évidence les différentes fonctionnalités CSS et leur fonctionnement, notamment l'animation pilotée par le défilement, les transitions inter-documents et le positionnement des ancres. Nous explorerons également les nouvelles prises en charge de médias, notamment l'audio, la vidéo, les images et les icônes.
Chapitres
- 0:00 - Introduction
- 1:46 - Animation
- 19:01 - Disposition
- 29:05 - Effets visuels
- 38:22 - Multimédia
Ressources
- Can I use
- Web Speech API - Web APIs | MDN
- WebKit.org – Bug tracking for WebKit open source project
- Safari Technology Preview
- WebKit Open Source Project
- Submit feedback
Vidéos connexes
WWDC25
-
Rechercher dans cette vidéo…
-
-
6:18 - Progress bar code scroll() example
footer::after { content: ""; height: 1em; width: 100%; background: var(--yellow); left: 0; bottom: 0; position: fixed; transform-origin: top left; animation: progress-scale linear; animation-timeline: scroll(); } @keyframes progress-scale { from { transform: scaleX(0); } to { transform: scaleX(1); } } -
8:36 - html an css of text blocks showcasing different code topics
<section class="topics"> <h3>What you can learn:</h3> <ul class="topics"> <li class="topic-item">Web Development</li> <li class="topic-item">Computer Science</li> <li class="topic-item">Data Science</li> <!-- additional HTML... --> </ul> </section> .topic-item { background: var(--yellow); border: 1px solid var(--gray); /* additional CSS... */ } -
9:12 - text blocks twisting from the left - animation
@keyframes in-from-left { from { opacity: 0; transform: scale(.8) rotate(-90deg) translateY(15vh); } } -
9:18 - text blocks twisting from the middle - animation
@keyframes in-from-middle { from { opacity: 0; transform: scale(.8) translateY(15vh); } -
9:24 - text blocks twisting from the right - animation
@keyframes in-from-right { from { opacity: 0; transform: scale(.8) rotate(90deg) translateY(15vh); } } -
10:07 - view() timeline example with timeline and range
.topic-item { animation-fill-mode: both; animation-timeline: view(); animation-range: &:nth-child(3n + 1) { animation-name: in-from-left; } &:nth-child(3n + 2) { animation-name: in-from-middle; } &:nth-child(3n + 3) { animation-name: in-from-right; } } -
12:20 - animation range 50%
.topic-item { animation-fill-mode: both; animation-timeline: view(); animation-range: 0% 50%; &:nth-child(3n + 1) { animation-name: in-from-left; } &:nth-child(3n + 2) { animation-name: in-from-middle; } &:nth-child(3n + 3) { animation-name: in-from-right; } } -
14:20 - simple cross document view transition code
@view-transition { navigation: auto; } -
16:00 - adding media query for reduced motion
@view-transition { navigation: auto; } @media not (prefers-reduced-motion) { @keyframes slide-in { from { translate: 100vw 0; } } @keyframes slide-out { to { translate: -100vw 0; } } } -
16:22 - adding ids to html for cross document view transition
<body> <nav> <!-- additional HTML... --> </nav> <section class="hero"> <div class="hero-image"> <!-- additional HTML... --> </main> <footer> <!-- additional HTML... --> </footer> <body> -
16:58 - slide effect for cross document view transition
@view-transition { navigation: auto; } @media not (prefers-reduced-motion) { #school-info { view-transition-name: main-body; } ::view-transition-old(main-body) { } ::view-transition-new(main-body) { } @keyframes slide-in { from { translate:e100vw 0; } } } -
19:48 - nav bar and profile menu
<nav> <h1 class="logo">A-School of Code</h1> <ul> <li>Courses</li> <li>Cohorts</li> <li class="profile"> <img src="https://example.com/saron.jpeg" alt="woman speaking"/> </li> </ul> </nav> <ul class="profile-menu"> <li>Account</li> <li>Settings</li> <li>Profile</li> <li>Billing</li> </ul> -
20:37 - adding popover attributes
<ul class="profile-menu" id="profile-menu" popover> <li>Account</li> <li>Settings</li> <li>Profile</li> <li>Billing</li> </ul> -
20:51 - adding aria to popover target
<nav> <div class="wrapper"> <h1 class="logo">A-School of Code</h1> <ul> <li>Courses</li> <li>Cohorts</li> <li class="profile"> <button class="profile-button" aria-haspopup="true" popovertarget="profile-menu"> > <img src="https://example.com/saron.jpg" alt="woman speaking"/> </button> </li> </ul> </div> </nav> -
21:58 - establishing the anchor
.profile-button { anchor-name: --profile-button; } .profile-menu { position-anchor: --profile-button; } -
23:25 - setting the target to top right
.profile-menu { position-anchor: --profile-button; position-area: top right; } -
23:39 - setting the target to bottom center
.profile-menu { position-anchor: --profile-button; position-area: bottom center; } -
24:16 - setting the target to span right
.profile-menu { position-anchor: --profile-button; position-area: span-right; } -
24:17 - setting the target to span left
.profile-menu { position-anchor: --profile-button; position-area: span-left; } -
27:30 - intro to the anchor() function
.profile-button { anchor-name: --profile-button; } .profile-menu { position-anchor: --profile-button; position: absolute; top: anchor(bottom); left: anchor(left); } -
28:26 - using calc and units in anchor() function
.profile-button { anchor-name: --profile-button; } .profile-menu { position-anchor: --profile-button; position: absolute; top: anchor(bottom); left: calc(anchor(left) + 1.5em); } -
29:43 - adding a text gradient
.logo { background-image: linear-gradient(to bottom right in hsl, yellow, orange); background-clip: text; color: transparent; } -
31:05 - adding a gradient to border
.primary-btn { background-image: linear-gradient(to bottom right in hsl, yellow, orange); background-clip: border-area; border-color: transparent; background-origin: border-box; } -
32:15 - shorthand for adding gradient to border
.primary-btn { background: border-area linear-gradient(to bottom right in hsl, yellow, orange); border-color: transparent; } -
33:33 - arrow shape using path
.review-shape { clip-path: path("M0 0 L 500 0 L 600 100 L 500 200 L 0 200 Q 100 100 0 0 z"); } -
35:01 - arrow shape using shape()
.review-shape { clip-path: shape(from top left, line to calc(100% - 50cqh) 0%, line to 100% 50cqh, line to calc(100% - 50cqh) 100%, line to bottom left, curve to top left with 50cqh 50cqh, close); } -
41:42 - dynamic range limit: no limit
img { dynamic-range-limit: no-limit; } -
41:57 - dynamic range limit: standard
img { dynamic-range-limit: standard; }
-
-
- 0:00 - Introduction
Les équipes Safari et WebKit ont travaillé d’arrache-pied depuis la dernière WWDC afin d’améliorer les technologies web pour une meilleure interopérabilité et une expérience utilisateur optimisée. De nouvelles fonctionnalités en matière d’animation, de mise en page, d’effets visuels et de médias, notamment des animations basées sur le défilement, le positionnement d’ancres, la prise en charge des icônes SVG et des formats multimédias améliorés, seront disponibles dans Safari cet automne.
- 1:46 - Animation
L’animation est un outil puissant pour améliorer l’expérience en ligne. Elle rend les sites web plus attrayants et plus agréables. Grâce aux dernières fonctionnalités CSS, notamment les animations basées sur le défilement désormais disponibles dans Safari 19, vous pouvez améliorer votre site web sans avoir recours à JavaScript. Cette fonctionnalité est importante, car elle améliore les performances pour l’utilisateur et l’autonomie de la batterie. Les animations basées sur le défilement introduisent deux nouvelles chronologies : la chronologie de défilement et la chronologie d’affichage. La chronologie de défilement permet de lier les animations au comportement de défilement de l’utilisateur. Elle crée ainsi une expérience plus interactive. Par exemple, une barre de progression située en bas de la page peut s’allonger à mesure que l’utilisateur fait défiler la page, lui indiquant ainsi visuellement sa progression. Vous devez tenir compte de l’accessibilité lors de l’utilisation d’animations. Certaines personnes peuvent préférer moins de mouvements en raison d’une gêne liée au mouvement, qui peut être déclenchée par divers facteurs, tels que la mise à l’échelle d’objets volumineux, le zoom ou les objets se déplaçant à différentes vitesses. Tenez compte de ces facteurs pour créer des animations inclusives et agréables pour tous.
- 19:01 - Disposition
Cet automne, Safari introduira un nouveau module CSS appelé « positionnement d’ancrage », qui révolutionnera la manière dont les développeurs web créent des infobulles et positionnent les menus. Le positionnement par ancrage vous permet d’ancrer facilement un élément à un autre, par exemple un menu à une photo de profil. Cette fonctionnalité permet de positionner précisément le menu par rapport à l’ancrage. Safari a également réintroduit les préréglages de fenêtre dans le mode Responsive Design, ce qui vous permet de tester plus facilement vos sites web sur différents appareils et tailles d’écran.
- 29:05 - Effets visuels
Il existe plusieurs nouvelles fonctionnalités CSS permettant d’améliorer les effets visuels sur les sites web et les apps. Une fonctionnalité remarquable est l’extension de la propriété « background-clip ». Initialement utilisée pour remplir du texte avec des dégradés ou des images, cette propriété peut désormais être appliquée aux bordures. Toutefois, quelques ajustements supplémentaires, tels que la transparence de la couleur de la bordure et l’extension de l’origine de l’arrière-plan, sont nécessaires pour obtenir l’effet souhaité. Cette technique peut être utilisée pour rendre divers éléments, tels que les boutons et les cercles de progression, plus attrayants visuellement. Une autre nouveauté intéressante est la prise en charge de la fonction « shape() », qui permet aux concepteurs de créer plus facilement des formes réactives. Elle permet de gérer avec précision quelles parties d’une forme doivent s’adapter à l’écran et lesquelles doivent rester fixes, ce qui garantit une esthétique cohérente quel que soit l’appareil utilisé. C’est notamment très pratique pour les éléments décoratifs, comme les flèches ou les fonds. CSS enrichit désormais la typographie avec notamment la propriété « text-wrap: pretty », une nouveauté Safari 19. Cette fonction améliore le confort de lecture en évitant les lignes trop courtes, en limitant les césures et en harmonisant la longueur des lignes. En ajustant intelligemment les espaces entre les mots et les retours à la ligne, elle offre une mise en page plus élégante et équilibrée. Bien que subtile, cette amélioration impacte positivement l’expérience de lecture, tout en restant compatible avec les navigateurs plus anciens qui ne la supportent pas encore.
- 38:22 - Multimédia
Safari s’apprête à déployer cet automne une série d’améliorations majeures concernant la gestion des médias. L’une des nouveautés phares sera l’intégration des icônes SVG, qui va considérablement enrichir l’expérience utilisateur sur différents aspects du navigateur, notamment les favicons, les bookmarklets et la page d’accueil. Les icônes au format SVG présentent l’avantage d’être plus flexibles et plus légères que les traditionnels fichiers PNG. De plus, Safari prend désormais en charge les images HDR (High Dynamic Range) dans WebKit et Safari. Les images HDR rendent le contenu web plus vivant et plus attrayant visuellement en affichant des teintes plus profondes, des gammes plus larges et des couleurs plus vives. Safari étend également sa prise en charge de divers formats multimédias, notamment Ogg Opus et Ogg Vorbis pour l’audio, et a réalisé des progrès pour garantir le bon fonctionnement de combinaisons complexes de codecs et de conteneurs sur différentes API. Ces mises à niveau vous permettent d’intégrer des fonctionnalités de podcast et d’enregistrement vidéo en temps réel dans vos apps web. De plus, Safari améliore sa prise en charge du web spatial. Vous pouvez désormais afficher des modèles 3D en stéréoscopie et inclure des vidéos immersives dans vos pages web. Ces améliorations visent à rendre le web plus interactif et plus attrayant pour tous.