SSブログ

「ホームページ雛形」作成時に「教えて!goo」で得られた解決策 [その他]

 「ホームページ雛形」を作っている時に生じた問題を解決するために「教えて!goo」で質問したところ、解決できる有難い回答が得られたのでメモしておく。
 まずは一つ目の質問。
Firefoxで一番下のstickyが上に引っ張られる。

    質問者:いしい
    質問日時:2021/04/13 15:51
    回答数:2件

上からmenu、contents、footerのhtmlソースで、
contentsを"position:relative; top:-200px;"で上に200px移動させたら下のfooterとの間に隙間ができました。
この隙間を埋めるためにcontentsに"margin-bottom:-200px;"を追加したらfooterとの隙間は埋まりましたが、footerの下に隙間ができてしまいました。
contentsに"margin-bottom:-200px;"を追加する代わりにfooterに"margin-top:-200px;"を追加しても同じです。
contentsを上に200px移動させるために"position:relative; bottom:200px;"を使っても同様です。

下記のソースでFirefoxで確認しました。
Chromeでは再現しませんでした。
Firefoxはver.87.0です。
Firefoxでの動作は諦めるしかないのでしょうか?

目的はcontentsとfooterの間に隙間を作らず、かつ、footerの下に隙間を作らないことです。
”position:sticky;”ではなく"position:fixed;"も試しましたが、contentsとfooterの間に隙間ができてしまいました。bodyのheightを固定すれば目的は達成できますが、実際のソースではbodyのheightは固定できません。

よろしくお願いします。

<style>
.menu{width:300px;height:400px;background-color:red;}
.contents{width:300px;height:1000px;background-color:blue;border-radius:50%;}
.footer{width:300px;height:50px;background-color:red;}
.footer{
position:sticky;
bottom:0;left:0;
}
.contents{
position:relative;
top:-200px;
margin-bottom:-200px;
}
</style>
<body>
<div class="menu"></div>
<div class="contents"></div>
<div class="footer"></div>
</body>
 一つ目の質問のベストアンサー。
回答者: fujillin 回答日時:2021/04/13 16:37 

こんにちは

contents部分がmenuより上にはいかないと仮定して・・・
空きの部分は無いものとして計算させればよいのでは?

<div class="wrap">
<div class="menu">menu</div>
<div class="contents">contents</div>
</div>
<div class="footer">footer</div>
などとしておいて、

.wrap{ overflow:hidden; }
を追加するとかではいかがでしょうか?
(fx 86.0で確認)
次に二つ目の質問。(誤字、脱字あり)
z-indexで上になっている要素だけでなく下の要素も上の要素のリンクもクリックしたい。

質問者:いしい
    質問日時:2021/04/14 02:48
    回答数:1件

ブロックレベル要素が重なってz-indexの数値で上下関係を決めた場合に重なっている部分では、
通常はz-indexの数値が大きい方にはアクセスできるけれど小さい数値の方にはアクセスできないと思います。
重なっている部分ではz-indexの数値が小さい方はテキストの選択もリンクのクリックもできないと思います。
ですが、私は重なっている上下の両方の要素にアクセスしないといけなくなりました。
上だけ、下だけにアクセスする方法は分かります。
両方にアクセスするにはどうしたら良いでしょうか。

単純化して試している下記の通りです。
緑色の四角の内、ピンクの枠で囲まれている所、
左のリンク「55」をクリックできて、テキスト「666」を選択できて、
右のリンク「3333」「5555」をクリックできて、とテキスト「44」「66」を選択できるようにしたいです。
ちなみに、実際のソースではin_menuとin_contentsはiframeです。divでもできなかったので、divで質問させていただきました。

よろしくお願いします。

<style>
*{font-size:18px;}
.menu{width:300px;height:50px;background-color:red;text-align:left;}
.in_menu{width:250px;height:150px;border:10px solid pink;}
.contents{width:250px;height:200px;margin-left:20px;background-color:blue;}
.in_contents{width:250px;height:150px;margin-left:20px;background-color:green;text-align:right;}
.footer{width:200px;height:40px;background-color:black;}
.menu{z-index:0;}
.in_menu{position:relative;z-index:3;}
.contents{z-index:1;}
.in_contents{z-index:2;}
.in_menu{pointer-events: auto;}
.in_contents{pointer-events: auto;}
</style>
<body>
<div class="menu">
<div class="in_menu">
<a href="">1111</a>2222<br>
<a href="">3333</a>4444<br>
<a href="">5555</a>6666<br>
</div>
</div>
<div class="contents">
<div class="in_contents">
<a href="">1111</a>2222<br>
<a href="">3333</a>4444<br>
<a href="">5555</a>6666<br>
</div>
</div>
<div class="footer"></div>
</body>
 この質問のベストアンサー。
回答者: debu120t 回答日時:2021/04/14 22:21 

なんかすごいもん作ろうとしてるんですねえ。
がんばってください。

<span id="text01"><a href="">1111</a>2222</span>

こんな感じで一行ずつくくり、

#text01 {
position: relative;
z-index:9999;
}

みたいな感じじゃだめですかね?
平たく言えば、z-indexでどんな要素よりも上にする、というもんですわ。
できっかなあ。やってないからわからないけど、位置もつけてabsoluteの方がいいか。それでもダメならfixedだったら確実できるね。ちょっと使いづらいけど。
 そして、質問にもあったiframeを使ったテストソース。

test.html
<style>
*{font-size:18px;}
.menu{width:300px;height:50px;background-color:red;text-align:left;}
.in_menu{width:250px;height:150px;border:10px solid pink;}
.contents{width:250px;height:200px;margin-left:20px;background-color:blue;}
.in_contents{width:250px;height:150px;margin-left:20px;background-color:green;text-align:right;}
.footer{width:200px;height:40px;background-color:black;}
.menu{z-index:0;}
.in_menu{position:relative;z-index:3;}
.contents{z-index:1;}
.in_contents{z-index:2;}
.text01 {
position: relative;
z-index:9999;
}
</style>
<body>
<div class="menu">
<iframe src="test0.html"></iframe>
</div>
<div class="contents">
<div class="in_contents">
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
</div>
</div>
<div class="footer"></div>
</body>
test0.html
<style>
*{font-size:18px;}
.menu{width:300px;height:50px;background-color:red;text-align:left;}
.in_menu{width:250px;height:150px;border:10px solid pink;}
.text01 {
position: relative;
z-index:9999;
}
</style>
<body>
<div class="in_menu">
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
<span class="text01"><a href="">1111</a>2222<br></span>
<span class="text01"><a href="">3333</a>4444<br></span>
<span class="text01"><a href="">5555</a>6666<br></span>
</div>
</body>

 もしかしたら、「ホームページ雛形」のメニューもインラインフレームにできるかもしれない。
(ちょっと試したら、プルダウンメニューで下の方を選択するとプルダウンメニューが消えるバグが発生。z-indexを上げた下の層の文字などのタグがプルダウンメニューの選択肢よりも優先されるためだと思われる。ちょっと簡単ではなさそうなので、この問題は先延ばしする。)

 次の図は「ホームページ雛形」のフッタの下の隙間を消すまでの手順。現在の「ホームページ雛形」はメニューブロックの高さを広げてないので、この手順は踏んでない。
20210415_1.png

共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。