イトウ先生のTipsnote Illustrator CC・SVGのレスポンシブ機能

デジタルスケープ 短期集中クリエイティブ講座

デジタルスケープ・AfterEffects・Photoshop・HTML・CSS・JavaScript・1日トレーニング

Web・動画・映像・ゲーム・DTP・CG・Adobe Creative Cloud・キャリア・就活に

イトウ先生のTipsnote:目次

【 Illustrator CCの新機能:SVGのレスポンシブ機能 】 

今週は、Illustrator CCに追加された、SVGのレスポンシブ(ラウンドトリップ編集機能)についてご紹介します。
IllustratorからのSVGそのものの書き出しは、以前のブログ「SVGインタラクティビティ」でもご紹介しました。
IllustratorからSVG書き出しをすることによって、Webページ上でサイズを変更しても、画質の劣化の無いデータとして閲覧できる、というものでしたが、Illustrator CCでは、このSVGの書き出し時に「レスポンシブ」の機能が追加され、SVG書き出したソースを、CSSで幅・高さなどのレイアウト指定ができるようになりました。
では、今までCSSでレイアウトできなかったのか?というともちろんそうではありません。
これまでは、SVGを展開する領域(キャンバス)が、アートボードサイズになっていたものが、レスポンシブにチェックを入れて書き出すことによって、ブラウザで見た時に幅100%として書き出すことができるようになったため、書き出し後に、好きな幅と高さにCSSでレイアウトすることができるようになった、という意味になります。
それでは、これまではどのように書き出していたのか、と、Illustratorの機能として加わった部分とで、どのように違うのかをソースを見ていきます。

さっそくやってみよう!

Illustrator CCで、SVG書き出しを行うと、SVGオプションのウインドウ内の詳細設定の中に、「レスポンシブ」の設定が加わっています。

svg001

これまでのIllustratorでは、このチェックがありませんでした。このチェックが無い従来のIllustratorでは、SVG要素に対し、Illustratorのアートボードサイズとなるwidthとheight属性を「添付して」SVG要素を書き出していました。
例えば、Illustratorでのアートボードサイズが幅高さ300pxの場合で、レイヤー名がlay1という名前のファイルの場合は、以下のようなソースを書き出します。

<svg version="1.1" id="lay1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="300px" height="300px" viewBox="142.64 270.945 300 300" enable-background="new 142.64 270.945 300 300" xml:space="preserve">

svg002

svg003

ソース中にある通り、widthとheightが設定されているのがわかります。この場合、予め幅と高さ300pxの領域を指定して書き出すことになるため、例えば幅・高さを、ウインドウ幅に合わせて自動的に変更したい場合に、書き出した後にソースを変更するか、CSSを追加することで変更する必要がありました。

Illustraor CCでは、レスポンシブにチェックをいれてSVGに書き出すと、このwidthとheight属性を「設定せずに」、SVG要素を書き出すようになります。幅と高さの属性を指定しないため、最初からwidthとheightを100%で設定しているのと同じような状態で、以下のように親要素の幅と高さと同じ寸法で可変した状態で最初から表示されることになります。

svg005

svg006

「レスポンシブ」にチェックを入れて書き出した場合は、幅と高さを指定しないため、最初から幅100%のレスポンシブに、という意味合いでの「レスポンシブ」というチェックボックスになりますが、機能としては「SVG要素に、widthとheight属性を設定しない」という意味になります。そのため、書き出したソースにCSSで後から自由に幅と高さを指定できるようになった、つまり、Illustrator上で設定した最初のアートボードのサイズは、書き出し後のサイズとは何ら関係が無くなった、という訳ですね。

viewBoxと、preserveAspectRatio

Illustratorで書き出したままの場合、例えば、スマートフォン等で縦と横で向きを変更した場合、SVG要素の中にあるベクトルオブジェクトの縦横比も連携して変形するわけではありません。また、SVG要素そのものは、img要素のような置換要素ではないため、SVG要素そのものに、CSSで幅と高さに、別々の数値を設定しても、中のイメージを変形させることはできません。
あくまでも、SVG要素に対してCSSで指定している幅と高さは、SVGキャンバスというSVGを展開する領域のサイズ指定になります。

svg007

SVGの中に書いたベクトルオブジェクトそのもののサイズを変更する場合は、SVG要素に指定してある、viewBox属性の値を変更することでサイズ変更可能です。Illustratorから書き出した直後は、viewBoxの値はアートボードサイズと同じサイズになっています。

<svg version="1.1" id="lay1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="142.64 270.945 300 300" enable-background="new 142.64 270.945 300 300" xml:space="preserve">

svg008

svg009

また、デバイスの向きを変更した時に、そのデバイスの縦横比に合わせて自動変形するようにしたい場合には、SVG要素に対して、preserveAspectRatio="none"を設定すると、ベクトルオブジェクトそのものが自動変倍するようになります。その際、CSSでのwidthとheight設定は外します。CSSでwidthとheightを設定すると、その領域内で自動変倍することになります。

<svg version="1.1" id="lay1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="142.64 270.945 300 300" enable-background="new 142.64 270.945 300 300" xml:space="preserve" preserveAspectRatio="none">

svg010

SVGの特徴が、拡大縮小しても画質の劣化が無い、というものですので、このように縦横比を変更しても、画質そのものの劣化は無い、ということになりますね。
Illustratorから書き出したソースも、少々手を加えれば、いろいろな用途に使用できるのではないかと思いますので、ぜひ使ってみてください。

関連講座

↑ページTOPへ