JSFiddle - React, Tailwind, and code Playground
HTML
<div id="content">
<form id="jform" action="mailer.php" method="post">
<fieldset>
<legend>Personal Info</legend>
<p>
<label for="fullname" class="block">Full Name <span>*</span> :</label>
<input type="text" name="fullname" id="fullname" />
</p>
<p>
<label for="company" class="block">Company/organisation Name:</label>
<input type="text" name="company" id="company" />
</p>
</fieldset>
<fieldset>
<legend>Email</legend>
<p>
<label for="email" class="block">Email <span>*</span> :</label>
<input type="email" name="email" id="email" />
</p>
<p>
<label for="phone" class="block">Phone Number <span>*</span> :</label>
<input type="number" name="phone" id="phone" />
</p>
</fieldset>
<fieldset>
<legend>Message</legend>
<p>
<label for="message" class="block">Message <span>*</span> :</label>
<textarea name="message" id="message" cols="50" rows="10"></textarea>
</p>
</fieldset>
<fieldset>
<legend>About You</legend>
<p>
<label for="comment" class="block">How did you hear about us? :</label>
<input type="text" name="comment" id="comment" />
</p>
</fieldset>
<p>
<button type="submit" id="send">submit</button>
</p>
</form>
</div>
CSS
body {
background: #efefef;
margin: 0;
padding: 0;
border: none;
text-align: center;
font: normal 14px Georgia, "Times New Roman", Times, serif;
color: #222;
}
#content {
width: 500px;
margin: 0 auto;
margin-bottom: 25px;
padding: 0;
text-align: left;
}
fieldset {
margin-top: 25px;
padding: 15px;
border: 1px solid #d1d1d1;
-webkit-border-radius: 7px;
-moz-border-radius: 7px;
border-radius: 7px;
}
fieldset legend {
font: normal 30px Verdana, Arial, Helvetica, sans-serif;
text-shadow: 0 1px 1px #fff;
letter-spacing: -1px;
color: #273953;
}
input, textarea {
padding: 3px;
}
label {
cursor: pointer;
}
.block {
display: block;
}
small {
letter-spacing: 1px;
font-size: 11px;
font-style: italic;
color: #9e9e9e;
}
.info {
text-align: left;
padding: 5px;
font: normal 11px Verdana, Arial, Helvetica, sans-serif;
color: #fff;
position: absolute;
display: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: -1px 1px 2px #a9a9a9;
-moz-box-shadow: -1px 1px 2px #a9a9a9;
box-shadow: -1px 1px 2px #a9a9a9;
}
.error {
background: #f60000;
border: 3px solid #d50000;
}
.correct {
background: #56d800;
border: 3px solid #008000;
}
.wrong {
font-weight: bold;
color: #e90000;
}
.normal {
font-weight: normal;
color: #222;
}
#send {
background: #3f5a81;
width: 100%;
border: 5px solid #0F1620;
font: bold 30px Verdana, sans-serif;
color: #fafafa;
text-shadow: 1px 1px 1px #0F1620;
-webkit-border-radius: 7px;
-moz-border-radius: 7px;
border-radius: 7px;
}
#send:hover {
background: #4d76b1;
border: 5px solid #253750;
color: #fff;
}
#send:active {
text-indent: -10px;
}
JavaScript
$(document).ready(function(){
// ====================================================== //
var jVal = {
'fullName' : function() {
$('body').append('<div id="nameInfo" class="info"></div>');
var nameInfo = $('#nameInfo');
var ele = $('#fullname');
var pos = ele.offset();
nameInfo.css({
top: pos.top-3,
left: pos.left+ele.width()+15
});
if(ele.val().length < 4) {
jVal.errors = true;
nameInfo.removeClass('correct').addClass('error').html('← please tell us who you are').show();
ele.removeClass('normal').addClass('wrong');
} else {
nameInfo.removeClass('error').addClass('correct').html('√').show();
ele.removeClass('wrong').addClass('normal');
}
},
'phone' : function (){
$('body').append('<div id="phoneInfo" class="info"></div>');
var phoneInfo = $('#phoneInfo');
var ele = $('#phone');
var pos = ele.offset();
phoneInfo.css({
top: pos.top-3,
left: pos.left+ele.width()+15
});
var patt = /0[ -]?[1-9](?:[ -]?\d){9}\b/;
if(!patt.test(ele.val())) {
jVal.errors = true;
phoneInfo.removeClass('correct').addClass('error').html('← we need a phone number with 11 digits and that starts with 0').show();
ele.removeClass('normal').addClass('wrong');
} else {
phoneInfo.removeClass('error').addClass('correct').html('√').show();
ele.removeClass('wrong').addClass('normal');
}
},
'email' : function() {
$('body').append('<div id="emailInfo" class="info"></div>');
var emailInfo = $('#emailInfo');
var ele = $('#email');
var pos = ele.offset();
emailInfo.css({
top: pos.top-3,
left: pos.left+ele.width()+15
});
var patt = /^.+@.+[.].{2,}$/i;
if(!patt.test(ele.val())) {
jVal.errors = true;
emailInfo.removeClass('correct').addClass('error').html('← a valid email address would be nice ([email protected])').show();
ele.removeClass('normal').addClass('wrong');
} else...