クリックしたら背景が黒くなる

どうも、くまだです。

ネタが無いのでまたしても案件で使ったモノを書きます。

今回は、クリックしたら背景が薄く黒くなる処理を施すものです。

クリックしたら背景が黒くなる処理

見たほうが早いと思うので、まずは動作から。

クリックしたら黒い背景がでて、検索フォームかそれ以外の部分をクリックすると黒い背景が消える。

ここでは検索フォームでやりましたが、ハンバーガーメニューとかでも代用できます。

コード的には以下のようになります。

〇HTML

<body>
  <header class="header">

    <div class="header__search search sp-none show-search">
      <div class="search__area" id="make__img">
        <input type="text" id="in-text" class="search__text" placeholder="キーワードを入力">
        <div class="search__button">
          <div class="search__imgbox">
            <img src="images/search.png" width="16" height="16" alt="" class="search__img">
          </div>
        </div>
      </div>
    </div>
  </header>

  <div class="black-bg"></div>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script src="main.js"></script>

</body>

〇CSS

.search__area {
  position: relative;
  width: 200px;
  height: 36px;
  margin: auto;
  font-weight: bold;
  letter-spacing: 0.1em;
  line-height: 0;
}

.search__area .search__text {
  box-sizing: border-box;
  display: block;
  width: inherit;
  height: 36px;
  margin: 0;
  padding: 0 12px;
  float: left;
  border-radius: 100px;
  border-color: transparent;
  outline: 0;
  color: #333;
  font-size: 12px;
}

.search__area .search__text {
  display: none;
  width: 200px;
}

.search__text.active {
  display: block;
}

.show-search {
  z-index: 200;
  position: absolute;
  right: 40px;
}


.search__area .search__button {
  box-sizing: border-box;
  position: absolute;
  top: 52%;
  right: 3px;
  width: 32px;
  height: 32px;
  margin: 0;
  padding: 8px 8px;
  transform: translateY(-50%);
  border: none;
  border: 1px solid #ffffff;
  border-radius: 50%;
  background: gray;
  color: #000;
  font-size: 14px;
  line-height: 36px;
  cursor: pointer;
}

.search__area .search__text:focus {
  background: #fff;
}

.search__area .search__text::-ms-clear {
  display: none;
}

.search__imgbox {
  position: relative;
  width: 100%;
  max-width: 16px;
}

.search__imgbox::before {
  display: block;
  padding-top: 100%;
  content: "";
}

.search__imgbox img {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  transform: translate(-50%, -50%);
}

.black-bg {
  visibility: hidden;
  z-index: 100;
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: #000;
  cursor: pointer;
  opacity: 0;
  transition: all 0.6s;
}


.open .black-bg {
  visibility: visible;
  z-index: 100;
  opacity: 0.6;
}

〇JavaScript(jQuery)

$(function () {
  const search = $(".search__button");
  const blackBg = $(".black-bg");
  const searchText = $(".search__text");
  const body = $("body");


  search.click(function () {
    searchText.toggleClass("active");
    body.toggleClass("open");
  });

  blackBg.click(function () {
    body.removeClass("open");
    searchText.removeClass("active");
  });

});

要素をクリックしたらクラスが付く。もう一度クリックするとそのクラスが外れる。ただそれだけの処理です。

肝心の黒背景はblack-bgクラスですがデフォルトではvisibility: hidden;で隠しておく。

bodyタグにopenクラスがつくと、CSSで以下の部分、

.open .black-bg {
  visibility: visible;
  z-index: 100;
  opacity: 0.6;
}

で黒背景が出現します。bodyダグにクラスの着け外しを選択しましたが、例えばcontainerみたいな大枠クラスでも良いと思います。

ここまで読んでくださりありがとうございました。

この記事を書いた人