O'Reilly

CSS :target

By on  

One interesting CSS pseudo selector is :target.  The target pseudo selector provides styling capabilities for an element whose ID matches the window location's hash.  Let's have a quick look at how the CSS target pseudo selector works!

The HTML

Assume there are any number of HTML elements with a given ID:

<h2 id="section1">Section 1</h2>

<h2 id="section2">Section 2</h2>

Take note of the ID values of the elements above -- to trigger the :target pseudo selector, the window.location.hash will need to match.

The CSS

The :target pseudo selector may be applied to classes, tags, or any other selector:

/* would apply to all targetted elements */
:target {
	color: #000;
}

/* applies to H2's */
h2:target {
	color: #f00;
}

When the window.location.hash is "section2", the element color will become red and underlined.  Simple!  Much like you can animate elements upon hover or even between media queries, you could even animate the element when targeted; Chris Coyier provides an excellent example of target animating.

:target is neat but I haven't seen it abused to do anything groundbreaking.  For a site that doesn't strive for ultimate dynamism, however, the :target pseudo selector could add a bit of native class when using window hashes.

O'Reilly Velocity Conference
Save 20% with discount code AFF20

Recent Features

  • fetch API

    One of the worst kept secrets about AJAX on the web is that the underlying API for it, XMLHttpRequest, wasn't really made for what we've been using it for.  We've done well to create elegant APIs around XHR but we know we can do better.  Our effort to...

  • CSS 3D Folding Animation

    Google Plus provides loads of inspiration for front-end developers, especially when it comes to the CSS and JavaScript wonders they create. Last year I duplicated their incredible PhotoStack effect with both MooTools and pure CSS; this time I'm going to duplicate...

Incredible Demos

Discussion

  1. Hi David,

    I think one of the reason that make this technique hard to use in large websites could be the unability to create multi-level lists with this :

    Example :

    Four links in 2 categories
    – #category1-link1
    – #category1-link2
    – #category2-link1
    – #category2-link2

    Category 1

    Link1
    Link1

    Category 2

    Link1
    Link1

    Then, this way you can style the 2nd-level links (#categoryX-linkY), but how can you know how to style #category1 and category2? You can’t. Because #category1:target and #category2:target never happen.

    The only solution I see is parent selectors but it’s not even implemented in browsers yet.

  2. First thing for :target use that comes to mind “tabs” nothing else…

  3. SVG stacks use :target to great effect. Too bad they’re not more widely useful yet.

  4. Another valid use I’ve come across is accordion widgets.

  5. Yin

    Not sure if I can think of a good use for this yet, but it’s great to read about it. I think the code:

    h2:target {
    color: #f00;
    }

    should be

    h2:target {
    background: #f00;
    }

  6. very good idea!
    Even for dynamic pages.

    http://jsfiddle.net/b3YEk/17/

  7. The only problem right now is bad support in IE, which doesn’t remove or re-add the pseudo-class when you use back and forward navigation.

  8. Joe

    I was aware of :target, but this has prompted me to use it for a great use case: help docs.

    Now I can just link people to the ID of a specific part of a help guide and it will automatically highlight the relevant passage.

    Perfect.

  9. @DrDeath, quite limited imagination. How about a FAQ Page that has all the questions first and the answers at the bottom? If there are many, using :target to highlight the answer for the question that you clicked would make it easy, since several answers would be shown on the screen at the same time.

    • Wayne

      @Gabriel Rodriguez, your imagination may well be a tad limited too. Instead of having all the answers displayed and highlighting the relevant ones, why not display just the relevant answer? (Mind you, I haven’t actually tested this theory of mine yet. But it seems like it should work, unless I’ve misunderstood how :target functions.)

  10. @Gabriel Rodriguez i think accordion better for faq page

  11. Using :not(:target) gives you even more flexibility, because you can also style the elements that are not :target, and even apply transitions to them :)

    http://jsfiddle.net/SchizoDuckie/fzZ9d/

    • Wayne

      Sweet demo! Thanks for sharing.

      Incidentally, not that it would be appropriate for that demo (because it definitely wouldn’t), did you know that setTimeout can be used without a second parameter? In other words, it can be used just to set the execution order of functions. (Only recently did I discover that little tidbit.)

  12. When do you guys expect Internet Explorer will have full support for these kind of elements?

    • SchizoDuckie

      Probably somewhere between 2020 and 2030. And then you’ll still have to wait for adoption rate…

  13. Leandro

    Hey SchizoDuckie, looks like you’re wrong! haha (after a long time) http://caniuse.com/#search=%3Atarget

    internet explorer finally over, microsoft will implement your new browser, now, the things go more faster

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • Access Mac Camera by Command Line

    With all of my recent command line tutorials, I've really gotten excited about the shell's simplicity and realized the true power of using the underlying technology of pretty UIs.  Since I work from home, I spend a lot of time on video calls, so when...

  • Open Files from Command Line on OS X

    I'm as much of a fan of application UIs as anyone else but I'm finding myself working more and more from the command line lately.  Much of that is becoming obsessed with media manipulation but I'm forcing myself to use less UIs so that I...

  • Get Stock Quotes From Command Line

    When I conned my way into my first professional programming gig, I didn't really think much about money -- just that I was getting my foot in the door.  But as my career has gone on, I've been more aware of money, investing, and retirement.  I've recently...

  • Geolocation API

    One interesting aspect of web development is geolocation; where is your user viewing your website from? You can base your language locale on that data or show certain products in your store based on the user's location. Let's examine how you can...

  • Create an Image Preview from a Video

    Visuals are everything when it comes to media.  When I'm trying to decide whether to watch a video on Netflix, it would be awesome to see a trailer of some kind, but alas that isn't available.  When I'm looking to download a video on my computer,...