Français

Explorez la puissance des fonctions trigonométriques CSS (sin(), cos(), tan(), asin(), acos(), atan(), atan2()) pour créer des mises en page complexes, dynamiques et mathématiquement précises. Apprenez avec des exemples pratiques et des extraits de code.

Fonctions trigonométriques CSS : Calculs de mise en page mathématiques pour des designs dynamiques

Le CSS, traditionnellement connu pour styliser des éléments statiques, a évolué pour offrir des outils puissants pour la conception web dynamique et responsive. Parmi ceux-ci se trouvent les fonctions trigonométriques, qui permettent aux développeurs d'exploiter des principes mathématiques directement dans leur CSS. Cet article explore comment utiliser `sin()`, `cos()`, `tan()`, `asin()`, `acos()`, `atan()` et `atan2()` pour créer des mises en page complexes, dynamiques et mathématiquement précises.

Comprendre les fonctions trigonométriques CSS

Les fonctions trigonométriques en CSS vous permettent d'effectuer des calculs basés sur des angles, aboutissant à des valeurs qui peuvent être utilisées pour diverses propriétés CSS comme `transform`, `width`, `height`, et plus encore. Cela ouvre des possibilités pour créer des mises en page circulaires, des animations complexes et des designs responsives qui s'adaptent mathématiquement à différentes tailles d'écran.

Les fonctions de base : sin(), cos() et tan()

Ces fonctions sont la base des calculs trigonométriques :

Fonctions trigonométriques inverses : asin(), acos(), atan() et atan2()

Les fonctions trigonométriques inverses vous permettent de calculer l'angle à partir d'un rapport connu :

Applications pratiques et exemples

Explorons plusieurs applications pratiques des fonctions trigonométriques CSS.

1. Créer une mise en page circulaire

Un cas d'utilisation courant est de disposer des éléments en cercle. Cela peut être réalisé en calculant la position de chaque élément en fonction de son index et du nombre total d'éléments, en utilisant `sin()` et `cos()` pour déterminer les coordonnées x et y par rapport au centre du cercle.

HTML :

<div class="circle-container">
 <div class="item">1</div>
 <div class="item">2</div>
 <div class="item">3</div>
 <div class="item">4</div>
 <div class="item">5</div>
 </div>

CSS :

.circle-container {
 position: relative;
 width: 200px;
 height: 200px;
 border: 1px solid black;
 border-radius: 50%;
 margin: 50px auto;
}

.item {
 position: absolute;
 width: 30px;
 height: 30px;
 border-radius: 50%;
 background-color: lightblue;
 text-align: center;
 line-height: 30px;
}

.circle-container .item:nth-child(1) {
 top: calc(50% + sin(calc(1 * 360deg / 5)) * 85px - 15px);
 left: calc(50% + cos(calc(1 * 360deg / 5)) * 85px - 15px);
}

.circle-container .item:nth-child(2) {
 top: calc(50% + sin(calc(2 * 360deg / 5)) * 85px - 15px);
 left: calc(50% + cos(calc(2 * 360deg / 5)) * 85px - 15px);
}

.circle-container .item:nth-child(3) {
 top: calc(50% + sin(calc(3 * 360deg / 5)) * 85px - 15px);
 left: calc(50% + cos(calc(3 * 360deg / 5)) * 85px - 15px);
}

.circle-container .item:nth-child(4) {
 top: calc(50% + sin(calc(4 * 360deg / 5)) * 85px - 15px);
 left: calc(50% + cos(calc(4 * 360deg / 5)) * 85px - 15px);
}

.circle-container .item:nth-child(5) {
 top: calc(50% + sin(calc(5 * 360deg / 5)) * 85px - 15px);
 left: calc(50% + cos(calc(5 * 360deg / 5)) * 85px - 15px);
}

Dans cet exemple, nous calculons la position de chaque élément `.item` en utilisant `sin()` et `cos()`. L'angle est déterminé en divisant 360 degrés par le nombre d'éléments (5) et en le multipliant par l'index de l'élément. Les valeurs `sin()` et `cos()` résultantes sont ensuite utilisées pour calculer les positions `top` et `left`, plaçant efficacement les éléments dans une disposition circulaire. La valeur `85px` représente le rayon du cercle, et `15px` compense la taille de l'élément.

2. Créer des animations ondulatoires

Les fonctions trigonométriques sont excellentes pour créer des animations fluides et ondulatoires. Vous pouvez utiliser `sin()` ou `cos()` pour moduler la position, l'opacité ou d'autres propriétés d'un élément au fil du temps.

HTML :

<div class="wave-container">
 <div class="wave-item"></div>
</div>

CSS :

.wave-container {
 width: 100%;
 height: 100px;
 overflow: hidden;
 position: relative;
}

.wave-item {
 position: absolute;
 width: 200%;
 height: 100%;
 background-color: lightblue;
 animation: wave 5s linear infinite;
}

@keyframes wave {
 0% {
 transform: translateX(0) translateY(calc(sin(0deg) * 20px));
 }
 50% {
 transform: translateX(-50%) translateY(calc(sin(180deg) * 20px));
 }
 100% {
 transform: translateX(-100%) translateY(calc(sin(360deg) * 20px));
 }
}

Dans cet exemple, l'animation `wave` utilise `sin()` pour calculer la position verticale (`translateY`) de l'élément `.wave-item`. Au fur et à mesure que l'animation progresse, la valeur du sinus change, créant un effet de vague douce et ondulante. Le `translateX` assure un mouvement continu de la vague.

3. Créer des arcs et des courbes responsives

Les fonctions trigonométriques CSS peuvent être combinées avec des unités de viewport (comme `vw` et `vh`) pour créer des arcs et des courbes responsives qui s'adaptent à différentes tailles d'écran.

HTML :

<div class="arc-container">
 <div class="arc-element"></div>
</div>

CSS :

.arc-container {
 width: 100vw;
 height: 50vh;
 position: relative;
 overflow: hidden;
}

.arc-element {
 position: absolute;
 width: 20px;
 height: 20px;
 border-radius: 50%;
 background-color: red;
 left: calc(50vw + cos(var(--angle)) * 40vw - 10px);
 top: calc(50vh + sin(var(--angle)) * 20vh - 10px);
 animation: arc 5s linear infinite;
}

@keyframes arc {
 0% {
 --angle: 0deg;
 }
 100% {
 --angle: 360deg;
 }
}

Dans cet exemple, nous utilisons des propriétés CSS personnalisées (`--angle`) et des fonctions trigonométriques pour positionner l'élément `.arc-element` le long d'un arc. Les propriétés `left` et `top` sont calculées à l'aide de `cos()` et `sin()`, respectivement, l'angle changeant au fil du temps grâce à l'animation `arc`. Les unités de viewport (`vw` et `vh`) garantissent que l'arc s'adapte proportionnellement à la taille de l'écran.

4. Calculer des distances avec `atan2()`

`atan2()` peut déterminer l'angle entre deux points, ce qui est utile pour créer des effets où les éléments réagissent à la position des autres.

Considérons un scénario où vous avez deux éléments, et vous voulez en faire pivoter un pour qu'il pointe toujours vers l'autre :

HTML :

<div class="container">
 <div class="target">Target</div>
 <div class="pointer">Pointer</div>
</div>

CSS (avec JavaScript) :

.container {
 position: relative;
 width: 300px;
 height: 300px;
 border: 1px solid black;
 margin: 50px auto;
}

.target {
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
 width: 50px;
 height: 50px;
 background-color: lightcoral;
 text-align: center;
 line-height: 50px;
}

.pointer {
 position: absolute;
 top: 20%;
 left: 50%;
 transform: translateX(-50%);
 width: 80px;
 height: 20px;
 background-color: lightgreen;
 text-align: center;
 line-height: 20px;
 transform-origin: left center; /* Important pour une rotation correcte */
}

JavaScript :

const target = document.querySelector('.target');
const pointer = document.querySelector('.pointer');
const container = document.querySelector('.container');

container.addEventListener('mousemove', (e) => {
 const containerRect = container.getBoundingClientRect();
 const targetRect = target.getBoundingClientRect();

 const centerX = containerRect.left + containerRect.width / 2;
 const centerY = containerRect.top + containerRect.height / 2;

 const angle = Math.atan2(e.clientY - centerY, e.clientX - centerX) * 180 / Math.PI;

 pointer.style.transform = `translateX(-50%) rotate(${angle}deg)`;
});

Dans cet exemple, JavaScript est utilisé pour obtenir les coordonnées de la souris par rapport au conteneur. `Math.atan2()` calcule l'angle entre le centre du conteneur (agissant comme origine) et la position de la souris. Cet angle est ensuite utilisé pour faire pivoter l'élément `.pointer`, garantissant qu'il pointe toujours vers le curseur de la souris. `transform-origin: left center;` est crucial pour s'assurer que le pointeur pivote correctement autour de son point central gauche.

Avantages de l'utilisation des fonctions trigonométriques en CSS

Considérations et bonnes pratiques

Conclusion

Les fonctions trigonométriques CSS fournissent un ensemble d'outils puissants pour créer des designs web dynamiques, responsives et mathématiquement précis. En comprenant et en utilisant ces fonctions, les développeurs peuvent débloquer de nouvelles possibilités pour la mise en page, l'animation et les éléments interactifs, améliorant considérablement l'expérience utilisateur. Des mises en page circulaires et animations ondulatoires aux arcs responsives et au positionnement d'éléments, les applications sont vastes et variées. Bien qu'une attention particulière à la compatibilité des navigateurs, à la performance et à la lisibilité soit essentielle, les avantages de l'intégration des fonctions trigonométriques dans votre flux de travail CSS sont indéniables, vous permettant de créer des expériences web vraiment engageantes et sophistiquées. Alors que le CSS continue d'évoluer, la maîtrise de ces techniques deviendra de plus en plus précieuse pour les concepteurs et développeurs web du monde entier.

Ces connaissances permettent de réaliser des designs plus complexes et visuellement attrayants. Explorez ces techniques et expérimentez avec différents paramètres pour libérer tout le potentiel des fonctions trigonométriques CSS dans vos projets de développement web.