Html, CSS 및 Vanilla JavaScript를 사용하여 모드 팝업 상자를 만드는 4가지 방법

Knowing is not enough; We must apply. Willing is not enough; We must do.
Bruce Lee


카탈로그

  • Introduction
  • Sample 1
  • Sample 2
  • Sample 3
  • Sample 4
  • Conclusion
  • 소개


    웹 디자인을 만들 때 고려해야 할 가장 중요한 일 중 하나는 사용자의 상호작용이다.사용자 상호작용의 좋은 예는 패턴 상자이다.
    모드 상자는 주로 사용자가 실행하는 작업에 따라 브라우저에 메시지 상자로 표시됩니다.모드 상자는 경보 상자, 섬광 알림 상자, 대화상자와 등불 상자를 포함하여 서로 다른 형식과 모양을 가지고 있다.기다리다
    모드 상자의 독특한 기능은 브라우저의 메인 창을 사용하지 않지만, 모드 창이 웹 페이지 앞에 하위 창으로 표시되도록 하는 것이다.
    응용 프로그램에서 패턴을 사용하는 몇 가지 중요한 상황은 다음과 같다.
  • 역전할 수 없는 특정 행동 과정에 대해 경고한다.
  • 새 정보에 대한 플래시 메모리 알림
  • 사용자의 상호작용과 참여도가 증가한다.
  • 정태 동사도 단점이 있다. 왜냐하면:
  • 사용자 워크플로우를 중단할 수 있습니다.
  • 그들은 즉시 사용자에게 주의를 요구했다.
  • 그들은 배경의 내용을 사용하지 않는다. 이것은 어떤 경우에 사람을 낙담하게 할 수도 있다.
  • 이제 정태 동사를 만들기 시작합시다.

    샘플 1


    이 강좌의 절차에서, 우리는 세 개의 파일, 즉 색인을 만들 것이다.html, 스타일.css와 응용 프로그램.js 파일, 네 개의 예시를 초과합니다.그리고 우리는 모든 파일의 코드에 대한 상세한 분해를 제시했다.

    지수html


    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script 
       src="https://kit.fontawesome.com/a71707a89a.js" 
       crossorigin="anonymous">
    </script>
    <link rel="stylesheet" href="./style.css"/>
    <title>Popup Box</title>
    </head>
    <body>
    <div id="popUpOverlay"></div>
    <div id="popUpBox">
    <div id="box">
    <i class="fas fa-check-circle fa-5x"></i>
    <h1>Here Goes Your Popup</h1>
    <div id="closeModal"></div>
    </div>
    </div>
    <button 
    onclick="Alert.render('You look very pretty today.')" 
    class="btn">
    Show Alert
    </button>
    <script src="./app.js"></script>
    </body>
    </html>
    
    위의 색인 태그 페이지에서head 태그Font Awesome 중 하나, 스크립트가 있습니다. 이 스크립트를 모드 상자에 사용하여 아이콘을 표시합니다.우리는 또한 색인 페이지에 CSS와javascript 페이지를 연결했다.
    색인 페이지의 주체에서, 우리는 id와 같은 중요한 HTML 속성을 가지고 있으며, 이따가 우리의javascript 파일에서 페이지를 조작하는 데 사용할 것입니다.
    마지막으로, 우리의 단추 탭에, 우리는onclick 이벤트 속성을 가지고 있으며, 경보 함수를 가지고 있으며, 페이지에 패턴 메시지를 표시하는 기능을 제공합니다.

    풍격css


    body{
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    
    .btn{
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: pink;
      font-size: 20px;
      color: white;
      padding: 10px 30px;
      cursor: pointer;
    }
    
    #popUpBox{
      width: 500px;
      overflow: hidden;
      background: pink;
      box-shadow: 0 0 10px black;
      border-radius: 10px;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      z-index: 9999;
      padding: 10px;
      text-align: center;
      display: none;
    }
    
    스타일에 있어서.css 파일입니다. 페이지의 상자 크기를 테두리 상자로 설정합니다.이 속성은 요소의 총 너비와 높이에 채우기와 테두리를 포함할 수 있도록 합니다.
    그리고 우리는 이걸로 우리의 버튼을 설계했다.btn류.이것은 우리가 위치를 정하는 단추를 허용하고, 페이지 중심에 모드를 표시할 수 있도록 합니다.
    마지막으로 # 팝업 상자를 사용하면 페이지의 중심에 패턴을 배치할 수 있습니다.
    z-index 속성을 통해 패턴을 페이지의 다른 요소 앞에 쌓을 수 있습니다.
    가장 중요한 것은 주의해야 할 스타일이다.css 파일은 표시 속성의 초기 상태를 없음으로 설정합니다.원인은 응용 프로그램에서 설명될 것이다.js 파일.

    응용 프로그램.회사 명


    var Alert = new CustomAlert();
    
    function CustomAlert(){
      this.render = function(){
          //Show Modal
          let popUpBox = document.getElementById('popUpBox');
          popUpBox.style.display = "block";
          //Close Modal
          document.getElementById('closeModal')
            .innerHTML ='<button onclick="Alert.ok()">OK</button>';
      }
    
    this.ok = function(){
      document.getElementById('popUpBox').style.display = "none";
      document.getElementById('popUpOverlay').style.display = "none";
    }
    }
    
    여기에는 Alert라는 전역 변수가 있습니다. 이 변수는 CustomAlert()라는 함수를 실례화합니다.이 함수에서 우리는:
  • 에서 #popUpBox(id)에 액세스했습니다.이렇게 하면 디스플레이를 블록으로 설정하고 단추를 눌렀을 때 모드를 표시합니다.초기 상태가 CSS 파일에서 없음으로 설정되어 있음을 기억하십시오.
  • HTML 파일의closeModal(id)에 접근하여 모드를 닫습니다.이것을 사용하면 원클릭 이벤트 속성이 있는 HTML 단추 표시를 설정할 수 있습니다.여기에서 우리는 ok () 라는 함수를 성명했다.
  • 마지막으로 단추를 눌렀을 때 ok () 함수를 인용하여 모드의 CSS 속성을 none로 설정합니다.
  • 이렇게 하면 우리는 다음과 같은 결과를 얻어야 한다.

    견본2


    우리는 색인부터 시작한다.html, 스타일.css와 응용 프로그램.js 파일.

    지수html


    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" 
        content="width=device-width, initial-scale=1.0"
    >
    <script 
    src="https://kit.fontawesome.com/a71707a89a.js" crossorigin="anonymous">
    </script>
      <link rel="stylesheet" href="./style.css"/>
      <title>Popup Box</title>
    </head>
    <body>
        <input 
          type="button" 
          value="Test the alert" 
          onclick="alert('...but something went wrong');" 
          class="btn"
          />
    <script src="./app.js"></script>
    </body>
    </html>
    
    위에서 CSS 및 JavaScript 파일에 대한 링크가 있습니다.그리고 색인 페이지의 주체에 단추 형식의 입력 표시가 있습니다.
    모드에 표시될 텍스트를 포함하는 onclick 이벤트 속성이 있습니다.

    풍격css


    .btn{
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: rgb(48, 48, 177);
      font-size: 20px;
      color: white;
      padding: 10px 30px;
      cursor: pointer;
    }
    
    #modalContainer {
        background-color:rgba(0, 0, 0, 0.3);
        position:absolute;
        width:100%;
        height:100%;
        top:0px;
        left:0px;
        z-index:10000;
    }
    
    #alertBox {
        position:relative;
        width:500px;
        min-height:100px;
        margin-top:250px;
        border:1px solid #666;
        background-color: pink;
        background-repeat:no-repeat;
        background-position:20px 30px;
    }
    
    #alertBox h1 {
        margin:0;
        font:bold 0.9em verdana,arial;
        background-color:white;
        color: black;
        border-bottom:1px solid #000;
        padding:2px 0 2px 5px;
    }
    
    #alertBox p {
        font:0.7em verdana,arial;
        height:50px;
        padding-left:5px;
        margin-left:55px;
    }
    
    #alertBox #closeBtn {
        display:block;
        position:relative;
        margin:5px auto;
        padding:7px;
        border:0 none;
        width:70px;
        font:0.7em verdana,arial;
        text-transform:uppercase;
        text-align:center;
        color:#FFF;
        background-color:#95b9d8;
        border-radius: 3px;
        text-decoration:none;
    }
    
    여기, 우리:
  • 우리의 버튼을 위해 설계되었다.색인에 설명된 btn 클래스입니다.html 파일
  • 그리고 우리는modalContainer,alertBox,alertBoxh1,alertBoxp,alertBox#closeBtn ID가 있습니다. 이 모든 것은 응용 프로그램에서 만든 것입니다.js 파일.예시 1에서 패턴을 만드는 방법과 다르다
  • 응용 프로그램.회사 명


    var titleAlert = "It Pops!!!";
    var closeModal = "Ok";
    
    if(document.getElementById) {
        window.alert = function(txt) {
            createCustomAlert(txt);
        }
    }
    
    //Function To Create Custom Alert
    function createCustomAlert(txt) {
        doc = document;
    
        if(doc.getElementById("modalContainer")) return;
    
     //Create Div For Modal Container Body
    modalObject = doc.getElementsByTagName("body")[0\].
    appendChild(doc.createElement("div"));
        modalObject.id = "modalContainer";
        modalObject.style.height = 
          doc.documentElement.scrollHeight + "px";
    
       //Create Div For Alert Box Container Body
        alertObj = modalObject.appendChild(doc.createElement("div"));
        alertObj.id = "alertBox";
        if(doc.all && !window.opera) alertObj.style.top = 
         document.documentElement.scrollTop + "px";
        alertObj.style.left = 
        (doc.documentElement.scrollWidth - alertObj.offsetWidth)/2 
         + "px";
        alertObj.style.visiblity="visible";
    
       //Create Element For Title Alert
        h1 = alertObj.appendChild(doc.createElement("h1"));
      h1.appendChild(doc.createTextNode(titleAlert));
    
       //Create Tag For Alert Body Content
        msg = alertObj.appendChild(doc.createElement("p"));
        msg.appendChild(doc.createTextNode(txt));
        msg.innerHTML = txt;
    
         //Create Tag To Close Modal Button
        btn = alertObj.appendChild(doc.createElement("a"));
        btn.id = "closeBtn";
        btn.appendChild(doc.createTextNode(closeModal));
        btn.href = "#";
        btn.focus();
        btn.onclick = function() { removeCustomAlert();return false; }
    
        alertObj.style.display = "block";
    
    }
    
       //Function To Remove Custom Alert
    function removeCustomAlert() {
    document.getElementsByTagName("body")[0].
    removeChild(document.getElementById("modalContainer"));
    }
    
    여기서 우리는 일을 6가지 다른 부분으로 분해한다.
  • 우선, 우리는 두 개의 전역 변수 closeModal과 titleAlert를 설정했습니다. 이 두 변수는 모두 모드 상자에 표시될 텍스트를 포함합니다.
  • createCustomAlert() 함수를 설명합니다.이것은 우리가 모드 주체를 만든 곳으로 페이지에 표시됩니다.
  • 그리고 body 탭에 div를 만들어서 modalContainer ID를 할당하고 페이지의 스크롤 높이로 설정합니다
  • 다음에 경보 상자 주체의div를 만듭니다.AlertBox ID를 할당했습니다.그리고 우리는 패턴을 페이지의 중심으로 설정하고 스타일도 볼 수 있도록 설정합니다.
  • 다음에 우리는 h1 표시를 만들어서 모드 상자의 제목을 설정합니다.titleAlert 텍스트 변수가 h1 태그에 추가되어 "팝업!!!"소식우리는 p표시를 만들고 텍스트 노드를 분배함으로써 모드 주체와 유사한 일을 했다.
  • 마지막으로, 모드 상자를 닫기 위해removeCustomAlert () 라는 함수를 만들었습니다.우리는 태그를 만들어서closeBtn ID를 추가하고onclick 이벤트 처리 프로그램을 만들어서 이 이벤트 처리 프로그램은 닫는 모드의 함수를 인용합니다.
  • 이렇게 하면 우리는 다음과 같은 결과를 얻어야 한다.

    견본


    지수html


    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <script 
    src="https://kit.fontawesome.com/a71707a89a.js" crossorigin="anonymous">
    </script>
      <link rel="stylesheet" href="style.css"/>
      <title>Pop Up</title>
    </head>
    <body>
    
      <a class="btn" onclick="pop()">Show Box</a>
      <div id="box">
        <i class="fas fa-check-circle"></i> 
        <h1>Good Job</h1>
        <a class="close" onclick="pop()">Close Box</a>
      </div>
    <script src="app.js"></script>
    </body>
    </html>
    
    위의 색인 태그 페이지에서head 태그Font Awesome 중 하나, 스크립트가 있습니다. 이 스크립트를 모드 상자에 사용하여 아이콘을 표시합니다.우리는 또한 색인 페이지에 CSS와javascript 페이지를 연결했다.
    페이지에는 에서 설명한 팝 () 함수가 두 개 더 있습니다. 프로그램에서 인용할 것입니다.js 파일.

    풍격css


    .btn{
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: pink;
      font-size: 20px;
      color: white;
      padding: 10px 30px;
      cursor: pointer;
    }
    
    #box{
      width: 500px;
      overflow: hidden;
      background: pink;
      box-shadow: 0 0 10px black;
      border-radius: 10px;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      z-index: 9999;
      padding: 10px;
      text-align: center;
      display: none;
    }
    
    #box span{
      color: hotpink;
      font-size: 40px;
      display: block;
      margin: 20px 0;
    }
    
    #box h1{
      color: brown
    }
    
    .close{
      font-size: 18px;
      color: white;
      padding: 10px 20px;
      cursor: pointer;
      background: rgb(111, 111, 223);
      display: inline-block;
      border-radius: 1px solid #000;
    }
    
    위의 양식은 매우 간단하다.주의해야 할 것은 초기 단계에서 #btn ID를 표시 없음으로 설정했습니다.응용 프로그램에서 표시 속성을 전환합니다.js 파일.

    응용 프로그램.회사 명


    var modal = null
     function pop() {
       if(modal === null) {
         document.getElementById("box").style.display = "block";
         modal = true
       } else {
         document.getElementById("box").style.display = "none";
         modal = null
       }
     }
    
    우리는 우선modal이라는 전역 변수를null로 설정합니다.그리고 색인 중의 팝 () 함수를 인용합니다.html 페이지, 그리고 우리는 모드의 조건 상태를 설정합니다.
    모드가 처음에 비어 있고 눌렀다면, 디스플레이 설정은block, 모드 변수는true로 설정하여 모드를 표시합니다. 닫기 단추를 누르면, 디스플레이 설정은none, 모드 변수는null로 설정하여 모드를 삭제합니다.
    이렇게 하면 우리는 다음과 같은 결과를 얻어야 한다.

    견본


    지수html


    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" href="style.css"/>
      <title>Pop Up</title>
    </head>
    <body>
    
      <button class="show btn">Click To See Modal </button>
      <div class="modal">
        <div class="modal-box">
            <span class="close-button">X</span>
            <h1>Hello, my name is modal</h1>
        </div>
    </div>
    
    <script src="app.js"></script>
    </body>
    </html>
    
    여기서 우리는 ID가 아닌 CSS 클래스를 사용하여 모드의 상태를 조작할 것입니다.우리는 모드를 표시하기 위해 단추 탭이 하나 있고, 알파벳'X'가 있는 경계로 모드를 닫습니다.

    풍격css


    .btn{
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: pink;
      font-size: 20px;
      color: white;
      padding: 10px 30px;
      cursor: pointer;
    }
    
    
    .modal {
      position: fixed;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(0, 0, 0, 0.3);
      opacity: 0;
      visibility: hidden;
    }
    .modal-box {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background-color: pink;
      padding: 1rem 1.5rem;
      width: 24rem;
      border-radius: 0.5rem;
    }
    .close-button {
      float: right;
      width: 1.5rem;
      line-height: 1.5rem;
      text-align: center;
      cursor: pointer;
      border-radius: 0.25rem;
      background-color: lightgray;
    }
    
    .show-modal {
      opacity: 1;
      visibility: visible;
      transform: scale(1.0);
    }
    
    여기서 우리는 우리의 버튼과 모델을 설계했다.이것모드 클래스는 초기 상태가 있는데 그 가시성은 숨겨져 있다.이 옵션을 표시하려면 자바스크립트 함수를 사용합니다.

    응용 프로그램.회사 명


    let modal = document.querySelector(".modal");
    let show = document.querySelector(".show");
    let closeButton = document.querySelector(".close-button");
    
    function toggleModal() {
        modal.classList.toggle("show-modal");
    }
    
    function windowOnClick(event) {
        if (event.target === modal) {
            toggleModal();
        }
    }
    
    show.addEventListener("click", toggleModal);
    closeButton.addEventListener("click", toggleModal);
    window.addEventListener("click", windowOnClick);
    
    우리는 위에서 세 가지 일을 했다.
  • 우리는 querySelector를 통해 HTML 클래스에 접근할 수 있다.querySelector() 메서드는 문서에 지정된 CSS 선택기와 일치하는 첫 번째 요소를 반환합니다.
  • 그리고 우리는 toggleModal () 함수를 만들어서 CSS의 showmodal 클래스를 전환합니다.
  • 마지막으로 함수에 이벤트 탐지기를 추가하여 단추를 눌렀을 때 특정 조건에 따라 모드의 상태를 전환합니다.
  • 이렇게 하면 우리는 다음과 같은 결과를 얻어야 한다.

    결론


    이것은 우리 네 개의 모드의 실현이다.너는 마음대로 그것을 설계할 수 있고, 네가 진행하고 있는 모든 프로젝트에서 그것을 실현할 수 있다.나는 디자인이 가장 좋은 것이 아닐 수도 있다는 것을 알고 있지만, 본고의 목표는 디자인이 아니라javascript 실현에 더욱 치중한다.
    이 코드의 링크는 Github 에서 찾을 수 있습니다.
    더 많은 강좌를 구독하세요here.

    좋은 웹페이지 즐겨찾기