Petite astuce comment manipuler l’apparence du curseur avec CSS

Dans cette astuce, nous allons apprendre à personnaliser l'apparence du curseur avec CSS. Nous allons changer notre curseur en flèches pour faciliter la navigation dans un diaporama. Pour mieux le comprendre, nous allons passer en revue deux exemples distincts..

Remarque: le but de cet article n'est pas de couvrir de manière exhaustive les le curseur syntaxe de la propriété. Pour un examen plus approfondi, assurez-vous de consulter les ressources à la fin du tutoriel..

Exemple 1

Pour le premier exemple, nous verrons comment changer l'image du curseur en fonction de la position de la souris.

Voici la démo que nous allons construire en action:

1. Le HTML

Nous commençons avec une image simple:

2. Le CSS

Ensuite, nous définissons deux classes CSS qui contiennent les images du curseur:

.curseur-prev curseur: url (curseur-prev.cur), auto; / * IE & Edge * / cursor: url (cursor-prev.svg) 16 16, auto; / * Navigateurs restants * / .cursor-next cursor: url (cursor-next.cur), auto; / * IE & Edge * / cursor: url (cursor-next.svg) 16 16, auto; / * Reste les navigateurs * /

Notez que pour chaque règle, nous spécifions deux déclarations de curseur. La première déclaration de chaque règle cible les navigateurs de Microsoft, tandis que la seconde cible les autres navigateurs. Toutes les valeurs pointent sur une image, avec le auto valeur de mot clé comme solution de secours.  

Il est à noter que nous pouvons spécifier plusieurs URL ou images personnalisées. Un navigateur essaiera de les charger en fonction de l'ordre défini dans les valeurs. En d’autres termes, initialement, il essaiera de charger la première image. Si cette image n'est pas disponible pour une raison quelconque, il essaiera de charger la seconde, et ainsi de suite. Enfin, si aucune des images n’existe, le mot-clé fallback sera utilisé.

Avant de poursuivre, soulignons quelques limitations actuelles (également en fonction de mes tests) et expliquons pourquoi nous avons défini deux déclarations distinctes:

  • Les navigateurs de Microsoft ne prennent en charge que les formats CUR et ANI.
  • Les navigateurs de Microsoft ne permettent pas de définir l'origine de l'image du curseur. Si cela se produit, l'image du curseur et le reste de la propriété sont ignorés. Dans notre cas, pour les navigateurs non-Microsoft, nous plaçons l'origine de l'image au centre (les images sont 32x32).

3. Le JavaScript

Lorsque tous les éléments de la page sont prêts, le init la fonction est exécutée. 

A l'intérieur de cette fonction, nous récupérons d'abord la largeur de l'image.

Ensuite, chaque fois que nous survolons l'image, nous procédons comme suit:

  • Obtenir la coordonnée X du pointeur de la souris par rapport à l'image et non par rapport à la fenêtre du navigateur.
  • Supprimer toutes les classes de l'image.
  • Ajoutez la classe appropriée à l'image en fonction de la position de la souris. Si la position de la souris dépasse la moitié de la largeur de l’image, nous ajoutons le paramètre curseur suivant classe, sinon le curseur-prev la classe est ajoutée.

Le code responsable de tout ce comportement est le suivant:

window.addEventListener ("load", init); function init () const img = document.querySelector ("img"); const width = img.getBoundingClientRect (); const halfImgWidth = width / 2; img.addEventListener ("mousemove", fonction (e) const xPos = e.pageX - img.offsetLeft; this.classList.remove ("curseur-prev", "curseur-suivant"); if (xPos> halfImgWidth)  this.classList.add ("cursor-next"); else this.classList.add ("cursor-prev");); 

Exemple n ° 2

Pour le deuxième exemple, nous utiliserons la démo intégrée dans un post précédent. Regarde:

Ici, la position et l'apparence des flèches de navigation ressemblent à ceci:

Personnalisons-les pour faciliter la navigation. Chacune des flèches doit couvrir la moitié de la largeur du carrousel et sa hauteur doit être égale à la hauteur du carrousel. De plus, nous allons profiter de la le curseur propriété pour définir les icônes des flèches.

Voici le CSS requis:

.owl-carrousel .owl-nav [classe * = owl-] position: absolute; en haut: 0; en bas: 0; largeur: 50%; marge: 0;  .owl-carrousel .owl-nav .owl-prev gauche: 0; curseur: url (curseur-prev.cur), déplacer; curseur: url (curseur-prev.svg) 16 16, déplacer;  .owl-carrousel .owl-nav .owl-next right: 0; curseur: url (curseur-next.cur), déplacer; curseur: url (curseur-suivant.svg) 16 16, déplacer;  .owl-carrousel .owl-nav svg display: none; 

Notez que les images du curseur proviennent de notre exemple précédent. La seule différence est que nous spécifions le bouge toi valeur de mot clé comme solution de secours au cas où l'image associée ne pourrait pas être chargée.

Voici le résultat:

Votre défi (si vous choisissez de l'accepter)

Cette technique fonctionne bien dans notre exemple, à part une chose. Les flèches de navigation sont empilées au-dessus du texte des diapositives, nous empêchant de cliquer sur les boutons d'appel à l'action.. 

Normalement, une solution simple pourrait être d'ajouter un positif z-index à ce texte (et lui donner position: relative). Cependant, cette solution ne fonctionnera pas car le texte et les flèches se trouvent dans des contextes d'empilement différents (utilisez l'inspecteur du navigateur pour le voir). 

Encore une fois, ce problème se pose pour notre démo. Dans vos projets, votre structure peut différer (par exemple, vous n’avez que des images ou le texte se trouve sous l’image) et vous ne pouvez pas faire face à ce problème. De plus, vous utiliserez probablement un autre carrousel avec un balisage différent..

Dans tous les cas, un moyen de résoudre ce problème consiste à utiliser JavaScript. Ainsi, chaque fois que le curseur personnalisé se trouve dans les limites du bouton / texte cible, la flèche associée reçoit un négatif. z-index ou disparaît. 

Essayez de résoudre ce problème vous-même et publiez votre solution dans les commentaires.!

Conclusion

Dans cette astuce, nous avons expliqué comment manipuler l'apparence du curseur avec CSS. Comme nous l'avons vu, cela peut être difficile, car tous les navigateurs ne prennent pas en charge la même syntaxe, mais en ajoutant des styles au curseur, nous pouvons améliorer l'expérience utilisateur..

Lectures complémentaires

  • La définition de la le curseur propriété dans le module d'interface utilisateur de base CSS niveau 3 (interface utilisateur CSS3)
  • Utilisation des valeurs d'URL pour la propriété du curseur
  • Comment créer des miniatures à prévisualisation multiple avec des événements de souris JavaScript