- ベストアンサー
FlashとDHTML(レイヤー)の相性について
こんにちは。 ウェブページで、 メニューをDHTMLプルダウンメニュー(レイヤー)にし、その直ぐ下に「Flashコンテンツ」をおきました。 そしたら、DHTMLプルダウンメニューが 「Flashコンテンツ」に隠れてしまいました。 これはなぜでしょうか。 共存させる方法がありませんか。 物理的(仕様的)に仕方がないのでしたら その理由も教えていただけますか。 どうぞ宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>1.「Flashコンテンツ」だって普通に「レイヤー」に入れてもOKなのか? 確認済みですがMac版IE5.1、Netscape7ではOKです。 <div id="layer1">などと用いるレイヤーというのは単に領域を定義しているだけにすぎません。そして以下のようにCSSで各プロパティを定義して用いるのが普通ですね。 #layer1 { position: absolute; z-index: 2; top: 128px; left: 0px; width: 128px; height: 100px; visibility: hidden } HTMLは文書の構造を単に定義するものであり、レイアウトするのはCSSの役割です。このようなことから<embed>あるいは<object>コンテンツの領域をCSSによってレイアウトするのはOKと判断できます。 しかし実際問題としてHTMLやCSSの標準化を行っているのはW3Cであり、ブラウザのベンダはMSであり、Netscapeですが実装される機能がW3Cの仕様に忠実に沿っているかというのは別問題になります。試していませんがOpellaなど他のブラウザでは正しく表示されないかもしれません。なぜなら仕様と実装は別問題であるからです。実際に一部の古いブラウザではレイヤー内の動画GIFがうまく表示されません。 >2 レイヤーの重なり順序を指定することで「Flashコンテンツ」を「プルダウンメニュー」の後ろに表示させることは可能か? CSSのz-index:での順序の入れ替えというのは<embed>あるいは<object>で埋め込まれた領域については不可能です。<embed><object>の領域の表示は通常MIMEタイプによって指定されたプラグインが行うため、レイヤーによるプルダウンメニューが表示されず、潜り込むように見えることになります。Flashを含むレイヤーの表示・非表示の操作もできませんし、Flashコンテンツを含むレイヤーを動かすと枠部分のみ動くように見えるのはこのためです。 ただしこの制限の例外としてフォームのポップアップメニューはFlash上にかかっても正しく表示されるようにブラウザ側で排他制御されているようです。 補足からようやく事情が理解できました。これで納得いただけたらよいのですが
その他の回答 (3)
- jakarta
- ベストアンサー率38% (607/1597)
>たとえば、「Flashの領域」をレイヤーで表示させ、 「プルダウンメニュー」のレイヤーと共存させる方法はありませんか。 「プルダウンメニュー」が「Flashの領域」より前面(表)に表示されるようになればベストですが。。。 レイヤーの重なり順序を番号として割り当てることができるのは知っていますか? 実際にやってみればどういうことか判断がつくと思います。
補足
ご回答どうもありがとうございます。 >レイヤーの重なり順序を番号として割り当てることができ>るのは知っていますか? →はい、知っています。ただ、CSS+JavaScriptを利用したプルダウンメニューにおいて「レイヤー」の重なり順序を指定する程度です。 Flashコンテンツをレイヤーに格納することは実際にやったことがありませんが、そうやって特に問題はないのでしょうか。 一応会社のウェブページなので、環境(OS、ブラウザー) 次第では表示できなかったりするとなると避けたいのですが。。。 知りたいことをまとめますと、 1.「Flashコンテンツ」だって普通に「レイヤー」に入れてもOKなのか? 2.「1」が問題ない場合、レイヤーの重なり順序を指定することで「Flashコンテンツ」を「CSS+JavaScriptのプルダウンメニュー」の後ろに表示させることは可能か? ※実際にソースをいじってやってみたいのですが、コーディングは自分ではできない(権限・知識ともあまりない)ため、外部にお願いすることになります。 もしよろしかったら、上記の2つを教えていただきたいです。宜しくお願いします。
- jakarta
- ベストアンサー率38% (607/1597)
そもそもHTMLは文書の構造化のためのものだったのですが、構造化と動かすという機能を一緒にしたことによりDHTMLは構造を定義したものを動かすという非常に奇妙なものとなってしまいました。これにより<embed>で埋め込まれたり<object>でプラグインコンテンツとして定義されたFlashの領域の上をレイヤーが通過するなどということは例外にあたってしまいます。 またこのようなことからDHTMLだけでなくJavaScriptでプルダウンメニューを作成しても表示部分がプラグインコンテンツの領域の上に来ると正しく表示されない問題が起こります。
補足
こんにちは。 ご指導いただき、どうもありがとうございます。 まず、ご質問内容を訂正させてください。 プルダウンメニューは「DHTML」ではなく、 「CSS + JavaScript」を用いたものです。 すみませんでした。 やはり「共存はできない」ようですね。 --- <embed>で埋め込まれたり<object>でプラグインコンテンツとして定義されたFlashの領域の上をレイヤーが通過するなどということは例外にあたってしまいます。 --- →たとえば、「Flashの領域」をレイヤーで表示させ、 「プルダウンメニュー」のレイヤーと共存させる方法はありませんか。 「プルダウンメニュー」が「Flashの領域」より前面(表)に表示されるようになればベストですが。。。 (どうしても駄目な場合は、「Flashの領域」をページ下に下げ、重ならないようします。) 再度ご指導願えますでしょうか。 どうぞ宜しくお願いします。
- GunBoy
- ベストアンサー率52% (19/36)
おはようございます。 情報が少ないのでレスがつきにくいと思います。 できれば、問題の部分のソースを書き出してもらえれば 答えやすいかと・・。 あとDHTMLのプルダウンメニューと書かれてますが、 具体的にどういう手法を使っておられるのでしょうか。
補足
こんにちは。 プルダウンメニューは、 DHTMLではなく、「CSS+JavaScript」で作られたものでした。混乱を招き、どうもすみません。訂正いたします。 具体的なソースはご紹介できませんが、 上から下に展開される「プルダウンメニュー」と、 「プルダウンメニュー」の下1/3くらい重なってしまう 「Flashコンテンツ」を共存できる方法がもしあればと思いました。 ちなみに、今まで自分で調べたところでは、「方法なし:重ねて使用できない」でした。 やはりできないのなら「何故」できないのかを知りたいと思いました。 (実は、自分もそうですが、会社の上司に納得できる説明をしたいです。) もしお時間などありましたら、ご指導いただけますか。 どうぞ宜しくお願いします。
お礼
こんばんは。 ご丁寧なご指導をどうもありがとうございます。 「<embed><object>の領域の表示は通常MIMEタイプによって指定されたプラグインが行うため、・・・」が不可能な由縁ですね。大変よくわかりました。 お蔭様で少し賢くなった気分です。 また機会がありましたら ぜひよろしくお願いします。