When a field set is collapsed, inputs are hidden and labels float left to conserve space while previewing what is inside the field set.
A Pen by Kyle B. Johnson on CodePen.
When a field set is collapsed, inputs are hidden and labels float left to conserve space while previewing what is inside the field set.
A Pen by Kyle B. Johnson on CodePen.
<div class="wrapper"> | |
<form id="theForm"> | |
<fieldset> | |
<legend><a href='#one'>Fieldset #1 <i class="edit fi-pencil"></i></a></legend> | |
<div class="row"> | |
<div class="small-12 columns"> | |
<label for="">Required</label> | |
<input type="text" name="one" data-required /> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="small-12 columns"> | |
<label for="">Optional</label> | |
<input type="text" name="two" /> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="small-12 medium-4 columns"> | |
<label>One</label> | |
<input type="text" /> | |
</div> | |
<div class="small-12 medium-4 columns"> | |
<label>Two</label> | |
<input type="text" /> | |
</div> | |
<div class="small-12 medium-4 columns"> | |
<label>Three</label> | |
<input type="text" /> | |
</div> | |
</div> | |
</fieldset> | |
<fieldset> | |
<legend>Fieldset #2 <i class="edit fi-pencil"></i></legend> | |
<div> | |
<label for="">Required</label> | |
<input type="text" name="three" data-required /> | |
</div> | |
<div> | |
<label for="">Optional</label> | |
<input type="text" name="four" /> | |
</div> | |
</fieldset> | |
<button id="submit">Submit</button> | |
</form> | |
</div><!-- ./wrapepr --> |
$(document).ready(function() { | |
//DOM is go! | |
/** | |
* FIELDSET TOGGLE | |
*/ | |
$( 'fieldset:not(:first-child)').addClass('collapse'); | |
$( 'legend' ).click(function() { | |
$( this ).closest( 'fieldset' ).toggleClass( 'collapse' ); | |
}); | |
$( 'label' ).click(function() { | |
$( this ).closest( 'fieldset' ).removeClass( 'collapse' ); | |
}); | |
/** | |
* FORM VALIDATION | |
* https://github.com/DiegoLopesLima/Validate | |
*/ | |
$('form').validate({ | |
onChange : true, | |
onBlur: true, | |
sendForm: false, | |
eachValidField : function() { | |
if( !$(this).val() ) { | |
$(this).closest('div').removeClass('error').addClass('success').addClass('empty'); | |
} else { | |
$(this).closest('div').removeClass('error').removeClass('empty').addClass('success'); | |
} | |
}, | |
eachInvalidField : function() { | |
$(this).closest('div').removeClass('success').addClass('error'); | |
}, | |
valid : function() { | |
$( '#submit' ).text('Sending...'); | |
$.ajax({ | |
url: "http://vlxdigital.com/sandbox/echo.php", | |
jsonp: "callback", | |
dataType: "jsonp", | |
data: $( '#theForm' ).serializeObject(), | |
// work with the response | |
success: function( data ) { | |
$( '#submit' ).text('Sent!'); | |
console.log( data ); // server response | |
} | |
}); | |
}, | |
}); | |
}); // document ready | |
/** | |
* Serialize Form to JSON | |
* http://css-tricks.com/snippets/jquery/serialize-form-to-json/ | |
*/ | |
$.fn.serializeObject = function() | |
{ | |
var o = {}; | |
var a = this.serializeArray(); | |
$.each(a, function() { | |
if (o[this.name]) { | |
if (!o[this.name].push) { | |
o[this.name] = [o[this.name]]; | |
} | |
o[this.name].push(this.value || ''); | |
} else { | |
o[this.name] = this.value || ''; | |
} | |
}); | |
return o; | |
}; |
.wrapper { | |
width: 600px; | |
min-width: 300px; | |
max-width: 100%; | |
margin: auto; | |
} | |
form { | |
margin: 10px; | |
legend:hover { | |
cursor: pointer; | |
i.edit { | |
display: inline-block; | |
} | |
} | |
i.edit { display: none; } | |
.inline { | |
label, input { | |
float: left; | |
width: 100px; | |
} | |
input { | |
padding: 0; | |
border: 0; | |
height: auto; | |
box-shadow: none; | |
background-color: inherit!important; | |
} | |
&:after { | |
content: ""; | |
display: table; | |
clear: both; | |
} | |
} | |
button { | |
font-size: 15px; | |
color: white; | |
padding: 10px 20px; | |
float: right; | |
background-color: #19438d; | |
} | |
} | |
fieldset.collapse { | |
div, .row, .columns, label { | |
display: inline; | |
width: auto; | |
float: left; | |
padding: 0; | |
} | |
.row:after { | |
clear: none; | |
} | |
label { | |
margin-left: 10px; | |
} | |
input, .collapsable { | |
display: none; | |
} | |
.inline * { | |
float: none; | |
} | |
} | |
legend a { | |
color: inherit; | |
} | |
div.success:not(.empty) label { | |
color: green; | |
&:after { | |
content: " \2714"; | |
} | |
} | |
div.error label { | |
color: red; | |
&:after { | |
content: " \2718"; | |
} | |
} |