• ベストアンサー

cssの今、一番旬なブラウザごとに違うcssをかける方法

現在4つのブラウザでほぼ同じような動作・見栄えをするサイトを制作しております。 4つのブラウザとは(opera ie6 ie7 firefox)です。 そこで、現在、ie6だけで生じる表示崩れがあり、 そのcssの解決方法も発見したのですが、 それを解決すると今度は逆に、opera,ie7,firefoxでエラーが起きてしまいます。 読み込んでいるのは、一つの外部cssファイル、main.cssです。 現在考えられる解決方法としては、 1.ie6だけにcssを掛けるハック?  この場合、どのようにハックをかければいいのでしょうか。  色々しらべましたが、スターハックなど、現在使って良いハックというのは何になるのでしょうか。 具体的なcssコードは、以下です。 #pull a:hover{ display:block; /*以下ie6だけに指示したい命令 現状コメントアウトしています*/ /*margin-bottom:-20px;*/ } 2.ie6だけ別の外部cssファイルを読み込ませる。  ブラウザ毎に違うcssファイルを読み込ませることってできるのでしょうか。  (javascriptで判別するのでしょうか?) ie6 なら、main_ie6.cssを読み込み、 それ以外のブラウザなら main.cssを読み込ませる 一番ベストな方法を教えていただければと思います。

  • HTML
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
  • k0021
  • ベストアンサー率26% (32/120)
回答No.3

私の場合 // _kon : true = konqueror, false = others _kon =navigator.userAgent.toLowerCase().indexOf('konqueror')!=-1; // _safari : true = safari, false = others _safari=navigator.userAgent.toLowerCase().indexOf('safari')!=-1; // _dom : kind of DOM. // IE4 = 1, IE5+ = 2, NN4 = 3, NN6+ = 4, others = 0 _dom = document.all?(document.getElementById?2:1): (document.getElementById?4: (document.layers?3:0)); _createLayerNo = 0; // layer no. lod_asw=9; if(_dom==2 || _dom==1){ browser = navigator.appName; if (browser == "Microsoft Internet Explorer") browser = "MSIE"; appVer = navigator.userAgent; s = appVer.indexOf("MSIE ",0) + 5; e = appVer.indexOf(";",s); ver = eval(appVer.substring(s,e)); if(ver > "5") lod_asw=0;} if(lod_asw==0) {dirName="../c_f/o_ie01.css";} if(lod_asw==9) {dirName="../c_f/o_ta01.css";} document.write("<link rel='stylesheet' href='"+dirName+"' type='text/css'>"); 等3種類の方法で使用しています 参考URLは、 http://www.din.or.jp/~hagi3/JavaScript/JSTips/Default.htm の汎用関数とオブジェクト のライブラリ集 や http://www.kisc.meiji.ac.jp/~pz03013/html/css_change.html http://www.usamimi.info/~geko/arch_web/02_sample/018/index.html を参考に作成しました

その他の回答 (3)

  • goulan
  • ベストアンサー率46% (23/50)
回答No.4

同じく何がベストか・・・は、状況によりますが。 簡便なのは No.1さんの回答でしょうね。 何がハックか、の定義は決まっていなくて、使って良い悪いは、個人の判断によるところが大きいと思います。ハックはブラウザの"バグ"を利用して何かをする・させる辺りから名付けられたのでしょうね、多分。 ハック技と言われるものは、使い始めるとcssが膨大になりがちです。私などは、どうしてもハック技の類いじゃないと解決しない場合は使いますが、極力簡単に書いて行くようにしています。後々のメンテナンスを考えると、シンプルなほうが楽だからですけども。 No.1さんの例、 Condirional Commentsは、"未満"ですので、IE5,IE5.5も含みます。それと、Mac IE5は対応してない(らしい)。まあ、IE6を問題になさってらっしゃるので、MacIEは関係ないですか・・・。 Conditional Comments または 条件付コメント で検索なさると、たくさんhitするはずです。詳しい検証サイトもありますので、お確かめ下さい。 2.の別cssを読み込ませる場合、php,javascriptなどで判別し、それぞれに見合うcssを用意することになります。ただ、種別を欺くUAも存在するので、100% 確実とは言い切れません。 他に、セレクタを使う方法があります。 IE6以前のブラウザに適用する指定を先に書いて、次にセレクタを利用します。セレクタを利用する目的は、モダンブラウザに本来の表示をさせるところにあります。 例えば、 body{ /* IE6以前 のブラウザに適用 */ } html > body{ /* モダンブラウザに適用 */ } モダンブラウザは後から書かれた指定、上書きされる方を適用します。IEに限らず、です。指定がダブルになるため、分岐の必要な指定が膨大な場合、cssの見通しがちょっと悪くなるかも知れません。

回答No.2

ベストは状況に拠りますが……。 ・cssをサーバーの機能で振り分けてしまう ApacheのRewriteCond + RewriteRuleでcssを機械的に分離する等。 cssを二つ用意してしまえば,あとは特別な記述が要らないのである意味簡単。 ・htmlではなくjsp/asp/php等なら,読み込むファイルをUser-Agentで変更してしまう サーバー側でプログラムを動かせるなら,この方法が手っ取り早いかもしれません。 ただし,呼び出し箇所が複数になるので,そのあたりがちょっと面倒です。 ・cssを実はjsp/asp/php等が返すようにしておく jspなどのプログラムは,何もtext/htmlを返さないといけないわけではないですし,CSSのURIが.cssで終わっていないといけないわけでもないです。 なので,プログラムがtext/cssを返すようにすれば,上記RewriteRule等と同等のことができます。 上記は全てサーバー側で振り分けてしまう,という方法です。 なので,利用可能な状況は限られてしまう上,UAを詐称されると対応出来ないものの,Javascript Off環境下でも問題なく動く,UA側の独自拡張に頼らないという利点があります。 ただし,一般のプロバイダ等では,サーバー側の振り分けは厳しいでしょう。 会社等であれば,これらの振り分けが有効かもしれません。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

IEには「条件付きコメント」というのが書けるので、 IE6にだけ別のスタイルを追加・上書きしてはどうでしょうか? <!--[if lt IE 7]> ↑ HTMLの文法的にはただのコメント。 IE7未満では有効になります。 <style>~</style> や <link rel="stylesheet" ~ > とかを書く。 <![endif]--> 参考 http://www.keynavi.net/ja/bugh/comments.html

関連するQ&A

  • CSSハックについて・・・

    ホームページを作っていて、IEではちゃんと表示されるのですが、 FirefoxとOperaでは思い通りに表示されません。 これをどうにかしたいと思います。 前に、どこかのサイトでCSSハックという言葉を見たことがあるのですが、主にFirefoxに、CSSハックを利用したいです。 Firefoxのみ、またはFirefoxを含む様々なCSSハックの方法を教えてください! 今は、OperaよりもFirefoxを優先してほしいです。

    • ベストアンサー
    • HTML
  • 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レイアウト=firefox3.0とfirefox3.5のブラウザ

    CSSレイアウト=firefox3.0とfirefox3.5のブラウザ表現の違いについて教えてください。 firefox(以下。FF)3.0と、3.5ブラウザの見え方の違いが発生してしまいました。 FF3.5基準だと、IE(6.0。7.0。8.0)でも問題なくみえますが、 なぜかFF3.0だけ CSSレイアウトが 崩れています。 基本 FFは準拠しているものとして 3.5基準で作っていましたが、 仇となってしまいました。(私の勉強不足ってのもありましたが) これは ハック等で問題は解決できるのでしょうか? それとも、margin等の規格がIEバグのように 違うものになっているのでしょうか? ご回答よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • 全てのブラウザで崩れないCSS

    XHTML+CSSでウェブサイトを構築している者です。  サイトがある程度出来上がってきて各ブラウザでチェックをしていたのですが、検索エンジンのキャッシュで崩れていた事に気づきました。  崩れた原因を調べ、なんとか対応したのですが、FirefoxのGoogleキャッシュは崩れずIE7のGoogleキャッシュでは崩れています。  そこで、ブラウザ、OS、検索エンジンキャッシュで見ても崩れない(ブラウザごとの多少の違いはあると思いますが)CSSの決まりがあれば知りたいと思いました。  無料ブログサービス(アメーバ等)のデフォルトテンプレートはどんな環境でみても崩れないと聞いたことがありますが、可能なのでしょうか…  ■作成したサイトをチェック→ブラウザ XHTML 標準モード+CSSハック使用 ・Win Firefox 2 3 ○ ・Win IE 6 7 ○ ・Win IE 5以下 CSS無効 ・Mac IE 5 CSS無効 ・Win Opera 9 ○ ・Win Safari 3 4 ○ ■作成したサイトをチェック→キャッシュページ 後方互換モード ・FireFox3でGoogleキャッシュを見たとき→○ ・IE7でGoogleキャッシュを見たとき→崩れる  原因はIE7の後方互換モードに対応できていないことだと思います。  IE7後方互換モードに強いサイト等を紹介してもらえたら嬉しいです。 よろしくお願いします!

  • CSSでブラウザ毎のフォントサイズを統一するには

    IEとFireFoxなど、ブラウザによりフォントの初期サイズが違います。 IEのMideumがFireFoxではSmallに該当するようです。 pxなどの絶対サイズを利用せず、相対サイズで初期サイズをMidiumに統一対応したいと考えています。 何か良いcssハック方法はありませんでしょうか。

    • ベストアンサー
    • HTML
  • Operaでの表示がおかしい(CSSハック)

    あるサイトをWebデザインしているのですが、F5キーを押せばOperaでの表示がおかしくなります。 色々CSSファイルとかを自分なりに見て解決法を試行錯誤したのですが、自力では限界になって投稿させて頂きました。 ■ 問題の内容 ・ 表示がおかしいブラウザはOperaに特定される。 ・ 環境はHTML5・CSS(外部ファイル)・JQuery(外部ファイル) ・ Operaで最初に表示させた時はローカル・Webとも通常表示されるが、そのサイトをF5(更新)キーで押した時、サーバーアップ時のみレイアウトが崩れる(ローカル(Windows)上の同ファイルをOperaで開いた時及びF5キーを押した場合は、両方とも表示崩れが起きない)。 ・ レイアウト崩れは特定の部分のみ。 ・ お客様のサイト、自社でテストでアップしたサイトの両方のサーバー(別会社)とも全く同じ現象が起きる。 ・ 通常表示時に別サイトに行き、リンクや戻るボタンで戻った時は、上記崩れは起きていない。 ・ Opera以外のブラウザ(試しているのはOperaのほか、IE・Firefox・Chome・Safari)では上記現象は一切発生しない。 通常のOperaのCSSハックをすれば解決するっていう感じでは無さそうですし。 解決策は何かありませんでしょうか。 よろしくお願いいたします。

  • IEだけ外部CSSを読み込まない

    こんばんは。 レスポンシブサイトを製作中なのですがIEだけが外部CSSを読み込みません。 Chrome、Firefox、Opera、Safariなどのモダンブラウザは異常なく読み込みます。 IEに限ってどのバージョン(少なくとも8~11)もCSSを読み込まずHTMLだけのレイアウトです。 考えられる原因は何だと思われますでしょうか? モノをあげられないので推測での話になると思うのですが、よろしくお願い致します。

    • 締切済み
    • CSS
  • ブラウザによってcssを分けることは可能なの?

    レスポンシブウェブデザインの様に ブラウザによってcssを分けることは可能なのでしょうか? IEなら100px、ファイアフォックスなら50pxなど。

    • ベストアンサー
    • CSS
  • 外部CSSの読み込みがうまくできない

    <head>~ <link href="basic.css" rel="stylesheet" type="text/css"> ~</head> ↓basic.css body{font-size:80%;color:#4a4a4a;} a:link{color:#004a95;text-decoration:none;} a:visited{color:#950095;text-decoration:none;} a:hover{color:#ff80c0;text-decoration:none;} という感じで外部CSSを読み込んでいるのですが、 ブラウザのoperaやfirefoxだとbody{font-size:80%;color:#4a4a4a;}の所だけ反映されません。 IEだとその部分も反映されます。 cssファイルに修正箇所があるのでしょうか? それとも外部cssを読み込むhtmlファイルの方に追加して記述しなければいけないタグがあるのでしょうか?

    • ベストアンサー
    • CSS
  • FirefoxとOperaがCSSを勝手に補完

    <input type=text style=width:0> このようなinput要素にwidth:0というstyleを付加した小さなドキュメントを用意し、 Firefox(5)やOpera(11.50)で見ると、勝手にwidthを1pxに書き換えられます。 IE9,Safari(5.1),Iron(11)では同様の現象は確認できませんでした。 しかし、仕様の犬であるFirefoxやOperaがやることが間違っているとは思えないのです。 訳のわからないハックを使った解決は望んではいません。 FirefoxやOperaが正しいとわかるソース、あるいはIE9やWebkit系ブラウザが正しいとわかるソースをください。 ご存じの方おられましたら、よろしくお願いします。

    • ベストアンサー
    • HTML

専門家に質問してみよう