53 votes

Comment personnaliser l'aspect du type de plage de saisie HTML5 à l'aide de CSS ?

Je veux personnaliser l'apparence du type de saisie de plage en HTML5 pour qu'il ressemble à une barre de progression. J'ai essayé d'appliquer certains attributs CSS courants à l'aide de la classe CSS, mais il semble qu'ils ne fonctionnent pas.

Quelqu'un peut-il m'indiquer comment le personnaliser ?

0 votes

Avec une combinaison de javascript ? Par le biais de CSS, vous pourriez faire en sorte que l'entrée ne soit pas affichée et que le rendu de wathever soit adapté :before et :after de l'élément. Ensuite, grâce à javascript, vous pouvez gérer la façon dont tout cela interagit avec les autres.

0 votes

Voici un excellent article sur ce sujet : hongkiat.com/blog/html5-range-slider-style .

2 votes

Il serait utile que vous refusiez la réponse actuellement acceptée (et que vous en acceptiez peut-être une autre qui vous plaise). Avoir une réponse disant "n'essayez même pas, la technologie est trop récente" de la part de il y a 5 ans toujours épinglé en haut de la liste des réponses n'aide personne.

68voto

Eyal Points 469
input[type='range'] {
    -webkit-appearance: none !important;
    background:red;
    height:7px;
}
input[type='range']::-webkit-slider-thumb {
    -webkit-appearance: none !important;
    background:blue;
    height:10px;
    width:10px;
}

0 votes

Cela fonctionne également sous iOS 5.0, ce qui est appréciable car l'écran par défaut est assez petit pour un appareil tactile.

23voto

marcgg Points 25599

Si vous utilisez HTML 5, pourquoi ne pas utiliser l'option progress tag ?

<progress value="1534602" max="4603807">33%</progress>

5 votes

Existe-t-il un navigateur capable de rendre cela ?

0 votes

Je ne pense pas qu'un navigateur rende encore ceci, peut-être modernizr.com peut aider ?

2 votes

@MarcoDemaio Firefox, Safari et Chrome l'affichent.

14voto

Marco Demaio Points 8667

EDIT : aujourd'hui, tous les principaux navigateurs prennent en charge les deux

Par conséquent, vous devez utiliser l'un des deux, comme expliqué dans d'autres réponses et cela ne devrait plus être la réponse acceptée.


El <input type="range"> est assez récent et vous essayez déjà de le personnaliser avec des CSS :)

Je n'essaierais pas ça pour deux raisons :

  1. il pourrait y avoir d'énormes problèmes de compatibilité maintenant et pour les quelques (ou nombreuses) prochaines années. . Pensez que de nos jours, un contrôle de formulaire comme <select> (disponible depuis le début du web) est encore difficile à personnaliser avec des feuilles de style en cas de changement de navigateur. Par exemple, si vous définissez un padding pour les boîtes de sélection, de nombreux navigateurs (IE7, OPERA9, CHROME5, SAFARI4) ignorent totalement le padding. Cela ne fonctionne que sur IE8 et sur FF 3.6. (tous les tests ont été effectués avec HTML5 DOCTYPE donc en mode standard).

  2. El <input type="range"> a été créé pour afficher un curseur PAS une barre de progression Si vous essayez de tricher avec les CSS pour transformer un curseur en barre de progression, cela semble bizarre. Comme essayer d'utiliser le CSS pour transformer un <textarea> dans un tableau, mais pourquoi ne pas simplement utiliser une <table> pour rendre les tableaux !

Pour afficher une barre de progression en HTML5, vous devez suivre la suggestion donnée par marcgg dans sa réponse. Comme aucun navigateur ne le restitue actuellement, vous pouvez utiliser un simple div avec un p à l'intérieur, comme ceci :

<div id="progress" style="position:relative; width:100px; height:20px; border:1px solid #cccccc;">
   <p style="position:absolute; left:0; top:0; background-color:#0000ff; height:100%; width:30%; font-size:0px;">&nbsp;</p>
</div>

Ensuite, il suffit de mettre à jour le style.width de l'intérieur P élément en pourcentage comme :

width: 75%

FYI : si vous voulez faire cela en simple JS voici le code :

document.getElementById('progress').(getElementsByTagName('p')[0]).style.width = '75%';

0 votes

Je ne sais pas exactement quelle est la meilleure option à prendre. J'ai lu un tutoriel sur la balise HTML5 audio et là, ils ont utilisé le type de plage d'entrée pour montrer la progression de l'audio en cours de lecture. Je veux donc simplement personnaliser l'apparence. Avez-vous des suggestions sur ce que vous pouvez utiliser pour la même chose ?

2 votes

La suggestion de ce qu'il faut utiliser pour la même chose est dans ma réponse ! Utilisez un DIV avec un P à l'intérieur. Il affiche une barre de progression. Si vous ne me croyez pas, copiez et collez le code dans une page et essayez-le. Avez-vous le lien du tutoriel ? C'est bizarre qu'ils suggèrent de modifier via CSS un slider pour le transformer en barre de progression, c'est bizarre ! Un curseur est quelque chose avec lequel l'utilisateur peut interagir en déplaçant le curseur, une barre de progression est quelque chose que l'utilisateur peut seulement voir et non changer en passant la souris dessus.

0 votes

Eh bien, merci beaucoup. Je pense que je vais utiliser votre suggestion. Et bien c'est de dev.opera.com/articles/view/ . En fait, ils n'ont pas suggéré de le changer en utilisant CSS. Ils utilisaient simplement la barre de défilement, mais comme je n'aime pas l'apparence, je me suis dit que je pourrais la changer en utilisant les CSS, puisque je m'y connais un peu :)

12voto

Lea Verou Points 7869

Vous pouvez dans Webkit, par le biais de l'option -webkit-slider-thumb pseudo-élément : http://jsfiddle.net/leaverou/BNm8j/

input[type=range] {
    -webkit-appearance: none;
    background-color: silver;
    width: 200px;
    height:20px;
}

input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    background-color: #666;
    opacity: 0.5;
    width: 10px;
    height: 26px;
}

<input type="range" min="0" max="100" />

Bien que les autres aient raison à propos de l'entrée type="range" ne pas être le bon élément pour le travail.

Vous devez utiliser le <progress> et pour les navigateurs qui ne le supportent pas, ce polyfill : http://lea.verou.me/polyfills/progress/

1 votes

input type="range" est le bon élément et progress ne l'est pas si l'entrée de l'utilisateur est souhaitée.

6voto

ntechi Points 1014

Vous pouvez éditer le CSS de l'entrée de la gamme, en utilisant input[type="range"]::-webkit-slider-thumb y input[type="range"] .

En voici l'exemple,

http://webstutorial.com/range-input-slider-html5-css3/html-5

Je sais qu'on a déjà répondu à cette question, mais je la partage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X