Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Daily UI #002: Credit Card Checkout
<!--
Follow me on
Dribbble: https://dribbble.com/supahfunk
Twitter: https://twitter.com/supahfunk
Codepen: https://codepen.io/supah/
This example is just for fun.
I realized it for the dailyui challenge
https://dailyui.co/
Fork it if you want, it's free, but I apreciate credits or a retweet
Enjoy :)
-->
<div class="checkout">
<div class="credit-card-box">
<div class="flip">
<div class="front">
<div class="chip"></div>
<div class="logo">
<svg version="1.1" id="visa" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="47.834px" height="47.834px" viewBox="0 0 47.834 47.834" style="enable-background:new 0 0 47.834 47.834;">
<g>
<g>
<path d="M44.688,16.814h-3.004c-0.933,0-1.627,0.254-2.037,1.184l-5.773,13.074h4.083c0,0,0.666-1.758,0.817-2.143
c0.447,0,4.414,0.006,4.979,0.006c0.116,0.498,0.474,2.137,0.474,2.137h3.607L44.688,16.814z M39.893,26.01
c0.32-0.819,1.549-3.987,1.549-3.987c-0.021,0.039,0.317-0.825,0.518-1.362l0.262,1.23c0,0,0.745,3.406,0.901,4.119H39.893z
M34.146,26.404c-0.028,2.963-2.684,4.875-6.771,4.875c-1.743-0.018-3.422-0.361-4.332-0.76l0.547-3.193l0.501,0.228
c1.277,0.532,2.104,0.747,3.661,0.747c1.117,0,2.313-0.438,2.325-1.393c0.007-0.625-0.501-1.07-2.016-1.77
c-1.476-0.683-3.43-1.827-3.405-3.876c0.021-2.773,2.729-4.708,6.571-4.708c1.506,0,2.713,0.31,3.483,0.599l-0.526,3.092
l-0.351-0.165c-0.716-0.288-1.638-0.566-2.91-0.546c-1.522,0-2.228,0.634-2.228,1.227c-0.008,0.668,0.824,1.108,2.184,1.77
C33.126,23.546,34.163,24.783,34.146,26.404z M0,16.962l0.05-0.286h6.028c0.813,0.031,1.468,0.29,1.694,1.159l1.311,6.304
C7.795,20.842,4.691,18.099,0,16.962z M17.581,16.812l-6.123,14.239l-4.114,0.007L3.862,19.161
c2.503,1.602,4.635,4.144,5.386,5.914l0.406,1.469l3.808-9.729L17.581,16.812L17.581,16.812z M19.153,16.8h3.89L20.61,31.066
h-3.888L19.153,16.8z"/>
</g>
</g>
</svg>
</div>
<div class="number"></div>
<div class="card-holder">
<label>Card holder</label>
<div></div>
</div>
<div class="card-expiration-date">
<label>Expires</label>
<div></div>
</div>
</div>
<div class="back">
<div class="strip"></div>
<div class="logo">
<svg version="1.1" id="visa" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="47.834px" height="47.834px" viewBox="0 0 47.834 47.834" style="enable-background:new 0 0 47.834 47.834;">
<g>
<g>
<path d="M44.688,16.814h-3.004c-0.933,0-1.627,0.254-2.037,1.184l-5.773,13.074h4.083c0,0,0.666-1.758,0.817-2.143
c0.447,0,4.414,0.006,4.979,0.006c0.116,0.498,0.474,2.137,0.474,2.137h3.607L44.688,16.814z M39.893,26.01
c0.32-0.819,1.549-3.987,1.549-3.987c-0.021,0.039,0.317-0.825,0.518-1.362l0.262,1.23c0,0,0.745,3.406,0.901,4.119H39.893z
M34.146,26.404c-0.028,2.963-2.684,4.875-6.771,4.875c-1.743-0.018-3.422-0.361-4.332-0.76l0.547-3.193l0.501,0.228
c1.277,0.532,2.104,0.747,3.661,0.747c1.117,0,2.313-0.438,2.325-1.393c0.007-0.625-0.501-1.07-2.016-1.77
c-1.476-0.683-3.43-1.827-3.405-3.876c0.021-2.773,2.729-4.708,6.571-4.708c1.506,0,2.713,0.31,3.483,0.599l-0.526,3.092
l-0.351-0.165c-0.716-0.288-1.638-0.566-2.91-0.546c-1.522,0-2.228,0.634-2.228,1.227c-0.008,0.668,0.824,1.108,2.184,1.77
C33.126,23.546,34.163,24.783,34.146,26.404z M0,16.962l0.05-0.286h6.028c0.813,0.031,1.468,0.29,1.694,1.159l1.311,6.304
C7.795,20.842,4.691,18.099,0,16.962z M17.581,16.812l-6.123,14.239l-4.114,0.007L3.862,19.161
c2.503,1.602,4.635,4.144,5.386,5.914l0.406,1.469l3.808-9.729L17.581,16.812L17.581,16.812z M19.153,16.8h3.89L20.61,31.066
h-3.888L19.153,16.8z"/>
</g>
</g>
</svg>
</div>
<div class="ccv">
<label>CCV</label>
<div></div>
</div>
</div>
</div>
</div>
<form class="form" autocomplete="off" novalidate>
<fieldset>
<label for="card-number">Card Number</label>
<input type="num" id="card-number" class="input-cart-number" maxlength="4" />
<input type="num" id="card-number-1" class="input-cart-number" maxlength="4" />
<input type="num" id="card-number-2" class="input-cart-number" maxlength="4" />
<input type="num" id="card-number-3" class="input-cart-number" maxlength="4" />
</fieldset>
<fieldset>
<label for="card-holder">Card holder</label>
<input type="text" id="card-holder" />
</fieldset>
<fieldset class="fieldset-expiration">
<label for="card-expiration-month">Expiration date</label>
<div class="select">
<select id="card-expiration-month">
<option></option>
<option>01</option>
<option>02</option>
<option>03</option>
<option>04</option>
<option>05</option>
<option>06</option>
<option>07</option>
<option>08</option>
<option>09</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
</div>
<div class="select">
<select id="card-expiration-year">
<option></option>
<option>2016</option>
<option>2017</option>
<option>2018</option>
<option>2019</option>
<option>2020</option>
<option>2021</option>
<option>2022</option>
<option>2023</option>
<option>2024</option>
<option>2025</option>
</select>
</div>
</fieldset>
<fieldset class="fieldset-ccv">
<label for="card-ccv">CCV</label>
<input type="text" id="card-ccv" maxlength="3" />
</fieldset>
<button class="btn"><i class="fa fa-lock"></i> submit</button>
</form>
</div>
$('.input-cart-number').on('keyup change', function(){
$t = $(this);
if ($t.val().length > 3) {
$t.next().focus();
}
var card_number = '';
$('.input-cart-number').each(function(){
card_number += $(this).val() + ' ';
if ($(this).val().length == 4) {
$(this).next().focus();
}
})
$('.credit-card-box .number').html(card_number);
});
$('#card-holder').on('keyup change', function(){
$t = $(this);
$('.credit-card-box .card-holder div').html($t.val());
});
$('#card-holder').on('keyup change', function(){
$t = $(this);
$('.credit-card-box .card-holder div').html($t.val());
});
$('#card-expiration-month, #card-expiration-year').change(function(){
m = $('#card-expiration-month option').index($('#card-expiration-month option:selected'));
m = (m < 10) ? '0' + m : m;
y = $('#card-expiration-year').val().substr(2,2);
$('.card-expiration-date div').html(m + '/' + y);
})
$('#card-ccv').on('focus', function(){
$('.credit-card-box').addClass('hover');
}).on('blur', function(){
$('.credit-card-box').removeClass('hover');
}).on('keyup change', function(){
$('.ccv div').html($(this).val());
});
/*--------------------
CodePen Tile Preview
--------------------*/
setTimeout(function(){
$('#card-ccv').focus().delay(1000).queue(function(){
$(this).blur().dequeue();
});
}, 500);
/*function getCreditCardType(accountNumber) {
if (/^5[1-5]/.test(accountNumber)) {
result = 'mastercard';
} else if (/^4/.test(accountNumber)) {
result = 'visa';
} else if ( /^(5018|5020|5038|6304|6759|676[1-3])/.test(accountNumber)) {
result = 'maestro';
} else {
result = 'unknown'
}
return result;
}
$('#card-number').change(function(){
console.log(getCreditCardType($(this).val()));
})*/
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body {
min-height: 100%;
font-family: 'Open sans', sans-serif;
}
body {
background: linear-gradient(50deg, #f3c680, hsla(179,54%,76%,1));
}
/*--------------------
Buttons
--------------------*/
.btn {
display: block;
background: hsl(86, 76%, 71%);
color: hsl(0, 0, 100);
text-decoration: none;
margin: 20px 0;
padding: 15px 15px;
border-radius: 5px;
position: relative;
&::after {
content: '';
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
transition: all .2s ease-in-out;
box-shadow: inset 0 3px 0 hsla(0, 0, 0, 0), 0 3px 3px hsla(0, 0, 0, .2);
border-radius: 5px;
}
&:hover::after {
background: hsla(0, 0, 0, 0.1);
box-shadow: inset 0 3px 0 hsla(0, 0, 0, 0.2);
}
}
/*--------------------
Form
--------------------*/
.form {
fieldset {
border: none;
padding: 0;
padding: 10px 0;
position: relative;
clear: both;
&.fieldset-expiration {
float: left;
width: 60%;
& .select {
width: 84px;
margin-right: 12px;
float: left;
}
}
&.fieldset-ccv {
clear: none;
float: right;
width: 86px;
}
label {
display: block;
text-transform: uppercase;
font-size: 11px;
color: hsla(0, 0, 0, .6);
margin-bottom: 5px;
font-weight: bold;
font-family: Inconsolata;
}
input,
.select {
width: 100%;
height: 38px;
color: hsl(0, 0, 20);
padding: 10px;
border-radius: 5px;
font-size: 15px;
outline: none!important;
border: 1px solid hsla(0, 0, 0, 0.3);
box-shadow: inset 0 1px 4px hsla(0, 0, 0, 0.2);
&.input-cart-number {
width: 82px;
display: inline-block;
margin-right: 8px;
&:last-child {
margin-right: 0;
}
}
}
.select {
position: relative;
&::after {
content: '';
border-top: 8px solid #222;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
position: absolute;
z-index: 2;
top: 14px;
right: 10px;
pointer-events: none;
}
select {
appearance: none;
position: absolute;
padding: 0;
border: none;
width: 100%;
outline: none!important;
top: 6px;
left: 6px;
background: none;
:-moz-focusring {
color: transparent;
text-shadow: 0 0 0 #000;
}
}
}
}
button {
width: 100%;
outline: none!important;
background: linear-gradient(180deg, #49a09b, #3d8291);
text-transform: uppercase;
font-weight: bold;
border: none;
box-shadow: none;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
margin-top: 90px;
& .fa {
margin-right: 6px;
}
}
}
/*--------------------
Checkout
--------------------*/
.checkout {
margin: 150px auto 30px;
position: relative;
width: 460px;
background: white;
border-radius: 15px;
padding: 160px 45px 30px;
box-shadow: 0 10px 40px hsla(0, 0, 0, .1);
}
/*--------------------
Credit Card
--------------------*/
.credit-card-box {
perspective: 1000;
width: 400px;
height: 280px;
position: absolute;
top: -112px;
left: 50%;
transform: translateX(-50%);
&:hover .flip,
&.hover .flip {
transform: rotateY(180deg);
}
.front,
.back {
width: 400px;
height: 250px;
border-radius: 15px;
backface-visibility: hidden;
background: linear-gradient(135deg, #bd6772, #53223f);
position: absolute;
color: #fff;
font-family: Inconsolata;
top: 0;
left: 0;
text-shadow: 0 1px 1px hsla(0, 0, 0, 0.3);
box-shadow: 0 1px 6px hsla(0, 0, 0, 0.3);
&::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: url('http://cdn.flaticon.com/svg/44/44386.svg') no-repeat center;
background-size: cover;
opacity: .05;
}
}
.flip {
transition: 0.6s;
transform-style: preserve-3d;
position: relative;
}
.logo {
position: absolute;
top: 9px;
right: 20px;
width: 60px;
svg {
width: 100%;
height: auto;
fill: #fff;
}
}
.front {
z-index: 2;
transform: rotateY(0deg);
}
.back {
transform: rotateY(180deg);
.logo {
top: 185px;
}
}
.chip {
position: absolute;
width: 60px;
height: 45px;
top: 20px;
left: 20px;
background: linear-gradient(135deg, hsl(269,54%,87%) 0%,hsl(200,64%,89%) 44%,hsl(18,55%,94%) 100%);;
border-radius: 8px;
&::before {
content: '';
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
border: 4px solid hsla(0, 0, 50, .1);
width: 80%;
height: 70%;
border-radius: 5px;
}
}
.strip {
background: linear-gradient(135deg, hsl(0, 0, 25%), hsl(0, 0, 10%));
position: absolute;
width: 100%;
height: 50px;
top: 30px;
left: 0;
}
.number {
position: absolute;
margin: 0 auto;
top: 103px;
left: 19px;
font-size: 38px;
}
label {
font-size: 10px;
letter-spacing: 1px;
text-shadow: none;
text-transform: uppercase;
font-weight: normal;
opacity: 0.5;
display: block;
margin-bottom: 3px;
}
.card-holder,
.card-expiration-date {
position: absolute;
margin: 0 auto;
top: 180px;
left: 19px;
font-size: 22px;
text-transform: capitalize;
}
.card-expiration-date {
text-align: right;
left: auto;
right: 20px;
}
.ccv {
height: 36px;
background: #fff;
width: 91%;
border-radius: 5px;
top: 110px;
left: 0;
right: 0;
position: absolute;
margin: 0 auto;
color: #000;
text-align: right;
padding: 10px;
label {
margin: -25px 0 14px;
color: #fff;
}
}
}
<link href="https://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet" />
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.