Supprimer le contour de la zone de sélection dans FF

97

Est-il possible de supprimer la ligne pointillée entourant un élément sélectionné dans un élément de sélection?

texte alternatif

J'ai essayé d'ajouter la outlinepropriété en CSS mais cela n'a pas fonctionné, du moins pas en FF.

<style>
   select { outline:none; }
</style>

Mise à jour
Avant de supprimer le contour, veuillez lire ceci.
http://www.outlinenone.com/

Martin
la source
il y a trois mois, j'ai cherché la même chose mais avec un bouton radio. Plus de cinq ou six solutions différentes que j'ai trouvées, rien n'a fonctionné. Je suppose donc que vous ne pouvez pas faire cela. J'espère que je me trompe.
Arseni Mourzenko le
J'ai peur que ce soit le fait aussi, mais j'espère toujours avoir tort: ​​D
Martin
Y a-t-il réellement des êtres humains travaillant chez Mozilla qui pensent que cette stupide ligne pointillée a l'air bien? Pourquoi est-ce même quelque chose que nous devons supprimer?
billynoah

Réponses:

74

J'ai trouvé une solution, mais elle est mère de tous les hacks, j'espère qu'elle servira de point de départ pour d'autres solutions plus robustes. L'inconvénient (trop gros à mon avis) est que tout navigateur qui ne prend pas en charge text-shadowmais prend en charge rgba(IE 9) ne rendra pas le texte à moins que vous n'utilisiez une bibliothèque telle que Modernizr (non testée, juste une théorie).

Firefox utilise la couleur du texte pour déterminer la couleur de la bordure pointillée. Alors dites si vous le faites ...

select {
  color: rgba(0,0,0,0);
}

Firefox rendra la bordure pointillée transparente. Mais bien sûr, votre texte sera également transparent! Nous devons donc en quelque sorte afficher le texte. text-shadowvient à la rescousse:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Nous mettons une ombre de texte sans décalage et sans flou, ce qui remplace le texte. Bien sûr, les anciens navigateurs ne comprennent rien à cela, nous devons donc fournir une solution de secours pour la couleur:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

C'est à ce moment qu'IE9 entre en jeu: il prend en charge rgbamais pas text-shadow, vous obtiendrez donc une boîte de sélection apparemment vide. Obtenez votre version de Modernizr avec text-shadowdétection et faites ...

.no-textshadow select {
  color: #000;
}

Prendre plaisir.

méthode d'action
la source
Merci mon pote, je vais essayer bientôt :)
Martin
La seule solution qui fonctionne réellement (en utilisant FF 20). Toutes nos félicitations!
Gilberto Torrezan
4
Cela devrait prendre en charge chaque FF et seulement FF:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Timo Kähkönen
Cela affectera-t-il le CSS dans Chrome et d'autres navigateurs?
Dadhich Sourav
165

Eh bien, la réponse de Duopixel est tout simplement parfaite. Si nous allons plus loin, nous pouvons le rendre à l'épreuve des balles.

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

Voilà, valable uniquement pour Firefox et le triste contour en pointillé autour de l'option sélectionnée a disparu.

Fleshgrinder
la source
1
Fait intéressant, cette solution n'est pas tout à fait à toute épreuve comme la réponse de Duopixel. Si vous utilisez un effet de transition avec votre boîte de sélection (c'est-à-dire -moz-transition), la boîte en pointillés apparaîtra pendant la durée de la transition, puis disparaîtra. Donc ie si vous spécifiez '-moz-transition: all 0.5s easy;', vous verrez la combobox pendant une demi-seconde avec cette solution, alors que vous ne la verriez pas du tout avec la réponse de Duopixel. Vous pouvez contourner ce problème en définissant l'élément de sélection entier pour avoir un attribut de couleur transparent, mais vous ne verrez alors aucun texte lorsque la zone n'a pas le focus.
Jon
1
Edit: ce qui précède devrait dire, "... vous verrez la boîte en pointillé pendant une demi-seconde avec cette solution ..." Je ne peux plus modifier le commentaire. Quoi qu'il en soit, le 'color: rgba (0,0,0,0);' la propriété est ce qui fixe la transition, et elle doit être dans l'élément select; «-moz-focusring» ne fera pas l'affaire. Il est également intéressant de noter que pour une raison quelconque, je n'ai aucun problème dans IE9 et Chrome avec la solution de Duopixel, de sorte que ce dont il parlait à la fin avec Modernizr était totalement inutile pour moi.
Jon
Bien sûr, il apparaîtra si vous spécifiez une transition. Utiliser alldans les transitions, c'est comme tirer avec un pistolet Gatling à la volée.
Fleshgrinder
1
Cette solution ou celle de Duopixel ne fonctionne pas dans FF 33.0.3 dans Mac Mavericks. Au lieu d'un contour en pointillé, il y a un contour bleu flou.
Timo Kähkönen
1
cela casse les styles de navigateur sur les options désactivées - une fois que la sélection est focalisée, ils deviennent noirs au lieu du texte grisé qu'ils devraient être.
billynoah
19

Voici une collaboration de solutions pour résoudre les problèmes de style avec les boîtes de sélection de Firefox. Utilisez ce sélecteur CSS dans le cadre de votre réinitialisation CSS habituelle.

La classe supprime le contour selon la question, mais supprime également toute image d'arrière-plan (car j'utilise généralement une flèche déroulante personnalisée et la flèche déroulante du système Firefox ne peut pas être supprimée actuellement). Si vous utilisez l'image d'arrière-plan pour autre chose que l'image déroulante, supprimez simplement la lignebackground-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}
Wayne Dunkley
la source
Est-il possible de toujours définir la couleur du texte des options en utilisant cette méthode?
user1063287
En fait, vous pouvez supprimer les flèches Firefox utilisées en arrière-plan SELECT, en définissant la propriété spécifique au fournisseur -moz-appearancesur none.
Emanuele Del Grande
D'autres réponses n'ont pas le select::-moz-focus-innersélecteur important , ce qui les rend moins efficaces. C'est pourquoi celui-ci obtient mon ⬆.
Dave Land
select:-moz-focusringavec color: transparentet text-shadow: 0 0 0 #000supprimé la frontière ennuyeuse sur le focus dans Firefox v63
Jason Moore
Remarque: url-prefix (). fxsitecompat.dev/en-CA/docs/2018/... En lisant les liens, je ne trouve pas clair s'ils vont le supprimer progressivement ou non. Mais soyez avisé.
user3342816
9

Cela ciblera toutes les versions de Firefox

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

Vous souhaiterez peut-être supprimer! Important si vous prévoyez d'afficher le plan sur d'autres pages de votre site utilisant la même feuille de style.

Kyzer
la source
1
Cela devrait être la réponse choisie
brandonscript
9

En général, les contrôles de formulaire sont impossibles à styliser avec ce degré de précision. À ma connaissance, aucun navigateur ne prend en charge une gamme raisonnable de propriétés dans tous les contrôles. C'est la raison pour laquelle il existe un milliard de bibliothèques JavaScript qui "falsifient" les contrôles de formulaire avec des images et d'autres éléments HTML et émulent leurs fonctionnalités d'origine avec du code:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...

Álvaro González
la source
Thx, je suppose que je dois "créer ma propre" liste de sélection pour accomplir cela. Dommage que les contrôles de formulaire ne soient pas plus uniformes entre les navigateurs.
Martin du
1
@ Martin: ce n'est rien comparé à l'inflexibilité d'un contrôle de téléchargement de fichiers, qui ne peuvent être coiffés du tout dans la plupart des navigateurs. ;)
Arseni Mourzenko
3

<select onchange="this.blur();">

Si vous l'utilisez, la bordure reste jusqu'à ce que vous sélectionniez un élément dans la liste.

Malitta
la source
2
Malheureusement, cette solution ne respecte pas les règles d'accessibilité et d'utilisabilité. Outre les interfaces TTS pour les utilisateurs aveugles, il interdit la navigation au clavier. Les éléments ciblés doivent être différents des autres, le problème avec la question actuelle est que Firefox ne vous laisse pas décider comment.
Emanuele Del Grande
1

Essayez l'un de ceux-ci:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

Référence

Poisson-chat
la source
6
Merci pour l'effort, mais malheureusement cela n'a pas fonctionné. Peut-être que cela fonctionne sur un aélément, mais cela ne fonctionne pas sur un selectélément.
Martin du
1

Voici la solution

:focus {outline:none;}
::-moz-focus-inner {border:0;}
Faizan
la source
1
Testé. Ça ne marche pas. Firefox reconnaît cette propriété mais ne semble rien faire. 10px solid redJ'ai essayé de le configurer et je ne trouve pas où il apparaît.
mpen
Cela a fonctionné pour moi, contrairement à toutes les autres réponses aux votes plus élevés.
Tashows
0

Supprimer le contour / la bordure pointillée de Firefox Toutes les balises sélectionnables.

Mettez cette ligne de code dans votre feuille de style:

*:focus{outline:none !important;}   
Hasnain Mehmood
la source
0

Ajoutez un style de bordure: aucun à votre sélection dans CSS.

select {
border-style: none; }
Khwaja Abdul Ahad
la source
-2
    input[type='range']::-moz-focus-outer {
    border: 0;
    outline: none !important;
    }

travaillant à 100%

user2577904
la source
-4

Cela supprimera le focus de l' selectélément et du contour :

$("select").click(function(){
    $(this).blur();
});

Bien que ce ne soit pas sans inconvénients sur les autres navigateurs. Vous voudrez vérifier le navigateur que l'utilisateur utilise:

if (FIREFOX) {
    //implement the code
}
Moïse Dike Okore
la source
Veuillez expliquer ce que fait votre extrait de code en plus de fournir l'extrait de code.
sayan du