「position: absolute」で要素を画面中央に配置する方法 ～ボタン、画像、ビデオをレスポンシブに対応させる～

## はじめに
こんにちは、未経験からエンジニア転職を目指しているものです。
オンラインスクールで本格的に学習して4ヶ月目に入りました。勉強し始めの頃の自分が疑問に思っていたことを整理してみようと思い記事を書いております。HTML,CSSでwebページを模倣してみた時、レスポンシブデザインでビデオが画面の中央に配置出来ませんでした。そこで今回は、CSSのposition: absoluteやtransformを使用して、要素を中央に配置する方法を、まとめてみました。

## CSSの基本的な使い方について
まず、中央に要素を配置するために使用する主なプロパティを理解しました。

- position: absolute: 要素をその親要素内で絶対位置に配置します。
- left: 50%; top: 50%: 要素の左上を親要素の中央に配置します。
- transform: translate(-50%, -50%): 要素自体の幅と高さの半分だけずらし、正確に中央に表示します。

これらを組み合わせることで、要素を親コンテナの中央に配置することができます。

### コード例
```css
.centered-element {
    position: absolute;
    left: 50%
    top: 50%
    transform: translate(-50%, -50%);
}
```
### 使用例
**1. ボタンを中央に配置する**
ボタンを画面中央に配置する例です。
```html
<div class = "button-container">
    <button class = "centered-button"> Click </button>
</div>
```
```css
.button-container {
    position: relative;
    width: 100%;
    height: 400px;
}

.centered-button {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    padding: 10px 20px;
}
```    
この例では、`button-container`が親要素として使われ、ボタンがその中央に配置されます。
centered-butoonにCSSを追加する前
![スクリーンショット 2024-09-13 8.14.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/3957493b-9bb3-bcd9-7bfa-296c2fd5bcee.png)

centered-butoonにCSSを追加した後
![スクリーンショット 2024-09-13 8.22.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/17e53733-d82d-5fa9-2d9a-8d55d457ca0c.png)

**2. 図（画像やSVG）を中央に配置する**
画像を中央に配置する例です。

```html
<div class = "button-container">
    <button class = "centered-button"> Click </button>
</div>
```

```html
<div class="image-container">
  <img src="example-image.jpg" class="centered-image" alt="Example Image">
</div>
```
```css
.image-container {
  position: relative;
  width: 100%;
  height: 400px;
}

.centered-image {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 150px;
  height: 150px;
}
```
このコードで、画像が親要素の中央に配置され、モバイルでもPCでも適切に表示されます。
centered-imageにCSSを追加する前
![CSS前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/f2d09097-10ca-5082-2f93-ac8f8d23827d.png)
centered-imageにCSSを追加した後
![CSS後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/ce2ca981-5f01-14c2-1ed9-b51050a5dd1a.png)


**3. ビデオを中央に配置する**
レスポンシブ対応のビデオを中央に配置する例です。

```html
<div class="video-container">
  <video src="12268480_360_640_60fps.mp4" autoplay muted loop></video>
</div>
```
```css
.video-container {
  position: relative;
  width: 100%;
  height: 0;
  padding-bottom: 56.25%; /* 16:9のアスペクト比を維持 */
}

.video-container video {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  height: 100%;
  object-fit: cover;
}
```

このコードでは、ビデオが中央に表示され、アスペクト比も保たれます。
video-containerにCSSを追加する前
![スクリーンショット 2024-09-14 11.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/35783a3e-1451-eba8-ad16-12e85aebf09b.png)
video-containerにCSSを追加した後
![スクリーンショット 2024-09-14 11.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/9e03b4cb-a46a-530b-2daa-cc151b653ad2.png)

**4.メディアクエリを使ったPC表示対応**
```css
@media (min-width: 1024px) {
  .video-container {
    width: 80%;
    margin: 0 auto;
  }
}
```

これにより、画面サイズが大きい場合でも中央に表示されます。
![スクリーンショット 2024-09-14 11.52.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/ac47d6d6-fbf9-61c1-bf74-6b63a0bcc5a1.png)

**5.メディアクエリを使ったSP表示対応**
```css
@media screen and (max-width: 768px) {
  .video-container {
    width: 100%;
    margin: 0 auto;
  }
}
```
![スクリーンショット 2024-09-14 12.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846051/438ed032-5a9b-6409-191d-df321e2ef3ec.png)
これにより、SPでもビデオの中央から全体が表示されます。

最後までご覧いただき本当にありがとうございました！！