• 締切済み

スマホとPCの表示をクリックで切り替える方法

初心者でスマホ対応に困っております。 同一ページ(ワンソース)で対応できるようにしようと javascriptのuserAgent(※以下参照)でPC用とスマホ用の 表示CSSが切り替わるページを作成しています。 スマホサイトのフッターによくある「PC」へのリンクをクリックすると スマートフォンでもPC用のスタイルが適用されるようにしたいと思っております。 また、PC用CSSからスマホ用CSSへ戻るリンクも設置したいと思っております。 環境は「.htaccess」と「php」が利用できないサーバです。 できればウィンドウサイズで表示が切り替わるのではなく、 リンクをクリックするだけで PC用とスマホ用のCSSを切り替えたいと思っております。 色々と探してみたのですが、なかなか思うソースが見つからなかったので、 実現可能かどうかも踏まえてご教授いただけますと幸いです。 以下、こんな感じでCSSを切り替えております。 if (navigator.userAgent.indexOf('iPhone') != -1) { document.write('<meta name="viewport" content="width=device-width, maximum-scale=1.0" />'); document.write('<link rel="stylesheet" href="css/smp.css" media="only screen and (max-device-width: 480px)" />'); } else if (navigator.userAgent.indexOf('iPad') != -1) { document.write('<link rel="stylesheet" href="css/iPad.css" />'); } else if (navigator.userAgent.indexOf('Android') != -1) { document.write('<meta name="viewport" content="width=device-width, maximum-scale=1.0" />'); document.write('<link rel="stylesheet" href="css/smp.css" media="only screen and (max-device-width: 480px)" />'); }; どうぞよろしくお願い申し上げます。

  • CSS
  • 回答数2
  • ありがとう数1

みんなの回答

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

そもそも、ウェブページを訪問するのは最新のブラウザやスマホだけじゃない・・・HTMLを作成する上での基本中の基本は・・ 【引用】____________ここから HTMLは、どんな環境からもWebの情報を利用できるようにすべきだという方針の下に開発されている。例えば、様々な解像度や色深度のグラフィックディスプレイを持つPCや、携帯電話、モバイル機器、音声入出力機器、帯域が広いコンピュータや狭いコンピュータ、等の環境である。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[2.2.1 HTMLの略歴 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/intro/intro.html#h-2.2.1 )]より  ここにあげているものだけじゃなく、検索エンジンと言うユーザーも忘れてはならない。  そのためには、HTMLをきちんと文書構造に従って記述し、スタイルシートでユーザーエージェントごとにプレゼンテーションを変えることです。javascriptだと、javascriptを使えない--あるいは、Javascriptを停止しているユーザーには無効です。基本は、HTMLのheader内に記述されたmediatypeでのスタイルシート適用の振り分けです。もし他のスタイルシートでの表示もさせたければ、それは代替スタイルシートで用意しておけば良いです。  基本は ★14.3 外部スタイルシート ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/present/styles.html#h-14.3 )  で、 <link rel="stylesheet" type="text/css" media="screen" href="./styleSheet/standard.css"> <link rel="Alternate StyleSheet" type="text/css" media="screen,projection,tv" href="/styleSheet/default.css" title="汎用"> <link rel="styleSheet" type="text/css" media="print,handheld" href="./styleSheet/print.css"> とかですが、スマホなら <link media="only screen and (max-device-width:480px)" href="m.css" type="text/css" rel="stylesheet" /> <link media="screen and (min-device-width:481px)" href="pc.css" type="text/css" rel="stylesheet" /> <!--[if IE]> <link href="pc.css" rel="stylesheet" type="text/css" /> <![endif]--> とかがよく使われる方法ですね。  高度な方法として、cookieとCGIを使う下記のような方法もあります。下記サイトは、スマートフォン登場前のものですが、手法的には同じです。 ★コンテンツ ( http://hpcgi1.nifty.com/Iruka/contents.html )  ブラウザの表示メニューのスタイルシートで代替スタイルシートを選択することも、ページ内のボタンで変更することも出来ます。javascriptは使用されていません。  フォームを使って同じページを読んでいますが、そのときにどのスタイルを選択したかのデータが送られ、HTML自体のスタイルシートへのリンクを書き換えています。

suzukuro
質問者

補足

ご回答ありがとうございます。 ユーザーに対しての配慮不足の件、ご指摘いただき、ありがとうございます。 仕組み的には文字サイズの大・中・小のCSS切り替えと 似たような感じでできるものでしょうか。 >> <link media="only screen and (max-device-width:480px)" href="m.css" type="text/css" rel="stylesheet" /> >> <link media="screen and (min-device-width:481px)" href="pc.css" type="text/css" rel="stylesheet" /> これを使用した場合、PCの環境でウィンドウ幅を480px以下にした場合は、 「m.css」が適応されてしまうものなのでしょうか。

回答No.1

ワンソースでかつ手動でもCSSが切り替えられるようにするには、Cookieに「どっちのCSSで見たいか」を保存するしかないかなと思います。 Cookieがない場合は今のまま(UserAgentを見て、スマートフォンだったらスマートフォン版のCSSを、それ以外だったらPC版のCSSを読ませる)でいいですよね。 で、たとえばスマートフォンで「PC版へ」のリンクをクリックしたときには「PC版を見たい」という情報をCookieに書いた上でそのページを再読み込みさせます。 でもってその「PC版を見たい」というCookieがある場合は、たとえUserAgentがスマートフォン系のものだったとしてもPC版のCSSを読ませるようにすればよいのではないでしょうか。 ちゃんとコードが示せずすみませんが、ヒント程度にしていただければと思います。

suzukuro
質問者

お礼

回答ありがとうございます! リンクに表示したいCookie情報と再読み込みをさせる発想はありませんでした。 いただいた内容をもとに参考になりそうなサイトを探してみたいと思います。 ありがとうございます!

関連するQ&A

  • Macfirefox3とMacfirefox2以下でCSSを切り替えたい

    MacのFirefox3は、Firefox2までとはデフォルトフォントサイズが 違うので、Firefox3とそれ以外のFirefoxで分けたいです。 今まで、CSSを以下のスクリプトでブラウザ別に分岐していました。 MacのFirefox3の分岐を増やしてみたのですが、それ以外のFirefoxのCSSに 分岐されてしまいます。 あまりJavascriptに明るくないので、 どうしてわかれてくれないものか困っています。 どうぞお知恵をお貸し下さい! ↓以下、かいてみたソースです。 var Win=(navigator.userAgent.indexOf("Win")!=-1); var Mac=(navigator.userAgent.indexOf("Mac")!=-1); var Explorer=(navigator.appName.indexOf("Explorer")!=-1); var Firefox=(navigator.userAgent.indexOf("Firefox") !=-1); var Netscape=(navigator.appName.indexOf("Netscape")!=-1); var opera=(navigator.userAgent.indexOf("Opera")!=-1); var safari=(navigator.userAgent.indexOf("Safari")!=-1); var Version=navigator.appVersion.charAt(0); if(safari){ document.write('<LINK rel="stylesheet" href="/css/mac_safari.css" type="text/css">'); } else if(Win && Explorer && Version=="6"){ document.write('<LINK rel="stylesheet" href="/css/win_ie.css" type="text/css">'); } else if(Win && Firefox){ document.write('<LINK rel="stylesheet" href="/css/win_ie.css" type="text/css">'); } else if(Win && opera){ document.write('<LINK rel="stylesheet" href="/css/win_ie.css" type="text/css">'); } /*増やしたところ*/ else if(Mac && Firefox && Version=="3"){ document.write('<LINK rel="stylesheet" href="/css/mac_safari.css" type="text/css">'); }/*増やしたところ終わり*/ else if(Mac && Firefox){ document.write('<LINK rel="stylesheet" href="/css/mac.css" type="text/css">'); } else if(Mac && opera){ document.write('<LINK rel="stylesheet" href="/css/mac_safari.css" type="text/css">'); } else if(Win && Netscape && Version=="4"){ document.write('<LINK rel="stylesheet" href="/css/win_nn.css" type="text/css">'); } else if(Mac && Explorer && Version=="5"){ document.write('<LINK rel="stylesheet" href="/css/mac_safari.css" type="text/css">'); } else if(Mac && Netscape && Version=="7"){ document.write('<LINK rel="stylesheet" href="/css/mac.css" type="text/css">'); } else if(Mac && Netscape && Version=="4"){ document.write('<LINK rel="stylesheet" href="/css/mac.css" type="text/css">'); } else{ document.write('<LINK rel="stylesheet" href="/css/font.css" type="text/css">'); }

  • PCとスマホでの解像度でのCSS振り分け

    現在以下の方法でスマホ表示へ振り分けています。 <meta name = "viewport" content = "width = 501" /> <link href="/styel.css" rel="stylesheet" type="text/css" /> <link media="only screen and (max-device-width:410px)" href="/smart.css" type="text/css" rel="stylesheet" /> <link media="screen and (min-device-width:481px)" href="/styel.css" type="text/css" rel="stylesheet" /> 疑問なのですがこのコーディングでiphone4ではsmart.cssで表示されます しかしiphone4は620pxなのに何故最大解像度で振り分けられるのでしょう? styel.cssで表示されると思うのですが。 またドコモの最新のスマホではstyel.cssで表示されます、それは720pxなのですが 上記の指定でmax-device-width:720pxとかすればいいのでしょうか? よく分からなくなって来ました。解像度での振り分けは不確定なのでしょうか UAで行うにしても機種は膨大にあるので容易ではないと思うのですが スマホでの振り分け方法についていい方法があれば教えていただきたいのですが よろしくお願いします。

    • 締切済み
    • CSS
  • タグを入れてるのにスマホ用サイズで表示されない

    スマホならスマホ用サイズで表示されるように、 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1,user-scalable=no" > を入れていて、今まで問題なく表示されていたのですが、 タグをいじったら、スマホでもPCサイズで表示されるようになってしまいました。 上記のコードはいじってないので、入れっぱなしです。 タグヲいくつか変更したので、どれが原因なのかわからないのですが、 今までは同じページ内にスタイルシートを書いてたのですが、 <link rel="stylesheet" type="text/css" href="http://Server/test.css">" のようにして、読み込むように変更しました。 これが原因なのでしょうか?

    • 締切済み
    • CSS
  • レスポンシブWeb 右側の表示が切れてます

     レスポンシブWebデザインのサイトを作っています。  スマホの画面では右側の表示がきれてしまいます。 marginとpaddingは左に効いても、右には効きません。  PCの画面では想定どおりに表示します。 <meta name="viewport" content="width=device-width"> <link rel="stylesheet" href="css/common-l.css"> <link rel="stylesheet" href="css/common-s.css" media="only screen and (max-width:599px)">  PC用のcommon-l.cssを使わずスマホ用のcommon-s.cssだけを使うと表示は正常 でmarginとpaddingも効きます。common-l.cssが影響しているのはわかりました。 ためしにPC用のwidthを削るとスマホ画面の表示は正常になりました。当然PC用 画面の表示はおかしくなりますが。  なお「width: 650px;」を「width: 72.22%;」にしても結果は同じです、 //// PC用 common-l.css ////////////////// #content{ float: left; width: 650px;  ←この行を削るとうまくいきます background-color: #FFFFFF; } //// スマホ用 common-s.css ////////////////// p{width: 100%;} #content{ width: 100%; background-color: #FFFFFF; margin: 10px 50px 10px 10px; }  原因まではわかりましたが、対策がわかりません。PC用とスマホ用の両方の表示を まともにするにはどうすればいいでしょうか? 心当たりがあればお答えください。

    • ベストアンサー
    • CSS
  • ホムペ作成・スマホ・モバイル・PC切り替え

    ホームページを自作で作成し、完成したのですが 現在、スマホとPCのきりかえするボタンを こちらのタグにて設定しました。 <script type="text/javascript"> // iPhoneまたは、Androidの場合は振り分けを判断 if (document.referrer.indexOf('本サイトのアドレス') == -1 && ((navigator.userAgent.indexOf('iPhone') > 0 && navigator.userAgent.indexOf('iPad') == -1) || navigator.userAgent.indexOf('iPod') > 0 || navigator.userAgent.indexOf('Android') > 0)) { if(confirm('スマートフォン用サイトを表示しますか?')) { location.href = '携帯サイトのアドレス'; } } </script> しかし、ガラケーで見ると、PC版、スマホ版、どちらもデザインが崩れていて見にくい状態です。 それにこのジャバスプリクトはガラケーでは表示されません。 そこで詳しい方に質問なのですが、ガラケーで、わたしのホームページにアクセスした場合 アメブロに飛ぶように設定などできませんか? またこのような「スマートフォン用サイトを表示しますか?」というようなコメントも出すことは可能でしょうか?

  • CSSでPC用、他のスマホ用、PC用を扱うには?

    こんにちは。 html5を準拠するようにサイトを構築している者です。CSSでPC用、スマートフォン用、iPhone用に分けようと考えています。 http://mnemoniqs.com/web/one-css-smartphone/ 上記のサイトにて、 1 <!--メインCSS--> 2 <link rel="stylesheet" href="css/style.css" type="text/css" media="all"> 3 <!--スマホ用CSS--> 4 <link media="only screen and (max-device-width:480px)" href="css/smartphone.css" type="text/css" rel="stylesheet"/> この様に書いてありますが、私はauのAndoroidスマホを使用していまして、widthが481px以上になる環境です。それで自サイトをみると、PCでは3ペイン、スマホでも縮小された左右のペインがあります。iPhone、他のスマホでは左右のペインをなくして、メインだけを表示したいのです。 例として http://blog.livedoor.jp/dqnplus/archives/lite/1750885.html では、スマホで見ると左右のカラムが消えて、文字が大きくなり見やすく見やすいです。ですが私のサイトではそれが出来ていないのでそうはいきません。 ちなみにPCブラウザで http://blog.livedoor.jp/dqnplus/archives/lite/1750885.html を表示するとリダイレクトでPC用サイトに行ってしまいますので調べることが出来ませんでした。 どなたか1ページをCSSを使ってPC用、iPhone用、普通のスマホ用にする事が出来ないでしょうか? お導きの事よろしくお願い申し上げます。

    • ベストアンサー
    • CSS
  • widthでcss,js切換可能でしょうか。

    【Web製作】widthでcssやjavascriptを切換えたいです。 マルチデバイス対応のWebSiteを製作しようと思うのですが、 widthによって、cssやjavascriptを切り替えたいのですがどのようにすれば良いでしょうか。 横幅が【959px以下】の場合は【style-1.css】と【base1.js】 横幅が【960px以上】の場合は【style-2.css】と【base2.js】を適応させたいです。 htmlに <link href="style-1.css" rel="stylesheet" type="text/css" media="only screen and (max-width: 959px)"> <link href="style-2.css" rel="stylesheet" type="text/css" media="only screen and (min-width: 960px)"> <link href="style-1.css" rel="stylesheet" type="text/css" media="only screen and (max-device-width: 959px)"> <link href="style-1.css" rel="stylesheet" type="text/css" media="only screen and (orientation: portrait) "> <link href="style-2.css" rel="stylesheet" type="text/css" media="only screen and (orientation: landscape) "> と記述してもうまく動作しません。(確認は【PC】【iPhone】【iPad】です。) 私の解釈ですと、 1.<link href="style-1.css" rel="stylesheet" type="text/css" media="only screen and (max-width: 959px)"> ↑PCの場合、ウィンドウサイズが959px以下の場合【style-1.css】 2.<link href="style-2.css" rel="stylesheet" type="text/css" media="only screen and (min-width: 960px)"> ↑PCの場合、ウィンドウサイズが960px以上の場合【style-2.css】 3.<link href="style-1.css" rel="stylesheet" type="text/css" media="only screen and (max-device-width: 959px)"> ↑PC以外で、画面表示サイズが最大959px以下のデバイスの場合【style-1.css】 4.<link href="style-1.css" rel="stylesheet" type="text/css" media="only screen and (orientation: portrait) "> ↑PC以外で、画面表示サイズが最大959px以下ではないデバイスのポートレートモードの場合【style-1.css】 5.<link href="style-2.css" rel="stylesheet" type="text/css" media="only screen and (orientation: landscape) "> ↑PC以外で、画面表示サイズが最大959px以下ではないデバイスのランドスケープモードの場合【style-2.css】 と、解釈し指定しているのですがうまく動作しません。 そしてもう一つなのですが、 widthやポートレートモード、ランドスケープモードを判別しjsを切り替える事は可能でしょうか。 よろしくお願いいたします。

  • ブラウザの解像度横幅1280の時スタイルシートを記述したいのですが

    記述が間違ってると思われうまくいきません。 どなたか間違ってるところを指摘してくださいませ。。 初心者ですお願い致します。 <html> <head> <title>モニタサイズに合わせてウィンドウサイズを変更する</title> <script Language="JavaScript"><!-- w = screen.width; moveTo(0,0); if (w == 1280) { document.write ("<link rel=stylesheet href="'+ a.css +'" type="text/css">"); } else if () { document.write("<link rel=stylesheet href="'+ b.css +'" type="text/css">"); } // --></script> </head> <body> </body> </html> なおa.cssには、背景黒くしてます。

  • ホームページ スマートフォン PC 振り分け

    初質問でつたない文章ですが、ご回答のほどよろしくお願い致します。 【質問】 スマホからスマホ版ページに飛び、PC版へのリンクを押した場合はPC版を閲覧出来るという設定はjavascript利用で行えないでしょうか? そんなめんどくさい事をするならhtaccessを利用した方がいいのでしょうか? htaccessでもそういった設定は難しいのでしょうか? 【現状】 PC版とスマホ版のウェブサイトを作り、htmlを書き足してjavascriptで振り分ける方法にしました。振り分けは問題なくできています。 【問題点】 スマホ版ページに「PC版」と文字を書いて、スマホでPC版を見たい人が飛べるようリンクを貼ったのですが、当然の事ながらスマホはスマホとして認識されるので、上記のhtml記述ではPC版に飛べません。 スマホでスマホ版ページの「PC版」という文字を押しても今居るスマホ版ページに飛ぶだけで、ひたすらループするのみです。 ーーーーーーーーーー関連個所ーーーーーーーーーー <script type="text/javascript"> if ((navigator.userAgent.indexOf('iPhone') > 0 && navigator.userAgent.indexOf('iPad') == -1) || navigator.userAgent.indexOf('iPod') > 0 || navigator.userAgent.indexOf('Android') > 0) { location.href = 'sp'; } </script> ーーーーーーーーーーーーーーーーーーーーーーーー 拙い文章失礼しました。 よろしくお願いします!!

  • CSSをあとから読み込みたい。

    「CSS読み込み」クリックで、追加CSSを読み込みたいのですが、 以下のやり方でIE6以外ではできたのですがIE6で動きません。 どなたかアドバイスいただけると幸いです。 ▼JS=============================================================== function roadcss(){ if(navigator.userAgent.indexOf("MSIE") > -1){ document.createStyleSheet('/answer.css'); } else { var tag=document.createElement('link'); tag.setAttribute("type","text/css"); tag.setAttribute("rel","stylesheet"); tag.setAttribute("href","/answer.css");​ document.getElementsByTagName('head')[0].appendChild(tag); } } ▼HTML============================================================= <a href="javascript:void(0)" onClick="roadcss()">CSS読み込み</a>

専門家に質問してみよう