• ベストアンサー

Javascript使用の固定ナビゲーションの実装

ページをスクロールしても同じ位置に固定されるナビゲーションバーを実装するのに http://javascript123.seesaa.net/article/101299599.htmlさんのソースを利用しました。 ですが実行ページをIEで見ると分かると思うのですが、IEで表示した場合、表示がブレて 綺麗に実装出来ません。IEでも他のブラウザと同じように表示されるようにソースを改変 して直すことは出来ないでしょうか?また何故IEだとこのソースの動作がおかしくなる のかも教えて頂きたいです。

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

  • ベストアンサー
  • tracer
  • ベストアンサー率41% (255/621)
回答No.2

ちなみに、サンプルページをChrome(dev.26)で見ると、普通にブレてるんですが。。 一般的なアプローチはおそらくこうです。 ・通常のブラウザ用にposition:fixedで実装する。 ・position:fixedが効かないブラウザは、jsで実装する。 /*通常のブラウザ*/ #sample{  position:fixed;  top:0; } /*IE9以下に適応するスタイル*/ body{  filter:expression(''); } #sample{  position:absolute;  top:expression((documentElement.scrollTop || document.body.scrollTop) + 0 + 'px'); } IEはcss内にjsを記述できるので、cssファイルの変更だけで対応出来ます。 ポイントは、bodyに適応するfilterです。これがないと同じようにブレます。 css内の0になってる値を変えて、固定位置を調整してください。 CSSは、IEハックを使用してIE9以下だけに適応させてもいいですが、HTML内条件式で、IEだけに読み込ませるcssを作った方がスマートです。ちなみに、IE6でもちゃんと動きます。 <!--[if lt IE 9]> <link href='ie.css' rel='stylesheet' type='text/css'> <![endif]-->

penguin_css
質問者

お礼

解答ありがとうございます。教えて下さったコードで試してみました。コードが減って記述も綺麗になって嬉しいのですが、やはりブレが起こります。ただスクロールバーでの移動だとブレが起こらずマウスホイールだとブレが起きました。少しややこしいのですが、スクロールバーで移動した後、ページが先頭か一番下にない状態でマウスホイールで先頭か一番下に行かないように移動してもブレが起きませんでした。 質問にあるサイトのサンプルをChromeでもう一度確認してみましたが、質問した時は殆どブレてなかったのに今試したら凄いブレるようになっていました。ちょっと何故か分かないです。 私の環境がおかしいのか、又これ以上はfixed無しでは無理なのかも知れませんが暫く意見を募集するので何か分かった方はお願いします。教えて下ったやり方で試したブラウザはIE9でHTML構造はDIVを作りページがスクロール出来るようにHeightを高く持たせ、その中に固定用のDIVをもう一つ作りsampleのIDを当て上部に固定しました。実行環境はこんな感じです。

penguin_css
質問者

補足

HTML構造の文に書きませんでしたがブレないようにするポイントで教えて下さったBodyにfilter:expression('');も当てています。

その他の回答 (2)

  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

いっそのことie9.jsを使ってみては? ただし、期待する以上の機能があるので、ベストプラクティスかどうかはわかりませんが。

参考URL:
http://internet-explorer9.info/other/564/
penguin_css
質問者

お礼

解答ありがとうございます。現在既に実装したいページがIE9の環境にあることと、IE9でも文章型宣言がStrictでないとFixedは使えないので駄目みたいです。

penguin_css
質問者

補足

これ以上解答が無いようなので一旦締め切らせて貰います。 回答者さんありがとうございました。

  • tracer
  • ベストアンサー率41% (255/621)
回答No.1

Web系技術は1年持たないものも多いです。 その中で参考にしたソースは、4年以上の前のものです。 賞味期限が切れています。 Web系技術に限っては、賞味期限がきれた情報は、毒にしかなりません。 さて、今では要素固定はjavascriptを使わずとも簡単に実装できます。 cssで一行書くだけです。 #sapmle{  position:fixed } これだけです。 他にも設定項目はあるので、詳しい情報は「css position fixed」で調べてみてください。 ただし、IE6では動きません。(IE7以上なら動く) IE6で動かないのは、IE6が古いからです。それ以上の表現方法がありません。

penguin_css
質問者

お礼

解答ありがとうございます。質問には書いていませんでしたが事情により環境がIE8又はIE9の文章型宣言Transitional限定なのでposition:fixedが使えないのです。IEでは現在、文書型宣言がStrictの場合のみposition:fixedが使えるようになっています。その為何とかならないか調べていたところJavascriptで補う方法を見つけたのですがこちらもIEで表示がブレる欠点が合ったので質問させて頂きました。

penguin_css
質問者

補足

観覧者さんは質問にこのお礼の補足を考慮して解答をお願いします。

関連するQ&A

  • JavaScriptについて、困っています。

    マウスで選択されているテキストを表示できないでしょうか 調べた中で一番近かったのが http://h2js.seesaa.net/article/88952666.html こちらで紹介されています。 ・ただしそれだとIEでは使えないのでIEで使えるようにしたいです。 document.getSelection()はIEで使用できないので、 IEで実装されているdocument.selection()に変えたのですが 上手くいきませんでした。 ・また動作する場所を限定されていますが、 限定しないでページ内すべてのテキストで使えるようにしたいです。 恥ずかしい話、質問者はJavaScriptがほとんどわからないので お手数ですがJavaScriptを書いてもらえると助かります。 よろしくお願い致します。

  • JavaScriptで、ブラウザのスクロール?

    JavaScriptで、ページを表示後に一番下にスクロールするように動作させたいのですが どうすればよいでしょうか? ブラウザはIE6.0を使っております。 JavaScriptはあまり使わないのですが、ブラウザによって動作が異なったり動作しない場合があると 思いますが、上のようなスクリプトは簡単にできるものでしょうか?

  • フォームの文字入力モードを自動的に切り替える方法

    下記サイトを参考に実装したところ、 Google Chromeで確認すると動作しませんでした。 http://javascript123.seesaa.net/article/131508328.html Javascriptを使えば良いようなのですが、 対応するJavascriptを見つけることができません…。 ご存知の方、いらっしゃいませんでしょうか。 ちなみに対応させたいブラウザは IE7~IE10・Fx(特にバージョンは問わない)・GC(特にバージョンは問わない)です。 よろしくお願い致します。

  • JavaScriptでタブメニューを実装したいと思っています。

    JavaScriptでタブメニューを実装したいと思っています。 http://archiva.jp/web/javascript/tab-menu.html 上記サイトよりソースを頂いて実装したいと考えているのですが、こちらのサイトでは5つタブがあるため配列を使用しています。 今回実装したいページは、タブが2つのみなので配列は必要ないかと思いました。 色々調べても勉強不足のためどうしても条件分岐に書き換える方法が分からなく行き詰ってしまったため、お力添え頂きたく質問させていただきました。 大変申し訳ないのですが、教えていただければありがたいです。 どうぞ宜しくお願い致します。

  • html?/css?/Javascript? でのフッター特殊な固定方

    html?/css?/Javascript? でのフッター特殊な固定方法について。 こんばんは。 現在ホームページを作成中です。 そこでフッターをブラウザの下部に固定しようと思い google等で検索し見つける事が出来ました。 ソースは色々ありますが例として下記のURLで説明したく思います。 http://www.css-lecture.com/template/2009/0212/ 私の希望・やりたい事としては上記のサイトに追加内容で (1).ヘッダーをブラウザ上部に固定。 (2).ブラウザの上下を縮めた時、フッターとヘッダが重ならないよう、最小高さを指定。 (3).(2)を実装時、フッタとヘッダがある程度寄るとスクロールバーが出てくると思いますが   スクロールした時にスクロールするのは内容のみ。   (フッタがブラウザ下部に隠れたとしてもスクロール時に移動してはいけない) です。 ここ最近試行錯誤しcssを書いていますが (3)を実装時に不具合が多く困っています。 ヘッダをブラウザ上部に、フッタをブラウザ下部に固定して スクロールした時、内容と同時にフッタまで上にスクロールされたり フッタを完全に固定してしまうと、ヘッダとフッタの最小間隔が指定できなかったり。 【簡易説明】 ヘッダは上部固定、フッタは下部に固定して ヘッダとフッタはブラウザの上下を縮めても重ならない様、最小値を指定し スクロールでスクロールするのは内容・記事のみ。 こんな事が可能なのかどうなのかも私の乏しい知識では判りませんので どなたか詳しい方いらっしゃいましたらご教授お願い致します。 内容・記事としてのスクロールバーと ヘッダ、フッタの最小値以上縮めた時のスクロールバーが入り組んでいる形になるので 不可能なんでしょうか・・・・。 また、もし参考サイト等がありましたら URLの誘導のみでも結構です。 何卒、宜しくお願い致します。(涙 また、乱文で大変失礼致しました。

    • ベストアンサー
    • HTML
  • JavaScript スクロール制御

    javascriptの動作についてご教授下さい。 ウィンドウ画面が横1275px 縦925pxで パージ内容が横長の横2350px 縦925pxの ページ全体を横軸スクロールで表示可能なサイトで、 <img>タグで画像を非表示(配置はセンター付近)し、 ある画像リンクへの文字列をクリックでjavascriptから その<img>を非表示から表示に切り替えています。 (ページイメージ)                        |リンク文字位置|               |img位置| 横2350px----------------------------------------------------→ で、今回の質問なのですが、リンク文字はページ右辺に配置しており javascriptからimgを可視化するとスクロールが初期位置(横0)に戻ってしまいます。 スクロール位置はそのままで画像の可視化・非可視化を切り替えたいのですが、ムリなのでしょうか?? いちよう可視化後に scroll()でスクロールの位置を指定していても スクロールが初期位置(横0)に戻ってしまいます。↓↓↓ この現象はJavaScriptの仕様なのでしょうか?? 横長のページであることと、リンク文字の配置は仕様として 変更できないものとお願いいたします。 環境 WinXP SP3 IE8(8.06) 画像切り替えソース //引数urlの画像をimgで表示する関数 function visi(url) {  //imgのプロパティを取得  var jpg = document.getElementById('jpg_link');  jpg.style.visibility = "visible"; jpg.style.display = "block"; jpg.src = url;  //scroll(1500,0); ← 1500まで行くが初期位置に戻る・・・ }

  • 表の位置をスクロールしても動かないようにブラウザで固定させたい

    ○○○○ブラウザ○○○○▲ ■■■■■■■■■■■○□ ■1.位置固定の表■■○□ ■■■■■■■■■■■○□ ◇◇◇◇◇◇◇◇◇◇◇○□ ■■■■■■■■■■■○□ ■■■■■■■■■■■○□ ■■■2。非固定の■■○□ ■■■ 普通の表 ■■○□ ■■■■■■■■■■■○□ ■■■■■■■■■■■○□ ■■■■■■■■■■■○□ ○○○○○○○○○○○○▼ みたいなのを フレームを使わずに 1ページ内におさめたいと思っています いろいろ調べましたがわかりません フレームで3ページ分 用意しないとできないのでしょうか? 1。style="position:fixed" としてみましたが、   firefoxでは固定できるようなのですがなぜか、IEでは 固定できませんでした。 2。のほうは スクロールバーで移動するとスクロールしてくれればいいです。   z-indexは、1を上にする予定です。 フレームを使えばないいことなんですが。(^_^; cgiで動的に作りたいので フレームにすると3回呼び出さないといけないので 負荷がかかるのでさけたいと思っています 1ページで済ませたいと思っています。 1。は メニューとして使いたいのでブラウザ画面から動かないようにしたいです。 2。は、ブラウザのスクロールで移動みたいなのが欲しいです。。 よろしくお願いします m(_ _)m

    • ベストアンサー
    • HTML
  • 背景画像を固定表示でその画像にリンクを…

    自身のウェブサイトの画面右下に画像を表示させて、 なおかつその画像にリンクを貼りたいのですが、 htmlやcssのスキルは並みの者なので、どうかご助力をお願いします! イメージとしては、 ttp://www.rakuten.co.jp/e-goods/ や ttp://www.designwalker.com/ の右側にある画像リンクです。 こちら2つのサイト様のソースを拝見して、 作用している部分を抽出して自分なりに作ってみたのですがうまくいきませんでした。 IEでうまく表示されなかったのです。 他ブラウザではちゃんと右側に出て、スクロールしても画像が固定されるのですが、 IEだけ普通に画像が表示されているだけの状態(左寄せに表示されていて、スクロールしても固定表示されていない)になってしまいます。 2つめに挙げたサイト様はJavaScriptを使用されているっぽい(?)のですが、 できればJavaScript無しで表示させたいです。 IE以外のブラウザではうまく表示されていたので、ちょっと悔しいです。。 解決方法がお分かりになる方、ご意見をいただけるととても助かります。 どうぞ宜しくお願いします!

  • 上部ナビゲーションを固定したホームページ

    ホームページの制作を業者に依頼しようと考えています。 ホームページを見る際、ページを下にスクロールしてナビゲーションが画面から見えなくなり、クリック出来なくなるのを不便に思います。 そこで、上部ナビゲーションを固定したホームページにしたいと考えているのですが、 1.上部ナビゲーションを固定したホームページをご紹介頂けませんでしょうか? 2.ナビゲーションを固定すると、フレームを用いた場合はSEO対策的に不利になる、うまくページが表示されないブラウザがあるなどの記載を目にしますが、ナビゲーションを固定するのはデメリットが大きいでしょうか? 宜しくお願い致します。

  • JavaScriptでスクロール画像

    JAvaScriptで、ブラウズのスクロール時に画像が常に固定の位置で表示される(付いて来る)ようなことをしたいのですが、何か良いサンプルはございますか?