【CSS】IE環境では使うの躊躇していた、便利なCSS。

## 概要

長い間、Windows OSに標準で付いていたInternet Explorer （通称 IE）。

マイクロソフト社が2022年6月15日IEのサービス終了を発表しました。

それに伴い、多くのWebサービスを開発している企業・個人が
今までIEにも対応しないといけないからと使うのを躊躇していたCSSプロパティを
勉強しはじめたと思います。

僕もその1人です。

勉強している中で、IEのみ使えなかったCSSプロパティ
実際に業務で使えそうと思ったCSSプロパティを解説します。


## Grid Layout
Grid Layoutを使うことを待ちかねていた人が多いと思います。

今まで、`display: flex;`でいい感じにごちゃごちゃしていたものが
`display: Grid;`でいい感じに書くことができます。

**FlexBoxで作った場合**
<p class="codepen" data-height="300" data-default-tab="css,result" data-slug-hash="RwLvKby" data-user="sp_degu" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/sp_degu/pen/RwLvKby">
  Qiita - Flex</a> by でぐぅー | Qiita (<a href="https://codepen.io/sp_degu">@sp_degu</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

**Grid Layoutで作った場合**
<p class="codepen" data-height="300" data-default-tab="css,result" data-slug-hash="podoMBq" data-user="sp_degu" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/sp_degu/pen/podoMBq">
  Qiita - Grid</a> by でぐぅー | Qiita (<a href="https://codepen.io/sp_degu">@sp_degu</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


こんな感じに、flexItemに`width: calc(100% / 3 - 16px);`で余白を考慮したwidthを指定したり、
`.flexItem:nth-child(n + 4)`で４番目以降に`margin-top`をつけたりしなくて良くなります。

なんて便利なんでしょう 🎉 🎉 🎉
では具体的に、Grid Layoutはいつ使いばいいのでしょうか？

### Grid Layoutとは？
Grid Layoutは、列と行を定義する水平線と垂直線の集合が交差したものをCSSで表現したものになります。

Grid Layoutの特徴は、

1. **固定サイズの要素と可変サイズの要素を組み合わせたレイアウトが簡単に作成できる**
2. **グリットに置くアイテムの位置を制御できる**
3. **2グリットの行と4グリットの行などを柔軟に作成することができる**
4. **同じグリットの中に複数のアイテムを入れることができる** 

の4つだと思います。


Grid Layoutの詳しい使い方は、
:qiita-fabicon: Qiitaで、[Grid Layout](https://qiita.com/search?q=Grid+Layout)と検索してみてください。


## clamp()
`clamp()`はcssの関数で、最小値と最大値の間を制御するプロパティです。
これを使うことで、メディアクエリを使って、サイズを調整することが`clamp()`１行で大丈夫になります🎉　🎉　🎉

### 使い方
こんな感じに指定するだけです。

``` css
.style {
  width: clamp(最小値, 推奨値, 最大値);
}
```

### サンプル
こんな感じだと有効的だと思います。
実際にCodepenでWindowsを大きくしたり小さくしたりして、確かめてください。
<p class="codepen" data-height="300" data-default-tab="css,result" data-slug-hash="vYWEBMa" data-user="sp_degu" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/sp_degu/pen/vYWEBMa">
  Qiita - clamp</a> by でぐぅー | Qiita (<a href="https://codepen.io/sp_degu">@sp_degu</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


## object-fit
`object-fit`は、画像や動画などの中身をどう埋め込むかを設定するプロパティです。
個人的には、はじめIE非対応だったことにおどろいたので紹介します。

### 使い方
`<img>`や`<video>`にこんな感じに指定するだけです。

```
.style {
  object-fit: fill; 
}
```

object-fitでは以下の値を指定することができます。

1. **fill** : アスペクト比関わらず、画像が引き伸ばされ、コンテンツボックスにフィットします。
2. **contain** : アスペクト比を維持したまま、画像が全部収まるように拡大縮小します
3. **cover** : アスペクト比を維持したまま、コンテンツボックスにフィットするように拡大縮小します
4. **none** : 画像は拡大縮小されずのもとのサイズで表示されます。
5. **scale-down** : 画像がコンテンツボックスより大きい時、containの動きをします。画像がコンテンツボックスより小さい時、noneの動きをします。

---

最後まで読んでくださってありがとうございます！

普段はデザインやフロントエンドを中心にQiitaに記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

https://twitter.com/degudegu2510