質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

モーダルウィンドウを複数のボタンから表示したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 958

score 8

現状と実現したいこと

#modal.hidden {
  transform: translate(0, -10000px);
}


hiddenでモーダルウィンドウを画面外に配置しました。
一つ目のボタンを押すと正しく画面内に表示されるのですが、二つ目のボタンでは反応しません。

二つ目のボタンは一つ目のhtmlをコピペしたものですのでテキスト以外に差異はありません。

class=open部分クリックするとclass=hiddenがremoveされてモーダルのtransformが無効になり画面内に表示されるようになっています。 ですが、二つ目のopen部分についてはクリックしてもhiddenがremoveされません。何故でしょうか?

また、表示されたウィンドウに押したボタン毎で異なる内容を表示したいのですが、方法がわかりませんでした。

分かる方がいらっしゃいましたら教えていただけると幸いです。

"use strict";

{
  const open = document.getElementById("open");
  const close = document.getElementById("close");
  const modal = document.getElementById("modal");
  const mask = document.getElementById("mask");

  open.title = "記事";

  open.addEventListener("click", () => {
    modal.classList.remove("hidden");
    mask.classList.remove("hidden");
  });
  close.addEventListener("click", () => {
    modal.classList.add("hidden");
    mask.classList.add("hidden");
  });
  mask.addEventListener("click", () => {
    close.click();
  });
}
    <link rel="stylesheet" href="css/check.css" />
  </head>
  <body>
    <div class="wrapper">

      <main>
        <section class="blog">
          <article class="blogArticle">
          <div id="mask" class="hidden"></div>
            <section id="modal" class="hidden">
              <h2 class="modalh2">
                記事のタイトル
              </h2>
              <p class="assistanceText">
                -------------------
              </p>
              <div class="scroll">
                <p>本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文</p>
              </div>
              <div id="close">閉じる</div>
            </section>
            <div class="blogText" id="open">
              <h3>
                記事のタイトル
              </h3>
              <p class="assistanceText">
                -------------------
              </p>
              <p class="assistanceText">
                一部本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文...
              </p>
            </div>
          </article>
        </section>
        <section class="blog">
          <article class="blogArticle">
          <div id="mask" class="hidden"></div>
            <section id="modal" class="hidden">
              <h2 class="modalh2">
                記事のタイトル
              </h2>
              <p class="assistanceText">
                -------------------
              </p>
              <div class="scroll">
                <p>本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文</p>
              </div>
              <div id="close">閉じる</div>
            </section>
            <div class="blogText" id="open">
              <h3>
                記事のタイトル
              </h3>
              <p class="assistanceText">
                -------------------
              </p>
              <p class="assistanceText">
                一部本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文...
              </p>
            </div>
          </article>
        </section>
      </main>
    </div>
    <script src="js/check.js"></script>
  </body>
</html>
.blogText {
  border: solid;
  margin: 20px;
}
.modalh2 {
  margin: 0;
}
.scroll {
  height: 90vh;
  overflow: scroll;
}
#open {
  cursor: pointer;
  padding: 3px;
}

#close {
  cursor: pointer;
  width: 200px;
  border: 1px solid #ccc;
  border-radius: 4px;
  text-align: center;
  padding: 12px 0;
  margin: 16px auto 0;
}

#mask {
  background: rgba(0, 0, 0, 0.4);
  position: fixed;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
  z-index: 1;
}

#modal {
  background: #fff;
  width: 65%;
  padding: 40px;
  border-radius: 4px;
  position: absolute;
  top: 50px;
  left: 0;
  right: 0;
  margin: 0 auto;
  /* transition: transform 0.4s; */
  z-index: 2;
}

#modal > p {
  margin: 0 0 20px;
}

#mask.hidden {
  display: none;
}

#modal.hidden {
  transform: translate(0, -10000px);
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

同じidを複数のHTML要素に適用するのはNGです。
競合しているため正しい制御は困難です

jQueryライブラリつかっていいならこんな感じです

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/10/30 18:10

    モーダルの指定の仕方は工夫をすれば色々なアプローチが可能です

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る