20 CSS Profile Cards13 / 20
Vibrant Gradient Border Profile Card
A minimal dark card wrapped in a glowing Instagram/Stripe-style gradient border created by a rotating conic gradient behind a padding-inset inner panel.
Published
The code
<div class="pc-13">
<div class="pc-13__card">
<div class="pc-13__inner">
<div class="pc-13__pfp">IZ</div>
<div class="pc-13__id">
<h3>Iris Zhang</h3>
<p>Content Creator</p>
</div>
<p class="pc-13__bio">Sharing daily design tips to 240k makers. Sponsored by curiosity.</p>
<div class="pc-13__foot">
<span class="pc-13__followers"><b>240k</b> followers</span>
<button class="pc-13__cta">Subscribe</button>
</div>
</div>
</div>
</div><div class="pc-13">
<div class="pc-13__card">
<div class="pc-13__inner">
<div class="pc-13__pfp">IZ</div>
<div class="pc-13__id">
<h3>Iris Zhang</h3>
<p>Content Creator</p>
</div>
<p class="pc-13__bio">Sharing daily design tips to 240k makers. Sponsored by curiosity.</p>
<div class="pc-13__foot">
<span class="pc-13__followers"><b>240k</b> followers</span>
<button class="pc-13__cta">Subscribe</button>
</div>
</div>
</div>
</div>.pc-13,
.pc-13 *,
.pc-13 *::before,
.pc-13 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.pc-13 ::selection {
background: #fd5949;
color: #fff;
}
.pc-13 {
font-family: 'Segoe UI',system-ui,sans-serif;
width: 100%;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 48px 20px;
background: #0f0d14;
color: #fff;
}
.pc-13__card {
position: relative;
width: 310px;
border-radius: 24px;
padding: 2.5px;
overflow: hidden;
}
.pc-13__card::before {
content: '';
position: absolute;
inset: -40%;
z-index: 0;
background: conic-gradient(from 0deg,#feda75,#fa7e1e,#d62976,#962fbf,#4f5bd5,#feda75);
animation: pc-13-rot 5s linear infinite;
}
@keyframes pc-13-rot {
to {
transform: rotate(360deg);
}
}
.pc-13__inner {
position: relative;
z-index: 1;
border-radius: 22px;
padding: 26px;
background: #16131e;
}
.pc-13__pfp {
width: 76px;
height: 76px;
border-radius: 50%;
display: grid;
place-items: center;
font-weight: 800;
font-size: 1.4rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#feda75);
}
.pc-13__id {
margin-top: 16px;
}
.pc-13__id h3 {
font-size: 1.35rem;
font-weight: 800;
}
.pc-13__id p {
color: rgba(255,255,255,.55);
font-size: .85rem;
margin-top: 2px;
}
.pc-13__bio {
font-size: .85rem;
line-height: 1.5;
color: rgba(255,255,255,.8);
margin-top: 14px;
text-wrap: balance;
}
.pc-13__foot {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 22px;
}
.pc-13__followers {
font-size: .82rem;
color: rgba(255,255,255,.6);
}
.pc-13__followers b {
color: #fff;
}
.pc-13__cta {
padding: 10px 22px;
border: none;
border-radius: 12px;
cursor: pointer;
font-weight: 700;
font-size: .85rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#fa7e1e);
box-shadow: 0 8px 20px -8px #d62976;
transition: transform .2s,filter .25s;
}
.pc-13__cta:hover {
filter: brightness(1.1);
}
.pc-13__cta:active {
transform: scale(.96);
}
@media (prefers-reduced-motion: reduce) {
.pc-13__card::before {
animation: none;
}
}.pc-13,
.pc-13 *,
.pc-13 *::before,
.pc-13 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.pc-13 ::selection {
background: #fd5949;
color: #fff;
}
.pc-13 {
font-family: 'Segoe UI',system-ui,sans-serif;
width: 100%;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 48px 20px;
background: #0f0d14;
color: #fff;
}
.pc-13__card {
position: relative;
width: 310px;
border-radius: 24px;
padding: 2.5px;
overflow: hidden;
}
.pc-13__card::before {
content: '';
position: absolute;
inset: -40%;
z-index: 0;
background: conic-gradient(from 0deg,#feda75,#fa7e1e,#d62976,#962fbf,#4f5bd5,#feda75);
animation: pc-13-rot 5s linear infinite;
}
@keyframes pc-13-rot {
to {
transform: rotate(360deg);
}
}
.pc-13__inner {
position: relative;
z-index: 1;
border-radius: 22px;
padding: 26px;
background: #16131e;
}
.pc-13__pfp {
width: 76px;
height: 76px;
border-radius: 50%;
display: grid;
place-items: center;
font-weight: 800;
font-size: 1.4rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#feda75);
}
.pc-13__id {
margin-top: 16px;
}
.pc-13__id h3 {
font-size: 1.35rem;
font-weight: 800;
}
.pc-13__id p {
color: rgba(255,255,255,.55);
font-size: .85rem;
margin-top: 2px;
}
.pc-13__bio {
font-size: .85rem;
line-height: 1.5;
color: rgba(255,255,255,.8);
margin-top: 14px;
text-wrap: balance;
}
.pc-13__foot {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 22px;
}
.pc-13__followers {
font-size: .82rem;
color: rgba(255,255,255,.6);
}
.pc-13__followers b {
color: #fff;
}
.pc-13__cta {
padding: 10px 22px;
border: none;
border-radius: 12px;
cursor: pointer;
font-weight: 700;
font-size: .85rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#fa7e1e);
box-shadow: 0 8px 20px -8px #d62976;
transition: transform .2s,filter .25s;
}
.pc-13__cta:hover {
filter: brightness(1.1);
}
.pc-13__cta:active {
transform: scale(.96);
}
@media (prefers-reduced-motion: reduce) {
.pc-13__card::before {
animation: none;
}
}Here's a working CSS Profile Card from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Vibrant Gradient Border Profile Card
Source: https://codefronts.com/components/css-profile-cards/vibrant-gradient-border-profile-card/
A minimal dark card wrapped in a glowing Instagram/Stripe-style gradient border created by a rotating conic gradient behind a padding-inset inner panel.
## HTML
```html
<div class="pc-13">
<div class="pc-13__card">
<div class="pc-13__inner">
<div class="pc-13__pfp">IZ</div>
<div class="pc-13__id">
<h3>Iris Zhang</h3>
<p>Content Creator</p>
</div>
<p class="pc-13__bio">Sharing daily design tips to 240k makers. Sponsored by curiosity.</p>
<div class="pc-13__foot">
<span class="pc-13__followers"><b>240k</b> followers</span>
<button class="pc-13__cta">Subscribe</button>
</div>
</div>
</div>
</div>
```
## CSS
```css
.pc-13,
.pc-13 *,
.pc-13 *::before,
.pc-13 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.pc-13 ::selection {
background: #fd5949;
color: #fff;
}
.pc-13 {
font-family: 'Segoe UI',system-ui,sans-serif;
width: 100%;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 48px 20px;
background: #0f0d14;
color: #fff;
}
.pc-13__card {
position: relative;
width: 310px;
border-radius: 24px;
padding: 2.5px;
overflow: hidden;
}
.pc-13__card::before {
content: '';
position: absolute;
inset: -40%;
z-index: 0;
background: conic-gradient(from 0deg,#feda75,#fa7e1e,#d62976,#962fbf,#4f5bd5,#feda75);
animation: pc-13-rot 5s linear infinite;
}
@keyframes pc-13-rot {
to {
transform: rotate(360deg);
}
}
.pc-13__inner {
position: relative;
z-index: 1;
border-radius: 22px;
padding: 26px;
background: #16131e;
}
.pc-13__pfp {
width: 76px;
height: 76px;
border-radius: 50%;
display: grid;
place-items: center;
font-weight: 800;
font-size: 1.4rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#feda75);
}
.pc-13__id {
margin-top: 16px;
}
.pc-13__id h3 {
font-size: 1.35rem;
font-weight: 800;
}
.pc-13__id p {
color: rgba(255,255,255,.55);
font-size: .85rem;
margin-top: 2px;
}
.pc-13__bio {
font-size: .85rem;
line-height: 1.5;
color: rgba(255,255,255,.8);
margin-top: 14px;
text-wrap: balance;
}
.pc-13__foot {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 22px;
}
.pc-13__followers {
font-size: .82rem;
color: rgba(255,255,255,.6);
}
.pc-13__followers b {
color: #fff;
}
.pc-13__cta {
padding: 10px 22px;
border: none;
border-radius: 12px;
cursor: pointer;
font-weight: 700;
font-size: .85rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#fa7e1e);
box-shadow: 0 8px 20px -8px #d62976;
transition: transform .2s,filter .25s;
}
.pc-13__cta:hover {
filter: brightness(1.1);
}
.pc-13__cta:active {
transform: scale(.96);
}
@media (prefers-reduced-motion: reduce) {
.pc-13__card::before {
animation: none;
}
}
```Here's a working CSS Profile Card from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Vibrant Gradient Border Profile Card
Source: https://codefronts.com/components/css-profile-cards/vibrant-gradient-border-profile-card/
A minimal dark card wrapped in a glowing Instagram/Stripe-style gradient border created by a rotating conic gradient behind a padding-inset inner panel.
## HTML
```html
<div class="pc-13">
<div class="pc-13__card">
<div class="pc-13__inner">
<div class="pc-13__pfp">IZ</div>
<div class="pc-13__id">
<h3>Iris Zhang</h3>
<p>Content Creator</p>
</div>
<p class="pc-13__bio">Sharing daily design tips to 240k makers. Sponsored by curiosity.</p>
<div class="pc-13__foot">
<span class="pc-13__followers"><b>240k</b> followers</span>
<button class="pc-13__cta">Subscribe</button>
</div>
</div>
</div>
</div>
```
## CSS
```css
.pc-13,
.pc-13 *,
.pc-13 *::before,
.pc-13 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.pc-13 ::selection {
background: #fd5949;
color: #fff;
}
.pc-13 {
font-family: 'Segoe UI',system-ui,sans-serif;
width: 100%;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 48px 20px;
background: #0f0d14;
color: #fff;
}
.pc-13__card {
position: relative;
width: 310px;
border-radius: 24px;
padding: 2.5px;
overflow: hidden;
}
.pc-13__card::before {
content: '';
position: absolute;
inset: -40%;
z-index: 0;
background: conic-gradient(from 0deg,#feda75,#fa7e1e,#d62976,#962fbf,#4f5bd5,#feda75);
animation: pc-13-rot 5s linear infinite;
}
@keyframes pc-13-rot {
to {
transform: rotate(360deg);
}
}
.pc-13__inner {
position: relative;
z-index: 1;
border-radius: 22px;
padding: 26px;
background: #16131e;
}
.pc-13__pfp {
width: 76px;
height: 76px;
border-radius: 50%;
display: grid;
place-items: center;
font-weight: 800;
font-size: 1.4rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#feda75);
}
.pc-13__id {
margin-top: 16px;
}
.pc-13__id h3 {
font-size: 1.35rem;
font-weight: 800;
}
.pc-13__id p {
color: rgba(255,255,255,.55);
font-size: .85rem;
margin-top: 2px;
}
.pc-13__bio {
font-size: .85rem;
line-height: 1.5;
color: rgba(255,255,255,.8);
margin-top: 14px;
text-wrap: balance;
}
.pc-13__foot {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 22px;
}
.pc-13__followers {
font-size: .82rem;
color: rgba(255,255,255,.6);
}
.pc-13__followers b {
color: #fff;
}
.pc-13__cta {
padding: 10px 22px;
border: none;
border-radius: 12px;
cursor: pointer;
font-weight: 700;
font-size: .85rem;
color: #fff;
background: linear-gradient(135deg,#d62976,#fa7e1e);
box-shadow: 0 8px 20px -8px #d62976;
transition: transform .2s,filter .25s;
}
.pc-13__cta:hover {
filter: brightness(1.1);
}
.pc-13__cta:active {
transform: scale(.96);
}
@media (prefers-reduced-motion: reduce) {
.pc-13__card::before {
animation: none;
}
}
```How this works
The glowing frame is a rotating conic-gradient on a pseudo-element sized larger than the card (inset:-40%) and spun with a linear rotate keyframe. A solid inner panel sits above it with a small padding gap, so only a thin animated rim of gradient shows around the edge.
Because the colourful layer is masked by the opaque inner panel and the whole card clips with overflow:hidden, the border appears to shimmer while the content stays perfectly readable. The call-to-action reuses two of the border's hues for a cohesive accent.
Make it yours
- Change the palette by editing the
conic-gradientcolour stops on.pc-13__card::before. - Set border thickness with the card's outer
padding(the gap the inner panel leaves). - Speed up or slow the shimmer via the
pc-13-rotduration. - Freeze the border into a static gradient by removing the rotation for a subtler look.
Gotchas — read before shipping
- The inner panel must be fully opaque or the spinning gradient bleeds through and hurts text contrast.
overflow:hiddenon the card is required to clip the oversized rotating layer.- A constantly spinning border draws the eye — consider pausing it when the card is off-screen.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 114+ | 17.5+ | 121+ | 114+ |
Floor set by text-wrap as this demo is written. The core technique itself goes back further — Chrome 69+.
conic-gradient support gates the animated rim; older browsers show a static edge.