Select Animated
Vrai menu déroulant natif restylé en CSS : bordure indigo et chevron dessiné qui pivote vers le haut tant que le champ a le focus, liste du système conservée.
Mis à jour le
Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Formulaires comprend 20 effets, dont 2 gratuits. Découvrir la catégorie →
3 exemples d'usage



Comment ça marche
L'effet garde un <select> natif : seule son apparence change. appearance: none retire la flèche du système, une bordure de 2 px rgba(99,102,241,.3) et des coins de 10 px l'habillent, et le texte prend la couleur de son parent (color: inherit). La liste qui s'ouvre reste celle du navigateur, et sur mobile le sélecteur natif du téléphone (roue sur iPhone, liste plein écran sur Android).
Le chevron est le pseudo-élément ::after du conteneur .slx-field : un carré de 10 px dont seules les bordures droite et basse sont tracées, tourné de 45°. Quand le select a le focus, .slx-field:focus-within::after le tourne à −135° (vers le haut) en 0,3 s et la bordure passe en #6366f1 plein ; au focus clavier s'ajoute un halo clair. Il pivote donc au focus et non à l'ouverture de la liste : après un choix à la souris, il reste vers le haut tant que le champ garde le focus, et redescend quand on passe à autre chose.
Aucun JavaScript. La largeur vaut --slx-w (280 px par défaut, 100% pour remplir une colonne) ; les classes sont préfixées slx-.
Accessibilité
- Nom accessible : le select porte
aria-label="Votre choix"; dans un formulaire, préférez une étiquette visible en entourant le tout d'un<label>(« Fuseau horaire »), qui nomme le champ sansid. - Clavier natif : Tab, flèches, première lettre d'une option, Alt + flèche bas pour ouvrir : tout fonctionne puisque c'est le contrôle du navigateur.
- Focus visible : bordure indigo pleine au focus, plus un halo
rgba(165,180,252,.45)au focus clavier (:focus-visible). - Mobile : la liste est celle du système, avec sa taille de texte et ses réglages d'accessibilité.
- Mouvement réduit : sous
prefers-reduced-motion: reduce, le chevron et la bordure changent sans transition.
Compatibilité navigateur
CSS seul : appearance: none sans préfixe (Chrome 84, Firefox 80, Safari 15.4), :focus-within, ::after. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : choix à la souris, Tab puis flèche, deux copies indépendantes, 390 px, mouvement réduit. Le style des <option> (fond #1a1a2e) n'est appliqué que par Chrome, Edge et Firefox sous Windows et Linux ; macOS et iOS affichent leur liste système.
Sans appearance: none, la flèche du système s'affiche en plus du chevron dessiné ; le menu reste entièrement utilisable.
Le code
Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :
<div class="fx-0298-root">
<div class="slx-field">
<select name="choix" aria-label="Votre choix">
<option value="">Choisir une option...</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</div>
</div>
Paiement unique, sans abonnement — le code est à toi pour toujours
Personnaliser
Options passées à l'API ou attributs data-* :
| Option / propriété | Défaut | Effet |
|---|---|---|
Largeur (CSS — --slx-w) |
280px | 100% pour remplir la colonne d'un formulaire ; le champ ne dépasse jamais son conteneur (max-width: 100%). |
Couleur (CSS — border-color au focus et bordures de .slx-field::after) |
#6366f1, bordure au repos à 30 % | Changez les trois ensemble pour un champ cohérent au repos et au focus. |
Rotation du chevron (CSS — .slx-field:focus-within::after) |
rotate(-135deg) en .3s | Supprimez la règle pour un chevron fixe, ou allongez la transition. |
Liste ouverte (CSS — select option) |
fond #1a1a2e, texte blanc | Sur fond clair, passez à fond blanc et texte sombre ; ignoré par Safari et iOS. |
Nom et étiquette (HTML — name, aria-label ou <label>) |
choix · « Votre choix » | Remplacez par le vrai nom du champ ; une étiquette visible vaut mieux qu'un aria-label. |
Cadre de démo (CSS — .fx-0298-root) |
min-height 300px, fond #0a0a0f, texte blanc | À retirer dans une vraie page ; le texte du select suit alors la couleur de la page. |
FAQ
role="listbox", au prix du sélecteur natif sur mobile.value="" sur la première option (c'est déjà le cas) et required sur le select : le formulaire refuse l'envoi tant qu'une vraie option n'est pas choisie.