• Como

    Como hacer un formulario de contacto I – HTML y CSS

    En este tutorial construiremos un formulario de contacto funcional y validado desde cero, en esta primera parte veremos como hacer la estructura en HTML y los estilos en CSS.

    Actualización: Acabo de publicar un tutorial para usuarios avanzados de como hacer un formulario de contacto similar a este, capaz de enviar mensaje sin recargar la pagina usando AJAX, todo en un solo tutorial.


    Resultado Final

    Estructura HTML

    Vamos a empezar con una estructura HTML base y guardamos este archivo como index.html:

    <html>
    	<head>
    		<title>Contacto</title>
    		<link rel='stylesheet' href='estilos.css'>
    	</head>
    	<body>
    		<form class='contacto'>
    			<div><label>Tu Nombre:</label><input type='text' value=''></div>
    			<div><label>Tu Email:</label><input type='text' value=''></div>
    			<div><label>Asunto:</label><input type='text' value=''></div>
    			<div><label>Mensaje:</label><textarea rows='6'></textarea></div>
    			<div><input type='submit' value='Envia Mensaje'></div>
    		</form>
    	</body>
    </html>

    Hoja de Estilos

    Vamos a crear una hoja de estilos, le ponemos de nombre estilos.css y la ubicamos en la misma carpeta en donde esta el .html

    Empezamos con el siguiente código que define las propiedades de fuente, color de fondo y longitud del body:

    *{
    	font-family: sans-serif;
    	font-size: 12px;
    	color: #798e94;
    }
    body{
    	width: 400px;
    	margin: auto;
    	background-color: #E2ECEE;
    }

    Formulario

    Hacemos un selector para el formulario (.contacto) y le definimos border, border-radius, padding, margin, y color de fondo:

    .contacto{
    	border: 1px solid #CED5D7;
    	border-radius: 6px;
    	padding: 45px 45px 20px;
    	margin-top: 50px;
    	background-color: white;
    	box-shadow: 0px 5px 10px #B5C1C5, 0 0 0 10px #EEF5F7 inset;
    }

    En la linea 17 estoy definiendo dos sombras: una externa y otra interna que da la apariencia de un borde interior. (Propiedades CSS3 explicadas y con ejemplos).

    Luego hacemos selectores para label y div y ponemos el siguiente código:

    .contacto label{
    	display: block; /* esto es para que el label se sobreponga a la caja de texto */
    	font-weight: bold;
    }
    .contacto div{
    	margin-bottom: 15px; /* esto los separara un poco */
    }

    Cajas de texto

    Para las cajas de textos usamos selectores multiples, para los input y para el textarea:

    .contacto input[type='text'], .contacto textarea{
    	padding: 7px 6px;
    	width: 294px; /* una longitud definida */
    	border: 1px solid #CED5D7;
    	resize: none; /* esta propiedad es para que el textarea no sea redimensionable */
    	box-shadow:0 0 0 3px #EEF5F7;
    	margin: 5px 0;
    }
    .contacto input[type='text']:focus, .contacto textarea:focus{
    	outline: none; /* reset especifico para Chrome/Safari */
    	box-shadow:0 0 0 3px #dde9ec;
    }

    Nota que en la linea 26 y 34 se usa el selector input[type='text'](selector de atributo) esto es para que no se mezcle con el otro input[type='submit'] (el boton de envio).

    Boton de Envio

    Por ultimo para el boton de envio usaremos estilos similares a los de las cajas de textos, pero ademas va a tener bordes redondeados, sombra al texto y para el background le pondremos degradados CSS3:

    .contacto input[type='submit']{
    	border: 1px solid #CED5D7;
    	box-shadow:0 0 0 3px #EEF5F7;
    	padding: 8px 16px;
    	border-radius: 20px;
    	font-weight: bold;
    	text-shadow: 1px 1px 0px white;
    
    	background: #e4f1f6; /* fallback para navegadores que no soporten degradados */
    	background: -moz-linear-gradient(top, #e4f1f6 0%, #cfe6ef 100%);
    	background: -webkit-linear-gradient(top, #e4f1f6 0%,#cfe6ef 100%);
    }
    .contacto input[type='submit']:hover{
    	background: #edfcff;
    	background: -moz-linear-gradient(top, #edfcff 0%, #cfe6ef 100%);
    	background: -webkit-linear-gradient(top, #edfcff 0%,#cfe6ef 100%);
    }
    .contacto input[type='submit']:active{
    	background: #cfe6ef;
    	background: -moz-linear-gradient(top, #cfe6ef 0%, #edfcff 100%);
    	background: -webkit-linear-gradient(top, #cfe6ef 0%,#edfcff 100%);
    }

    El boton debe ir quedando así, en sus tres estados:


    Código final CSS

    *{
    	font-family: sans-serif;
    	font-size: 12px;
    	color: #798e94;
    }
    body{
    	width: 400px;
    	margin: auto;
    	background-color: #E2ECEE;
    }
    .contacto{
    	border: 1px solid #CED5D7;
    	border-radius: 6px;
    	padding: 45px 45px 20px;
    	margin-top: 50px;
    	background-color: white;
    	box-shadow: 0px 5px 10px #B5C1C5, 0 0 0 10px #EEF5F7 inset;
    }
    .contacto label{
    	display: block;
    	font-weight: bold;
    }
    .contacto div{
    	margin-bottom: 15px;
    }
    .contacto input[type='text'], .contacto textarea{
    	padding: 7px 6px;
    	width: 294px;
    	border: 1px solid #CED5D7;
    	resize: none;
    	box-shadow:0 0 0 3px #EEF5F7;
    	margin: 5px 0;
    }
    .contacto input[type='text']:focus, .contacto textarea:focus{
    	outline: none;
    	box-shadow:0 0 0 3px #dde9ec;
    }
    .contacto input[type='submit']{
    	border: 1px solid #CED5D7;
    	box-shadow:0 0 0 3px #EEF5F7;
    	padding: 8px 16px;
    	border-radius: 20px;
    	font-weight: bold;
    	text-shadow: 1px 1px 0px white;
    
    	background: #e4f1f6;
    	background: -moz-linear-gradient(top, #e4f1f6 0%, #cfe6ef 100%);
    	background: -webkit-linear-gradient(top, #e4f1f6 0%,#cfe6ef 100%);
    }
    .contacto input[type='submit']:hover{
    	background: #edfcff;
    	background: -moz-linear-gradient(top, #edfcff 0%, #cfe6ef 100%);
    	background: -webkit-linear-gradient(top, #edfcff 0%,#cfe6ef 100%);
    }
    .contacto input[type='submit']:active{
    	background: #cfe6ef;
    	background: -moz-linear-gradient(top, #cfe6ef 0%, #edfcff 100%);
    	background: -webkit-linear-gradient(top, #cfe6ef 0%,#edfcff 100%);
    }

    Con eso hemos terminado de diseñar nuestro formulario utilizando solo HTML y CSS, recuerda que puedes ver el resultado final en este enlace.

    Si no entendiste una parte o tienes alguna duda, házmela saber en los comentarios, no olvides suscribirte por correo electrónico para que seas notificado cuando se publiquen las continuaciones de este tutorial.

  • Josue Ochoa

    Hola, soy el editor de este blog, trabajo como desarrollador web freelance, sígueme en Twitter.

  • Tal vez te interese
Acerca de

WebTursos es un blog de tutoriales, articulos y recursos para diseñadores y desarrolladores web. mas...

Suscribete

Suscríbete para recibir los últimos posts directamente en tu bandeja de entrada: