準備
まずはSVGをHTML内に記述する方法です。
HTML
<div id="wrap"> <div class="description"> ここにコンテンツが入ります。 </div> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="none" id="svg-bg"> ここにSVGを入れます。 </svg> </div>
CSSです。
「#wrap」に「relative」、「#svg-bg」に「absolute」を指定すればSVGを背景画像のように扱えます。
CSS
html, body, #wrap { height: 100%; } #wrap { position: relative; } #svg-bg { position: absolute; width: 100%; height: 100%; top: 0; left: 0; z-index: -1; }
画面全体に斜め線を引く
最初はSVGのPath機能を使用して画面全体に線を描いてみます。
SVGの部分に下記を記述します。
HTML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="none" id="svg-bg"> <path d="M0,0 v100 l100,-100 Z" fill="#5ba4cf" /> <!--<path d="M0,0 L100,0 0,100 Z" fill="#5ba4cf" />--> </svg>
svgのviewBoxに100を指定すると、pathの100が100%表示になります。
CSSも100%指定しているので全画面で表示されます。
斜め線の部分はpathで表示しています。
pathの単純な例を見てみましょう。
M0,0 L100,0 0,100 Z
これは0,0地点から開始(M)して、座標100,0から0,100を通り(L)閉じる(Z)という記述になります。
絶対値で指定する方法です。
他にも相対座標で指定する方法があります。上記を相対座標で指定する場合下記のようになります。
M0,0 v100 l100,-100 Z
これは0,0から開始して右に100(v)まで線を引き、最後に100,-100(l)に移動して閉じる(Z)となります。
相対で指定する場合小文字になります。
画面全体に曲線を描く
円のような曲線です。
曲線の描き方はいくつかありますが、ここではQを使ってます。
HTML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="none" id="svg-bg"> <path d="M0,0 q50,80 100,0 Z" fill="#ef7eb8" /> </svg>
画面全体に波線を引く
先ほど使用したqの後にtでポイントを追加していけば波線のようになりますね。
HTML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 100 100" preserveAspectRatio="none" id="svg-bg"> <path d="M0,0 v50 q10,10 20,0 t20,0 t20,0 t20,0 t20,0 v-50 Z" fill="#3eba90"></path> </svg>
パターン(模様を並べる)
今までは一画面に納めてましたが、一画面に収まらない縦長のページで模様をリピートして描画したい場合があります。
patternの中に記述することで、その中の図形をリピートして使うことができます。
HTML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="none" viewBox="0 0 100 100" id="svg-bg"> <defs> <pattern x="0" y="0" width="100" height="50" patternUnits="userSpaceOnUse" id="pattern" viewBox="0 0 100 50"> <g> <path d="M0,0 L100,25 L0,50 Z" fill="#e2ded0" style="opacity: 0.4;"></path> <path d="M100,0 L0,25 L100,50Z" fill="#e2ded0" style="opacity: 0.5;"></path> </g> </pattern> </defs> <rect x="0" y="0" width="100%" height="100%" fill="url('#pattern')"></rect> </svg>
今回は縦50に設定しているので1回だけリピートされます。
コンテンツの量で変動はしないので、あまり良いサンプルではないですね。
この辺りはJSとかで動的に書き換えるしかないのかな、、、
作成したSVGを背景画像として使用する
これまでの例ではpositionで背景にしてましたが、backgroundに入れた方が直感的ですね。
作成したコードはbackgroundでも指定することができます。
方法はsvgの部分をそのまま「.svg」というファイル名で保存するだけですね。
bg.svg
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="none"> <path d="M0,0 v100 l100,-100 Z" fill="#5ba4cf" /> </svg>
後はCSSのbackgroundで指定するだけです。
CSS
#wrap { background: url('bg.svg'); }