168 lines
2.8 KiB
Vue
168 lines
2.8 KiB
Vue
|
<template>
|
||
|
<div class="card">
|
||
|
<div class="box">
|
||
|
<div class="percent">
|
||
|
<svg>
|
||
|
<circle cx="70" cy="70" r="70"></circle>
|
||
|
<circle cx="70" cy="70" r="70"></circle>
|
||
|
</svg>
|
||
|
<div class="number">
|
||
|
<h2>{{ percent }}<span>%</span></h2>
|
||
|
</div>
|
||
|
</div>
|
||
|
<h2 class="text">{{ title }}</h2>
|
||
|
</div>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
export default {
|
||
|
props: ["percent","title"],
|
||
|
|
||
|
|
||
|
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
|
||
|
|
||
|
.card {
|
||
|
position: relative;
|
||
|
width: 12em;
|
||
|
// background: linear-gradient(0deg, #1b1b1b, #222, #1b1b1b);
|
||
|
background: transparent;
|
||
|
display: flex;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
height: 15em;
|
||
|
border-radius: 4px;
|
||
|
text-align: center;
|
||
|
overflow: hidden;
|
||
|
transition: 0.5s;
|
||
|
border: 0;
|
||
|
}
|
||
|
|
||
|
.card:hover {
|
||
|
transform: translateY(-10px);
|
||
|
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.5);
|
||
|
}
|
||
|
|
||
|
.card:before {
|
||
|
content: "";
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: -50%;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
// background: rgba(255, 255, 255, 0.03);
|
||
|
background: transparent;
|
||
|
pointer-events: none;
|
||
|
z-index: 1;
|
||
|
}
|
||
|
|
||
|
.percent {
|
||
|
position: relative;
|
||
|
width: 150px;
|
||
|
height: 150px;
|
||
|
border-radius: 50%;
|
||
|
box-shadow: inset 0 0 50px #000;
|
||
|
background: #222;
|
||
|
background: transparent;
|
||
|
|
||
|
z-index: 1000;
|
||
|
}
|
||
|
|
||
|
.percent .number {
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
display: flex;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
border-radius: 50%;
|
||
|
}
|
||
|
|
||
|
.percent .number h2 {
|
||
|
color: #777;
|
||
|
font-weight: 700;
|
||
|
font-size: 40px;
|
||
|
transition: 0.5s;
|
||
|
}
|
||
|
|
||
|
.card:hover .percent .number h2 {
|
||
|
color: #fff;
|
||
|
font-size: 60px;
|
||
|
}
|
||
|
|
||
|
.percent .number h2 span {
|
||
|
font-size: 24px;
|
||
|
color: #777;
|
||
|
}
|
||
|
|
||
|
.card:hover .percent .number h2 span {
|
||
|
color: #fff;
|
||
|
transition: 0.5s;
|
||
|
}
|
||
|
|
||
|
.text {
|
||
|
position: relative;
|
||
|
color: #777;
|
||
|
margin-top: 20px;
|
||
|
font-weight: 700;
|
||
|
font-size: 18px;
|
||
|
letter-spacing: 1px;
|
||
|
text-transform: uppercase;
|
||
|
transition: 0.5s;
|
||
|
}
|
||
|
|
||
|
.card:hover .text {
|
||
|
color: #fff;
|
||
|
}
|
||
|
|
||
|
svg {
|
||
|
position: relative;
|
||
|
width: 150px;
|
||
|
height: 150px;
|
||
|
z-index: 1000;
|
||
|
}
|
||
|
|
||
|
svg circle {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
fill: none;
|
||
|
stroke: #191919;
|
||
|
stroke: #ebebeb;
|
||
|
stroke-width: 10;
|
||
|
stroke-linecap: round;
|
||
|
transform: translate(5px, 5px);
|
||
|
}
|
||
|
|
||
|
svg circle:nth-child(2) {
|
||
|
stroke-dasharray: 440;
|
||
|
stroke-dashoffset: 440;
|
||
|
}
|
||
|
|
||
|
.card:nth-child(1) svg circle:nth-child(2) {
|
||
|
stroke-dashoffset: calc(440 - (440 * 90) / 100);
|
||
|
stroke: #00ff43;
|
||
|
}
|
||
|
|
||
|
.card:nth-child(2) svg circle:nth-child(2) {
|
||
|
stroke-dashoffset: calc(440 - (440 * 85) / 100);
|
||
|
stroke: #00a1ff;
|
||
|
}
|
||
|
.card:nth-child(3) svg circle:nth-child(2) {
|
||
|
stroke-dashoffset: calc(440 - (440 * 60) / 100);
|
||
|
stroke: #ff04f7;
|
||
|
}
|
||
|
|
||
|
@media (max-width: 991px) {
|
||
|
.card {
|
||
|
margin: 20px auto;
|
||
|
}
|
||
|
}
|
||
|
</style>
|