■12502 / inTopicNo.2) |
Re[1]: Imageの重ね合わせとPanel内スクロールについて |
□投稿者/ 七曜 (30回)-(2008/01/10(Thu) 18:01:47)
|
■No12423 (かとけん さん) に返信
C#というかWeb サーバーコントロール云々ではなくって、CSS(Style指定方法)の問題なのではないでしょうか。
CSSの解釈はブラウザによって微妙に異なりますので、ブラウザに合わせて調整する必要がある点にご注意下さい。
以下の内容はVista上のIE7で確認している内容です。
Panel Web サーバーコントロールは、実行時にdiv要素を出力します。
Panelのサイズを指定して、ScrollBarsプロパティをAutoにすると
生成されるHTMLは
<div id="Panel1" class="parentPanel" style="height:300px;width:500px;overflow:auto;">
といったようにoverflowが適用されて、内包される要素に応じてスクロールバーが出ますね。
次にベースとなるMapImageは、通常のimg要素として出力され
<img id="ImageMap1" src="Images/map.jpg" style="border-width:0px;" />
特にposition/height/width指定がないので、親要素のdiv内に実サイズで生成されますから
この例でいけば、height:300px;width:500px以上の大きさであれば、スクロールバーが生成されます。
次にiconの表示になりますが、これもimg要素として出力されますが、position:absoluteになりますので
指定された位置に出力されます。
この時のposition:absoluteの基準になる矩形が、その親要素に基準となる指定がなされていない場合には、
body要素といいますか、ブラウザの表示領域の左上端が基準になります。
ご希望の動作でいうと、基準はPanel(div要素)が基準でposition:absoluteが効いていれば、
スクロールバーでスクロールさせた場合に、追従してスクロールします。
では、Panel(div要素)が基準でposition:absoluteを効かせるにはどうするか、ということになりますが
基準となる要素にposition:absolute | position:relative | position:fixedがあればよいということです。
(参考:http://www.seo-equation.com/html/css/box)
結論としては、以下のようなコードを試してみると良いかと思われます。
this.MapPanel.Style.Add(HtmlTextWriterStyle.Position, "relative");
Image mapImage = new Image();
mapImage.ImageUrl = "map.jpg";
this.MapPanel.Controls.Add(mapImage);
Image iconImage = new Image();
iconImage.ImageUrl = "icon.jpg";
iconImage.Style.Add(HtmlTextWriterStyle.Position, "absolute");
iconImage.Style.Add(HtmlTextWriterStyle.Top, "100px");
iconImage.Style.Add(HtmlTextWriterStyle.Left, "150px");
iconImage.Style.Add(HtmlTextWriterStyle.ZIndex, "10");
this.MapPanel.Controls.Add(iconImage);
希望の動作イメージと異なっていたらごめんなさい。
|
|