モダンブラウザでも使えるCSSハック18選
有限会社タグパンダ喜安 亮介
2009/12/16
モズエニーリンクハック
- Moz Any Link Hack
IE 7やFirefox、Mac OS XのIE 5に適用します。使用方法は、IE7、Firefox、Mac OS XのIE 5に適用させたいセレクタの後に「, x:-moz-any-link, x:only-child」を記述するだけです。「moz」が付いているのは、Mozillaの独自拡張です。
独自拡張なので、W3C CSSバリデーションには通らず、文法的には正しくありません。「-moz-any-link」というのは「:link」「:visited」にマッチします。Firefox 3にも対応しています。
■ 構文
p, x:-moz-any-link, x:only-child{color:#f00;}
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample10</title>
<style type="text/css">
p, x:-moz-any-link, x:only-child{color:#f00;}
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
モズドキュメントハック
- @Moz Document Hack
Firefoxに適用します。使用方法は、「@-moz-document url-prefix() { } 」の「{ }」の中に、Firefoxのみに適用させたいスタイルを記述するだけです。
「moz」と付いているのはMozillaの独自拡張なのですが、「@-moz-document url-prefix(http://example.com)」のように記載すると、そのURLで始まるページにスタイルが適用されます。「()」内を空にすることで現在のページに適用しています。Firefox 3にも対応しています。
W3C CSSバリデーションには通らず、文法的には正しくありません。
■ 構文
@-moz-document url-prefix() { p { color: #f00; } }
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample11</title>
<style type="text/css">
@-moz-document url-prefix() { p { color: #f00; } }
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
コメントモズエニーリンクハック
- Comment Moz Any Link Hack
Firefoxに適用します。Firefox、Mac OS XのIE 5に適用させたいセレクタの前に「html>/**/body」を記述し、「, x:-moz-any-link」を記述することで使用できます。
IE 7以外に適用されるコメントハックと、Mozillaの独自拡張を併記することにより、Firefox 3.5、Mac OS XのIE 5に適用させています。現状、制作案件でMac OS XのIE 5に対応させる必要はなくなってきているので、このハックを使う必要性は少ないと思います。Firefox 3にも対応しています。
W3C CSSバリデーションには通らず、文法的には正しくありません。
■ 構文
html>/**/body p, x:-moz-any-link{color:#f00;}
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample12</title>
<style type="text/css">
html>/**/body p, x:-moz-any-link{color:#f00;}
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
■ 備考
下記のように「x:default」を追記しても同じ挙動です。これも、W3C CSSバリデーションは通りません。
html>/**/body p, x:-moz-any-link, x:default { color: red; }
xmlns属性セレクタハック
- Xmlns Attribute Selector Hack
Opera 10に適用します。使用方法は、「html[xmlns*=""] body:last-child」を、セレクタの前に記述するだけです。
「html[xmlns*=""] 」は、「xmlns属性を持ち、1つ以上その値を含んでいるものに適用する」という意味で、「:last-child」は、「最後にある子要素に適用する」という意味です。
また、Safari 3では利用できていましたが、バージョンアップに伴い、Safari 4では利用できなくなったようです。W3C CSSバリデーションには通らず、文法的には正しくありません。
■ 構文
html[xmlns*=""] body:last-child p{color:#f00;}
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample13</title>
<style type="text/css">
html[xmlns*=""] body:last-child p{color:#f00;}
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
ウェブキットハック
- WebKit Hack
レンダリングエンジンの「WebKit」を利用しているWebブラウザ、例えば、SafariやGoogle Chromeに適用します。使用方法は、Safari、Google Chromeに適用させたいセレクタを「@media screen and (-webkit-min-device-pixel-ratio:0){}」で囲むだけです。
一応「()内の条件(最小のピクセルが0の場合)」が当てはまる場合のみ適用させるという意味になっていますが、これだと全部該当するので、基本的には「WebKit」を用いているかどうかで、対応Webブラウザが決まります。
Safari 3にも対応しています。W3C CSSバリデーションには通らず、文法的には正しくありません。
■ 構文
@media screen and (-webkit-min-device-pixel-ratio:0){
p{
color:#f00;
}
}
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample14</title>
<style type="text/css">
@media screen and (-webkit-min-device-pixel-ratio:0){
p{
color:#f00;
}
}
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
Mac IEスターハック
- Mac IE Star Hack
Mac OS XのIE 5に適用します。使用方法は、Mac OS XのIE 5のみに適用させたいセレクタの前に、「* html>」を記述するだけで、使用できます。
「スターハック(* html)」と子セレクタを組み合わせたハックです。スターハックを適用するものの中で子セレクタに対応しているのがMac OS XのIE 5のみなので、それだけに適用できます。
■ 構文
* html>body p{
color:#f00;
}
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample15</title>
<style type="text/css">
* html>body p{
color:#f00;
}
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
インポートハック
- インポートシングルクォーテーションハック(@import Single Quotes w/o Whitespace)
Mac OS XのIE 5には適用されません。使用方法としては、読み込みたい.cssファイルをシングルクォーテーションで囲むだけで適用します。このハックはIE 5.5以下の古いWebブラウザの@importの認識の違いを利用し振り分けています。
対象Webブラウザを見れば分かると思いますが、2009年現在では、主要なほとんどのWebブラウザで適用しています。従って、このハックを使用する機会は少ないでしょう。さらに、外部CSSも<link>属性を使って読み込むため、このハックを使用することはないと思われます。
■ 構文
@import'style.css';
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample16</title>
<style type="text/css">
@import'style.css';
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
■ 備考
そのほか、下記の書き方でも挙動は同じです。
- インポートダブルクォーテーションハック(@import Double Quotes w/o Whitespace)
@import"style.css";
- インポートスペースシングルクォーテーションハック(@import Single Quotes w/o url())
@import 'style.css';
- インポートシングルクォーテーションハック(@import Single Quotes w/ url())
@import url('style.css');
また、下記のような書き方だと、すべてのWebブラウザで適用してしまうため、ハックとして機能しません。
- インポートスペースシングルクォーテーションハック(@import Double Quotes w/o url())
@import "style.css";
- インポートノークォーテーションハック(@import No Quotes w/ url())
@import url(style.css);
- インポートシングルクォーテーションハック(@import Double Quotes w/ url())
@import url("style.css");
メディアタイプ混在ハック
- @media with Media Type in Mixed Case
Mac OS XのIE 5には適用されません。使用方法は、Mac OS XのIE 5に適用させたくない部分を「@media all {}」で囲うだけです。
こちらも古いタイプのWebブラウザを振り分ける際に使用していましたが、2009年現在の主要なWebブラウザではほとんど適用しているため、あまり実用的ではありません。Mac OS XのIE 5もサポートが終了しているので、こちらを考慮する機会は減っています。
■ 構文
@media all {
p {
color: #f00;
}
}
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample17</title>
<style type="text/css">
@media all {
p {
color:#f00;
}
}
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
ホーリーハック、バックスラッシュハック
- Escaped Comment End
Mac OS XのIE 5には適用されません。使用方法は、Mac OS XのIE 5に適用させたくない部分の最初に「/* \*/」を記述し、最後に「/* */」を記述するだけです。
Mac OS XのIE 5のコメントアウトの解釈の違いを利用したハックです。Mac OS XのIE 5はコメントアウトの終了(*/)の前に「\」マークを記述すると、コメントアウトが終了していないと認識するため、その中に記述している指定までコメントアウトされてしまいます。よって、Mac OS XのIE 5とそのほかのWebブラウザを振り分けることが可能です。
■ 構文
/* \*/
p {
color: #f00;
}
/* */
■ コーディングサンプル(←クリックすると、実際にサンプルがWebブラウザで見られます)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample18</title>
<style type="text/css">
/* \*/
p {
color: #f00;
}
/* */
</style>
</head>
<body>
<p>対応Webブラウザではテキストが赤色で表示されます。</p>
</body>
</html>
■ 備考
以上のことを逆に応用すると、Mac OS XのIE 5のみに適用することも可能です。「/* \*/」の後ろに「/*/」を付けると、Mac OS XのIE 5のみに適用します。
/* \*//*/
p {
color: #f00;
}
/* */
下記のように書くと、IE 8とMac OS XのIE 5のみに適用します。
/*\*/ html:\66irst-child /**/ p{color:#f00;}
【おわりに】CSSハックの利用はリスクを見極めて慎重に
CSSハック/フィルタの連載も、今回で最後ですが、いかがでしたでしょうか? 今回の連載では、有名なハックから、普段あまり使われないマイナーなハックまで、リファレンス的に一挙にまとめてみました。
CSSハックを使った技術は、今後レンダリング性能が上がったモダンブラウザが普及していき、IE 6やIE 7の普及率の減少するにつれて、少しずつ使われなくなっていくであろうと思われます。当たり前のことですが、CSSハックを使わずともズレることのない設計を行うことが、実装のうえで大前提になります。
しかし、実際の制作現場(特に、保守案件)ではハックを使用せざるを得ない局面がたくさんあります。こういった局面では、どのハックを、どの部分に、どうやって使っていくことが、最もリスクが少ない実装なのかを見極めながら慎重に利用していきましょう。
特に気を付けなければならないのは、文法的な間違い(バリデーションエラー)をついたハックを使って制作されたサイトは、将来のWebブラウザのバージョンアップにより、サイトが予想外の不具合を引き起こす元となります。こういったリスクが存在することを理解したうえで、適切に使用していきましょう。
■ @IT関連記事
いまさら聞けない“Web標準”、そしてXHTML+CSS いまさら聞けないリッチクライアント技術(4) 今回はXHTMLとCSSを使ったWeb標準規格を紹介。その歴史や役割、さらにはHTMLとXHTMLの違いやCSSについても解説 「リッチクライアント & 帳票」フ ォーラム 2007/9/19 |
D89 Web標準HTMLタグリファレンス Web標準に基づいたXHTMLタグの正しいマークアップ方法のリファレンス一覧です。Web標準のタグリファレンスを7回連載でおさらいします |
WebデザイナのためのHTMLチューニング入門 Webサイトを見た人の印象を良くするのか悪くするのかには“速度”が大きくかかわってきます。FirefoxのプラグインYSlowで測る7つの計測ポイントから“速い” HTMLの書き方を学びましょう |
業務で使える! 無料Webサイト作成ツール集 Webオーサリングツールを使ってみよう:特別編 HTML+CSS、JavaScriptでWebぺージを作るときにどんなツールを使ってますか? 無料でも便利なものがたくさんあります 「リッチクライアント & 帳票」フォーラム 2007/7/6 |
Webブラウザ非互換性の温床となったのは何か? AcidテストとWebブラウザの仕組み(前編) IE8.0やFirefox3.0の出現で、注目されるWebブラウザ。いまこそ、復習しよう。Webブラウザの非互換性の発生源を探ろう 「リッチクライアント & 帳票」フ ォーラム 2008/7/3 |
Webブラウザ標準適合性のわなとAcidテストの正体 AcidテストとWebブラウザの仕組み(後編) 1つのWebページを開くだけで100項目のWebブラウザの標準適合性が検証できるAcidテスト。Acidテストの正体に踏み込む 「リッチクライアント & 帳票」フ ォーラム 2008/7/31 |
テキストエディタでWebサイト構築をガンバル人へ どこまでできる? 無料ツールでWebサイト作成(6) テキストエディタで「あえて」Webページをコーディングしている人のために便利な無料の補助ツールをいくつか紹介します 「リッチクライアント & 帳票」フォーラム 2008/2/5 |
喜安 亮介……1980年愛媛県生まれ。タグパンダの代表取締役。ディレクター兼デザイナーとしてWeb制作案件に携わる。社名のパンダは、「白・黒はっきりした正しい判断力と柔軟性のあるクリエイティブな発想」を提供するという思いから。 |
3/3 |
INDEX | ||
Webブラウザ別CSSハック&フィルタTips(3) モダンブラウザでも使えるCSSハック18選 |
||
Page1 モダンブラウザとMac OS XのIE 5でも使えるCSSハック |
||
Page2 コンディショナルコメント ユーザーエージェントハック ファーストオブタイプハック 否定lang疑似クラスハック ノットターゲットハック 構造的な疑似クラスハック 否定Nth child疑似クラスハック ファーストチャイルドハック |
||
Page3 モズエニーリンクハック モズドキュメントハック コメントモズエニーリンクハック xmlns属性セレクタハック ウェブキットハック Mac IEスターハック インポートハック メディアタイプ混在ハック ホーリーハック、バックスラッシュハック 【おわりに】CSSハックの利用はリスクを見極めて慎重に |
[an error occurred while processing this directive]
「デザインハック」コーナーへ |
- GASで棒、円、折れ線など各種グラフを作成、変更、削除するための基本 (2017/7/12)
資料を作る際に、「グラフ」は必要不可欠な存在だ。今回は、「グラフの新規作成」「グラフの変更」「グラフの削除」について解説する - GET/POSTでフォームから送信された値をPHPで受け取る「定義済みの変数」【更新】 (2017/7/10)
HTMLのフォーム機能についておさらいし、get/postメソッドなどの内容を連想配列で格納するPHPの「定義済みの変数」の中身や、フォーム送信値の取り扱いにおける注意点について解説します【PHP 7.1含め2017年の情報に合うように更新】 - PHPのfor文&ループ脱出のbreak/スキップのcontinue【更新】 (2017/6/26)
素数判定のロジックからbreak文やcontinue文の利点と使い方を解説。for文を使ったループ処理の基本とwhile文との違い、無限ループなども併せて紹介します【PHP 7.1含め2017年の情報に合うように更新】 - Spreadsheetデータの選択、削除、挿入、コピー、移動、ソート (2017/6/12)
Spreadsheetデータの選択、挿入、削除、コピー、移動、ソートに使うメソッドの使い方などを解説する
|
|