Header Menu

CSS で外部リンクにだけアイコンを表示

当サイトの各カテゴリーごとのエントリー数を見ていたら、(X)HTML / CSS に関するエントリーがとっても少ないことに気がついたので、CSS ネタでも書いてみますよ。

で、今回はエントリーなんかでリンクを張るときに、当然外部サイトへのリンクと、自分のサイト内へのリンクが混在することになるかと思いますが、このとき外部リンクだけに 「外部リンクですよ」 とわかるようなアイコンを表示させてみたいと思います。

まずは、アイコンを用意しますね。こんなやつ↓

あとは CSS を書くだけですが、ここは 2段階に分けて考えます。どういうことかというと、まずはすべてのリンクにアイコンをつけてしまって、そのあとで、サイト内リンクのみアイコンを消すといった流れです。

ではまず、すべてのリンクにアイコンを表示させるとこから。

a[href^="http:"]:after,
a[href^="https:"]:after {
     content:url(/img/view.gif);
     vertical-align:middle;
     margin:0 2px;
     }

属性セレクタを利用して、href 属性の値に 「http:」、「https:」 を含んだ 「a」 要素にスタイルを指定します。「:after」 を使うことで、該当するリンクタグの後ろに先ほど用意したアイコンを表示。アイコンには前後に 「2px」 のマージンをつけています。

実際は適用範囲を絞る為にセレクタを使って、特定のブロック内のみにスタイルが適用されるようにしておいたほうがいいです。

これだけでも、エントリー内でサイト内リンクを記述する時は絶対 URI は使わず、相対パス、絶対パスでしか記述しませんなんて場合は外部リンクにのみアイコンがつきます。でも、たまに絶対 URI でサイト内リンクを書くとか、MT のようなツールを使っていて、 システムが自動的に書き出す内部リンクが絶対 URI になってしまっているなんて場合は、上記に続けて次のように記述しておきます。

a[href^="http://example.com/"]:after {
     content:"";
     margin:0;
     }

「http://example.com/」 の部分には自サイトの URI に変更してください。これで href 属性の値に自サイトの URI が含まれている場合は、「content:"";」 とすることで先ほどのスタイルを上書きしているというわけです。

ちなみに、IE は最新の IE7 でもセレクタへの対応がイマイチで、「:after」 には未対応の為、これを記述しても何も起こりません。Firefox 等、CSS セレクタにしっかりと対応したブラウザでのみ使える方法です。

下のリンクは今回のサインプルです。Firefox 等で見てみれば、外部リンクにのみアイコンがついているはず。もちろん、XHTML ソースにはアイコンの記述はないのですっきり。

デジパ株式会社 (外部リンク)
WWW WATCH (内部リンク・絶対 URI にて記述)
WWW WATCH (内部リンク・絶対パスにて記述)

Add to Bookmarks
  • Hatenaブックマークに追加
  • del.icio.usに追加
  • POOKMARK Airlinesへ追加
  • livedoorクリップへ追加
  • ニフティクリップへ追加
  • Buzzurlにブックマーク
  • newsingへ投稿
  • Choixへ追加
  • Furlへ追加
  • Blinklistへ追加
  • Redditへ追加
Advertisement

comment & trackback

TRACKBACK URL : http://hyper-text.org/cms/mt-tb.cgi/288

trackback to this entry

CSSで外部リンク用アイコンを設定するときの悩み

このブログでも、サイト内リンクと外部リンクを区別するために、外部リンクにだけアイ...

from かたつむりくんのWWW, April 21, 2008 - 07:02.

comments

ぽっぽや, November 15, 2006 - 19:00.

質問なのですが、
この属性セレクタ([href^="http:"])で ^ を使うのはどのような意味があるのでしょうか?
もしよろしければお教えください。

ちょっと分からなかったので。。。

WWW WATCH, November 15, 2006 - 22:26.

ぽっぽやさんコメントありがとうございます。

えっと、

E[foo^="bar"]

という属性セレクタは Selectors Level 3 (Last Call) にて定義されている正式なセレクタなので、、という理由で答えになってますか?

詳しくは W3C の W3C の該当ページを見ていただければわかるかと。

http://www.w3.org/TR/css3-selectors/#selectors

post your comment

comment form

* All Fields Required.

RSS Feed
  • Add to Google Reader
  • Add to My Yahoo
  • Add to netvibes
  • Subscribe in NewsGator Online
  • Subscribe in livedoor Reader
  • Subscribe in Hatena RSS Reader
  • Subscribe in Bloglines
  • Feed Count by FeedBurner