CSSでワードアートみたいにダサい感じの文字を出したいと思った

みなさん、[ワードアート](https://www.google.co.jp/search?q=%E3%83%AF%E3%83%BC%E3%83%89%E3%82%A2%E3%83%BC%E3%83%88+CSS&espv=2&biw=1680&bih=952&tbm=isch&source=lnms&sa=X&ved=0ahUKEwiZzaOj9LDOAhXDn5QKHVr2AWYQ_AUICCgB&dpr=2#tbm=isch&q=%E3%83%AF%E3%83%BC%E3%83%89%E3%82%A2%E3%83%BC%E3%83%88)は好きですか? 私は、あの「町内会の掲示板に飾ってある小さな祭りの情報」だとか、「夏休みのしおり」に何度も使われる文字が好きです。あれがあるだけで、「あぁ、パソコン初心者ガイドでも読みながら頑張ったんだろうなぁ。」という感じが伝わってきてほっくりするのです。
私も小学生・中学生時代は沢山使っていた身なのですが、今やそこから10年。使っているMacには、Office Wordは入っておらず、虚しい気持ちになっております。

というわけで、今回は、ワードアートをWebの世界に再現しましょう。
競技ルール(?)としては、Chromeで動けばよいです。IEなんざ無視だ！

**【追記】
本題は、実務には適さないプロパティが多く使用されています。業務で利用する際は、ドキュメントを参照し、用法用量を守り、正しく服用しましょう。**

## 中抜き文字

一番基本形として選択できるもの。正直、落ち着いているので、まだワードアート感が足りない。しかし、パソコン初心者の先生が徹夜してつくった(?)なつやすみのしおり感を演出することは可能だ。
`text-stroke` が縁取りにあたる。ただし、[現状は](http://caniuse.com/#feat=text-stroke) `-webkit-`プレフィックスを付ける必要があるそうです。

```css:中抜き文字
.stroke-black {
  -webkit-text-stroke-color: black;
  -webkit-text-stroke-width: 1px;
  font-size: 30px;
  font-weight: bold;
  color: white;
}
```

![image](https://qiita-image-store.s3.amazonaws.com/0/61997/0cc4aa61-9c12-8a26-ca6f-c0c65d2fea09.png)

他にも、用途はちょっと違うけど`text-shadow`を使ってなんとかする方法もありそうですね。

【追記】
案の定、こちらはChrome, Safariでのみ動作します。
http://qiita.com/ooharabucyou/items/9e36221f14e9a523638d#comment-8ce02bed1622e388b8b6
(指摘ありがとうございます。)
他のブラウザで使えるようにするには、`text-shadow`を使うしかなさそうです。

## 文字色をグラデーションする

昔ながらのWebに出てくる「グラデーション」とは、文字の色を1文字づつ変えてカラフルな感じにすることを思いつくだろう。昔、ホームページを自作していた人は[グラデーション文字](http://tagnoheya.com/tag/font_color3.html)のようなサイトを使って文字を作っていたことでしょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/61997/e8a3e251-59f7-2ec9-93a0-982475a4e5ae.png)


一方、ワードアートのグラデーションとは、[こうだ](https://www.google.co.jp/search?q=%E3%83%AF%E3%83%BC%E3%83%89%E3%82%A2%E3%83%BC%E3%83%88+CSS&espv=2&biw=1680&bih=952&tbm=isch&source=lnms&sa=X&ved=0ahUKEwiZzaOj9LDOAhXDn5QKHVr2AWYQ_AUICCgB&dpr=2#tbm=isch&q=%E3%83%AF%E3%83%BC%E3%83%89%E3%82%A2%E3%83%BC%E3%83%88)。
これを実現するには、

- [CSS Mask](http://caniuse.com/#feat=css-masks)を使う方法　[CSSのみでテキストにグラデーションやリフレクトをかけるテクニック（ちょっと更新）](http://kudakurage.hatenadiary.com/entry/20111113/1321170623)
- [-webkit-background-clip](https://developer.mozilla.org/ja/docs/Web/CSS/background-clip) を使う方法

今回は、シンプルなほうの`-webkit-background-clip` を使う方法で行きます。このプロパティに`text`を指定することで、背景色を文字に対して貼ることができます。つまり、文字色を`transparent`にして、`background-image` にグラデーション画像を置けばよいのです。

```css:グラデーション
.gradation {
  font-size: 30px;
  font-weight: bold;
  -webkit-background-clip: text;
  color: transparent;
  background-image: linear-gradient(red, blue);
}
```

![image](https://qiita-image-store.s3.amazonaws.com/0/61997/8730d456-3c52-554b-9ff2-cf6f16a83acd.png)

グラデーションを毒々しい色にするのがポイントです。

【追記】
`-webkit-background-clip` 自体は、CSS3の勧告にある `background-clip` とは全く違う挙動をします。やはり実用には適しません。[こちら](https://developer.mozilla.org/ja/docs/Web/CSS/background-clip)の、補足[3]の項目を参照。

## 変形 (円状)

ここから難関です。文字をアーチ状に変形します。CSSには、`transform`プロパティがあり、変形は可能そうなのですが、ダイレクトにアーチ上にする機能はなさそうです。
そこで、[Archtext.js](http://tympanus.net/Development/Arctext/)を活用して、文字をアーチ状に設置しましょう。


```html:html
<div class="arch">なつやすみのしおり</div>
```

```js:js
$(document).ready(function() {
  $(".arch").arctext({radius: 200});
});
```

```css:style
.arch {
  font-size: 30px;
  font-weight: bold;
}

.arch span {
  -webkit-background-clip: text;
  color: transparent;
  background-image: linear-gradient(red, blue);
}
```

![image](https://qiita-image-store.s3.amazonaws.com/0/61997/7091efd8-b4a0-2f74-5b3e-a1a3afd51bac.png)

ああー。最高ですね。
このスクリプトは、文字を1文字づつ分割して、`span`タグを作り、回転していきます。単純な文字色なら `.arch` に対して、色を割り当てればよいのですが、前述のグラデーションと併用したい場合は、`span` に対して、プロパティを設定する必要がありそうです。

## 3Dワードアート

ワードアートを決定的にダサくする方法として、妙に飛び出た効果にする3Dワードアートがありますね。Wordでは、奥行きを288ptだとか、無限とか設定できたのが素晴らしかったです。
一方、CSSでこれと同じのを実現するには、`text-shadow`を幾度にも重ねて奥行きを出す方法が挙げられてました。

- [TextShadowで作る文字の色々なデザイン（グロウ、エンボス、ベベル、袋文字、ぼかし、3D）](http://www.yoheim.net/blog.php?q=20121103)

```css
.t3d {
  -webkit-text-stroke-color: black;
	-webkit-text-stroke-width: 2px;
  font-size: 30px;
  font-weight: bold;
  color: white;
  text-shadow:
    1px 1px 0px gray,
    2px 2px 0px gray,
    3px 3px 0px gray,
    4px 4px 0px gray,
    5px 5px 0px gray,
    6px 6px 0px gray,
    7px 7px 0px gray,
    8px 8px 0px gray,
    9px 9px 0px gray,
    10px 10px 0px gray;
}
```

![image](https://qiita-image-store.s3.amazonaws.com/0/61997/9db51c9e-2d34-944f-c69b-e15578655678.png)

これとグラデーションを組み合わせるには、`-webkit-background-clip` を利用する方法では無理で、CSS Maskを使う方法で攻める必要がありそうです。何故なら、文字色が透明になってしまう上に、`text-shadow`が後ろにいらっしゃるため、`background-image`が書かれませんでした。。

```html:html
<div class="t3d-2-c">
<div class="t3d-2" title="なつやすみのしおり">なつやすみのしおり</div>
</div>
```

```css:style
.t3d-2-c {
  position: relative;
}

.t3d-2, .t3d-2:before, .t3d-2:after {
  font-size: 30px;
  font-weight: bold;
  position: absolute;
  content: attr(title);
  left: 0;
  top: 0;
}

.t3d-2 {
  color: red;
  text-shadow:
    1px 1px 0px gray,
    2px 2px 0px gray,
    3px 3px 0px gray,
    4px 4px 0px gray,
    5px 5px 0px gray,
    6px 6px 0px gray,
    7px 7px 0px gray,
    8px 8px 0px gray,
    9px 9px 0px gray,
    10px 10px 0px gray;
}

.t3d-2:after {
  color: blue;
  -webkit-mask-image:-webkit-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,1));
}
```
![image](https://qiita-image-store.s3.amazonaws.com/0/61997/678042f3-a5f1-73a9-c4c6-12931024d04a.png)


## 結論

[実働サンプルはこちら](https://jsfiddle.net/kawahara/oeaursgk/3/)

あとは、HG創英角ポップ体がWebFontで指定できたりなんかしちゃえば最高なんですが。
他にもいろいろテクがあると思うので、CSSガチ勢の皆さんよろしくお願いします。