SlideShare a Scribd company logo
SVGMANIAX
松田直樹
Scalable Vector Graphics
SVG の最大の 特徴
画像 であり、 文書 である
Scalable Vector Graphics
拡張可能な
それが SVG
XML 文書であるがゆえ
単なる「画像」を超越できる存在。
SVG を
効果的に使ったサイト
http://jsdo.it/event/svggirl/
SVG MANIAX - CSS Nite After dark7
http://www.city.tondabayashi.osaka.jp/map/index.html
http://jvectormap.com/
http://iconmelon.com
http://www.polygon.com/a/ps4-review
• 拡縮自在なベクター画像
• CSS による装飾
• DOM API
• 文書リソースとしての汎用性
SVG を
XML として理解する
SVG1.1 Second Edition の要素は 80 個
<SVG/>
HTML5より少ないので覚えられる
これだけは覚えておきたい
SVGの要素・属性
宣言と名前空間
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC
"-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 200 200">
...
</svg>
描画領域・比率
viewBox 属性
preserveAspectRatio 属性
該当する図形の表示する領域を指定する
Illustrator でのアートボード
拡縮の際の基準点および縦横の比率を指定する
描画領域・比率
viewBox 属性
100 x 100
<svg
viewBox="0 0 100 100" >
0, 0
100, 100
0,0
描画領域・比率
viewBox 属性
0,0
100 x 100
<svg
viewBox="-100 -100 90 90" >
-100, -100
90, 90
図形
path 要素 line 要素 rect 要素
circle 要素 ellipse 要素 polygon 要素
グループ化
g 要素
複数の図形をグループ化する
Illustrator での グループ と レイヤー はこの要素で再現される
<g>
<rect ... />
<rect ... />
<rect ... />
<rect ... />
</g>
モジュール化
defs, symbol, use 要素
defs 要素、および symbol 要素 で実体のない図形を定義し、
それを use 要素で再利用できる
要素の再利用
<defs>
<path d="..."/>
</defs>
<use xlink:href="#c" x="20"
y="10" fill="purple"/>
変形
transform 属性
matrix, translate, scale, rotate, skewX, skewY にて変形
Illustrator では ほぼすべて matrix で再現される
要素の変形
<path ... transform="skewX(15)" />
グラデーション
linearGradient 要素, radialGradient 要素
linearGradient 要素と radialGradient 要素で適用
SVG では 塗りにも線にも適用できる
グラデーションの変形は gradientTransform 属性で指定
<linearGradient id="grd" gradientUnits="userSpaceOnUse"
x1="0" y1="0" x2="30" y2="30">
<stop offset="0" style="stop-color:#FC6256"/>
<stop offset="1" style="stop-color:#44BFB7"/>
</linearGradient>
マスク
clip, clipPath, mask 要素
矩形・円形・パスによるマスクと、グラデーションマスク
<defs>
<clipPath id="myClip">
<circle cx="40" cy="40" r="50"/>
</clipPath>
</defs>
<rect x="0" y="0" width="100" height="100"
clip-path="url(#myClip)"/>
フィルター効果
filter 要素
複雑すぎるので、手書きはあきらめる
<defs>
<filter id="fil" filterUnits="userSpaceOnUse"
x="0" y="0" width="100" height="100">
<feGaussianBlur stdDeviation="4"/>
</filter>
</defs>
<polygon points="47,0 95,..." filter="url(#fil)"/>
Inkscape が
充実している
Illustrator における注意点
• 通常のフィルターは png 化される
• でも、SVGフィルターが使いものにならない
• メッシュグラデーションは png 化される
• ブレンドは拡張されて書き出される
• アピアランスは分割される
• ブラシもアピアランス分割状態に
• 乗算などの描画モードは無視される
SVG で使える
CSS プロパティ
SVG, HTML 両方で使えるプロパティ
•font
•font-family
•font-size
•font-size-adjust
•font-stretch
•font-style
•font-variant
•font-weight
•direction
•letter-spacing
•text-decoration
•text-rendering
•unicode-bidi
•word-spacing
•clip
•cursor
•display
•opacity
•overflow
•pointer-events
•visibility
SVG 固有のプロパティ
•clip-path
•clip-rule
•color
•mask
•enable-background
•filter
•flood-color
•flood-opacity
•lighting-color
•stop-color
•stop-opacity
•color-interpolation
•color-interpolation-filters
•color-profile
•color-rendering
•fill
•fill-opacity
•fill-rule
•image-rendering
•marker-end
•marker-mid
•marker-start
•shape-rendering
•stroke
•stroke-dasharray
•stroke-dashoffset
•stroke-linecap
•stroke-linejoin
•stroke-mitterlimit
•stroke-opacity
•stroke-width
•alignment-baseline
•baseline-shift
•dominant-baseline
•glyph-orientation-
horizontal
•glyph-orientation-vertical
•kerning
•text-anchor
•writing-mode
Web サイト(HTML)内における
SVG の使い方
大きく分けて
2種類の使い方
外部ファイル参照
img 要素, object 要素,
iframe要素, background-image
HTML
CSS
</>
SVG
1
インラインSVG
HTML5 内に
直接 SVG 要素を記述する
<!doctype html>
<html>
<body>
<svg viewBox="0 0 200 200">
<circle id="c" r="100" x="0" y="0"/>
</svg>
</body>
</html>
HTML
</>
2
どう違う?
地味にいろいろ異なる
ブラウザ間でも違ってくるし、
SVG のコードによっても違ってくる
こんな SVG で試してみましょう
circle要素を
use要素で量産
サイズと色を
アニメーション
svg 内に
外部 png を配置
svg 内に
png を
base64 で埋め込み
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://
www.w3.org/1999/xlink" x="0" y="0" viewBox="0 0 200 200">
<style type="text/css">
.fillsample { fill: #44bfb7; }
@media screen and (max-width: 400px) {
.fillsample { stroke: #000; }
}
</style>
<defs>
<circle id="c" class="fillsample" r="30">
<animate attributeName="r" begin="0s" dur="7s" from="10" to="30"
repeatCount="indefinite"/>
<animate attributeName="fill" begin="0s" dur="7s" to="#FF8888"
repeatCount="indefinite"/>
</circle>
</defs>
<use xlink:href="#c" x="30" y="30"/>
...
こんなコードです
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://
www.w3.org/1999/xlink" x="0" y="0" viewBox="0 0 200 200">
<style type="text/css">
.fillsample { fill: #44bfb7; }
@media screen and (max-width: 400px) {
.fillsample { stroke: #000; }
}
</style>
<defs>
<circle id="c" class="fillsample" r="30">
<animate attributeName="r" begin="0s" dur="7s" from="10" to="30"
repeatCount="indefinite"/>
<animate attributeName="fill" begin="0s" dur="7s" to="#FF8888"
repeatCount="indefinite"/>
</circle>
</defs>
<use xlink:href="#c" x="30" y="30"/>
...
こんなコードです
width
height
指定なし
Media
Queries も
あったり
SMIL
アニメーション
させてたり
<img src="sample.svg" alt="xxx">
img 要素
if(!Modernizr.svg) {
$('img[src*="svg"]').attr('src', function() {
return $(this).attr('src').replace('.svg', '.png');
});
}
fallback
<object type="image/svg+xml" data="sample.svg">
<img src="sample.png" alt="xxx">
</object>
object 要素
.bgsvg {
background: url(sample.svg) no-repeat 0 0;
background-size: auto;
}
CSS background
background: url('data:image/svg+xml;utf8,
<svg viewBox="0 0 10 10" width="10" height="10">
<circle fill="orange" cx="5" cy="5" r="5"/>
</svg>');
こんなふうにも書けます
<!doctype html>
<html>
<body>
<h1>inline svg</h1>
<svg viewBox="0 0 200 200">
<circle fill="#44bfb7"
cx="15" cx="15" r="30">
</svg>
</body>
</html>
インライン SVG
DEMO
ちなみに IE 11 では
img 要素
object 要素
iframe 要素 CSS background
animate要素でのアニメーションに対応していない(仕様)
svg内にimage要素で
埋め込んだ外部画像も
表示される(第2世代ま
で?)
• svg要素にwidth,heightが
指定していない場合、
background-position の
指定を無視して縦横中央に
配置される
• svg要素にwidth,heightが
指定していない場合、
repeat、background-
size が効かない
media queries の
適用が数値通りに適用
されない
正常
正常
animete要素でのアニメ
ーションがずれる
インラインSVG
正常
正常
正常
正常
正常
正常
svg に height:auto を指
定すると viewBox の高さ
がブラウザの高さになる
svg に height:auto を指
定すると viewBox の高さ
がブラウザの高さになる
正常
•svg の viewBox に指
定した値までしか拡大で
きない
•インラインSVG の要素
に transform 等が効か
ない
• SVG 文書内のスクリプトは動作しない
• SVG 文書内に埋め込んだ外部ファイルは表示されない(IEを除く)
• SVG 文書内のハイパーリンクは無視される
• SVG 文書内のスクリプトも動作する
• param 要素 や contentdocument を用いて DOM にアクセスも可能
• ただし、親である HTML 側にはイベントはバブリングされない
• SVGのすべての機能を使用できる
• 直接 SVG DOM を操作できる
• 細かい表示がまだまだブラウザ間で違う点がある
できること・できないこと
img 要素
object 要素
インライン SVG
SVG をアニメーションさせる
大きく分けて
3種類の方法
SMIL アニメーション
<circle fill="#000" r="30">
<animate
attributeName="r"
begin="0s"
dur="7s"
from="10"
to="30"
repeatCount="indefinite"/>
</circle>
DEMO
SVG MANIAX - CSS Nite After dark7
CSS アニメーション
• transition
• transform
• animation
• @keyframes
SVG DOM アニメーション
var logo = document.getElementById("logo");
var rot = 0;
setInterval(function(){
logo.setAttribute("transform",
"rotate(" + rot + " 100 100)");
rot = rot + 1;
}, 10);
SVG DOM アニメーション
SVG は独自の名前空間を持つため、
DOM Level 1 は使えない
DOM Level 2 のメソッドを使用すること
createElement() createElementNS()
http://www.webbrowsercompatibility.com/svg/desktop/
SVG を扱う JS ライブラリ
http://d3js.org/
http://jonobr1.github.io/two.js/
http://snapsvg.io/
DEMO
SVG の使いどころ
img 要素
• 静止画としては実用レベル
• png や gif の代わりに十分使える
• 動きは animate 要素による SMILアニメーションのみ
• フォールバックは JS で判別すべし
object 要素
• フォールバックも考えると、最もオススメ
• animate 要素だけでなく、SVG 内の JS や CSS も動く
• 親 HTML 側との JS 連携は面倒くさい
(param や contentdocument でアクセス可能だけど)
• SVG 内のイベントは、親 HTML 側にバブリングしない
CSS Background
• IE での表示を担保するため、
svg 要素に viewBox, width, height の指定は必須
• 幅・高さを固定した場合、CSS Sprite でも問題なく使える
インライン SVG
• SVG のすべての機能が使える
• SVG DOM を扱うことができる
• IE では、SVG 内の要素に CSS transition, animation,
transform 等は効かない
• IE では、viewBox の指定以上に大きく表示できないので、
viewBox の数値は必要な分以上に指定すること
• フォールバックが面倒くさい
アニメーション
•アニメーションをさせるなら JS 必須
• ただし、IEを除けば SMILアニメーションがお手軽
• 本格的なアニメーションは Canvas を使用する
(SVG よりもパフォーマンスがいい)
• SVG には DOM を扱える利点
• イラストの一部分だけを動かしたい、などに向いている
SVG のフォールバック
代替用の PNG 画像を用意するのが
そもそも面倒
grunt-svg2png
gruntのタスクとして、
指定したフォルダ内のSVGを
自動で PNG に変換
ただし、
svg要素に width, height の指定がないと
余白が生まれる
https://github.com/dbushell/grunt-
svg2png
grunt-svgstore
指定したフォルダー内の SVG を
ひとつの SVG にマージできる
SVG の CSS Sprite を自動で
生成できる
https://github.com/FWeinb/grunt-
svgstore
前頁の grunt-svg2png を併用すれば
CSS Sprite のフォールバックも可能
Quick Look コマンド
Mac の場合、以下のコマンドで
SVG を PNG に変換できる
$ qlmanage -t -s 640 -o . logo.svg
png のサイズ指定
参考)
https://developer.apple.com/library/mac/documentation/userexperience/conceptual/quicklook_programming_guide/articles/qldebugtest.html
おまけ - こんな使い方まで
テキストに
CSS を超えた表現を施す
<h1>
<svg class="demo1" viewBox="0 0 290 40"
width="290" height="40">
<text class="demo1-heading" x="0" y="30">
CSS Nite After Dark
</text>
</svg>
</h1>
SVG MANIAX - CSS Nite After dark7
SVG の未来
2014年 勧告目標
SVG 2.0
W3C Working Draft 11 February 2014
SVG 2.0 で実現される見込みの機能
• メッシュグラデーション(meshGradient要素)
• SMILアニメーションとCSSアニメーションとの統合
• HTML的なテキストの折り返し
• フィルター機能の拡張
• OpenGL対応
さいごに
文書 であるSVG は
ということは
Git で差分が取れるし、
マージもできる
SVG が更に普及する
未来は見えている
SVG と仲良くなるなら
今のうち
松田直樹
SVG MANIAX
Scalable Vector Graphics
ありがとうございました

More Related Content

PDF
HTML5 と SVG で考える、これからの画像アクセシビリティ
Naoki Matsuda
 
PDF
SVG MANIAX Ver.2 - Mars vanilla
Naoki Matsuda
 
PDF
モックアップやプロトタイプづくりを 加速させる。それが SVG。@DIST.4 「Life is Short」
Naoki Matsuda
 
PDF
SVGでつくるインタラクティブWebアプリケーション
Kohei Kadowaki
 
PDF
使う前に知っておきたいSVGのこと
Kasumi Morita
 
PDF
Inline SVG - トラブルとその対策
Kohei Kadowaki
 
PDF
インラインSVGをつかって地図っぽいものをつくってみる
Kohei Kadowaki
 
PDF
Firefox OSアプリ 「ModeView」
Hideki Akiba
 
HTML5 と SVG で考える、これからの画像アクセシビリティ
Naoki Matsuda
 
SVG MANIAX Ver.2 - Mars vanilla
Naoki Matsuda
 
モックアップやプロトタイプづくりを 加速させる。それが SVG。@DIST.4 「Life is Short」
Naoki Matsuda
 
SVGでつくるインタラクティブWebアプリケーション
Kohei Kadowaki
 
使う前に知っておきたいSVGのこと
Kasumi Morita
 
Inline SVG - トラブルとその対策
Kohei Kadowaki
 
インラインSVGをつかって地図っぽいものをつくってみる
Kohei Kadowaki
 
Firefox OSアプリ 「ModeView」
Hideki Akiba
 

What's hot (20)

PDF
ShareWisをFirefoxで動かすためのSVG的とりくみ
Kohei Kadowaki
 
PDF
HTML5のCanvas入門 - Img画像を編集してみよう -
Toshio Ehara
 
PDF
メディア芸術基礎 II jQuery入門
Atsushi Tadokoro
 
PDF
㉗HTML5+jQueryでお絵かき
Nishida Kansuke
 
PDF
Canvas勉強会
Tsutomu Kawamura
 
PDF
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Hiroaki Wakamatsu
 
PPTX
JavaScriptで『漫画カメラ』的画像加工
Masayuki Maekawa
 
PDF
ブラウザにやさしいHTML/CSS
Takeharu Igari
 
PDF
今日から使える! HTML/CSS/JSの シンプルテクニック15選
Horiguchi Seito
 
KEY
HTML5で作るスマホブラウザゲーム
Takumi Ohashi
 
PDF
悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)
Horiguchi Seito
 
PDF
CSS の歩き方
Seiichiro Mishiba
 
PDF
WebデザイナのためのjQuery入門。
Yossy Taka
 
PDF
E2E CSS Testing at HTML5 Conference 2016
Takeharu Igari
 
PDF
⑯jQueryをおぼえよう!その2
Nishida Kansuke
 
PDF
今必要なCSSアーキテクチャ
Mayu Kimura
 
PDF
マークアップ講座 02 CSS
eiji sekiya
 
PDF
JavaScript Basic 01
Yossy Taka
 
PPTX
Oocssとかついでにsmacssとbemの話も
Yumi uniq Ishizaki
 
PDF
Start React with Browserify
Muyuu Fujita
 
ShareWisをFirefoxで動かすためのSVG的とりくみ
Kohei Kadowaki
 
HTML5のCanvas入門 - Img画像を編集してみよう -
Toshio Ehara
 
メディア芸術基礎 II jQuery入門
Atsushi Tadokoro
 
㉗HTML5+jQueryでお絵かき
Nishida Kansuke
 
Canvas勉強会
Tsutomu Kawamura
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Hiroaki Wakamatsu
 
JavaScriptで『漫画カメラ』的画像加工
Masayuki Maekawa
 
ブラウザにやさしいHTML/CSS
Takeharu Igari
 
今日から使える! HTML/CSS/JSの シンプルテクニック15選
Horiguchi Seito
 
HTML5で作るスマホブラウザゲーム
Takumi Ohashi
 
悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)
Horiguchi Seito
 
CSS の歩き方
Seiichiro Mishiba
 
WebデザイナのためのjQuery入門。
Yossy Taka
 
E2E CSS Testing at HTML5 Conference 2016
Takeharu Igari
 
⑯jQueryをおぼえよう!その2
Nishida Kansuke
 
今必要なCSSアーキテクチャ
Mayu Kimura
 
マークアップ講座 02 CSS
eiji sekiya
 
JavaScript Basic 01
Yossy Taka
 
Oocssとかついでにsmacssとbemの話も
Yumi uniq Ishizaki
 
Start React with Browserify
Muyuu Fujita
 
Ad

Viewers also liked (8)

PDF
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。
Daisuke Koshimizu
 
PDF
[HTML5J 第47回HTML5とか勉強会] データ・ビジュアライゼーションの現況と実際
Yuichi Yazaki
 
PDF
Html5j data visualization_and_d3
Daichi Morifuji
 
PDF
DIST.12 「Adobe Creative Station ができるまで」
Naoki Matsuda
 
KEY
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
girigiribauer
 
PDF
データをわかりやすく可視化する「データビジュアライゼーション」勉強会
Yuichi Yazaki
 
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
 
PDF
HTTP/2時代のウェブサイト設計
Kazuho Oku
 
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。
Daisuke Koshimizu
 
[HTML5J 第47回HTML5とか勉強会] データ・ビジュアライゼーションの現況と実際
Yuichi Yazaki
 
Html5j data visualization_and_d3
Daichi Morifuji
 
DIST.12 「Adobe Creative Station ができるまで」
Naoki Matsuda
 
Raphael.jsを使ってSVGをモーフィングさせてみた失敗の記録
girigiribauer
 
データをわかりやすく可視化する「データビジュアライゼーション」勉強会
Yuichi Yazaki
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
 
HTTP/2時代のウェブサイト設計
Kazuho Oku
 
Ad

Similar to SVG MANIAX - CSS Nite After dark7 (20)

PPTX
Svgについて
tomowata
 
PDF
SVG事始め
Nemoto Yusuke
 
PDF
HTML5-20100626
Taku AMANO
 
PDF
おふとんから眺めるSVG
cocu_628496
 
PDF
svgで遊んでみた話
cocu_628496
 
PDF
Svgアニメーションを実装してみよう 20150207
Kanako Kobayashi
 
PDF
Firefox OSでSVGをつかってみた
Kohei Kadowaki
 
PDF
I want Make full svg website
Hidetsugu Takahashi
 
PDF
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Hiroaki Okubo
 
PDF
SVG、あきた
cocu_628496
 
PDF
Firefox 4 with SVG
Makoto Kato
 
PDF
⑳CSSでアニメーション!その1
Nishida Kansuke
 
PDF
Snap.svg.jsチュートリアル
誠人 堀口
 
PDF
Effekseer勉強会 機能解説など
ueshita
 
PDF
FirefoxとMozillaでのSVGの取り組み
Makoto Kato
 
PDF
AndroidとSVG (ABC 2013 Spring LT)
Satoshi Watanabe
 
PPTX
D3によるデータビジュアライゼーション 2013.09.13
Minoru Chikamune
 
KEY
Html5勉強会資料 2012821
Cohei Aoki
 
PDF
Web GLの話
Norihito YAMAKAWA
 
PPTX
W3C日本会員会議 2013 12/17 TPAC2013 SVGWG活動報告
Satoru Takagi
 
Svgについて
tomowata
 
SVG事始め
Nemoto Yusuke
 
HTML5-20100626
Taku AMANO
 
おふとんから眺めるSVG
cocu_628496
 
svgで遊んでみた話
cocu_628496
 
Svgアニメーションを実装してみよう 20150207
Kanako Kobayashi
 
Firefox OSでSVGをつかってみた
Kohei Kadowaki
 
I want Make full svg website
Hidetsugu Takahashi
 
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Hiroaki Okubo
 
SVG、あきた
cocu_628496
 
Firefox 4 with SVG
Makoto Kato
 
⑳CSSでアニメーション!その1
Nishida Kansuke
 
Snap.svg.jsチュートリアル
誠人 堀口
 
Effekseer勉強会 機能解説など
ueshita
 
FirefoxとMozillaでのSVGの取り組み
Makoto Kato
 
AndroidとSVG (ABC 2013 Spring LT)
Satoshi Watanabe
 
D3によるデータビジュアライゼーション 2013.09.13
Minoru Chikamune
 
Html5勉強会資料 2012821
Cohei Aoki
 
Web GLの話
Norihito YAMAKAWA
 
W3C日本会員会議 2013 12/17 TPAC2013 SVGWG活動報告
Satoru Takagi
 

SVG MANIAX - CSS Nite After dark7