• ベストアンサー

iframe内のnameへ移動し、そこから更に移動する方法。

すみません。色々過去の質問を読んでみたのですが、理解できないことが多いので、新たに質問させてください。 index.htmlでiframeを使用しています。 iframe内のURLをa.htmlとし、その中に<a name="top"></a>と作成しています。 理由はわかりませんが、a name="top"がテーブル内にあるとき、<iframe="a.html#top"></iframe>と指定しましても、テーブル内にジャンプしてくれません。一方、a name="top"をテーブルの外に出すとジャンプします。 以上を踏まえ、テーブルの外にあるtopへまず移動させ(iframe src="a.html#top"</iframe>)、そのあとtopから下へ50px、右へ100px移動させたいと思うのですが、可能でしょうか? また、これ以外に簡単な方法はありませんか? よろしくお願い致します。

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

  • ベストアンサー
  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

取り敢えず、アンカーを設置する場合のみにアンカータグを使わない 方がいいかもしれません。 あと、アンカーを設置するときはname属性ではなくid属性を使用する ように推奨されています。 (name属性は非推奨) ただし、id属性に対応していないブラウザのためにname属性も併記して よいことになっており、本当に正確に書くなら併記するのがもっとも 好ましいようです。 (ただ、併記するとname属性とid属性の値が同じであるというエラーに なるという問題が...) アンカーを設置するなら <span name="top" id="top"></span> とした方がよいでしょう。 (本当は<span>と</span>の間が空なのは非推奨ですがこれは仕方ない ところです) テーブルに設置するなら <table> <tr> <td name="top" id="top">このセルにアンカーを設置</td> </tr> </table> こんな感じです。 因みに、アンカーリンクは回線の状況など(?)によって正常に動作 しないことがあるようです。

mutsukiame
質問者

お礼

いろいろ詳しい情報有難うございます。 テーブルの中で <td><a name="top"></a></td> としていたのをアドバイス通り <td name="top" id="top"></td> としましたところ、希望通りのテーブル内の場所へ移動しました。 いつもアンカータグを使っていたのですが、今回はいい勉強になりました。 有難うございます。

その他の回答 (2)

回答No.3

> topから下へ50px、右へ100px移動させたいと思うのですが、可能でしょうか? これだけが目的であれば、こんな感じのスタイルシートを書いてみてください。 <a name="top" style="position:relative;top:50px;left:100px; display:block;visibility:hidden;width:1px;height:1px;overflow:hidden;">.</a> display以降のスタイルは空白のアンカーが機能しないブラウザへの対策です。 <a>.</a>には半角スペースやピリオドなど、適当な文字を入れてください。 <a name="top" style="position:relative;top:50px;left:100px;"></a> 対策が不要なら、これだけでも良いかもしれません。 > 理由はわかりませんが、a name="top"がテーブル内にあるとき、<iframe="a.html#top"></iframe>と指定しましても、テーブル内にジャンプしてくれません。一方、a name="top"をテーブルの外に出すとジャンプします。 スタイルシートがなかった頃はテーブルで枠組みを作っていたので、それでスクロールすると思うのですが、 新しいブラウザでは既存のブラウザとは異なる動作をしたり、 ブラウザのバージョンアップによりその機能が変更、削除される可能性もあります。 以下を試してみてください。一案として。 ・省略可能なタグもすべて記述し、td要素にidを指定し、<a>を消す(これで期待通りに動けば、推奨) <table> <tbody> <tr> <td id="top"> ~ </td> </tr> </tbody> </table> ・省略可能なタグもすべて記述し、<a>を使う <table> <tbody> <tr><td><a name="top"></a> ~ </td></tr> </tbody> </table> ・a要素の中に半角スペースやピリオドなどを書いて、隠す。(<tbody>なども省略せずに書くことを推奨) <table> <tbody> <tr><td> <a name="top" style="position:absolute;visibility:hidden;"> </a> ~ </td></tr> </tbody> </table> ・<a>をテーブルの外に出し、表示位置を移動させる <a name="top" style="略。上記参照"> </a> <table> 略 </table> 以下余談。 HTML4.01とXHTML1.0の文法上で、name属性を使ってもよいタグは form、input、textarea、button、select frame、iframe、object、img、applet、 meta、map、a のみです。 このうちアンカーのためのタグは a のみで、 それ以外の要素(タグ)をアンカーとして使う場合はidを使用してください。 ただし<input>などの埋め込みオブジェクトをアンカーとして使用できるかどうかは、ブラウザに大きく依存します。 <div id="">をアンカーとして利用できるブラウザも<input name="" id="">では利用できないものが多いです。 * <td id="">がアンカーとして機能するかどうかは不明です。 あくまで個人的な考えですが。 <div> <a name="top"></a> ~ </div> というパターンであれば、<a>をわざわざ入れなくても <div id="top"> ~ </div> で済むはずですので、このように書き直せるなら、<a>を使わないことを推奨します。 (name属性を非推奨ではなく、<a>はもちろん、その代わりになりそうな<span>も<div>も入れることすべて非推奨) <a>のname属性はNetscape-HTMLとJavaScript(ECMAScriptではなく)の名残なのかもしれません。 HTML5、XHTML1.1ではaのname属性は定義されていませんし、 ECMAScriptでもdocument.formsやdocument.anchorsなどのname属性を利用する記述を定義していません。

参考URL:
http://www.w3.org/TR/html4/index/attributes.html
mutsukiame
質問者

お礼

非常に多岐に渡るアドバイス有難うございます。 <a name="top"> </a>は私のシステムではTable内で使用できないらしく<td name="top" id="top"></td>としたところ、Table内にジャンプしてくれました。 今後は<div id=""></div>や<td id=""></td>なども使って行きたいと思います。 この度は有難うございました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

iframeのサイズを指定しているとすれば、表示したい位置が事前に特定できるでしょうから、いきなりそこまでスクロールさせてもよろしいかと・・ onload functionで  window.scrollTo(x, y); や window.scrollBy(x, y); を 利用すればできそうです。 (後者は相対スクロールなので、#指定からのスクロールでも使えるでしょう)  http://www.tohoho-web.com/js/window.htm#scroll ブラウザにレイアウトをまかせている部分があると、正確な位置の指定が難しくなりますね。

mutsukiame
質問者

お礼

アドバイス有難うございます。 onload functionのwindow.scrollBy(x,y);はiframe中のa.htmlのheadに記述するのですね? 実は、a.htmlは別ページでも使用していまして、onload functionを設定してしまいますと、スクロールしたくないときにもスクロールしてしまうようです。 あくまでindex.htmlのiframe中でのみスクロールしたいんです。 有難うございます。

関連するQ&A

  • IFRAMEとA NAMEについて 少しわかりにくいです

    index.html内にIFRAMEでA.htm<IFRAME SRC="A.htm#b"> というように載せた場合、 index.htmが一番上で表示されずに<A NAME="b">がある位置で表示されます。 例として index.htmは <title> <font>題名<br>×15個 <IFRAME SRC="A.htm#b></IFRAME><br>×15個 A.htmは <font>ああああああああ <br><br><br> <A NAME="b"> いいいいいいいい です。index.htmにアクセスした場合、"題名"の位置で表示されずインフレーム内の<A NAME="b">の位置が一番上で表示されます。つまりずれるので題名がみれなくなります。 ちょっとわかりにくいですが原因と対処方法を教えてください

    • ベストアンサー
    • HTML
  • 「iframe内ページ」の「ページ内移動」

    ■現在しようとしていること --------------------------------------- index.html=「A」/ calender.html=「B」 iframeは「A」の中ごろにあります --------------------------------------- 1)親ページ「A」のiframeで「B」をよみこませる 〔補足※iframeのサイズはwidth:500×height:200〕 2)「B」には1月~12月までのカレンダー表がタテに並んでおり、iframeでの表示範囲は1ヶ月分だけ見えるようにする 〔補足※1ヶ月のカレンダーの縦は200px〕 3)「A」を読み込んだ時点で、「B」の特定の月の部分のみ指定で見えるようにしたい(自動で変わるのでなく手動で変える) 4)「B」のページは、各1ヶ月(200px)ごとにページ内移動でき、「▲last」「▼next」で前後のカレンダーにジャンプする --------------------------------------- ■現在の記述 ◆親:A側 <iframe src="calender.html#200705" width="500" height="200"></iframe> ◆フレーム内:B側 <p><a href="#200704" target="_self">▲LAST</a></p> <p><a name="200705"></a>2007/MAY 5</p> <p><a href="#200706" target="_self">NEXT▼</a></p> --------------------------------------- ■現在の状況 ・「A」を開いたとき ・「A」から「B」内のページ内リンクを操作したとき 以上のときに、iframeを指定しているページの中腹あたりをページの先頭としてしまう。(「B」内の特定箇所をはじめに表示させることはできているが、ページの先頭がページ「B」の先頭になっている) --------------------------------------- どのようにすれば、常にページの先頭をページ「A」の先頭にしておくことができるでしょうか? どうぞよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • iframe越しに文字をインプット

    クリックした文字をifame内のテキストボックスに入れたいのですが、うまく動きません。iframeの特殊な指定のしかたなどあるのでしょうか? よくわからないところ:「parent」はとりあえず入れてみただけ。 (^^; 【sample1.htm】 <A href="javascript:function voi(){};voi()" onclick="parent.document.fm1.Title.value='やったね'">転記</A> <IFRAME NAME="Frame1" WIDTH=800 HEIGHT=500 SRC="sample2.htm" STYLE="position:absolute;top:50px;left:5px;"></IFRAME> 【sample2.htm】 <form name="fm1"> <INPUT TYPE="TEXT" NAME="sample" SIZE="12"> <form>

  • iframe内でのスクロールについて

    iframeに関する質問です。 iframe内のみアンカーでスクロールしたいのですが、iframe含めページ全体がスクロールしてしまいます。 sampleファイルとして質問したい部分を抜粋したものを下記を記載します。 ◆index.html(親html) ◆01.html(iframe含む子html) ↓ ◆index.html <ul> <li><a href="01.html#Aarea" target="inline">子htmlのAへスクロール</a></li> <li><a href="01.html#Barea" target="inline">孫htmlのBへスクロール</a></li> <li><a href="01.html#Carea" target="inline">孫htmlのCへスクロール</a></li> </ul> <iframe src="01.html" id="inline" name="inline" width="300px" height="300px"></iframe> ◆01.html <div name="Aarea" id="Aarea" style="background:#00F; width:300px; height:300px; color:#CCC;"> <p>A area</p> </div> <div name="Barea" id="Barea" style="background:#9C0; width:300px; height:300px; color:#CCC;"> <p>B area</p> </div> <div name="Carea" id="Carea" style="background:#C36; width:300px; height:300px; color:#CCC;"> <p>C area</p> </div> これを実行した際に親であるindex.htmlもスクロールしてしまいます。 以前にも似た質問がされていましたが、対処方法が思っていたものと違っていた為質問自体重複してしまうかもしれませんが質問するに至りました。 完全にiframe内のみをスクロールさせる方法はありますでしょうか。 よろしくお願いします。

  • iframeに横スクロールを出現させない方法(IE6)

    いつもお世話になっております。 今回は、IE6でiframeの横スクロールバーを出現させない方法がわからずこちらで質問させていただきました。 TOPページにindex.htmlを置いており、indexにiframeを3つ(top.html/menu.html/main.html)作成し、ページを作っております。 top/mainの2箇所に問題は無く、menuの部分での質問です。 iframeは幅200pxで設定しており、その中に幅指定100%のmanu.htmlをiframe src=""で埋め込んでいます。 menu.htmlには幅200pxで作成した背景画像(no-repeat)と、幅100%指定のiframeを使用しております。 menu.htmlに対しCSSで overflow: auto;を当てていますが、スクロール表示しないといけない状態に画面を変更した場合横スクロールが消えない状態です。(IE7ではきえるのですが…) IE6の特徴の、文章等がある場合親のサイズに合わすことが要因だと思いますが、iframe/menu.htmlのサイズを変更させず横スクロールを表示させないことは可能でしょうか?(menu.htmlを180px固定とか、index.htmlのiframeをscroll="yes"にすれば平気ですが、不恰好になるので…) よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • iframe内からのリンク

    少々複雑ですいませんがお願いします。 ・index.htmlにname="contents"でiframeを設置 ・iframe内に先頭に戻るリンクを最下部に設置したい(ここでいう先頭はページ全体のトップ) ・上記リンクを押した際にiframe内は現時点のページのまま index.html ------------- <body> ヘッダー内容 <iframe src="フレーム内ページ.html"></iframe> + + + フレーム内ページ ----------- <body> <a name="top"></top> ページの内容 + + + このままだとフレーム内ページの先頭に飛ぶのは周知なので。 条件として、 ・CSSは使用可能。 ・javascriptは使えるが、使わないですむならその方が良い。 ・環境上jQueryは不可。 ・flash他は考えない。 カテゴリが異なるのかもしれませんが;よろしくお願いします。

    • ベストアンサー
    • HTML
  • リンクをクリックすると、親ウィンドーにiframe構造のページが開き、さらにターゲットへジャンプする方法はありますでしょうか?

    例えば、 index.htmlを下記の通りとします。 --iframe----HTML----- |       |       | | menu   |        | ---------------------- 左のmenuをクリックすると、iframeで作った別のページが開き、さらにその中のページのターゲット内に移動したいのです。 index.htmlのmenuをクリック→anotherpage.htmlへ移動 --iframe----iframe----- |       |main.html | | menu   |      | ---------------------- さらに、右iframe内はmain.html内のターゲットAへジャンプ。 このようなジャンプは可能でしょうか? よろしくお願いします。

  • iframeにリンクを貼る

    <iframe src="qqq.gif" height="150" width="356" align="left" frameborder="0" scrolling="no" marginheight="1" name="tv" > この部分はiframe表示です </iframe> にURLを指定してリンクを張りたいのですが、どうしたらいいですか?

  • iframe ピンポイント表示

    <body> <iframe width="235" height="100%" src="http://~"> </iframe> </body> (詳細略) このままだとURL先のページがフレームの左と上に合ってしまい、 スクローラーバーが縦横に出ます。 これをURL先の特定の部分が表示されるようにするためには、 どのようにすればよいでしょうか? 例えば、URL先の上から 100px 左から 100px の部分を、 フレームの左上隅にピタット合わせて表示したいという感じです。 相手先に<a name=""></a>でもあればそこに合わせられますが、 当然私側からはできません。 スクローラーバーを出ないようにできれば、尚いいのですが・・。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • リンクをクリックすると親ウィンドーにiframe構造のページが開き、さらにターゲットへジャンプする方法はありますでしょうか?

    以前質問させてヒントをいただいたのですが、結局解決できなかったのでもう一度お願いします。 例えば、index.htmlを下記の通りとします。 --iframe----HTML----- |       |        | | menu  |        | ---------------------- 左のmenuをクリックすると、iframeで作った別のページが開き、さらにその中のページのターゲット内に移動したいのです。 index.htmlのmenuをクリック→anotherpage.htmlへ移動 --iframe----iframe----- |       |main.html   | | menu   |        | ---------------------- さらに、右iframe内はmain.html内のターゲットAへジャンプ。 このようなジャンプがJavaScriptで可能だと教えていただきましたが、どのようにするのか解りませんでした。 そのプログラムや、それ以外の簡単な方法がありましたら、教えて下さい。 よろしくお願いします。

専門家に質問してみよう