CSSの一括指定（短縮）プロパティ

# はじめに
こんにちは！
CSSの学習を進めていく中で複数のプロパティをまとめて指定できる`一括指定（短縮）プロパティ`の存在を知りました。
しかし、いざ`一括指定プロパティ`を使用するとなるとどのプロパティが対象なのかわからなかったり、そもそも対象のプロパティの機能がわからなかったりして、結局個別にプロパティを設定したことが何度かありました。
そのような経験から本記事では、CSSの`一括指定プロパティ`についてまとめてみました。


# 一括指定（短縮）プロパティとは
一括指定（短縮）プロパティは、複数の CSS プロパティを一度に設定できる CSS プロパティです。
一括指定プロパティを用いると、より簡単にスタイルシートが書け、時間や労力を節約することができます。
[Google HTML/CSS Style Guide](https://google.github.io/styleguide/htmlcssguide.html) や [Airbnb CSS / Sass Styleguide](https://google.github.io/styleguide/htmlcssguide.html) 等のスタイルガイドでも使用が推奨されています。

# 代表的な一括指定（短縮）プロパティ
### 1.backgroundプロパティ
`backgroundプロパティ`では、以下のプロパティをまとめて記述することができます。
```css:background_single.css
background-color: #000;
background-image: url(images/bg.gif);
background-repeat: no-repeat;
background-position: left top;
````
* background-color：背景色の指定
* background-image：背景画像の指定
* background-repeat：背景画像の繰り返し指定
* background-position：背景画像の初期位置の指定

````css:background.css
background: #000 url(images/bg.gif) no-repeat left top;
````

### 2.fontプロパティ
`fontプロパティ`では、以下のプロパティをまとめて記述することができます。
```css:font_single.css
font-style: italic;
font-weight: bold;
font-size: 0.8em;
line-height: 1.2;
font-family: Arial, sans-serif;
````
* font-style：フォントスタイル（通常体、筆記体、斜体）の指定
* font-weight：フォントの太さの指定
* font-size：フォントの大きさの指定
* line-height：行間の指定
* font-family：フォントファミリーの指定／フォントファミリーの優先順位の指定

````css:font.css
font: italic bold 0.8em/1.2 Arial,sans-serif;
````

### 3.borderプロパティ
`borderプロパティ`では、以下のプロパティをまとめて記述することができます。
```css:border_single.css
border-width: 1px;
border-style: solid;
border-color: #000;
````
* border-width：境界線の幅の指定
* border-style：境界線のスタイルの指定
* border-color：境界線の色の指定

````css:border.css
border: 1px solid #000;
````

### 4.mergin/paddingプロパティ
`marginプロパティ`もしくは`paddingプロパティ`では、以下のプロパティをまとめて記述することができます。
```css:margin_single.css
margin-top: 10px;
margin-right: 5px;
margin-bottom: 10px;
margin-left: 5px;
````
* margin-top：上側の余白の指定
* margin-right：右側の余白の指定
* margin-bottom：下側の余白の指定
* margin-left：左側の余白の指定

````css:margin.css
margin: 10px 5px 10px 5px;
````

# 一括指定（短縮）プロパティの注意点
### 1. プロパティの省略
一括指定プロパティに指定しなかった値は`初期値`に設定されます。つまり、以前設定した値を上書きすることになります。

以下は、値が上書きされる例です。
````css:overwrite.css
p {
  background-color: red;
  background: url(images/bg.gif) no-repeat left top;
}
````
上記コードの場合、backgroundプロパティで background-color が設定されていないので、背景色は background-color の既定値である transparent に設定されます。

### 2. プロパティの順序
基本的に一括指定プロパティでは、プロパティを記述する順序は決まっていません。ただしこれは、各プロパティが異なる型の値を使用する場合であり、各プロパティが同じ型の値を使用する場合にはあらかじめ決められた順序でプロパティを記述する必要があります。

同じ型の値を使用する場合のプロパティの順序は、以下の2つのケースに分類されます。
* `border-width`, `margin`, `padding` など、ボックスの辺に関連したプロパティ。
* `border-radius` のように、ボックスの角に関連するプロパティ。
## ボックスの辺に関連したプロパティ
ボックスの辺に関する一括指定プロパティ (border-width, margin, padding) は、それぞれの辺を表すために、一貫して1～ 4個の値の構文を使用します。

* **値１つの構文**：１つの値で`すべての辺`を表します。
````css:one.css
border-width: 1em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/ab7348a7-069a-0ff7-2be2-8775701e82d1.png)
<br>
* **値２つの構文**：１つ目の値は`上下の辺`、２つ目の値は`左右の辺`を表します。
````css:two.css
border-width: 1em 2em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/712fc2bf-8845-68fb-6492-28d00ee9d15f.png)
<br>
* **値３つの構文**：１つ目の値は上辺、２つ目の値は左右の辺、３つ目の値は下辺を表します。
````css:three.css
border-width: 1em 2em 3em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/46bd4d93-184e-f931-4a26-197f7180b192.png)
<br>
* **値４つの構文**：４つの値がそれぞれ上、右、下、左の順に時計回りで辺を表します。
````css:four.css
border-width: 1em 2em 3em 4em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/106c2396-45cf-67b5-a075-79e64c30248a.png)

## ボックスの角に関連したプロパティ
同様に、ボックスの角に関する一括指定プロパティ (border-radius 等) は、それぞれの角を表すために一貫して1～4個の値を使用します。

* **値１つの構文**：１つの値で`すべての角`を表します。
````css:one.css
border-radius: 1em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/b82a44fc-3bcb-71f7-8594-0ff00a19d6c9.png)
<br>
* **値２つの構文**：１つ目の値は左上と右下の角、 ２つ目の値は右上と左下の角を表します。
````css:two.css
border-radius: 1em 2em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/c7876b90-5cd3-4548-243d-7c344dff26aa.png)
<br>
* **値３つの構文**：１つ目の値は左上、２つ目の値は右上と左下、３つ目の値は右下の角をそれぞれ表します。
````css:three.css
border-radius: 1em 2em 3em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/bb60a7ca-7b18-e1af-1709-ee438c47bd60.png)
<br>
* **値４つの構文**：４つの値が左上を起点に、時計回りでそれぞれ左上、右上、右下、左下を表します。
````css:four.css
border-radius: 1em 2em 3em 4em;
````
イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640309/cf86012f-de36-94a2-a574-255b136bafd0.png)
<br>

# まとめ
一括指定プロパティは、値の上書きやプロパティの順序などに気を付ければコードを簡潔に記述することができるので便利だと感じました。
今後、スタイルシートを記述する際は、一括指定プロパティで記述するよう心掛けます。