Hướng dẫn tạo Modal Box với HTML, CSS và Javascript

DEMO

Modal Box có thể xem như một phần nội dung của trang nhưng được ẩn đi khi không cần thiết, một số ứng dụng của Modal Box trong thực tế có thể kể đến như form đăng kí, hình ảnh với kích cỡ đầy đủ hay một thông tin liên hệ của chủ trang web.

Trong bài viết này mình sẽ cùng các bạn xây dựng một Modal Box có chức năng như là một form đăng nhập, các bạn hãy xem ví dụ dưới đây:

1. Xây dựng giao diện

Đầu tiên chúng ta tạo file index.html và tạo các thành phần button và modal với đoạn code sau:

Code RUN
<div class="container">

    <h2>Freetuts.net hướng dẫn tạo Modal Box</h2>

    <!-- Button đăng nhập để mở form đăng nhập -->
    <button id="myBtn">Đăng Nhập</button>

    <!-- The Modal -->
    <div id="myModal" class="modal">
        <!-- Nội dung form đăng nhập -->
        <div class="modal-content">
            <form action="#">
                <span class="close">&times;</span>
                <h2>Form đăng nhập</h2>
                <div class="fomrgroup">
                    <b>UserName:</b>
                    <input type="text" name="username">
                </div>
                <div class="fomrgroup">
                    <b>PassWord:</b>
                    <input type="passWord" name="passWord">
                </div>
                <div class="fomrgroup">
                    <button>Đăng nhập</button>
                </div>
            </form>
        </div>
    </div>
</div>

Vậy là chúng ta đã có phần móng rồi, tiếp đến bước tiếp theo nhé!

2. Thêm CSS để định dạng các thành phần

Tiếp theo chúng ta sẽ thêm phần CSS dưới đây trong thẻ style để định dạng các thành phần:

Code RUN
.container {
    width: 70%;
    margin: auto;
    text-align: center;
}
/* Định dạng phần form đăng nhập*/
.fomrgroup {
    width: 50%;
    margin: auto;
    display: block;
    height: 50px;
}
.fomrgroup input{
    float: right;
     width: 70%;
    height: 25px;
    margin-right: 20px;
    line-height: 50px;
}
.fomrgroup b{
    font-size: 20px;
}
/* The Modal (background) */
.modal {
    display: none; /* mặc định được ẩn đi */
    position: fixed; /* vị trí cố định */
    z-index: 1; /* Ưu tiên hiển thị trên cùng */
    padding-top: 100px; 
    left: 0;
    top: 0;
    width: 100%;
    height: 100%; 
    overflow: auto;
    background-color: rgb(0,0,0); 
    background-color: rgba(0,0,0,0.4); 
}

/* Modal Content */
.modal-content {
    background-color: #fefefe;
    margin: auto;
    padding: 20px;
    border: 1px solid #888;
    width: 60%;
}

/* The Close Button */
.close {
    color: #aaaaaa;
    float: right;
    font-size: 28px;
    font-weight: bold;
}

.close:hover,
.close:focus {
    color: #000;
    text-decoration: none;
    cursor: pointer;
}

Mình đã giải thích những điểm quan trọng bằng ghi chú trong phần mã nguồn trên, ở đây các bạn lưu ý đến thuộc tính z-index: 1; nó sẽ đăt khối modal lên lớp trên cùng để ưu tiên hiển thị, tuy nhiên vì khối modal đã được ẩn đi nên ta không nhận thấy điều này khi mới tải trang.

3. Thêm xử lý Javascript

Bước cuối cùng cũng là bước quan trọng nhất, các bạn thêm đoạn script dưới đây vào phía cuối của thẻ body:

Code RUN
<script>
    // lấy phần Modal
    var modal = document.getElementById('myModal');
 
    // Lấy phần button mở Modal
    var btn = document.getElementById("myBtn");
 
    // Lấy phần span đóng Modal
    var span = document.getElementsByClassName("close")[0];
 
    // Khi button được click thi mở Modal
    btn.onclick = function() {
        modal.style.display = "block";
    }
 
    // Khi span được click thì đóng Modal
    span.onclick = function() {
        modal.style.display = "none";
    }
 
    // Khi click ngoài Modal thì đóng Modal
    window.onclick = function(event) {
        if (event.target == modal) {
            modal.style.display = "none";
        }
    }
</script>

Trong phần này mình đã giải thích rất kỹ bằng ghi chú nên mình sẽ không giải thích lại.

Vậy là xong rồi, các bạn chạy file index.html và xem kết quả nhé.

4. Lời kết

Mình sẽ giải thích một chút về thuật toán sử dụng ở đây, đầu tiên ta sẽ tạo nội dung Modal box như bình thường, sau đó thêm cho nó thuộc tính display: none để ẩn nó đi và z-index: 1 để đặt cho nó ưu tiên hiển thị trên cùng, tiếp đến mình sẽ dùng Javascript để xử lý, khi button được click thì sẽ gán thuộc tính display: block cho Modal box, khi click span thì sẽ gán lại thuộc tính display: none cho nó. Vậy là xong rồi.

Như vậy mình đã cùng các bạn xây dựng xong Modal box đăng nhập. Hi vọng nó sẽ khiến trang web của các bạn trở nên sống động và chuyên nghiệp hơn, hẹn gặp lại các bạn trong các bài viết tiếp theo trên freetuts.net

Tham khảo: w3schools.com

Nguồn: freetuts.net

KHÓA HỌC ĐANG GIẢM GIÁ

FEDU - 30 – HTML CSS cơ bản

(Giảng viên: Nguyễn Đức Việt)

XEM
FEDU - 25 – Thiết kế hiệu ứng bằng Javascript và illustrator

(Giảng viên: NGUYỄN ĐỨC VIỆT )

XEM
FEDU - 03: Thành thạo lập trình jquery qua 20 bài tập thực hành

(Giảng viên: Nguyễn Đức Việt)

XEM
FEDU - 22 – Học tất tần tật về Javascript từ đầu

(Giảng viên: Nguyễn Đức Việt)

XEM
FEDU - 19: Học lập trình Back-end PHP/MySql/Jquery nâng cao

(Giảng viên: Nguyễn Đức Việt)

XEM