基本CSSハック
- Netscape 4、IE4を除外
- Mac :: Safari用
- Mac :: IE5用
- IE用
- Input要素の特定のタイプのみスタイルを指定〔IE未対応〕
- ubiru〔IEのブラウザのバージョンごとにスタイルを分岐〕
- clearfix〔要素の回り込みを解除〕
- overflowを指定した要素で横スクロールを表示させずに折り返す
Netscape 4、IE4を除外
2007/6/9
Netscape 4 を除外
link要素のmedia属性に、screen以外を指定するとmedia属性をサポートしていないNetscape4を除外できます。
<!-- link要素のmedia属性に、screen以外を指定 -->
<link rel="stylesheet" type="text/css" href="style.css" media="all" />
<link rel="stylesheet" type="text/css" href="style.css" media="screen,tv" />
Netscape 4 と IE4 を除外
Netscape 4 および IE4 では@import
をサポートしていないため、
外部CSSでそれ以外のブラウザに適用させるCSSを@import
で読み込めばOK。
<!-- link要素のmedia属性にallを指定 -->
<link rel="stylesheet" type="text/css" href="style.css" media="all" />
@import ("modern_browse.css");
Mac :: Safari用
2007/6/9
コメントは/* コメント \*/
のように、終了タグのアスタリスクの前に「バックスラッシュ」を付け、
セレクタの前にhtml:\66irst-child
を付けると、MacのSafariのみスタイルを適用することができます。
span.text { font-size:10px; } /* mac Safariのみ適用 \*/ html:\66irst-child span.text { font-size:9px; letter-spacing:-1px; } /* end */
Mac :: IE5用
2007/6/9
コメントは/* コメント \*//*/
のように、終了タグのアスタリスクの前に「バックスラッシュ」と「スラッシュを2つ」付けると、
Mac版IE5のみスタイルを適用することができます。
逆に、Mac版IE5以外のブラウザにスタイルを適用する場合、
コメントは/* コメント \*/
のように、終了タグのアスタリスクの前に「バックスラッシュ」を付けます。
/* Mac IE5のみ適用 \*//*/ span.text { font-size:9px; letter-spacing:-1px; } /* end */ /* Mac IE5以外に適用 \*/ span.text { font-size:9px; letter-spacing:-1px; } /* end */
IE用
2007/6/9
セレクタ内の一部のプロパティにIE用のスタイルを指定する場合
セレクタ内のプロパティの先頭に_
(アンダーバー)を付けると、IEのみスタイルが適用されます。
input.txtbox { margin:0 0 2px 0; padding:2px; width:120px; height:15px; _height:17px; /* IEのみ適用 */ border:1px solid #ccc; }
IEのバージョンによってスタイルをセレクタごと指定する場合
_div.box { /* IEのみ適用 */ } * html body div.box { /* IE6以下のIEみ適用 */ } *div.box { /* IE7のみ適用 */ } *+html body div.box { /* IE7のみ適用 */ } html>body div.box { /* IE6~IE7およびモダンブラウザのみ適用 */ }
Input要素の特定のタイプのみスタイルを指定
IE未対応
2007/6/9
input要素のsubmit、reset、button、text、fileに個別にスタイルを指定するには、input[type="タイプ名"] { ... }
のようにsubmitなどのタイプ名を指定します。
「radio」、「checkbox」は未サポートです。
<style type="text/css"> /******************************** Netscape、Firefoxのみ *********************************/ /* input要素全体 */ .special input { color:navy; } /* テキストボックスのみ適用 */ .special input[type="text"] { border:1px solid silver; padding:.2em .5em; } /* ファイル参照のみ適用 */ .special input[type="file"] { background-color:#8ecdf0; } /* フォームボタンのみ適用 */ .special input[type="button"] { padding:5px 10px; color:#00a0dd; } /* フォームのクリアボタンのみ適用 */ .special input[type="reset"] { background-color:#00a0dd; color:#fff; } /* フォーム送信ボタンのみ適用 */ .special input[type="submit"] { border:2px solid #00a0dd; color:#00a0dd; background-color:#fff; font-weight:bold; } </style> <div class="special"> <p><input type="text" value="テキストボックス" size="50" /></p> <p><input type="file" /></p> <p> <input type="button" value="Button" /> <input type="reset" value="Reset" /> <input type="submit" value="Submit" /> </p> </div>
ubiru
IEのブラウザのバージョンごとにスタイルを分岐
2007/6/9
条件付コメントは、IEブラウザおよびそのバージョンの判定をするものです。 IEの特定のバージョンの場合に表示するテキストや適用するスタイルやスクリプトを記述することができます。
条件付コメント | 説明 |
---|---|
<!--[if IE 5]> HTML <![endif]--> |
IE5のみ適用 |
<!--[if IE 6]> HTML <![endif]--> |
IE6のみ適用 |
<!--[if IE 7]> HTML <![endif]--> |
IE7のみ適用 |
条件付コメント | 説明 |
---|---|
<!--[if gte IE 5]> HTML <![endif]--> |
IEのバージョンが5以上のIEブラウザに適用 |
<!--[if gte IE 6]> HTML <![endif]--> |
IEのバージョンが6以上のIEブラウザに適用 |
<!--[if gte IE 7]> HTML <![endif]--> |
IEのバージョンが7以上のIEブラウザに適用 |
条件付コメント | 説明 |
---|---|
<!--[if lt IE 6]> HTML <![endif]--> |
IEのバージョンが6未満のIEブラウザに適用 |
<!--[if lt IE 7]> HTML <![endif]--> |
IEのバージョンが7未満のIEブラウザに適用 |
条件付コメント | 説明 |
---|---|
<![if lt IE 6]> HTML <![endif]--> |
IEのバージョンが6未満のIEブラウザおよびIE以外のブラウザに適用 |
<![if lt IE 7]> HTML <![endif]--> |
IEのバージョンが7未満のIEブラウザおよびIE以外のブラウザに適用 |
スタイルシートをIEのみに適用する場合
スタイルシートをIEのみに適用する場合は、IE用の外部スタイルシートを指定したHEAD内のLINKタグを<!--[if IE]-->
、<![endif]-->
で囲みます。
input { color:blue } /* IEなら文字色=青 */
noie.cssの中身
input { color:red; } /* IE以外なら文字色=赤 */
以下の例では、閲覧ブラウザがIEなら、IE用外部スタイルシート「iehack.css」が適用され、それ以外のブラウザなら「noie.css」が適用されます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="ja" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title>CSS 小技集(CSS HACK) | PHP & JavaScript Room</title> <link rel="stylesheet" type="text/css" href="/module/include/css/hack/noie.css" /> <!--[if IE]> <link rel="stylesheet" type="text/css" href="/module/include/css/hack/iehack.css" /> <![endif]--> </head> <body> <p><input type="text" value="文字色はIEなら青色、それ以外のブラウザなら赤色です。" size="80" /></p> </body> </html>
IEのブラウザのバージョンごとにスタイルを分岐
以下の例では、IEのバージョンが5以上のIE用の外部CSSを指定し、さらにIE7用の補正スタイルを指定しています。
<!--[if gte IE 5.5]> <link rel="stylesheet" type="text/css" href="./css/ie.css" /> <![if lt IE 7]> <style type="text/css"> #topofthepage { display:none; } .social { margin:0 3px 5px 3px; padding:0; } </style> <![endif]> <![endif]-->
clearfix
要素の回り込みを解除
2007/6/9
要素をfloatさせた場合、回り込みを解除するのに、解除する位置で<br clear='all'>
のようにbr要素を記述したり、解除する位置の下にある要素にdiv.footer { clear:both; }
のように回り込みを解除するためのタグやスタイルを別途指定する必要がありました。
clearfixと呼ばれる手法を使って、回り込み解除のスタイルをクラス化しておくと、何度も使いまわせますし、記述もスマートです。(※必ずしもクラス化する必要はなく、各セレクタに直接記述してもOKです)
clearfixは、回り込みをする要素の親要素にあたるブロックに指定します。 以下の例では、親要素(div要素)にclearfixをクラス指定しています。 その子要素(p要素)をfloat:leftで左寄せし、それ以降のテキストを回り込ませています。
親要素にclearfixを指定しているので、親要素の次のブロックは回り込みません。
IEは、擬似要素:after
をサポートしていないので、
IE独自のプロパティzoom
を併せて指定しておきます。
clearfixを使用しない従来の方法
<style type="text/css"> p.photo { float:left; margin:0 10px 0 0; } br.clr { clear:both; } </style> <!-- 親要素 [start] --> <div style="background:yellow;"> <p class="photo"><img src="/content/img/pic1-thumb.png" alt="写真" /></p> <p> サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。 <br class="clr" /> </p> </div> <!-- 親要素 [end] // --> <p>ここは回り込みませんよ。</p>
サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。
ここは回り込みませんよ。
clearfix使用
<style type="text/css"> .photo { float:left; margin:0 10px 0 0; } .cf:after { content:"."; display:block; visibility:hidden; height:0.1px; font-size:0.1em; line-height:0; clear:both; } .cf { display:inline-block; } /* Hides from IE-mac \*/ * html .cf { height:1%; } .cf { display:block; } /* End hide from IE-mac */ </style> <!-- 親要素 [start] --> <div class="cf" style="background:yellow;"> <!-- 子要素 p + img --> <p class="photo"><img src="/content/img/pic1-thumb.png" alt="写真" /></p> <p>サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。</p> </div> <!-- 親要素 [end] // --> <p>ここは回り込みませんよ。</p>
サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。サンプルテキスト。
ここは回り込みませんよ。
overflowを指定した要素で横スクロールを表示させずに折り返す
2007/6/9
[参照]Making preformated <pre> text wrap in CSS3, Mozilla, Opera and IE
<style type="text/css"> div.script { margin:1em 0; padding:0; overflow:auto; width:100%; border:1px dotted orange; background-color:#f7f7f7; } div.script pre { font:normal 11px verdana,sans-serif; margin:10px; padding:0; /* 余白 */ } div.script pre.wrap { /* Browser specific (not valid) styles to make preformatted text wrap */ white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } </style> <p>▼white-space,word-wrap指定すると自動的に折り返しされボックス内に収まる。</p> <div class="script"><pre class="wrap">mysql> SELECT * INTO OUTFILE 'c:\\mysql\\data\\name_in_ko.tab' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' FROM tbl_Customer WHERE LastName LIKE '%子%'; Query OK, 3 rows affected (0.00 sec)</pre></div> <p>▼指定しない場合はボックスから溢れると横スクロールが表示される。</p> <div class="script"><pre>mysql> SELECT * INTO OUTFILE 'c:\\mysql\\data\\name_in_ko.tab' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' FROM tbl_Customer WHERE LastName LIKE '%子%'; Query OK, 3 rows affected (0.00 sec)</pre></div>
▼white-space,word-wrap指定すると自動的に折り返しされボックス内に収まる。
mysql> SELECT * INTO OUTFILE 'c:\\mysql\\data\\name_in_ko.tab' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' FROM tbl_Customer WHERE LastName LIKE '%子%'; Query OK, 3 rows affected (0.00 sec)
▼指定しない場合はボックスから溢れると横スクロールが表示される。
mysql> SELECT * INTO OUTFILE 'c:\\mysql\\data\\name_in_ko.tab' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' FROM tbl_Customer WHERE LastName LIKE '%子%'; Query OK, 3 rows affected (0.00 sec)