Fullscreen Form Interface

An experimental fullscreen form concept where the idea is to allow distraction-free form filling with some fancy animations when moving between form fields.

FullscreenForm

View demo Download source

Today we’d like to share a fullscreen form concept with you. The idea is to extend the minimal form concept and only show one question or form field at a time in fullscreen. The user can enter data in a distraction-free way and it allows to add some fancy animations for the fields. Once all the fields have been filled or moved through, we show a summary in the final step. Here the input data can still be reviewed and corrected. In this final step the form can also be submitted.

Please note that this is a highly experimental component and it was only tested with the latest browsers that support animations, 3D transforms and HTML5 form elements.

The form has a couple of elements: the form fields (each being shown individually), a dot navigation on the right side (this allows to go back to already filled questions), a number indicator that shows the current step in the form, a continue button that will move to the next field, some details inside of the form fields, like a info icon and a couple of custom inputs, like the fullscreen color picker from the Inspiration for Custom Select Elements post.

The following show the initial view of the form:

FullscreenForm01

Here’s an example of the info tooltip and a filled email field:
FullscreenForm02_infoexample

For smaller screens we have a different layout with adjusted elements:
FullscreenForm03_Mobile
Image credit: Flat iPhone by UIPixels.com

When all fields have been navigated through, we reach the final review step where the form can be corrected and submitted:
FullscreenForm04_Review

The main idea behind the implementation was to take each field (in our case a list item of an ordered list) and display one at a time. When navigating to the next or previous field, animation classes are applied to the exiting and coming fields which make the inner parts (i.e. the label and input) move up or down with delays.

The form script has a couple of options, mainly to show/hide the control elements and a callback for when the review state is reached:

// show progress bar
ctrlProgress : true,

// show navigation dots
ctrlNavDots : true,

// show [current field]/[total fields] status
ctrlNavPosition : true,

// reached the review and submit step
onReview : function() { return false; }

The data-attribute data-input-trigger used in a field (i.e. a list element in our custom form), will trigger the form to move to the next field if the respective input of that field has been entered, meaning, a value was selected.

We hope you enjoyed this experiment and find it inspiring!

View demo Download source

Previous:
Next:

Tagged with:

Mary Lou (Manoela Ilic) is a freelance web designer and developer with a passion for interaction design. She studied Cognitive Science and Computational Logic and has a weakness for the smell of freshly ground peppercorns.

View all contributions by

Website: http://tympanus.net/

Related Articles

Feedback 108

  1. 4

    Amazing post, Mary!
    How would you enable autofocus on all of the text fields? It seems to only be working on the first input area.

    • 6

      The following works when clicking on continue:

      $(‘.fs-continue’).click(function(){
      $(‘.fs-current input’).focus();
      })”

      I’d love to find a way to do the same when the user presses enter. Any ideas?

    • 10

      Did you find the solution to this, We’re also looking for the solution to the same.

  2. 11

    Hello, guys. I have a simple question, How I can change or delete the scrollbar? I mean, the scrollbar do a weird transition, when you are going to the next step of the form. I just want delete that scroll bar.

  3. 12

    I want to use this form for my site. But i don’t know how to code it, to send the data and info to an email. with out the need for it to open any email applications.

  4. 13

    hi i want to give image uload option also in this form using php everything else is working f9 except image is not getting inserted in my db how can i do that

  5. 14

    Hey,
    Great work..! I love the idea and the interface.
    One Quick question, how can i jump through questions depending on the radio selected?

  6. 15

    Fix for auto focus on clicking continue and pressing Return key.

    Hey guys to fix the problem you have to edit the Javascript file and add the following lines.

    setTimeout( function(){ document.querySelector('.fs-current > input').focus(); } , 500 );

    you will have to add the following code in the event handlers. That is at

    1) document.addEventListener( ‘keydown’, function( ev ) {} );
    2) this.ctrlContinue.addEventListener( ‘click’, function(){} );
    3) this.ctrlNavDots.forEach( function( dot, pos ) {} );

    All of these are in FForm.prototype._initEvents() , my code with this fixed works smoothly and doesnt rely on jQuery

    Replace with code below for autofocus on click Continue, press Enter or using Nav Dots


    /**
    * init events
    */
    FForm.prototype._initEvents = function() {
    var self = this;

    // show next field
    this.ctrlContinue.addEventListener( 'click', function() {
    self._nextField();
    setTimeout( function(){ document.querySelector('.fs-current > input').focus(); } , 500 );
    } );

    // navigation dots
    if( this.options.ctrlNavDots ) {
    this.ctrlNavDots.forEach( function( dot, pos ) {
    dot.addEventListener( 'click', function() {
    self._showField( pos );
    setTimeout( function(){ document.querySelector('.fs-current > input').focus(); } , 500 );
    } );
    } );
    }

    // jump to next field without clicking the continue button (for fields/list items with the attribute "data-input-trigger")
    this.fields.forEach( function( fld ) {
    if( fld.hasAttribute( 'data-input-trigger' ) ) {
    var input = fld.querySelector( 'input[type="radio"]' ) || /*fld.querySelector( '.cs-select' ) ||*/ fld.querySelector( 'select' ); // assuming only radio and select elements (TODO: exclude multiple selects)
    if( !input ) return;

    switch( input.tagName.toLowerCase() ) {
    case 'select' :
    input.addEventListener( 'change', function() { self._nextField(); } );
    break;

    case 'input' :
    [].slice.call( fld.querySelectorAll( 'input[type="radio"]' ) ).forEach( function( inp ) {
    inp.addEventListener( 'change', function(ev) { self._nextField(); } );
    } );
    break;

    /*
    // for our custom select we would do something like:
    case 'div' :
    [].slice.call( fld.querySelectorAll( 'ul > li' ) ).forEach( function( inp ) {
    inp.addEventListener( 'click', function(ev) { self._nextField(); } );
    } );
    break;
    */
    }
    }
    } );

    // keyboard navigation events - jump to next field when pressing enter
    document.addEventListener( 'keydown', function( ev ) {
    if( !self.isLastStep && ev.target.tagName.toLowerCase() !== 'textarea' ) {
    var keyCode = ev.keyCode || ev.which;
    if( keyCode === 13 ) {
    ev.preventDefault();
    self._nextField();
    setTimeout( function(){ document.querySelector('.fs-current > input').focus(); } , 500 );
    }
    }
    } );
    };

    PS: I’m not a javascript person, but it worked for me and I realise it might not work *well* on selects and radios

    Hope it helps someone :)

  7. 16

    Tip:

    I recommend you set the first input element to autofocus. This will really help the user and makes the form kickass !

  8. 17

    Hello, first of all… Thank you Lou for this amazing post!
    Second, someone know how to create the form in 2 parts? for example… I want to create a form with 30 questions, but aesthetically the bullets on the right side looks ugly, 30 small circles in the same page is not a good idea. I’m looking for a solution, if someone can help me, I would be very grateful!

    Thank you in advance.

    V.

Follow this discussion

Leave a Comment

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>