How to remove Firefox's dotted outline on BUTTONS as well as links?
Asked Answered
S

25

524

I can make Firefox not display the ugly dotted focus outlines on links with this:

a:focus { 
    outline: none; 
}

But how can I do this for <button> tags as well? When I do this:

button:focus { 
    outline: none; 
}

the buttons still have the dotted focus outline when I click on them.

(and yes, I know this is a usability issue, but I would like to provide my own focus hints which are appropriate to the design instead of ugly grey dots)

Scend answered 16/9, 2008 at 10:35 Comment(2)
It seems like in Firefox 4, elements are no longer getting an outline by default when being clicked, but only when receiving keyboard focus.Sauls
What you call "ugly" is intended to support accessibility of a website. Keyboard only users can no longer determine which part of the website is in focus when removing this outline. Your website would be completely inaccessible and this should never be the case. Never remove the outline. Better style it in your way.Staton
A
815
button::-moz-focus-inner {
  border: 0;
}
Acyclic answered 13/10, 2008 at 22:46 Comment(18)
Yea it works for me too! Now how can it be done for selects ?Leavings
Note that this also works for input (e.g. input::-moz-focus-inner {border:0;})Beaufert
yeah i needed this for input. i never seen the double colon used in CSS before. interesting.Kimsey
Purpose of the double colon: (CSS3 notation) evotech.net/blog/2007/05/…Veranda
+1 Thank you so much for this CSS!! I could not find out how to do this... I was using -moz-outline-style: and it would not work and the text in my button was still being outlined. But this fixes it totally. Thanks so much!!Matta
I am testing this in a real world scenario with JAWs. I will get back to you all with any findings or hacks. Trust me there has been a lot of them. Whoever thought it would be a good idea to do an accessible tabs interface inside a modal is.. well.. need I say more.Onto
This one did not work for me, because bootstrap.css was making this ugly dotted buttons. Instead I have put :focus {outline:none !important;}Lavender
:focus {outline:none;} ::-moz-focus-inner {border:0;} would be less specificZaslow
In Firefox 23.0.1 it only works combined with background: none. jsbin.com/UMuRAso/1/editHogan
This doesn't work for area, For that I used this: https://mcmap.net/q/74979/-how-can-i-remove-the-dotted-border-from-lt-area-gt-elements-in-firefoxExo
doesn't work for me with the button selector. I had to use [type="button"] to get it to work. Idk why.Kaleighkalends
@7wp, if u used scss/less it would look like button { ::-moz-focus-inner { border: 0; } }Devastate
@Lavender that solved this issue for me, even though I am not using bootstrap.css - thank you!Sunfast
How is this style applied inline?Mors
I suggest to add the pseudo class :-moz-focusringUme
in response to @Leavings the SELECTS are done like that: code select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #000; } Koziel
however this method is not advisable to be used in production as specified hereCurule
@JoshCrozier is there any other way to do it? since this method is not recommended for productionCurule
K
329

No need to define a selector.

:focus {outline:none;}
::-moz-focus-inner {border:0;}

However, this violates accessibility best practices from the W3C. The outline is there to help those navigating with keyboards.

https://www.w3.org/TR/WCAG20-TECHS/F78.html#F78-examples

Koval answered 2/10, 2010 at 5:1 Comment(11)
Thanks, this worked for me when the correct answer didn't. I must have been using the wrong selector.Floater
Thanks for this, will this remove it on links and buttons too?Matta
This one is best! The accepted answer is only for <button>, not <a> nor <input>Juliettajuliette
Wonderful answer, this applies to everything instead of just <button> as Bondye said.Outsail
Nice - this also works to prevent the dotted border/outline appearing for table cells once you've clicked on something within it.Acalia
Works for me with only :focus, didn't need to use ::-moz-focus-inner - btw: I used it on links (<a>)Quimper
Perfect in Mozilla Firefox 30 under Ubuntu (GNU/Linux).Curious
Works in FF 36.0.4 on Mac. These will become new standard lines in my reset css. Thx a lot.Maziemazlack
It's pretty weird that I had only this problem in FF Developper...Anyway thx!Storm
I'll second the note about this breaking accessibility. It is important to remember that not everyone can use a mouse, or see, or see well. That said, per the link (and common sense) hiding the outline only breaks a11y when it's done without ... an author-supplied visual focus indicator -- in other words, it's fine to replace the user-agent style with your own, as OP mentioned. Ideally it should be high-contrast.Gorgoneion
need to add important to override bootstrap.css :focus {outline:none !important;}Makeyevka
R
50

If you prefer to use CSS to get rid of the dotted outline:

/*for FireFox*/
    input[type="submit"]::-moz-focus-inner, input[type="button"]::-moz-focus-inner
    {   
        border : 0;
    } 
/*for IE8 and below */
    input[type="submit"]:focus, input[type="button"]:focus
    {     
        outline : none; 
    }
Repetend answered 25/10, 2009 at 23:0 Comment(1)
You don't need a unit on numbers that are zero. 0px can be replaced with just 0Two
B
44

The below worked for me in case of LINKS, thought of sharing - in case someone is interested.

a, a:visited, a:focus, a:active, a:hover{
    outline:0 none !important;
}

Cheers!

Backgammon answered 2/10, 2011 at 18:22 Comment(3)
Simply a { outline: none; } should be sufficient for links.Oni
here the !important did the trick, the other solutions didn't have that and didn't work. for me.Gantrisin
But often you should use a { outline: none; } with !important -> a { outline: none !important; }Tweeny
M
23
:focus, :active {
    outline: 0;
    border: 0;
}
Mars answered 27/6, 2010 at 23:11 Comment(1)
This wasn't specific enough, and I didn't want to use !important or target only a elements, so I found a good option to be body :focus, body :active { outline: 0; border: 0; } ::-moz-focus-inner { border: 0; }Tympanum
G
9

[Update] This solution doesn't work anymore. The solution that worked for me is this one https://mcmap.net/q/73723/-how-to-remove-firefox-39-s-dotted-outline-on-buttons-as-well-as-links

The answer marked as correct didn't work with Firefox 24.0.

To remove Firefox's dotted outline on buttons and anchor tags I added the code below:

a:focus, a:active, 
button::-moz-focus-inner,
input[type="reset"]::-moz-focus-inner,
input[type="button"]::-moz-focus-inner,
input[type="submit"]::-moz-focus-inner,
select::-moz-focus-inner,
input[type="file"] > input[type="button"]::-moz-focus-inner {
    border: 0;
    outline : 0;
}

I found the solution here: http://aghoshb.com/articles/css-how-to-remove-firefoxs-dotted-outline-on-buttons-and-anchor-tags.html

Gonion answered 24/9, 2013 at 22:17 Comment(1)
It's not working anymore :/ The solution that worked is this one https://mcmap.net/q/73723/-how-to-remove-firefox-39-s-dotted-outline-on-buttons-as-well-as-linksGonion
F
9

Tried most of the answers here, but none of them worked for me. When I realized that I have to get rid of the blue outline on buttons on Chrome too, I found another solution. Remove blue border from css custom-styled button in Chrome

This code worked for me on Firefox version 30 on Windows 7. Perhaps it might help somebody else out there :)

button:focus {outline:0 !important;}
Fukuoka answered 16/7, 2014 at 21:54 Comment(2)
Same thing here, this is the only solution working on FF 38.0.5Turnheim
Worked on Firefox 81 for Linux Mint.Gaynell
O
7

This will get the range control:

:focus {
    outline:none;
}
::-moz-focus-inner {
    border:0;
}
input[type=range]::-moz-focus-outer {
    border: 0;
}

From: Remove dotted outline from range input element in Firefox

Outfielder answered 9/11, 2017 at 6:19 Comment(1)
Perfect, Works in Firefox 72 on linux too!Teresita
P
6

There's no way to remove these dotted focus in Firefox using CSS.

If you have access to the computers where your webapplication works, go to about:config in Firefox and set browser.display.focus_ring_width to 0. Then Firefox won't show any dotted borders at all.

The following bug explains the topic: https://bugzilla.mozilla.org/show_bug.cgi?id=74225

Parliamentarian answered 16/9, 2008 at 11:6 Comment(4)
Thanks it working fine, but i have created so many links previously i never get this problem till now. but now i am in confused so what is the the reason previous to present ?Mateo
This is answer is now completely false. Setting the ::-moz-focus-inner {border:0;} as mentioned in several other answers works perfectly.Buzzard
@AndyM This answer does work. The solution presents in other answers is for CSS and only works for individual sites.Stately
The question asks how it can be done with CSS, and the answer says it can't be. That is false. It can be.Buzzard
S
6

There is many solutions found on the web for this, many of which work, but to force this, so that absolutely nothing can highlight/focus once a use the following:

::-moz-focus-inner, :active, :focus {
    outline:none;
    border:0;
    -moz-outline-style: none;
}

This just adds that little bit extra security & seals the deal!

Spanos answered 25/3, 2013 at 5:19 Comment(0)
I
6

Tested on Firefox 46 and Chrome 49 using this code.

input:focus, textarea:focus, button:focus {
    outline: none !important;
}

Before (white dots are visible )

input with white dots

After ( White dots are invisible ) enter image description here

If you want to apply only on few input fields, buttons etc. Use the more specific code.

input[type=text] {
  outline: none !important;
}
Imperfection answered 27/4, 2016 at 17:57 Comment(2)
The !important was needed for me to override Firefox's stylesheet. Cheers!Ladylove
Tried all the above solutions but none worked till I see this solution - ThanksCheeseparing
S
5

Simply add this css for select box

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

This is working fine for me.

Successive answered 13/1, 2017 at 9:42 Comment(0)
E
4

I think you should really know what you're doing by removing the focus outline, because it can mess it up for keyboard navigation and accessibility.

If you need to take it out because of a design issue, add a :focus state to the button that replaces this with some other visual cue, like, changing the border to a brighter color or something like that.

Sometimes I feel the need to take that annoying outline out, but I always prepare an alternate focus visual cue.

And never use the blur() js function. Use the ::-moz-focus-inner pseudo class.

Edmea answered 8/7, 2009 at 1:4 Comment(0)
J
4

In most cases without adding the !important to the CSS code, it won't work.

So, do not forget to add !important

a, a:active, a:focus{
    outline: none !important; /* Works in Firefox, Chrome, IE8 and above */
}


Or any other code:

button::-moz-focus-inner {
  border: 0 !important;
}
Judges answered 8/8, 2015 at 13:23 Comment(0)
A
3

You might want to intensify the focus rather than get rid of it.

button::-moz-focus-inner {border: 2px solid transparent;}

button:focus::-moz-focus-inner {border-color: blue} 
Alejandro answered 13/5, 2009 at 11:12 Comment(3)
@Matta a little late but, not having any style in focus state will mess with keyboard experience. you won't be able to know what's focused when you're pressing tab key.Lamellirostral
@Lamellirostral Yeah, I agree. But Firefox's outline is ugly especially when it is around a custom focus border.Matta
@Matta I completely agree with that. What we should do is provide our own styling for focus state rather than making elements being the same on said state.Lamellirostral
N
3
button::-moz-focus-inner { border: 0; }

Where button can be whatever CSS selector for which you want to disable the behavior.

Nugent answered 17/11, 2009 at 17:31 Comment(0)
S
3

If you have a border on a button and want to hide the dotted outline in Firefox without removing the border (and hence it's extra width on the button) you can use:

.button::-moz-focus-inner {
    border-color: transparent;
}
Sorosis answered 9/7, 2011 at 13:38 Comment(0)
L
3

Remove dotted outline from links, button and input element.

a:focus, a:active,
button::-moz-focus-inner,
input[type="reset"]::-moz-focus-inner,
input[type="button"]::-moz-focus-inner,
input[type="submit"]::-moz-focus-inner {
    border: 0;
    outline : 0;
}
Ledda answered 22/12, 2013 at 16:14 Comment(0)
T
3

The CSS code below works to remove this:

a:focus, a:active, 
button::-moz-focus-inner,
input[type="reset"]::-moz-focus-inner,
input[type="button"]::-moz-focus-inner,
input[type="submit"]::-moz-focus-inner,
select::-moz-focus-inner,
input[type="file"] > input[type="button"]::-moz-focus-inner {
    border: 0;
    outline : 0;
}
Tibetan answered 4/8, 2016 at 11:38 Comment(0)
D
2

It looks like the only way to achieve this is by setting

browser.display.focus_ring_width = 0

in about:config on a per browser basis.

Douce answered 16/9, 2008 at 11:8 Comment(0)
C
1

This works on firefox v-27.0

 .buttonClassName:focus {
  outline:none;
}
Citarella answered 30/12, 2013 at 4:47 Comment(0)
L
1

After trying many options from the above only the following worked for me.

*:focus, *:visited, *:active, *:hover  { outline:0 !important;}
*::-moz-focus-inner {border:0;}
Lilybelle answered 27/5, 2016 at 11:15 Comment(1)
Actually (in Firefox 77 at least), you only need: button:focus { outline: none !important } Or if you like me don't like !important, this works also to override Firefox styling: :root button:focus { outline: none }Binaural
E
1

Along with Bootstrap 3 I used this code. The second set of rules just undo what bootstrap does for focus/active buttons:

button::-moz-focus-inner {
  border: 0;    /*removes dotted lines around buttons*/
}

.btn.active.focus, .btn.active:focus, .btn.focus, .btn.focus:active, .btn:active:focus, .btn:focus{
  outline:0;
}

NOTE that your custom css file should come after Bootstrap css file in your html code to override it.

Ertha answered 9/6, 2016 at 5:24 Comment(0)
B
1

Yep don't miss !important

button::-moz-focus-inner {
 border: 0 !important;
}
Ballenger answered 30/3, 2019 at 17:36 Comment(1)
!important is not part of the answer here, and if your app needs it then you have bigger problems to solve than highlights around your buttons. Always strive to avoid !important.Jedda
B
0

You can try button::-moz-focus-inner {border: 0px solid transparent;} in your CSS.

Belabor answered 7/1, 2010 at 16:19 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.