.container
//- h1 Dot digit input
//- p Type the code that you received in your e-mail below:
.inputs#inputs
input(maxlength="2" placeholder="•" value="")
input(maxlength="2" placeholder="•" value="")
input(maxlength="2" placeholder="•" value="")
input(maxlength="1" placeholder="•" value="")
View Compiled
@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700')
$fontsize: 60px //code
$placeholderColor: lighten(#3498db, 20%)
body
background-color: #2980b9
background-image: linear-gradient(45deg, darken(#2980b9, 10%), #3498db)
background-size: 100%
background-position: 0 0
background-attachment: fixed
padding: 10px
height: 100vh
color: #fff
font-family: "Open Sans", sans-serif
box-sizing: border-box
overflow: hidden
input::-webkit-input-placeholder
color: $placeholderColor !important
input:-moz-placeholder
color: $placeholderColor !important
input::-moz-placeholder /* Firefox 19+ */
color: $placeholderColor !important
input:-ms-input-placeholder
color: $placeholderColor !important
.container
width: 90%
height: 100vh
margin: 0 auto
display: flex
flex-direction: column
justify-content: center
align-items: center
p
font-size: 24px
font-weight: 100
h1
font-size: 32px
font-weight: 600
.inputs
input
width: #{$fontsize/(3/2)+10}
height: $fontsize
line-height: 100%
background-color: transparent
border: 0
outline: 0
color: white
font-size: $fontsize
word-spacing: 0px
overflow: hidden
text-align: center
View Compiled
function processInput(holder){
var elements = holder.children(), //taking the "kids" of the parent
str = ""; //unnecesary || added for some future mods
elements.each(function(e){ //iterates through each element
var val = $(this).val().replace(/\D/,""), //taking the value and parsing it. Returns string without changing the value.
focused = $(this).is(":focus"), //checks if the current element in the iteration is focused
parseGate = false;
val.length==1?parseGate=false:parseGate=true;
/*a fix that doesn't allow the cursor to jump
to another field even if input was parsed
and nothing was added to the input*/
$(this).val(val); //applying parsed value.
if(parseGate&&val.length>1){ //Takes you to another input
var exist = elements[e+1]?true:false; //checks if there is input ahead
exist&&val[1]?( //if so then
elements[e+1].disabled=false,
elements[e+1].value=val[1], //sends the last character to the next input
elements[e].value=val[0], //clears the last character of this input
elements[e+1].focus() //sends the focus to the next input
):void 0;
} else if(parseGate&&focused&&val.length==0){ //if the input was REMOVING the character, then
var exist = elements[e-1]?true:false; //checks if there is an input before
if(exist) elements[e-1].focus(); //sends the focus back to the previous input
}
val==""?str+=" ":str+=val;
});
}
$("#inputs").on('input', function(){processInput($(this))}); //still wonder how it worked out. But we are adding input listener to the parent... (omg, jquery is so smart...);
$("#inputs").on('click', function(e) { //making so that if human focuses on the wrong input (not first) it will move the focus to a first empty one.
var els = $(this).children(),
str = "";
els.each(function(e){
var focus = $(this).is(":focus");
$this = $(this);
while($this.prev().val()==""){
$this.prev().focus();
$this = $this.prev();
}
})
});
This Pen doesn't use any external CSS resources.