design-and-generate-a-credit-card-ui-using-detail-form-with-javascript-css
design-and-generate-a-credit-card-ui-using-detail-form-with-javascript-css
So let's start making it. To make this project, first of all, you have to create an HTML file, a CSS file, and a Javascript file. If you are learning web development then you will already know this still, we are telling this thing for some beginners.
Let us first make its HTML structure Its HTML structure is also a bit tricky as we have used SVG (Scalable Vector Graphics) to create the background of each card. We have used SVG to design the front and back side of the card.
Then we created a container class using div tag and then the next two classes we created to hold the front and back side svg whose class is also given by the name Front 0 and Back. The rest of the code is given below, you can also see from it.
From the majority of this snippet, we've assigned IDs to HTML tags instead of classes so that they can support both CSS and JavaScript.
0123 4567 8910 1112 Harley Keener cardholder name expiration card number 01/23 VALID THRU
985 security code Harley Keener
Name
Card NumberGenerate random Card
Expiration (mm/yy)
Security Code
Now it's time to style it because this snippet just won't look like this from HTML . To style this, we start with the body tag first.
And the process of styling the body tag is a bit lengthy as we have absorbed the webkit as well.Because in order to render the webkit CSS syntax in a different way in browsers like safari and chrome.
You can make changes in this CSS or HTML after downloading the Source Code Files like you can change the SVG, background-colors, add background-images and add many others.
Just styling it will not do the job, you also need to make this snippet responsive and we will do this with the media query property of CSS.
body { margin: 0; padding: 0; background-image: linear-gradient(to right top, #ffffff, #b9b9b9, #777777, #3b3b3b, #000000); display: -webkit-box; display: -ms-flexbox; display: flex; -ms-flex-line-pack: center; align-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; min-height: 100vh; -ms-flex-wrap: wrap; flex-wrap: wrap; font-family: 'Raleway'; } .payment-title { width: 100%; text-align: center; color: white; } .form-container .field-container:first-of-type { grid-area: name; } .form-container .field-container:nth-of-type(2) { grid-area: number; } .form-container .field-container:nth-of-type(3) { grid-area: expiration; } .form-container .field-container:nth-of-type(4) { grid-area: security; } .field-container input { -webkit-box-sizing: border-box; box-sizing: border-box; } .field-container { position: relative; } .form-container { display: grid; grid-column-gap: 10px; grid-template-columns: auto auto; grid-template-rows: 90px 90px 90px; grid-template-areas: "name name""number number""expiration security"; max-width: 400px; padding: 20px; color: #707070; } label { padding-bottom: 5px; font-size: 17px; color: white; } input { margin-top: 3px; padding: 15px; font-size: 16px; width: 100%; border-radius: 3px; border: 1px solid #dcdcdc; } .ccicon { height: 38px; position: absolute; right: 6px; top: calc(50% - 17px); width: 60px; } /* CREDIT CARD IMAGE STYLING */ .preload * { -webkit-transition: none !important; -moz-transition: none !important; -ms-transition: none !important; -o-transition: none !important; } .container { width: 100%; max-width: 400px; max-height: 251px; height: 54vw; padding: 20px; } #ccsingle { position: absolute; right: 15px; top: 20px; } #ccsingle svg { width: 100px; max-height: 60px; } .creditcard svg#cardfront, .creditcard svg#cardback { width: 100%; -webkit-box-shadow: 1px 5px 6px 0px black; box-shadow: 1px 5px 6px 0px black; border-radius: 22px; } #generatecard{ cursor: pointer; float: right; font-size: 12px; color: black; font-weight: 600; padding: 4px 8px; background-color: gold; border-radius: 4px; cursor: pointer; float:right; } /* CHANGEABLE CARD ELEMENTS */ .creditcard .lightcolor, .creditcard .darkcolor { -webkit-transition: fill .5s; transition: fill .5s; } .creditcard .lightblue { fill: #03A9F4; } .creditcard .lightbluedark { fill: #0288D1; } .creditcard .red { fill: #ef5350; } .creditcard .reddark { fill: #d32f2f; } .creditcard .purple { fill: #ab47bc; } .creditcard .purpledark { fill: #7b1fa2; } .creditcard .cyan { fill: #26c6da; } .creditcard .cyandark { fill: #0097a7; } .creditcard .green { fill: #66bb6a; } .creditcard .greendark { fill: #388e3c; } .creditcard .lime { fill: #d4e157; } .creditcard .limedark { fill: #afb42b; } .creditcard .yellow { fill: #ffeb3b; } .creditcard .yellowdark { fill: #f9a825; } .creditcard .orange { fill: #ff9800; } .creditcard .orangedark { fill: #ef6c00; } .creditcard .grey { fill: #bdbdbd; } .creditcard .greydark { fill: #616161; } /* FRONT OF CARD */ #svgname { text-transform: uppercase; } #cardfront .st2 { fill: #FFFFFF; } #cardfront .st3 { font-family: 'Source Code Pro', monospace; font-weight: 600; } #cardfront .st4 { font-size: 54.7817px; } #cardfront .st5 { font-family: 'Source Code Pro', monospace; font-weight: 400; } #cardfront .st6 { font-size: 33.1112px; } #cardfront .st7 { opacity: 0.6; fill: #FFFFFF; } #cardfront .st8 { font-size: 24px; } #cardfront .st9 { font-size: 36.5498px; } #cardfront .st10 { font-family: 'Source Code Pro', monospace; font-weight: 300; } #cardfront .st11 { font-size: 16.1716px; } #cardfront .st12 { fill: #4C4C4C; } /* BACK OF CARD */ #cardback .st0 { fill: none; stroke: #0F0F0F; stroke-miterlimit: 10; } #cardback .st2 { fill: #111111; } #cardback .st3 { fill: #F2F2F2; } #cardback .st4 { fill: #D8D2DB; } #cardback .st5 { fill: #C4C4C4; } #cardback .st6 { font-family: 'Source Code Pro', monospace; font-weight: 400; } #cardback .st7 { font-size: 27px; } #cardback .st8 { opacity: 0.6; } #cardback .st9 { fill: #FFFFFF; } #cardback .st10 { font-size: 24px; } #cardback .st11 { fill: #EAEAEA; } #cardback .st12 { font-family: 'Rock Salt', cursive; } #cardback .st13 { font-size: 37.769px; } /* FLIP ANIMATION */ .container { perspective: 1000px; } .creditcard { width: 100%; max-width: 400px; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; transition: -webkit-transform 0.6s; -webkit-transition: -webkit-transform 0.6s; transition: transform 0.6s; transition: transform 0.6s, -webkit-transform 0.6s; cursor: pointer; } .creditcard .front, .creditcard .back { position: absolute; width: 100%; max-width: 400px; -webkit-backface-visibility: hidden; backface-visibility: hidden; -webkit-font-smoothing: antialiased; color: #47525d; } .creditcard .back { -webkit-transform: rotateY(180deg); transform: rotateY(180deg); } .creditcard.flipped { -webkit-transform: rotateY(180deg); transform: rotateY(180deg); }
Now that HTML and CSS are done... it's time to use JavaScript because without Javascript this will not work.
So let's learn how to make it First we call a function by setting the event handler property window.onload = function () in this function We have declared some objects and with the help of constructors Const
then we Mask the Credit Card Number Input and Mask the Expiration Date and security code. after that we define the color swap function by creating a constructor and define a function with document.querySelectorAll
And the rest of the code is made up of similar constructors and functions by doing the same.
If you want, you can also see it in the code given below, either download the direct source code and see it.
window.onload = function () { const name = document.getElementById('name'); const cardnumber = document.getElementById('cardnumber'); const expirationdate = document.getElementById('expirationdate'); const securitycode = document.getElementById('securitycode'); const output = document.getElementById('output'); const ccicon = document.getElementById('ccicon'); const ccsingle = document.getElementById('ccsingle'); const generatecard = document.getElementById('generatecard'); let cctype = null; //Mask the Credit Card Number Input var cardnumber_mask = new IMask(cardnumber, { mask: [ { mask: '0000 000000 00000', regex: '^3[47]\\d{0,13}', cardtype: 'american express' }, { mask: '0000 0000 0000 0000', regex: '^(?:6011|65\\d{0,2}|64[4-9]\\d?)\\d{0,12}', cardtype: 'discover' }, { mask: '0000 000000 0000', regex: '^3(?:0([0-5]|9)|[689]\\d?)\\d{0,11}', cardtype: 'diners' }, { mask: '0000 0000 0000 0000', regex: '^(5[1-5]\\d{0,2}|22[2-9]\\d{0,1}|2[3-7]\\d{0,2})\\d{0,12}', cardtype: 'mastercard' }, // { // mask: '0000-0000-0000-0000', // regex: '^(5019|4175|4571)\\d{0,12}', // cardtype: 'dankort' // }, // { // mask: '0000-0000-0000-0000', // regex: '^63[7-9]\\d{0,13}', // cardtype: 'instapayment' // }, { mask: '0000 000000 00000', regex: '^(?:2131|1800)\\d{0,11}', cardtype: 'jcb15' }, { mask: '0000 0000 0000 0000', regex: '^(?:35\\d{0,2})\\d{0,12}', cardtype: 'jcb' }, { mask: '0000 0000 0000 0000', regex: '^(?:5[0678]\\d{0,2}|6304|67\\d{0,2})\\d{0,12}', cardtype: 'maestro' }, // { // mask: '0000-0000-0000-0000', // regex: '^220[0-4]\\d{0,12}', // cardtype: 'mir' // }, { mask: '0000 0000 0000 0000', regex: '^4\\d{0,15}', cardtype: 'visa' }, { mask: '0000 0000 0000 0000', regex: '^62\\d{0,14}', cardtype: 'unionpay' }, { mask: '0000 0000 0000 0000', cardtype: 'Unknown' } ], dispatch: function (appended, dynamicMasked) { var number = (dynamicMasked.value + appended).replace(/\D/g, ''); for (var i = 0; i < dynamicMasked.compiledMasks.length; i++) { let re = new RegExp(dynamicMasked.compiledMasks[i].regex); if (number.match(re) != null) { return dynamicMasked.compiledMasks[i]; } } } }); //Mask the Expiration Date var expirationdate_mask = new IMask(expirationdate, { mask: 'MM{/}YY', groups: { YY: new IMask.MaskedPattern.Group.Range([0, 99]), MM: new IMask.MaskedPattern.Group.Range([1, 12]), } }); //Mask the security code var securitycode_mask = new IMask(securitycode, { mask: '0000', }); // SVGICONS let amex = ` `; let visa = ` `; let diners = ` `; let discover = ` `; let jcb = ` `; let maestro = ` `; let mastercard = ` `; let unionpay = ` `; let amex_single = `Slice 1Created with Sketch.`; let visa_single = `Slice 1Created with Sketch.`; let diners_single = `dinersCreated with Sketch.`; let discover_single = `discoverCreated with Sketch.`; let jcb_single = `Slice 1Created with Sketch.`; let maestro_single = `maestro `; let mastercard_single = `mastercard `; let unionpay_single = ` `; //define the color swap function const swapColor = function (basecolor) { document.querySelectorAll('.lightcolor') .forEach(function (input) { input.setAttribute('class', ''); input.setAttribute('class', 'lightcolor ' + basecolor); }); document.querySelectorAll('.darkcolor') .forEach(function (input) { input.setAttribute('class', ''); input.setAttribute('class', 'darkcolor ' + basecolor + 'dark'); }); }; //pop in the appropriate card icon when detected cardnumber_mask.on("accept", function () { console.log(cardnumber_mask.masked.currentMask.cardtype); switch (cardnumber_mask.masked.currentMask.cardtype) { case 'american express': ccicon.innerHTML = amex; ccsingle.innerHTML = amex_single; swapColor('green'); break; case 'visa': ccicon.innerHTML = visa; ccsingle.innerHTML = visa_single; swapColor('lime'); break; case 'diners': ccicon.innerHTML = diners; ccsingle.innerHTML = diners_single; swapColor('orange'); break; case 'discover': ccicon.innerHTML = discover; ccsingle.innerHTML = discover_single; swapColor('purple'); break; case ('jcb' || 'jcb15'): ccicon.innerHTML = jcb; ccsingle.innerHTML = jcb_single; swapColor('red'); break; case 'maestro': ccicon.innerHTML = maestro; ccsingle.innerHTML = maestro_single; swapColor('yellow'); break; case 'mastercard': ccicon.innerHTML = mastercard; ccsingle.innerHTML = mastercard_single; swapColor('lightblue'); break; case 'unionpay': ccicon.innerHTML = unionpay; ccsingle.innerHTML = unionpay_single; swapColor('cyan'); break; default: ccicon.innerHTML = ''; ccsingle.innerHTML = ''; swapColor('grey'); break; } }); //Generate random card number from list of known test numbers const randomCard = function () { let testCards = [ '4000056655665556', '5200828282828210', '371449635398431', '6011000990139424', '30569309025904', '3566002020360505', '6200000000000005', '6759649826438453', ]; let randomNumber = Math.floor(Math.random() * testCards.length); cardnumber_mask.unmaskedValue = testCards[randomNumber]; } generatecard.addEventListener('click', function () { randomCard(); }); // CREDIT CARD IMAGE JS document.querySelector('.preload').classList.remove('preload'); document.querySelector('.creditcard').addEventListener('click', function () { if (this.classList.contains('flipped')) { this.classList.remove('flipped'); } else { this.classList.add('flipped'); } }) //On Input Change Events name.addEventListener('input', function () { if (name.value.length == 0) { document.getElementById('svgname').innerHTML = 'John Doe'; document.getElementById('svgnameback').innerHTML = 'John Doe'; } else { document.getElementById('svgname').innerHTML = this.value; document.getElementById('svgnameback').innerHTML = this.value; } }); cardnumber_mask.on('accept', function () { if (cardnumber_mask.value.length == 0) { document.getElementById('svgnumber').innerHTML = '0123 4567 8910 1112'; } else { document.getElementById('svgnumber').innerHTML = cardnumber_mask.value; } }); expirationdate_mask.on('accept', function () { if (expirationdate_mask.value.length == 0) { document.getElementById('svgexpire').innerHTML = '01/23'; } else { document.getElementById('svgexpire').innerHTML = expirationdate_mask.value; } }); securitycode_mask.on('accept', function () { if (securitycode_mask.value.length == 0) { document.getElementById('svgsecurity').innerHTML = '985'; } else { document.getElementById('svgsecurity').innerHTML = securitycode_mask.value; } }); //On Focus Events name.addEventListener('focus', function () { document.querySelector('.creditcard').classList.remove('flipped'); }); cardnumber.addEventListener('focus', function () { document.querySelector('.creditcard').classList.remove('flipped'); }); expirationdate.addEventListener('focus', function () { document.querySelector('.creditcard').classList.remove('flipped'); }); securitycode.addEventListener('focus', function () { document.querySelector('.creditcard').classList.add('flipped'); }); };
Like
Dislike
Love
Angry
Sad
Funny
Wow
Integrate Laravel Livewire with Chart.js for real-time data visualization with example
March 29, 2024
Comments 0