Create a Glassmorphic Credit Card with CSS
Tags: html, css, webdev, glassmorphism
Published: 2020-12-15 06:10:44

Glassmorphism seems to be the new trend of the coming year, and it has become very popular among designers and developers. The main characteristics of this new trend are:
* Transparency (frosted-glass effect using background blur)
* Vivid background colors
* A thin, light border (like the edges of a glass)
* A light shadow.

Since all these characteristics produce a glassy look, it is, thus, named **glassmorphism**.

If you don't know how to produce a background blur, here are the steps:
1. Your background-color must be transclucent. You can either use `rgba()` or the 8-digit hexadecimal code (the last two digits being the opacity in `%`).
2. For the blur, we need to use the CSS property `backdrop-filter: blur(10px)`.

*Note:- `backdrop-filter` is not supported on Firefox and IE. However, [it can be enabled on Firefox](https://dev.to/snkds/how-to-enable-backdrop-filter-in-firefox-2n8e) (may produce some glitches).*

In this post, I will be showing you an example of how you can create glassmorphic, pure CSS illustrations.

***
I have used two Google fonts - *Nunito* and *Josefin Sans*. You can use either these, or any other font of your choice. Here is the `<link>` for these two:
```html
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@300;400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@300;400&display=swap" rel="stylesheet">
```
Just paste it in the `<head>` and you are ready to begin!

### The Background
As I said, we should use bright colors for the background. I would be using a bright blue gradient.

```css
body {
  background: linear-gradient(to left, #283593, #1976d2);
}
```

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3u43z1438aga1d5d9p4q.png)

### The Card
First, put this html:
```html
<div class="card-group">
  <div class="card">
    <div class="logo"><img src="path/to/logo.png" alt="Visa"></div>
    <div class="chip"><img src="path/to/chip.png" alt="chip"></div>
    <div class="number">1234 5678 9012 3456</div>
    <div class="name">SHOUNAK DAS</div>
    <div class="from">10/19</div>
    <div class="to">06/21</div>
  </div>
</div>
```

We will be using two PNG's - one for the *Visa* logo, and the other for the credit/debit card chip. Use these images:
* [Logo](https://raw.githubusercontent.com/dasShounak/freeUseImages/main/Visa-Logo-PNG-Image.png)
* [Chip](https://raw.githubusercontent.com/dasShounak/freeUseImages/main/chip.png)

Now, add this CSS:
```css
.card-group {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.card {
  position: relative;
  height: 270px;
  width: 450px;
  border-radius: 25px;
  background: rgba(255, 255, 255, 0.2);
  backdrop-filter: blur(30px);  /* This will produce the blur */
  border: 2px solid rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 80px rgba(0, 0, 0, 0.2);
  overflow: hidden;
}

.logo img,
.chip img,
.number,
.name,
.from,
.to,
.ring {
  position: absolute; /* All items inside card should have absolute position */
}

.logo img {
  top: 35px;
  right: 40px;
  width: 80px;
  height: auto;
  opacity: 0.8;
}

.chip img {
  top: 120px;
  left: 40px;
  width: 50px;
  height: auto;
  opacity: 0.8;
}

.number,
.name,
.from,
.to {
  color: rgba(255, 255, 255, 0.8);
  font-weight: 400;
  letter-spacing: 2px;
  text-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
}

.number {
  left: 40px;
  bottom: 65px;
  font-family: "Nunito", sans-serif;
}

.name {
  font-size: 0.5rem;
  left: 40px;
  bottom: 35px;
}

.from {
  font-size: 0.5rem;
  bottom: 35px;
  right: 110px;
}

.to {
  font-size: 0.5rem;
  bottom: 35px;
  right: 40px;
}
```

This should produce something like this:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9mom0yonfz5rd4vwk30x.png)
 
Cool. Isn't it? We can spice it up with few more lines of code.

First, I will add two circles behind the card. Add this html (before the `card-group` block) and css:

```html
<div class="circles">
  <div class="circle circle-1"></div>
  <div class="circle circle-2"></div>
</div>
```
```css
.circle {
  position: absolute;
  border-radius: 50%;
  background: radial-gradient(#006db3, #29b6f6);
}
.circles {
  position: absolute;
  height: 270px;
  width: 450px;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.circle-1 {
  height: 180px;
  width: 180px;
  top: -50px;
  left: -60px;
}
.circle-2 {
  height: 200px;
  width: 200px;
  bottom: -90px;
  right: -90px;
  opacity: 0.8;
}
```
You should arrive at this:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bpyc18ugki2p8fxsllly.png)

Now, let's draw something on the card. After the `to` div (the last div inside `.card`), add another div having a class `ring`.

```html
<div class="ring"></div>
```
And this css:
```css
.ring {
  height: 500px;
  width: 500px;
  border-radius: 50%;
  background: transparent;
  border: 50px solid rgba(255, 255, 255, 0.1);
  bottom: -250px;
  right: -250px;
  box-sizing: border-box;
}

.ring::after {
  content: "";
  position: absolute;
  height: 600px;
  width: 600px;
  border-radius: 50%;
  background: transparent;
  border: 30px solid rgba(255, 255, 255, 0.1);
  bottom: -80px;
  right: -110px;
  box-sizing: border-box;
}
```

Done!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/n5flzto52op7e1d2my0k.png)
**Play with the code on my 👉[codepen](https://codepen.io/dasshounak/pen/xxERLqZ)🚀.**

Hope you liked it.
Happy Coding!😎

***
*Design adapted from [Sarah Newman](https://www.behance.net/nwmn)*