4
votes

I have a list full of a imgs:

<ul>
<li><a href="#"><img src="test.png" /></a</li>
<li><a href="#"><img src="test.png" /></a</li>
<li><a href="#"><img src="test.png" /></a</li>
(...)
</ul>

When I click them in Firefox, there's dotted outline (who the heck invented that and why? so ugly!).

I want to get rid of them, but style "outlines" etc. doesn't seem to work, I've tried all of options below:

#ul li img:active {
    -moz-outline-style: none;
    -moz-focus-inner-border: 0; 
    outline: none;
    outline-style: none;
}     

#ul li img:focus {
    -moz-outline-style: none;
    -moz-focus-inner-border: 0; 
    outline: none;
    outline-style: none;
}

 #ul li img a:active {
        -moz-outline-style: none;
        -moz-focus-inner-border: 0; 
        outline: none;
        outline-style: none;
    }     

    #ul li img a:focus {
        -moz-outline-style: none;
        -moz-focus-inner-border: 0; 
        outline: none;
        outline-style: none;
    }
3
Can you add a screenshot of your problem in your question? - Abhinav Sarkar
"who the heck invented that and why? so ugly!" Accessibility. Because you need to indicate which element is focused when you are tabbing down the website with a keyboard. Don't just remove it with outline: 0 - think of an alternative for those users. - Yi Jiang
@Yi Jiang, that's what the anchor states are there for. A good developer should use a:active, a:focus, and optionally a:visited for accesibility - it doesn't always have to show an ugly outline. It works for tabbing too. Oh and I'm pretty sure it's turned off by default in all the other browsers. - Marko

3 Answers

12
votes

You need to apply the styles to the <a> tag (your latter two CSS rules are wrong because you've put the <a> tag inside <img>.

This works for me:

a:active,
a:focus {
  outline: none;
  -moz-outline-style: none;
}

Or, for only inside the element with ID ul (not the best name, by the way):

#ul a:active,
#ul a:focus {
  outline: none;
  -moz-outline-style: none;
}
8
votes
a:active,
a:focus {
  outline: none;
  -moz-outline-style: none;
}

works for me in FF22

4
votes

outline: 0 should do it and it should be applied on the <a> element, which is not actually a child of <img />. <img /> is a child of <a> so your css should read:

#ul li a {
    outline: 0;
}