10行で動きをつける、モーダルウィンドウとスライドメニュー(JavaScript)

## モーダルウィンドウ
dialog要素を使うことで簡単に作れた。
### dialog要素とは
HTMLの要素でモーダルダイアログやポップアップウィンドウを簡単に作成するために使用できる。
これを使うことで対話的に操作できるコンテンツをページの上に重ねて表示することができる。
```html:index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>modal</title>
  </head>

  <body>
    <button id="button">クリック</button>
    <dialog id="dialog">
        <h1>モーダルウィンドウ</h1>
        <button id="close">閉じる</button>
    </dialog>
        <script src="script.js"></script>
  </body>
</html>
```

```js:script.js
const button = document.getElementById("button");
const dialog = document.getElementById("dialog");
const close = document.getElementById("close");

button.addEventListener("click", () => {
    dialog.showModal();
});

close.addEventListener("click", () => {
    dialog.close();
});
```

### デモ
<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="XWwXgpN" data-pen-title="Untitled" data-user="MK2024pen" 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/MK2024pen/pen/XWwXgpN">
  Untitled</a> by MK2024 (<a href="https://codepen.io/MK2024pen">@MK2024pen</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

CSSを指定せずにモーダルウィンドウを作ることができた。

* 背景色の変更にはCSSで```dialog::backdrop```で変更できる。
* ```showModal()```ではなく```show()```を使うと他の要素も操作することができる。

## スライドメニュー
ボタンを押したら左側からメニューが流れてくるものを作る。
メニューには閉じるボタンがついている。
```html:index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>slide</title>
    <link rel="stylesheet" href="style.css" />
  </head>

  <body>
    <button id="open">クリック</button>
    <div id="menu">
      <button id="close">閉じる</button>
      <h2>スライドメニュー</h2>
    </div>
    <script src="script.js"></script>
  </body>
</html>
```

```css:style.css
#menu {
  position: fixed;
  top: 0;
  left: 0;
  width: 250px;
  height: 100%;
  background-color: lightgray;
  transform: translateX(-100%);
  transition: transform 0.3s ease;
}

#menu.open {
  transform: translateX(0);
}

#close {
  position: absolute;
  right: 0px;
}
```

```js:script.js
const openMenuButton = document.getElementById('open');
const closeMenuButton = document.getElementById('close');
const sideMenu = document.getElementById('menu');

openMenuButton.addEventListener('click', () => {
    sideMenu.classList.add('open');
});

closeMenuButton.addEventListener('click', () => {
    sideMenu.classList.remove('open');
});
```

### デモ
<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="pomgpqa" data-pen-title="Untitled" data-user="MK2024pen" 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/MK2024pen/pen/pomgpqa">
  Untitled</a> by MK2024 (<a href="https://codepen.io/MK2024pen">@MK2024pen</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

* 下記のコードを追加することでメニュー外をクリックしたら閉じるようにできる。
```js:script.js
document.addEventListener('click', (event) => {
    if (!sideMenu.contains(event.target) && !openMenuButton.contains(event.target)) {
        sideMenu.classList.remove('open');
    }
});
```