background-clipを使って文字にアクセントをつける


## はじめに
CSSで文字にグラデーションをつけたいけどcolorではできない！ということから始まり色々調べたら応用が利きそうなのでまとめてみました。

## background-clipとは？
要素の背景をどこまでにするか？ということを設定できるようです。

### プロパティの種類
##### border-box : 要素の境界の外の辺まで
要素の外側(borderの部分)まで広げます。borderとの境は下に入るようです。
```
p{
  width:300px;
  text-align:center;
  font-size:40px;
  font-weight:bold;
  padding:1em;
  background-color:red;
  border:5px dashed #000;
  background-clip:border-box;
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726967/349c9759-4e25-03e7-84cd-f20278c4b16e.png)


##### padding-box : 要素のpaddingの外側まで
一見border-boxとの違いは無いように見えますが、borderの部分はbackgroundには入りません。
border-boxとpadding-boxは"borderに重なるかどうか"が大きな違いのようです。
```
p{
  width:300px;
  text-align:center;
  font-size:40px;
  font-weight:bold;
  padding:1em;
  background-color:red;
  border:5px dashed #000;
  background-clip:padding-box;
}
```
![スクリーンショット 2022-09-19 173739.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726967/31ea6abf-8ec9-d76b-f497-72eaddb8b9d3.png)


##### content-box : 要素の外側まで
要素の幅と高さがそのまま背景になります。
ここではwidthを300pxしているので幅は300px、高さはfont-sizeの40pxにline-height（指定していないのでnormalの1.2）の値を掛けて60pxとなっています。
```
p{
  width:300px;
  text-align:center;
  font-size:40px;
  font-weight:bold;
  padding:1em;
  background-color:red;
  border:5px dashed #000;
  background-clip:content-box;
}
```
![スクリーンショット 2022-09-19 173848.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726967/297764ef-36d0-7968-1fd3-f613fc99f452.png)



##### text : テキスト部分のみ
テキスト部分のみを切り取って背景とします。
ここではちょうど、color:red; を指定した時と同じようになります。
textはchromeやoperaなどのブラウザは完全対応ではないので、-webkit-background-clip: text;と記述する必要があるそうです。
そのままではデフォルトのcolorが適用されてしまうので、color:rgba(0,0,0,0);や-webkit-text-fill-color: transparent; を併せて記述することでbackground-colorが適用されます。
```
p{
  width:300px;
  text-align:center;
  font-size:40px;
  font-weight:bold;
  padding:1em;
  background-color:red;
  border:5px dashed #000;
  -webkit-background-clip: text;
  color:rgba(0,0,0,0);
}
```
![スクリーンショット 2022-09-19 173549.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726967/4d792b76-a95b-b994-b5bd-672491d9bd59.png)


## どんなことに応用できるか？

### 1\.文字にグラデーションをつける
colorでは文字にグラデーションを付けることはできませんでしたが、background:linear-gradientを使えば、文字にグラデーションをつけることができました。
```
p{
    text-align:center;
    font-size:100px;
    font-weight:bold;
    padding:1em;
    background: linear-gradient(to right, blue 0% ,red 100%);
    border:5px dashed #000;
    -webkit-background-clip: text;
    color:rgba(0,0,0,0);
  }
```
![スクリーンショット 2022-09-19 174353.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726967/a00b8eff-3bd4-fa32-d5d7-c83524d1363d.png)



### 2\.文字に背景画像をつける
background-imageで画像を指定すれば、文字の背景に画像を指定することが出来ました。
gif画像を設定すれば、アニメーションのように実装することも出来るそうです。

```diff_css
  p{
    text-align:center;
    font-size:100px;
    font-weight:bold;
    padding:1em;
    background-image:url('main2.jpg');
    background-position: center;
    border:5px dashed #000;
    -webkit-background-clip: text;
    color:rgba(0,0,0,0);
  }
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726967/916bbeb1-bb21-a176-0c2e-0486e5451af8.png)

## 参考
https://developer.mozilla.org/ja/docs/Web/CSS/background-clip