CSSハックについての質問

このQ&Aのポイント
  • IE6~IE8以外のCSSハックの使い方について質問です。具体的なコード例として、:root *> #help_me { color: red; } という記述がありますが、この使い方が分かりません。
  • 現在適用しているCSSにおいて、特定の要素に対してIEのみ別のスタイルを適用したいです。具体的なコード例として、.hoge { margin:15px 0 0 0; } という記述があり、これをIEの場合は margin:20px 0 0 0; に変更したいですが、:root *> #help_me { color: red; } の使い方が分かりません。
  • #help_me { color: blue\9; } という記述についても分からない点があります。color: blueは理解できますが、\9とは何を指しているのでしょうか。
回答を見る
  • ベストアンサー

cssハックについて質問です。

IE6~IE8以外のcssハックが :root *> #help_me { color: red; } この様になっていたのですがどのように使えばいいのでしょうか。 現在適用しているcss .hoge { margin:15px 0 0 0; } このhogeにIEのみ margin:20px 0 0 0; にしたいのですが :root *> #help_me { color: red; } hogeに対するこれの使い方が全く分かりません。 使い方を教えて下さい。 もしくは、 #help_me { color: blue\9; } (※この場合はcolor:blueは分かるのですが9とは一体何でしょうか) こちらでも大丈夫です。 よろしくお願いします。

  • CSS
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • DrFell
  • ベストアンサー率55% (305/551)
回答No.3

現在適用しているcss .hoge {margin:15px 0 0 0;} より後ろに #help_meを普通のセレクタに変えるだけ :root *> .hoge {margin:20px 0 0 0;}/*IE6~IE8以外用*/ #help_meを普通のセレクタに変え、いつものプロパティ:値の後ろに「\9」をいれ、;を続ける。 \9がハックです。 .hoge {margin:20px 0 0 0\9; }/*IE8以下用*/ ハックは通常表記より詳細度を上げるため、後ろに書くことが必要です。

rossi46mail
質問者

お礼

回答ありがとうございます。 \9 これがハックだったんですね。 だからIE6~IE8以外は :root *> .hoge {margin:20px 0 0 0;}/*IE6~IE8以外用*/ このような表記なんですね。 とても分かりやすい説明をしていただきありがとうございました。

その他の回答 (2)

回答No.2

>このhogeにIEのみ >margin:20px 0 0 0; >にしたいのですが 逆に考えてください。 全部のブラウザに"IEに適用したいスタイル"を指定した後、IE以外に"IE以外のスタイル"を指定してください。 .hoge { margin:20px 0 0 0; } :root *> .hoge { margin:15px 0 0 0; } >もしくは、 考え方は同じですので割愛します。

rossi46mail
質問者

お礼

回答ありがとうございます。 #help_meを普通のセレクタに変えればよかったのですね。 ということは、他の記述されてたcssハックも#help_meを変えればいいのですね。 ずっと分からなかった謎が解けてすっきりしました。 回答していただきありがとうございました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

:root *> #help_me { color: red; } 1):rootは、root擬似クラスで、CSS3から導入されたもので、CSS3に対応していないブラウザには適用されません。[詳細度0010] 2) ←半角スペースは子孫セレクタ 3)*は全称セレクタで、すべての要素セレクタに当てはまります。[詳細度0000] 4)>は子供セレクタで直接の子孫(いわゆる子供)にのみ当てはまります。  IE6以前は対応していません。 5) ←この半角は無視されます。 6)#一意セレクタで、HTML内ではIDに該当します。CSS2では、*(全称セレクタ)が省略されているとみなします。[詳細度0100] 7){}宣言ブロックを意味します。  よって、 「CSS3未対応のブラウザにはエラーで解釈されない、HTML文書のルートの子孫であるすべての要素の子孫であるすべての要素のうちIDの値に"help_me"を持つ要素に対する宣言で詳細度は、[0110]の宣言である」と読みます。  他の場所で #help_me{color:green;} /* 詳細度[0100] */ と指定してあっても、モダンブラウザは、 :root *> #help_me { color: red; } /* 詳細度[0101] */ の宣言で上書きします。  もし、これが理解できなければ、説明しても無意味でしょうから、 \9;は、IE8以降のブラウザは文法エラーと解釈することを利用しています。 ★ただ、CSSハックは使わないほうが良いです。私は一切使っていません。 ・今は有効でも将来にわたって有効とは限らない、さらに将来別の指定として登場したとき、破綻してしまう・  このようなブラウザのバグを逆手に取るCSSハックは、あくまでテスト用とかに限定しましょう。限定すべきです。 <!--[if lte IE 7]> Make IE7 happy. <![endif]--> のような方法を使うほうがましです。  たくさんのサイトを見て、この様なハックや、コメントによる振り分けも見ますが、HTMLがきちんと文書構造にしたがってマークアップされていなかったり、そもそもそのような振り分けが必要ない書き方があるものがたくさんあります。  たとえばIE6は、親コンテナブロックの内寸をパディングへの内側ではなくボーダー辺の内側を参照するバグがありますが、それならパディングを指定せず、マージンを使えば済みます。 [例] .hoge {margin:15px 0 0 0;} のような書き方も、本来はしませんね。p.hoge span{/*詳細度22*/}のように要素セレクタと組み合わせて使います。そうすることで、div.hoge{}やp.strongには適用されませんから、先でHTMLを書き換えてdiv.hogeやdd.hogeが加わっても障害とはなりませんね。 >このhogeにIEのみ >margin:20px 0 0 0; にしたいのですが >:root *> #help_me { color: red; } >hogeに対するこれの使い方が全く分かりません。  これを先の説明と照らし合わせるとわかるでしょう。  しかし、それではMacIE5やIE9以降には・・?  その親要素のpaddingを0にして、すべてのブラウザにmarginを指定するほうが安心ですが・・  

rossi46mail
質問者

お礼

回答していただいてありがとうございます。 今まで :root *> #help_me { color: red; } この文法で1つの塊ぐらいにしか考えていませんでしたが、 : にも root にも 半角スペース にもちゃんと意味があったのですね。 ハックでの調整ばかり考えていたら、確かにMacIE5やIE9以降に対して困りますね。 IEのみ縦のmarginが変わっていたのでcssハックで調整しようかと思ったのですが、使わずに調整する方向も考えたいと思います。 回答していただきありがとうございました。

関連するQ&A

  • cssハックを勉強中で、使い方について質問です。

    現在cssハックを勉強中です。 あるサイトで調べるとoperaだけに使う場合 *+html:first-child p { /* for Opera */ line-height : 150%; } このように表示されてました。 IE4-IE6のアンダースコアハックの使い方は分かったのですが 上記のcssハックは今ひとつ使い方が分かりません。 例えば下記のcssがあったとして ul.piyo{ margin:0 0 10px 0; } ul.piyo li{ margin:0; } ul.piyo li.hoge a { width:100px; height:10px; display:block; padding:0; margin:0; background:url(../img/hoge.gif) ; } ul.piyo li.hoge a:hover { background-position:0 -18px; } ...以下、hoge2、hoge3と同じ<li>のcssが続く。 各hoge、hoge2、hoge3の下部分にoperaだけmargin10pxをつけたい場合 *+html:first-child li.hoge { /* for Opera */ margin:0 0 10px 0; } このように表記し、hoge2、hoge3と付け足せばいいのでしょうか? 説明下手で申し訳ありません。 分かりづらいところは補足いたしますのでどうぞご回答よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • CSSハックの使い方を教えてください

    CSSでサイトを作っているのですが、フッターとメインのwrapperの間を開けるのに、どうしてもすべてのブラウザで共通のCSSではできません・・・かなり格闘したのですが・・・ そこで、この際CSSハックを使おうと思っています。 といっても、よくわかってないのですが、CSSハックを使えば、IE6にはこの指定、IE7にはこの指定、Firefoxにはこの指定、opera、safari・・・ など個別のブラウザに異なったCSSを指定することができるのでしょうか? 実際の記述方法を教えていただけないでしょうか? 「firefoxとopera」にはwrpperにmargin-bottomをかけて、IE6,7にはfooterにmargin-topをかけて解決しようと思うのですが・・・ ちなみに、この現象のほかの解決方法ってあるのでしょうか? #wrapper{ position:relative; width:870px; margin:0px auto; text-align:left; } #foot{ position:relative; width:100%; height:auto; clear:both; }

    • ベストアンサー
    • HTML
  • このCSSハックはどういう意味合いのものでしょうか?

    すみません、似たような質問を。 http://oshiete1.goo.ne.jp/qa4177163.html でして、締め切ってしまったのですが、よく見ると100%は理解できませんです。 そして、その質問と同じ構造のCSSなのですが・・・。 以下は、どのようなCSS-hackなのでしょうか? ==知っていること========================================= ●スターハック:  セレクタの前に【* html】をつける。(半角スペースも忘れずに)  IE4~6、MacIE4~5以下にのみ適用させる。Validator(※仕様に準拠しているかチェックしてくれるもの)に通る。  ⇒2行目はこれを用いている ●(名称不明) プロパティに続けて半角スペースと/**/を入れるとIE6には適用されない。 Validatorに通る。  ⇒5行目のこれは、このハックに該当するのでしょうか?   それとも、プロパティ(1px)のあとに「;」と「改行」と「}」と「もういっかい改行」があるので、該当しないのでしょうか?  該当しないとしたら、なんのためにあるのでしょうか? ========================================================= ★それから疑問が1つあります  1行目の「/*\*/」はどのような意味なのでしょうか?  これも、css ハックの一部なのでしゅうか? 以上、よろしくお願いいたします。 ------------------------------------------------------------- (以下、説明しかすいようにと行番号をふっています) 1: /*\*/ 2: * html .container, * html .minwidth, * html .box { 3: height: 1px; 4: } 5: /**/

    • ベストアンサー
    • HTML
  • cssハックについて

    現在Safariに対してcssハックを適用させようとしているのですが、 そのハックがなぜか他ブラウザにまで影響してしまいます… (Firefox、Operaなど。IEは大丈夫です) なぜ他ブラウザにまで影響してしまうのかが判らないので、 教えて頂けると嬉しいです。 宜しくお願いします。 htmlに対するcss読み込みの記述--------- <link rel="stylesheet" type="text/css" href="css/importtop.css" /> importtop.css内の記述--------- /* For Specific Browsers */ @import "safari.css"; safari.css内の記述--------------- /* Safari4 */ body:first-of-type #content { height: 635px; } body:first-of-type #container { height: 635px; } body:first-of-type #sidebar { height: 635px; } body:first-of-type #content { height: 635px; } body:first-of-type .sbar { height: 635px; } /* Safari3 */ html:not(:only-child:only-child) #container { height: 635px; } html:not(:only-child:only-child) #content { height: 635px; } html:not(:only-child:only-child) #sidebar { height: 635px; } html:not(:only-child:only-child) .sbar { height: 635px; }

    • 締切済み
    • CSS
  • IE7だけに適用するCSSハックの記述形式?

    はじめまして。 社内のWeb関連を任されたばかりのものです。 「IE7だけに適用するCSSハックの記述形式」 を表記してくださいという指示があったのですが 何のことかさっぱり分かりません。。。 CSSハックについて、またIE7にだけ適用できるものについて 教えていただけませんでしょうか? 何とぞ宜しくお願い致します。

    • ベストアンサー
    • CSS
  • cssハックでIE9にも対応させるには?

    CSSでFirefox,chorme,IEなどブラウザ間で色を統一させたく、 下記のようなcssハックを使いました。 IE6,7,8ではちゃんと反映されましたが、IE9では反映されませんでした。 IE9でも反映させるためには、どのようにしたら良いでしょうか? <!--[if IE ]> <style type="text/css"> #ie_color {background-color: #777777;} </style> <![endif]-->

    • 締切済み
    • CSS
  • cssハックについて

    googleとfirefoxでcssが聞かない箇所があります。 css--------- #operation { width: 420px; background-image: url(../picture/top/left_middle.jpg); background-repeat: repeat-y; background-position: center top; margin-top: 10px; } #operation img { border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; } #operation #ope_top { background-image: url(../picture/top/left_top.jpg); background-repeat: no-repeat; background-position: left top; height: 30px; padding-bottom: 0px; margin-bottom: 0px; } #operation #ope_top #ope_tit { font-size: 14px; line-height: 2; font-weight: bold; color: #FFFFFF; text-indent: 10px; float: left; width: 200px; margin-top: 0px; padding-top: 0px; height: 20px; } #operation #ope_top .ope_img { padding-top: 5px; float: right; margin-right: 10px; } #operation #ope_middle { margin-top: 0px; padding-top: 0px; width: 420px; margin-left: -200px;←ここがおかしいです!! } #operation #ope_middle .content ul { margin-top: 5px; padding-left: 30px; list-style-image: url(../picture/list.jpg); } #operation #ope_middle .content li { margin-bottom: 5px; margin-top: 1px; } #operation #ope_middle .content .line01 { border: 1px dotted #CCCCCC; margin-top: 2px; margin-bottom: 2px; } というかんじなのですが、左右へとぶれてしまいます。 どのように修正したいいのか困っております。 参考になるようなことありましたらお願いします。

  • jQuery、JSONの結合方法

    いつもお世話になります。 jQuery.fn.hoge = function(options) { var defaults = { 'val1':'1', 'val2':'2', 'Css':{ 'padding':'3px', 'margin':'2px', 'background-color':'red' } } などとして、 hoge( 'val2':'222', Css':{ 'padding':'10px' } ) var setting = $.extend(defaults,options); とすると、 settingが 'val1':'1', 'val2':'222', Css':{ 'padding':'10px' } となります。 ここで、 settingが 'val1':'1', 'val2':'222', Css':{ 'padding':'10px', 'margin':'2px', 'background-color':'red' } となるようにするにはどうしたらよいのでしょうか。 つまり、 'val2':'2', -> 'val2':'222', 'padding':'3px' -> 'padding':'10px'  と書き換えられるのは良いのですが、, Css':{ 'padding':'10px' } となってしまい 次の2つが削除されてしまうのは困るということです。 'margin':'2px', 'background-color':'red' よろしくお願いいたします。

  • CSSについての質問

    現在、CSS・HTMLでホームページの開発をしているのですが、 右上に、Google検索を先日設置しました。 入力フォームに入力した文字列・検索ボタンの「検索」という文字列 上記の両方の文字色が白(#fff)になっていたので、 body { color:#fff; font-size:13px; background-color:#000; margin: 0px auto; width:800px; } の、color:#fff;を消して、#hogeの.googlesearchに、 #hoge .googlesearch { froat:right; height:10px; margin-left:590px; color:#000; } color:#000; を追加しました。 上のように指定したのですが、 文字色が一切変わりません。 検索ボタン、入力フォームの文字列を変更するにはどうすればよいでしょうか。 ご面倒だとは思いますが、おねがいします。 また、詳しく知りたい点などがあったら、お願いします。

    • ベストアンサー
    • CSS
  • Google Chrome用CSSハックについて

    Google Chrome用CSSハックについて こんにちわ。いつも皆様のアドバイスに感謝しております。 標記の件でお訪ねします。 これまでtext-alignを-9999pxにしてブラウザ表示外にテキスト飛ばしをしていたのですが、スパム対策の一環としてこれを止めて、font-size=0pxで見えなくさせるようにしています。 ですが、Google Chromeですと適用されておらず見えちゃいます。。。 Google Chrome用のCSSの書き方はありますでしょうか。

    • ベストアンサー
    • HTML