質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

2回答

401閲覧

.svgにtransform: translateY(1px)をすると上に重ねた画像が隠れてしまいます。

asada88

総合スコア7

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2023/09/01 08:51

実現したいこと

svgの上にimg画像を重ねたいが、隠れてしまいます。z-indexは他の場所に影響を与えてしまうのでなるべく使いたくありません。

前提

お世話になります。
とても不思議なのですが、同じように書いているにも関わらず、波線が上向きのパターンと波線が下向きのパターンの画像の表示が違ってくるのです。
上向きの波線の時は花が隠れてしまうのです。

イメージ説明

イメージ説明

波線が上向きのパターン

<div class="top-decorative-image"> <img class="decorative-pic flower-pic" src="img/deco01.png" alt=""> </div> <div class="top-faq-svg top-faq-svg--top"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320"> //省略しています。 </svg> </div>

波線が下向き

<div class="top-faq-svg top-faq-svg--bottom"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320"> //省略しています。 </svg> </div> <div class="top-decorative-image"> <img class="decorative-pic leaf-pic" src="img/deco05.png" alt=""> </div>
.top-faq-svg--top { transform: translateY(1px); //違うのはここのみ } .top-faq-svg--bottom { transform: translateY(-1px); //違うのはここのみ } top-faq-svg svg { width: 100%; height: auto; }

試したこと

①最初は花の画像にのみz-indexを書いたのですがそうすると他の場所に影響を与えてしまいます(ハンバーガーメニューの上に花の画像が表示されてしまう)

②順番が逆なのが良くないのかと、svgとimgの順番を変えてみたりしましたが関係はなさそうでした。

でも結局はtransform: translateY(1px)を削除すると花の画像がsvgの上に乗っかるのが分かりました。
たしかに(1px)と(-1px)の違いはあるのですが、 私の認識ではtransformは場所の移動だけでz-index のような意味はないと思っています。
試しに葉っぱの方のtransform: translateYを(1px)に変更してみたのですが、葉っぱが隠れることはありませんでした。
なぜこのような現象になるのか不思議でなりません。
どなたかお分かりになりますでしょうか?
長くなり申し訳ありません。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

表示させてみたのはchromeのみです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2023/09/01 09:00

このCSSですと、そもそも重ならないのでは……?
Lhankor_Mhy

2023/09/01 09:09

ご提示のコードに加えて、画像を重ねるようにいろいろ追加してみたところ、問題が再現しませんでした。 『順番が逆なのが良くないのかと、svgとimgの順番を変えてみたりしましたが関係はなさそう』とのことですが、jpgとsvgの順番を入れ替えてみると、重なり方が変わりました。 ご提示いただいていない部分に原因がありそうです。
guest

回答2

0

transform を指定するとその要素専用の重ね合わせコンテキストが作られて、元々属していた重ね合わせコンテキストよりも手前に描画されるようになります。

どのように対処すべきかは HTMLとCSSの全体と設計意図を見てみないと正確にはわかりませんが、最初に試すことはやはり花画像でも重ね合わせコンテキストを作るようにして、花画像とSVGのz-indexで調整ですね。

投稿2023/09/01 13:39

int32_t

総合スコア21929

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asada88

2023/09/02 00:54

度々目にするコンテキスト・・。 今まで見なかったふりをしてきましたが意味合いを調べてみました。 やはりtransformにはいうなればz-indexのような挙動をするということですよね? どうしてもz-indexを使いたくないので、これは根本的に見直さないということでした。 回答していただき本当にありがとうございました!
guest

0

ベストアンサー

imgとsvgの出現順の問題では?

参考

HTML

1<style> 2.wrap{ 3position:relative; 4height:200px; 5} 6.top-decorative-image{ 7position:absolute; 8} 9.top-faq-svg--top { 10animation:trans 1s infinite; 11position:absolute; 12} 13.top-faq-svg--bottom { 14animation:trans 2s infinite; 15position:absolute; 16} 17@keyframes trans{ 18 from{transform: translateY(100px);} 19 50%{transform: translateY(0px);} 20 to{transform: translateY(100px);} 21} 22</style> 23<div class="wrap"> 24 <div class="top-faq-svg top-faq-svg--top"> 25 <svg width=200 height=200> 26 <circle cx=150 cy=150 r=50 fill=blue /> 27 </svg> 28 </div> 29 <div class="top-decorative-image"> 30 <img src="https://placehold.jp/ff0000/00ffff/150x150.png?text=1"> 31 </div> 32 </div> 33</div> 34<div class="wrap"> 35 <div class="top-decorative-image"> 36 <img src="https://placehold.jp/ffff00/0000ff/150x150.png?text=2"> 37 </div> 38 <div class="top-faq-svg top-faq-svg--bottom"> 39 <svg width=200 height=200> 40 <circle cx=150 cy=150 r=50 fill=green /> 41 </svg> 42 </div> 43</div> 44<div class="wrap"> 45 <div class="top-decorative-image"> 46 <img src="https://placehold.jp/ff00ff/00ff00/150x150.png?text=3"> 47 </div> 48</div>

※調整
先に設定したものが下にくる

投稿2023/09/01 08:57

編集2023/09/01 09:44
yambejp

総合スコア117674

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asada88

2023/09/02 01:07

わざわざコードを書いていただきありがとうございます!! とても楽しく拝見しました。 そしてなるほどでした・。 私の方でもsvgとimgを入れ替えてみたのです。確かに波線の上には花がきたのですが、今度は上記の図に少し見えている黄色の部分(section)の中に花の茎が隠れたままなのです。(現在の順番svg→img→section) サイトの色々な場所にimg画像を散らしたく、おきたい場所の近くにhtmlを書いていたのですが、先に設定したものが下にくる。をふまえて、おきたい場所にimg画像を置くのではなく、html上で一番最後に書くことにしました。(svg→section→imgという感じで) topの数値が−950pxと大きくはなってしまうのですが・・。 丁寧な回答を本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問