JSFiddle - React, Tailwind, and code Playground
HTML
<!-- JavaScript 系列三:練習3 ── modal 互動視窗元件 -->
<!-- Nord Polar Night配色:https://www.nordtheme.com/docs/colors-and-palettes -->
<!-- lightbox Ref1 html+css: https://ithelp.ithome.com.tw/m/articles/10333376 -->
<!-- How TO - CSS/JS Modal https://www.w3schools.com/howto/howto_css_modals.asp-->
<!-- How TO - Full screen Overlay Navigation https://www.w3schools.com/howto/howto_js_fullscreen_overlay.asp -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./index.css">
</head>
<body>
<button onclick="loginModal()">點我登入帳號</button>
<hr>
<button onclick="postModal()">點我新增貼文</button>
<div class="modal" id="login-modal">
<div class="lightbox">
<div>帳號:</div>
<input type="text" placeholder="請輸入您的信箱帳號">
<div>密碼:</div>
<input type="password" placeholder="請輸入您的密碼">
<div>
<button class="btn-close">關閉</button>
</div>
</div>
</div>
<div class="modal" id="post-modal">
<div class="lightbox">
<div>標題:</div>
<input type="text" placeholder="上限為10字">
<div>內文:</div>
<textarea></textarea>
<div>
<button class="btn-close">關閉</button>
</div>
</div>
</div>
<script src="./index.js"></script>
</body>
</html>
CSS
/* https://www.w3schools.com/cssref/css_selectors.php */
/* div > p Selects all <p> elements where the parent is a <div> element */
/* div + p Selects the first <p> element that is placed immediately after <div> elements */
/* p ~ ul Selects every <ul> element that is preceded by a <p> element */
* {
box-sizing: border-box;
}
body {
background: #D8DEE9;
color: black;
font-size: system-ui;
}
button {
background-color: black;
border: 2px solid #ECEFF4;
color: white;
font-weight: bolder;
border-radius: 5px;
font-size: 18px;
padding: 6px;
cursor: pointer;
}
.modal#login-modal,
.modal#post-modal {
position: fixed;
left: 0;
top: 0;
z-index: 1;
padding-top: 10%;
width: 0%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
overflow-x: hidden;
transition: 0.05s;
}
.lightbox {
border: 2px solid #ECEFF4;
border-radius: 10px;
background-color: #E5E9F0;
width: 300px;
height: 240px;
margin: auto;
align-items: center;
padding-left: 2%;
padding-top: 2%;
}
.lightbox>div {
font-size: 18px;
text-align: left;
align-items: center;
}
.lightbox>input {
font-size: 18px;
width: 80%;
margin-bottom: 1rem;
}
.lightbox>textarea {
font-size: 18px;
width: 80%;
height: 20%;
margin-bottom: 1rem;
}
.btn-close {
position: relative;
right: -65%;
margin-top: 1%;
}
JavaScript
let loginTag = document.querySelector('.modal#login-modal');
let postTag = document.querySelector('.modal#post-modal')
let closeLogin = document.querySelector('#login-modal .btn-close');
let closePost = document.querySelector('#post-modal .btn-close');
function loginModal() {
// loginTag.style.display = 'block';
loginTag.style.width = '100%';
}
function postModal() {
// postTag.style.display = 'block';
postTag.style.width = '100%';
}
closeLogin.onclick = function () {
loginTag.style.width = '0%';
}
closePost.onclick = function () {
postTag.style.width = '0%';
}