JSFiddle - React, Tailwind, and code Playground
by ZooeyLai
HTML
<div id="app" class="wrap">
<button onclick="loginModal()" class="btn btn-primary">點我登入帳號</button>
<hr>
<button onclick="postModal()" class="btn btn-primary">點我新增貼文</button>
<div class="modal hidden" id="login-modal">
<div class="flex">
<div class="form-group">
<label for="user" class="form-label">帳號:</label>
<input type="text" id="user" class="form-input">
</div>
<div class="form-group">
<label for="pwd" class="form-label">密碼:</label>
<input type="password" id="pwd" class="form-input">
</div>
<hr>
<button class="btn-close btn btn-primary" onclick="closeBtn()">關閉</button>
</div>
</div>
<div class="modal hidden" id="post-modal">
<div class="flex">
<div class="form-group">
<label for="pwd" class="form-label">標題:</label>
<input type="text" id="title" class="form-input">
</div>
<div class="form-group">
<label for="pwd" class="form-label">內文:</label>
<textarea class="form-input"></textarea>
</div>
<button class="btn-close btn btn-primary" onclick="closeBtn()">關閉</button>
</div>
</div>
<div class="overlay hidden"></div>
</div>
CSS
@-webkit-keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
@keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
:root{
--primary: #4f46e5;
--secondary:#2563eb;
--secondary100: #dbeafe;
--gray800: #333;
--white: #fff;
--background:#e4e4e4;
--warning100 :#ffedd5;
--warning : #ea580c;
--danger100 :#fee2e2;
--danger : #dc2626;
--success : #059669;
--success100: #ecfdf5;
}
* {
/* margin: 0;
padding: 0; */
box-sizing: border-box;
font-family: "Inter", sans-serif;
}
body{
color: #222;
position: relative;
min-height: 100vh;
}
.form-group{
margin-bottom: 1rem;
display: flex;
flex-flow: column;
}
.form-label{
font-size: 0.75rem;
margin-bottom: 0.25rem;
}
.form-input{
border: 1px solid #94a3b8;
padding: 0.5rem 1rem;
border-radius: 0.25rem;
flex: auto;
margin-right: 1rem;
}
.form-input:focus{
border-color: var(--primary);
box-shadow: 0px 0px 0px 3px rgb(79 70 229 / 40%);
outline: none;
}
.btn{
padding: 0.5rem 1rem;
border: 2px solid transparent;
border-radius: 0.25rem;
background-color: var(--gray);
color: #475569;
cursor: pointer;
}
.btn:hover{
transform: scale(1.05);
transition: all 0.3s;
}
.btn-primary{
background-color: var(--primary);
color: var(--white);
}
.btn-primary:hover{
background-color: #3730a3;
}
.modal{
width: 400px;
background: #fff;
padding: 1.25rem;
display: flex;
flex-direction: column;
justify-content: center;
border-radius: 0.5rem;
position: absolute;
top: 30%;
left: 50%;
...
JavaScript
let modalLogin = document.querySelector('#login-modal');
let modalPost = document.querySelector('#post-modal');
let overlay = document.querySelector('.overlay');
let closeModalBtn = document.querySelector('.btn-close');
let modals = document.querySelectorAll('.modal');
// 登入彈窗
function loginModal(){
modalLogin.classList.remove('hidden');
overlay.classList.remove('hidden')
};
// 發布彈窗
function postModal(){
modalPost.classList.remove('hidden');
overlay.classList.remove('hidden')
};
// 關閉按鈕
function closeBtn(){
event.target.closest('.modal').classList.add('hidden');
overlay.classList.add('hidden')
}
// 遍歷所有彈窗,在點擊overlay時關閉所有彈窗(forEach)
modals.forEach((modal) =>{
overlay.addEventListener('click', ()=>{
overlay.classList.add('hidden');
modal.classList.add('hidden');
})
})