jQueryでIE未対応のCSS3セレクタを補完

jQueryでIE未対応のCSS3セレクタを補完

jQueryは、もはやおなじみのJavaScriptの記述が簡素化できるJavaScriptライブラリです。jQueryは表XXのように、IEでサポートされていないCSS3セレクタの多くをサポートしています。CSS3がまだ勧告に至っていない過渡期にある現在、クロスブラウザな表示を目指すうえで押さえておきたいテクニックのひとつです。

表4:CSS3で追加されたセレクタのIE6~8およびjQueryの対応状況

パターン概要IE6IE7IE8jQuery
E[foo^="bar"]属性「foo」の値が「bar」と前方一致するE要素×○○○
E[foo$="bar"]属性「foo」の値が「bar」と後方一致するE要素×○○○
E[foo*="bar"]属性「foo」の値が「bar」と部分一致するE要素×○○○
E:rootドキュメントのルートにあるE要素×××‐
E:nth-child(n)n番目の子要素E×××○
E:nth-last-child(n)最後からn番目の子要素E×××‐
E:nth-of-type(n)兄弟関係にあるもののうちn番目のE要素×××‐
E:nth-last-of-type(n)兄弟関係にあるもののうち後ろからn番目のE要素×××‐
E:last-child最後の子要素E×××○
E:first-of-type兄弟関係にあるもののうち最初のE要素×××‐
E:last-of-type兄弟関係にあるもののうち最後のE要素×××‐
E:only-child兄弟関係の要素がない子要素E×××○
E:only-of-typeある要素内で唯一の要素E×××‐
E:empty子要素(テキストノードを含む)を持たないE要素×××○
E:target参照URIのターゲットであるE要素×××‐
E:enabled有効にされているUI要素E×××○
E:disabled無効にされているUI要素E×××○
E:checkedチェック状態のUI要素E(例えば、ラジオボタンやチェックボックスなど)×××○
E:not(s)セレクタs以外のE要素×××○
E ~ FE要素の後に出現するF要素×○○○

jQueryを利用するには、公式サイト(http://jquery.com/)から、jQueryファイルをダウンロードし、scriptタグから参照して利用するのが一般的です。あるいは、Google Code(http://code.google.com/intl/ja/apis/libraries/devguide.html#jquery)で提供されているjQueryファイルを利用する方法も普及しています。

[リスト08]Google Codeで提供されているjQueryファイルを参照

  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>

それとは別に、自分のJSファイル(例ではmy.js)も次の書式で作成しておきましょう。

[リスト09]my.jsの中身

  $(function(){
  // ここにコードを書いていく
  });

前回のサンプルで紹介したlast-child擬似クラスはIE6~8に対応していないため、IEで表示させると最後のli要素の区切り線が非表示になりませんでした。例として、これを非表示にするコードを記述してみましょう。次のように、セレクタ(ul#nav li:last-child)、プロパティ(border-right)、値(0)、という具合に、CSSと似たような感覚で指定できます。

[リスト10]my.jsの中身:CSSコード記入例

  $(function(){
  $("ul#nav li:last-child").css("border-right", "0");
  });

最後に、HTMLヘッダ内のscriptタグで、jQueryと自作の両方のJSファイルを読み込むよう指定します。読み込む順番は、まずjQuery、次に自作JSファイルを指定します。

[リスト11]各JSファイルを読む込む:jQuery、自作JSの順で

  <script type="text/javascript" src="js/jquery.js"></script>
  <script type="text/javascript" src="js/my.js"></script>

これで準備が整いました。IE8で表示させると末尾の区切り線が非表示になっているのを確認できます。

3

図5:IEでの表示例:最後のli要素の区切り線が非表示になっているのが確認できる

またjQueryには、jQueryプラグインという追加ライブラリもあります。これもクロスブラウザな表示を目指すうえで便利なので紹介しておきます。例えば、CSS3のborder-radiusのような角丸表現は、jQuery Corner(http://www.malsup.com/jquery/corner/)というプラグインを利用することで簡単に実装できます。プラグインを利用する場合は、それぞれのJSファイルを、jQuery、プラグイン、自作JSの順で読み込むよう指定します。

[リスト12]各JSファイルを読む込む:jQuery、プラグイン、自作JSの順で

  <script type="text/javascript" src="js/jquery.js"></script>
  <script type="text/javascript" src="js/jquery.corner.js"></script>
  <script type="text/javascript" src="js/my.js"></script>

早速、角丸のサンプルをIEでも表示できるように指定してみましょう。my.jsに次のように記述します。

[リスト13]jQueryプラグイン「jQuery Corner」で角丸を実現

  $(function(){
  $("#sample5").corner("25px");
  });

IEで見てみると、美しい角丸表現を確認できます。

3

図6:IEでの表示例:「jQuery Corner」で角丸を実現

以上、CSS3をサポートしていないIEで、似たような表現を可能にする方法を紹介してきました。IEのfilterプロパティは、独自拡張とはいえ、画像もJavaScriptも使わない方法なので、画像表示の設定がオフの場合であっても、他のブラウザと同じ見た目をほぼ再現できる点がメリットです。

また、jQueryを使えば、簡単にCSS3の機能をIEでも表現することができますが、だからと言って、最初からすべてをこれに頼るのはお勧めできません。HTMLとCSSで指定できる部分はきちんとそれを利用し、JavaScriptには、動的な部分をまかせるのが基本です。JavaScriptを無効にした状態であっても、不自然さが残らない工夫をすることが大切です。

サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30