Ter um formulário modal em um site é algo muito interessante e que da um toque a mais ao seu site, e fazer um formulário modal é muito simples de fazer. Nesse exemplo farei um formulário de cadastro de usuário com os seguintes campos: Nome completo, Email, Telefone, Cidade, Estado, Data de nascimento, Sexo, Login e Senha.
Aqui temos o código da página:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../../assets/css/exemplo.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link href="https://fonts.googleapis.com/css?family=Oswald:200" rel="stylesheet">
<title>Usuários</title>
</head>
<body>
<div class="container-table">
<div class="content">
<div id="formulario" class="formulario">
<div>
<form action="createUser.php" method="post">
<div id="title">
<h1 id="title-form">Cadastro de novo Usuário</h1>
<a class="close"><i class="fa fa-times-circle" aria-hidden="true"></i></a>
</div>
<div class="container-form">
<div class="input_div">
<input class="input_form" type="text" name="name" placeholder="Digite seu Nome"
value="" required>
</div>
<div class="input_div">
<input class="input_form" type="text" name="email" placeholder="Digite seu Email"
value="" required>
</div>
<div class="input_div">
<input class="input_form" type="text" name="login" placeholder="Digite seu Login"
value="" required>
</div>
<div class="input_div">
<input class="input_form" type="password" name="password" placeholder="Digite sua Senha" required>
</div>
<div class="input_div">
<input class="input_form" type="text" name="telefone" placeholder="Digite seu Telefone"
value="" required>
</div>
<div class="input_div">
<input class="input_form" type="text" name="city" placeholder="Digite sua Cidade"
value="" required>
</div>
<div class="input_div">
<input class="input_form" type="text" name="state" placeholder="Digite seu Estado"
value="" required>
</div>
<div class="input_div">
Sexo:
<input type="radio" name="masc"
value="Masculino" required> Masculino
<input type="radio" name="fem"
value="Feminino" required> Feminino
</div>
</div>
<button class="send-buttons" name="action" value="create"> enviar </button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
e aqui o código css:
*{
-webkit-box-sizing: border-box;
-moz-transition-box-sizing: border-box;
box-sizing: border-box;
}
body{
font-family: Arial, Helvetica, sans-serif;
font-size: 1em;
}
.formulario_{
display:block;
position: fixed;
top: 0;
right: 0;
left: 0;
bottom: 0;
}
.formulario_> div {
width: 350px;
margin: 1% auto;
padding-bottom: 20px;
border-radius: 10px;
background: #fff;
padding-bottom: 10px;
}
.input_div{
padding: 10px;
display: flex;
}
#title{
text-align: center;
width: 100%;
height: 40px;
border-radius: 5px 5px 0px 0px;
display: flex;
}
#title-form {
font-family: 'Oswald', sans-serif;
font-size: 24px;
color: #232323;
background-color: #FAFAFA;
margin: 35px auto;
}
.container-form {
margin-top: 40px;
}
#input_form {
border: solid #232323;
border-radius: 5px;
border-width: 1px;
display: block;
width: 100%;
height: 35px;
padding: 5px;
font-family: 'Oswald', sans-serif;
font-size: 15px;
}
.send-buttons {
display: flex;
justify-content: center;
text-align: center;
margin: 20px 80px;
border: solid #232323;
border-radius: 5px;
border-width: 1px;
width: 180px;
padding: 5px;
font-family: 'Oswald', sans-serif;
font-size: 15px;
background-color: #232323;
color: #FAFAFA;
}
.send-buttons:hover {
background-color: #FAFAFA;
color: #232323;
}
#input-form:focus{
border: 1px solid #00BFFF;
}
.close {
color: #232323;
text-decoration: none;
font-weight: bold;
font-size: 20px;
display: inline-flex;
z-index: 1;
float: right;
margin-top: 5px;
margin-right: 5px;
}
.close .fa-times-circle {
color: #232323;
}
.close:hover .close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
Como podemos ver temos uma página com um formulário centralizado. Como queremos um formulário modal, a ideia é que tenhamos um botão e que ao apertar esse botão nosso formulário apareça junto com um fundo preto, deixando-o em destaque. Vamos criar nosso botão e sumir com o formulário. Para sumir com o formulário é simples, no css na classe do formulário vamos colocar top = -200% e o z-index=-1. Também vamos colocar um efeito de transição para quando ele aparecer! Vamos também adicionar um css para o botão:
<div class="container-table">
<button id="form-button" class="add_table">
Adicionar Usuário <i class="fa fa-plus" aria-hidden="true"></i>
</button>
<div class="content">
.formulario{ display: block;
position: fixed; top: -200%; right: 0; left: 0; bottom: 0; z-index: -1; -webkit-transition: all 400ms cubic-bezier(0.35,-0.39, 0.18, 1.18); -moz-transition: all 400ms cubic-bezier(0.35,-0.39, 0.18, 1.18); transition: all 400ms cubic-bezier(0.35,-0.39, 0.18, 1.18); } .container-table .add_table { font-family: 'Oswald', sans-serif; font-size: 17px; color: #FAFAFA; background-color: #388E3C; border: none; margin-bottom: 15px; padding: 7px 17px; border-radius: 5px; }
Como podemos observar, o botão foi criado entre a div "container-table" e a div "content". E com o css agora temos um botão verde com uma fonte mais agradável. Agora que sumimos com nosso formulário, vamos fazer a mágica com o javascript. Vamos criar um arquivo chamado modal_usr.js com o seguinte código:
var modal = document.getElementById('formulario'); var btn = document.getElementsByClassName('add_table')[0]; var close = document.getElementsByClassName("close")[0]; var edit = document.getElementsByClassName("fa fa-pencil-square-o"); var input = document.getElementsByTagName("input"); var option = document.getElementsByTagName("option"); function clearContents(){ modal.style.top = "-200%"; modal.style.background = "rgba(0,0,0,0.0)"; modal.style.zIndex = -1; document.getElementById('title-form').innerHTML = "Cadastro de novo Usuário"; document.getElementsByName("action")[0].value = "create"; for(x=0;x<input.length-1;x++){ input[x].value = ""; } for(x=0;x<option.length;x++){ option[x].selected = false; } } btn.onclick = function() { modal.style.zIndex = 1;
modal.style.top = 0; modal.style.background = "rgba(0,0,0,0.8)"; } close.onclick = function() { clearContents(); } window.onclick = function(event) { if (event.target == modal) { clearContents(); } }
Explicando um pouco do javascript acima: Primeiro criamos as variáveis contendo nossos elementos de html. Explicarei a primeira função por ultimo então vamos pular para o btn.onclick(). Nessa função dizemos que ao apertarmos o elemento que está contido na variável btn (que é o nosso botão), colocaremos o z-index do nosso formulário para 1 (Dando prioridade nele na página), colocaremos o atributo top dele para 0 (Como ele está com -200% ele não aparece na página e colocando para 0 ele aparecerá) e o background preto para que o formulário fique em evidência. A função close e a window chamam a mesma função clearContents(). A diferença é que uma é quando clicamos no botãozinho de fechar no canto superior direito e a outra é se clicarmos fora do modal no fundo preto. A função clearContents() é bem simples, ela reseta os atributos do formulário ,fazendo-o sumir e depois ela vai de campo em campo zerando o que está escrito neles (por isso o .value=""). Bem tranquilo não é mesmo?