0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第10回 SVG 要素を重ねてみる

Posted at

はじめに

これまで作成したSVGアイコンでは、要素を重ね合わせることがほとんどなく、色も1色しか使っていなかったため、要素を重ねたらどうなるのか?わかりませんでした。
div要素の重ね合わせではレイヤーが存在しましたが、SVGではレイヤーについては調べてみましたが見つけられず、どうやら記載順で重ね合わせが変わるようなので、それをまとめます。

今回実施する内容

赤色の正方形と青色の正方形を並べて重ね合わせがどうなるかを確認します。
image.png

ソースコード(Git Hub)

環境

OS: Windows 11 JP (64bit)
Edge: バージョン 140.0.3485.81 (公式ビルド) (64 ビット)

参考

用語

要素の重ね合わせ

隣り合わせ

image.png

symbol要素で、赤色と青色の正方形を隣り合わせに配置します。

menu.htmlの抜粋
  <div id="nextto">
    隣り合わせ赤と青<br>
    <svg width="100px" height="50px" class="border">
      <use xlink:href="overlap.svg#nextto"></use>
    </svg>
  </div>

隣り合わせの赤と青の正方形を構成するoverlap.svg内のid=nexttoを呼び出します。

overlap.svgの抜粋
    <symbol id="rect" xmlns="http://www.w3.org/2000/svg">
      <rect width="100" height="100" />
    </symbol>

    <symbol id="Red" xmlns="http://www.w3.org/2000/svg">
      <use href="#rect" fill="red" />
    </symbol>

    <symbol id="Blue" viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
      <use href="#rect" fill="blue" />
    </symbol>

    <symbol id="nextto" viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
      <use href="#Red" />
      <use href="#Blue" x="100" />

symbol要素で正方形を作成し、これをid="rect"とします。
この正方形をuse要素で呼び出し、赤色と青色に色を付けて、新たな正方形のsymbol要素を作成します。これらの要素をid="red"id="blue"とします。
さらに、その赤色と青色の正方形をuse要素で呼び出し、赤色の正方形の右横にx="100"としてに青色の正方形を配置したSymbol要素を作成します。この要素をid="nextto"とします。

オーバーレイ赤の上に青

image.png

symbol要素で、赤色の正方形の上に半分だけ右にずらして青色の正方形を重ねます。図形を半分ずらることでオーバーレイの順番を確認できるようにします。

menu.htmlの抜粋
  <div id="overlay">
    オーバーレイ赤の上に青<br>
    <svg width="100px" height="50px" class="border">
      <use xlink:href="overlap.svg#overlay"></use>
    </svg>
  </div>

赤色の正方形の上に半分だけ右にずらして青色の正方形をオーバーラップしたoverlap.svg内のid=overlayを呼び出します。

overlap.svgの抜粋
    <symbol id="overlay" viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
      <use href="#Red" />
      <use href="#Blue" x="50" />
    </symbol>

赤色と青色の正方形のsymbolid="red"id="blue"で、先ほどの「隣り合わせ」と同じため、割愛します。
symbol要素id="overlay"では、use要素で赤色と青色の正方形を呼び出しますが、青色の要素は、赤色の要素に比べて右横x="50"とし、半分だけずらします。 use`要素の記載順が赤色、青色となっているため、赤色の上に青色の正方形が表示されます。

オーバーレイ青の上に赤

image.png

symbol要素で、赤色の正方形の上に半分だけ右にずらして青色の正方形を重ねます。図形を半分ずらることでオーバーレイの順番を確認できるようにします。
1つ前とは重ね順を逆にして、青色の上に赤色の正方形を重ねます。

menu.htmlの抜粋
  <div id="overlay2">
    オーバーレイ青の上に赤<br>
    <svg width="100px" height="50px" class="border">
      <use xlink:href="overlap.svg#overlay2"></use>
    </svg>
  </div>

赤色の正方形の上に半分だけ右にずらして青色の正方形をオーバーラップしたoverlap.svg内のid=overlay2を呼び出します。

overlap.svgの抜粋
    <symbol id="overlay2" viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
      <use href="#Blue" x="50" />
      <use href="#Red" />
    </symbol>

赤色と青色の正方形のsymbolid="red"id="blue"で、先ほどの「隣り合わせ」と同じため、割愛します。
symbol要素id="overlay2"では、use要素で先ほどとは順番を逆にして、青色、青色の正方形を呼び出しますが、青色の要素は、赤色の要素に比べて右横x="50"とし、半分だけずらします。 use`要素の記載順が青色、赤色となっているため、青色の上に赤色の正方形が表示されます。

おわりに

今回は、symbol要素を重ねたときの重なりがどうなるかを確認しました。
要素の記載した順にどんどん重ね書きしていくことがわかりました。
複雑なものになってくるとなかなか難しそうな気はしてきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?