Sur votre utilisation sélectionnée largeur : auto et pas de remplissage pour voir la longueur de votre texte. J'utilise une largeur disponible de 100% pour ma sélection et toutes mes options ont la même longueur, ce qui me permet d'utiliser des css très simples.
Indentation du texte déplacera le texte de la gauche, de manière similaire à padding-left
120px est la longueur de mon texte - Je veux le centrer, donc je prends la moitié de cette taille et la moitié de la taille de la sélection, ce qui me laisse 50% - 60px.
select{
width: 100%;
text-indent: calc(50% - 60px);
}
Que se passe-t-il si j'ai des options de tailles différentes ?
Il est possible, cependant, que la solution ne soit pas belle à voir.
La première solution peut vous permettre de vous rapprocher du centre si la différence entre les options n'est pas de l'ordre de 5 caractères.
Si vous avez encore besoin de le centrer plus précisément, vous pouvez procéder comme suit
Préparer cette classe :
.realWidth{
width: auto;
}
Appliquer l'écouteur onChange à l'élément sélectionné
Dans cet auditeur appliquer .realWidth à l'élément de sélection avec
const selectRef = document.getElementById("yourId");
selectRef.classList.add("realWidth");
Accédez à la largeur réelle de l'option.
const widthOfSelect = selectRef.getBoundingClientRect().width / 2;
widthOfSelect est la largeur recherchée. Stockez-la dans une variable globale/composante.
Supprimez la largeur réelle (realWidth), vous n'en avez plus besoin.
selectRef.classList.remove("realWidth");
J'utilise react , Je ne suis pas sûr que cela fonctionnera avec vanilla. Si ce n'est pas le cas, il faut trouver une autre solution.
<select style={`textIndent: calc(50% - ${widthOfSelect}) %`}> ... </select>
Une autre solution, cependant, qui n'est pas bonne, pourrait consister à créer les classes CSS avec js et à les placer dans l'en-tête.
AVANTAGES :
- fonctionne probablement, je n'ai pas essayé la solution dynamique mais elle devrait fonctionner.
CONS :
- si le programme n'est pas assez rapide, l'utilisateur verra la largeur : auto se produire et se demandera ce qui se passe. Si c'est le cas, il suffit de créer une double sélection, de la cacher derrière un élément ayant un indice z plus élevé et d'appliquer l'auditeur on select de l'original à la double sélection cachée.
- Il peut être difficile à utiliser si vous ne pouvez pas intégrer le style à cause de la limitation de vanilla, mais vous pouvez faire un script pour optimiser l'appendChild à l'en-tête.