81 votes

Suppression de l'espacement/du remplissage des boutons dans Firefox

Voir cet exemple de code : http://jsfiddle.net/Z2BMK/

Chrome/IE8 ressemble à ceci

enter image description here

Firefox ressemble à ceci

enter image description here

Mon CSS est

button {
    padding:0;
    background:#080;
    color:white;
    border:solid 2px;
    border-color: #0c0 #030 #030 #0c0;
    margin:0;
}

Comment puis-je modifier l'exemple de code pour que le bouton soit le même dans les deux navigateurs ? Je ne veux pas utiliser d'hyperliens basés sur JavaScript car ils ne fonctionnent pas avec la barre d'espacement du clavier et il faut que le bouton ait un numéro d'identification. href URL, ce qui n'est pas une façon propre de gérer les choses.

Ma solution, depuis Firefox 13

button::-moz-focus-inner { margin: -1px; padding: 0; border-width: 1px; }

0 votes

Pourquoi avez-vous ajouté margin: -1px ? Est-il lié d'une manière ou d'une autre à border: 2px ?

1 votes

Voir mon édition. Le site border-width de la -moz-focus-inner était 1px par défaut, de sorte que l'écriture border-width dans le code est redondant, mais il rend plus clair ce qui se passe. Il est possible que cela puisse également contribuer à l'avenir. Pour répondre à votre question, le border-width dans Firefox était la cause de la différence, et l'ajout de margin: -1px est la solution qui est plus compatible que ma solution précédente.

1 votes

Je pense que la réponse acceptée est visuellement équivalente, mais meilleure que votre solution. La réponse acceptée supprime les éléments ajoutés par FF, et rend les choses identiques dans tous les navigateurs. Votre solution laisse une bordure supplémentaire ajoutée par FF à sa place, et cache un pixel de la bordure de deux pixels à l'aide de la fonction margin: -1px . C'est trop compliqué. Ça casse si : 1)Un bug dans le moteur de rendu apparaît (ça arrive), 2)Les bordures ont une couleur différente, 3)Vous faites un zoom avant. Pour démontrer les problèmes potentiels de votre solution, j'ai préparé un bidule : jsfiddle.net/Z2BMK/455 . Faites un zoom et remarquez l'apparition d'une bordure rouge.

164voto

thirtydot Points 114021

Ajoutez ceci :

button::-moz-focus-inner {
    padding: 0;
    border: 0
}

http://jsfiddle.net/thirtydot/Z2BMK/1/

Y compris le border est nécessaire pour que les boutons aient la même apparence dans les deux navigateurs, mais elle supprime également le contour en pointillés lorsque le bouton est active dans Firefox. De nombreux développeurs se débarrassent de ce contour en pointillés, en le remplaçant éventuellement par quelque chose de plus agréable à l'œil.

8 votes

Pour utiliser une lueur de mise au point de style Chrome dans Firefox, utilisez button{background:/*Something here*/} button:focus{-moz-box-shadow:0 0px 3px #C80;} . Cela compense l'absence de ligne pointillée et donne au navigateur la cohérence que je recherchais.

0 votes

C'est exactement ce dont j'avais besoin. Merci !

11 votes

Pour le fixer également sur les éléments d'entrée, ajoutez input[type="reset"]::-moz-focus-inner, input[type="button"]::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="file"] > input[type="button"]::-moz-focus-inner

8voto

Marcelo Hexsel Points 51

Pour le fixer également sur les éléments d'entrée, ajoutez

input[type="reset"]::-moz-focus-inner, 
input[type="button"]::-moz-focus-inner, 
input[type="submit"]::-moz-focus-inner, 
input[type="file"] > input[type="button"]::-moz-focus-inner

est tout simplement parfait !

0 votes

Avez-vous une connaissance de la compatibilité de cette solution avec les navigateurs ?

3 votes

N'est-ce pas ? input[type="file"] > input[type="button"]::-moz-focus-inner redondant puisque vous avez déjà ajouté input[type="button"]::-moz-focus-inner ou n'est-ce pas votre expérience ? Le savez-vous ?

0 votes

@GeorgeBailey : la compatibilité du navigateur est Firefox 3+, ce code n'affecte aucun autre navigateur.

0voto

TheTrowser Points 51

Version corrigée de la réponse de @thirtydot :

button:: {
    padding: 0px;
    border: 0px;
}

button::-moz-focus-inner {
    padding: 0px;
    border: 0px;
}

En ce qui concerne Firefox 87 :

  • button en button::-moz-focus-inner ne peut pas être une classe. (Ex. .mybutton::-moz-focus-inner ne fonctionne pas)

  • Il doit y avoir un button { padding:0px; border: 0px; } style présent également (Ce style peut être donné par classe).

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