Sharpen Your Site by Removing Unwanted Link Border Outlines

Post #560 categorized as Presentation, last updated on Jun 11, 2008
Tagged with css, design, images, links, tips, tricks, usability

Lately I have noticed several sites that display those unsightly dotted outlines on high-profile link elements. Typically, these link outlines plague various header elements such as banner images, navigational links, and other key features. This behavior frequently haunts highly graphical site designs and is often associated with various image replacement methods that position the original anchor text offscreen, generally far beyond the left edge of the browser window. When visible, such presentations display a ghastly, four-sided dotted border that wraps the linked element and then continues to stretch to the left-hand side of the browser window. Here are a few examples of live websites demonstrating this distracting behavior 1 (btw, no offense meant to any of these sites — they are all great — they just happen to provide good examples!):

[ Thumbnail: Link Outline Example 01 ]
RudeWorks

[ Thumbnail: Link Outline Example 02 ]
GimmeSome Tune (at the Apple Store)

[ Thumbnail: Link Outline Example 03 ]
WordPress Login Screen (pre-2.5)

[ Thumbnail: Link Outline Example 04 ]
PhotoMatt (previous design)

[ Thumbnail: Link Outline Example 05 ]
GadgetTrak

[ Thumbnail: Link Outline Example 06 ]
Perishable Press (Jupiter Theme)

A Plain and Simple Problem

The dotted outline/border issue demonstrated in each of these examples is an artifact of the browser’s (Firefox, in this case) default style for linked elements upon gaining focus. To see this effect, disable the stylesheet of any web page and tab through the links. As you navigate through the document, each focused link will appear surrounded on all four sides with a dotted border, according to the browser’s default styles.

With CSS applied, the outline border of indented, block-level links will surround both the linked element and the entire area between the block element and the browser window. Given that this behavior generally accompanies highly specific, rigorously designed header layouts, I am surprised that more designers don’t notice the issue (or simply don’t bother to fix it), especially given the ease of the solution..

A Quick and Easy Solution

Fortunately, the solution to this unwanted behavior resides in a simple bit of CSS. Depending on your design, there are different ways to approach the removal of unwanted outlines. If you are into CSS reset styles, then you may want to begin your design by neutralizing all focus outlines entirely:

* :focus { outline: 0; }

If you decide to reset all focus outlines in this way, remember to build them back up for usability purposes and according to your needs. Some sort of distinct, clear focus style is especially important for users that depend on tabbed browsing to navigate web documents.

If, on the other hand, you prefer to remove the focus border only for a single (problematic) element, replace the wildcard operator in the CSS rule above with something more specific. For example, if your markup looks like this:

<div id="header">
	<a href="http://domain.tld/" title="The swellest banner image of them all">
		<img src="http://domain.tld/path/image.png" alt="[ Something Swell ]" />
	</a>
</div>

..and you wanted to remove an unsightly focus border from the linked image, you could target that specific element and do the job like so:

div#header a:focus, div#header a:active { outline: 0; }

..or simply:

div#header a { outline: none; }

If you are also concerned with older versions of Firefox and Mozilla, you could nuke ‘em all with this outline-destroying death-blow:

div#header a:focus, div#header a:active {
	outline: 0 none;
	-moz-outline: 0 none;
	}

There are, of course, many ways to go about targeting specific elements and removing link outlines using CSS, however the point here is that it is a very simple thing to prevent those amateur-looking focus borders from stretching all the way across the screen, especially when the link itself constitutes some smaller, well-defined area.

CUL8R

Anyway, that’s a wrap for this fine CSS tutorial. Hopefully this information is helpful for those wanting to sharpen their site for the more critical visitors among us. As always, thank you for your generous attention!

Resources

Subscribe to Perishable Press


37 Responses

TopLeave a comment

[ Gravatar Icon ]

#1Eric

Most excellent tip. Those dotted outlines are really annoying sometimes.

I start out most of my sites with some form of reset. I will now be including * :focus { outline: 0; }
Thanks!
-Eric

[ Gravatar Icon ]

#2Perishable

My pleasure, Eric — thanks for the positive feedback! :)

[ Gravatar Icon ]

#3RUDE

Hi man, thanks for using RUDEWORKS as an example.

I always make the same comment when I see articles that metion that “outline: 0″ fix. In my case It should be ok to remove that focus lines (in fact, I use it for the search input, so Safari doesn’t show those ugly blue lines) but you should mention that those dotted lines are there for a reason: keyboard navigation.

I said that for RUDEWORKS should be ok to remove them because it’s your problem if you don’t use a mouse. But it could carry even legal problems if you remove that outline from institutional or government sites.

Great article btw ;-)

[ Gravatar Icon ]

#4Perishable

RUDE, your site rocks, man — no disrespect intended for using it as an example of hideous link outlines ;)

Good points about keyboard navigation. As mentioned in the article, global disabling of link outlines is acceptable so long as care is taken to rebuild key elements as necessary, according to the purposes of the design. For highly specific graphic/visual designs, where inherent CSS design knowledge is important, I think it might be a good idea to clean things up by removing those awkward, stretching link borders.

Thank God I don’t run a government site! ;)

[ Gravatar Icon ]

#5Jordan Gray

Those over-sized outlines were the bane of my life when I first discovered image replacement—nice article on removing them! I’m especially glad that you covered the need to replace them with something. Messing with a fairly fundamental UI behaviour is a powerful tool, and as we learned from Spiderman: With great power comes great responsibility.

The subtle highlight used on this site is nice. An alternative for the virtuously lazy is to remove outlines for the :active pseudoclass, and not :focus; this way, the outline won’t appear when you click on a link, but is still visible for those using keyboard navigation.

[ Gravatar Icon ]

#6Ryan Williams

Does this also work for Internet Explorer 6? I can’t really test it as the alpha build I’m using on Vista loves to crash when you drag whilst holding down the left mouse button.

And yes, care should always be taken when doing this. Doing it on text links and whatnot is usually fine as it just shows the other :active styling (eg: background colour, text colour) upon each tab, but images are more tricky.

Indeed, navigating between several button graphics as a top navigation could be almost impossible depending on how you implement the rollover/highlight effect. Pure CSS rollovers are obviously the answer here as they’ll make use of :active. And if you have no rollover/highlight effect at all… make one. ;)

[ Gravatar Icon ]

#7Perishable

@Jordan: Certainly have to agree with the Spider-Man quote, especially where CSS and usability are concerned! Excellent tip about only removing the outlines for :active and not :focus. I will definitely be implementing that method in my next design. Thanks Jordan! :)

[ Gravatar Icon ]

#8Perishable

@Ryan: No, I don’t think Internet Exploder supports the infamous CSS outline property. (Here is an excellent summary of browser support.) The good news is that IE8 will provide support for outline and a whole host of other CSS-2.1 properties. In the meantime, there are JavaScript methods for coercing pre-8 versions of IE to remove unwanted outline borders, but something tells me it just isn’t worth it.. ;)

[ Gravatar Icon ]

#9Ken Westin

Hey thanks for using GadgetTrak.com as an example…heh wouldn’t have thought about trying to find a fix otherwise, just added your fix to the site.

Thanks

Ken Westin
GadgetTrak Founder/CEO/Chief Web Moneky

[ Gravatar Icon ]

#10Perishable

Happy to help, Ken! Your site is looking much better! Also, thanks for all the work you do over at GadgetTrak.com. It’s an excellent service that is much-needed in today’s crazy klepto culture.
Regards,
Jeff

[ Gravatar Icon ]

#11bez

Hey,

thanks for the tip, great stuff!
though I have a “minor” issue
with ie6,
it seemed that these nasty
dotted lines are gone but the minute I tab my menu the lines
come back and stay there even
if I only click the mouse.

as long as I don’t tab they don’t
show up but the minute I do they come back.

I used this rule at the top of
my style sheet:

* :focus { outline: 0; }

it is only happening with ie6.
any ideas?

again thanks for this article!

Bez

[ Gravatar Icon ]

#12Perishable

Hi bez, unfortunately IE6 doesn’t support the outline property. As far as I know the only solution is to either use JavaScript to remove the outlines or else use a different method (i.e., no indent) for the link. For an excellent summary of nine(!) different image-replacement techniques, check out CSS Tricks excellent article, Nine Techniques for CSS Image Replacement.

[ Gravatar Icon ]

#13Bez

Thanks for the quick replay Perishable, I should have known that
ie6 is useless :(

Thanks for the help anyways,

One day… one day I will tame
this rebel browser!!!

[ Gravatar Icon ]

#14Perishable

I feel your pain, Bez — we all feel your pain! ;)

[ Gravatar Icon ]

#15ZeSev22

THANKS A BUNCH!!!!

[ Gravatar Icon ]

#16ZeSev22

Sweeeet!
I have been looking all over the web for the fix to this VERY annoying outline and just as I was ready to give up, I found your site.
Thanks dude!

[ Gravatar Icon ]

#17Perishable

My pleasure, ZeSev22 — happy to help! :)

[ Gravatar Icon ]

#18The Iceman

Great solution. I use a little ’stretcher’ on our website to expand text and collapse text. I was very happy to find this to eliminate the outlines especially using firefox.

Thanks again… Appreciate the easy method of getting rid of that stuff!

[ Gravatar Icon ]

#19Perishable

Excellent, Iceman — glad to be of service! :)

[ Gravatar Icon ]

#20Branden

This saved me! Thanks for this. I had a hard time finding out what the heck those little lines were called in the first place. Thanks again for the simple solution to removing these for my sifr fonts!

[ Gravatar Icon ]

#21Perishable

My pleasure, Branden — thanks for the feedback!

[ Gravatar Icon ]

#22dsf

thanks for this tip, been searching for something like this

* :focus { outline: 0; }

for a while now. great trick, nothing to say, just one more time thanks.

[ Gravatar Icon ]

#23dsf

great css tip, thanks.
however using -moz-outline: 0 none;
will break any w3c validations, i’m pointing this out just as a warning

[ Gravatar Icon ]

#24fragrant.monkey

unfortunately the only method i’ve ever found that works in ie is by adding the following to every link in the markup… (i know, for shame…)

onfocus="if(this.blur)this.blur()"

eg.

<a href="info.html" rel="nofollow">

[ Gravatar Icon ]

#25Jeff Starr

Thanks for the tip, fragrant.monkey :) Gotta love IE!

[ Gravatar Icon ]

#26Michael

I came across this website when i was looking for an IE solution for the borders. The *:focus is very i already used this.

I dont like using js to swap to blur for ie to fix this so heres a solution you guys might like.

I use the * syntax hack in my stylesheet set the border to none fixed it.

I was in need of a border though and i was using a bg so i fixed it like this:

*border:none;
*background-repeat: none;
*background-position : 2px;
*padding: 2px;

My background color was set to white so this added a white border of 2px for me.

Hope this helps for some of you out.

Greetz FaitH

[ Gravatar Icon ]

#27Jeff Starr

Thanks for sharing this, Michael; I look forward to testing it on older versions of IE. The star-property hack affects all IE including 7, so I wonder if the underscore hack would be a better way to go..? IE7 supports the CSS method provided in the article.

[ Gravatar Icon ]

#28anton

HEY! you rock. thanks you for sharing, this was giving me a brain ache.

[ Gravatar Icon ]

#29Jeff Starr

My pleasure, anton — happy to help! :)

[ Gravatar Icon ]

#30teddY

Hey Jeff, I was browsing through your tutorials when I stumbled upon this ;) I just realised that it is actually possible to remove the outlines. They are obstructive and are apparent especially when designers use the CSS text-indent property. When I scrutinized my CSS reset stylesheet (thanks for sharing your tips on CSS resets in your other post) I realised that it is the outline property that keeps the outline from appearing. I never knew its significance of that property until you’ve written about it here. It’s really handy!

[ Gravatar Icon ]

#31Jeff Starr

@teddY: Excllent! Glad you found the information useful! Btw, I also recently posted some JavaScript methods for removing the focus outlines in IE6 as well. Using both a JavaScript method and the CSS method is a great way to remove the outlines in almost all browsing cases; that is, only IE6 users without JavaScript will see the unwanted outlines. Thanks for the comment!

[ Gravatar Icon ]

#32August Klotz

I have also seen that using overflow:hidden while using text-indent is a better solution for eliminating the unwanted “stretching” part of the outline while keeping the outline focus border wrapped tightly around the target link element. Works a little better for usability, blah blah blah.

[ Gravatar Icon ]

#33Zaenal - Lokamaya

Hi,

I’m looking for this for long time. And usually I’m using Javascript “this.blur()” to avoid outline. I really hate using this technique.

But this CSS solve the problem. Big thanks…

@zaenal

[ Gravatar Icon ]

#34Jeff Starr

@Zaenal - Lokamaya: My pleasure — thanks for the feedback! :)

[ Gravatar Icon ]

#35mtness

Hi there again!

thank you for that beautiful insigth, I have searched for this a very long time!

Came here through:
http://www.google.com/search?q=javascript+remove+dotted+border+hightlight

Kind regards,

mtness

[ Gravatar Icon ]

#36Jeff Starr

Always a pleasure to hear from you, mtness :)

Stay well,
- Jeff

Trackbacks / Pingbacks

  1. kindragoehler.com » Tip of the Day

Share your thoughts..

TopRead official comment policy

The rules are simple. Comment intelligently. Stay on-topic. Don’t spam! Suspected spam will be deleted. Use your real name or nickname, not a site name or business name. Using a site name or business name is a good way to get your link or comment removed. Certain comments are moderated; if your comment does not appear after several days, or if you wish to comment privately, contact me. Also, by posting a comment, you grant this site a perpetual license to reproduce your comment, name, and website URL. Lastly, you may use basic HTML markup, but please do not use <pre> tags. Instead, wrap your code with <code> tags. Use a new set of <code> tags for each code term or phrase, as well as for each individual line of code (i.e., multiple lines of code require multiple code tags). Please see the complete comment policy for more information.