Publicação

Fazendo um formulário modal com Javascript,html e css

foto de
Gabriel Goulart CONTEÚDO EM DESTAQUE

    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?

Comentários