mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2026-03-01 12:44:37 +00:00
128 lines
2.2 KiB
Vue
128 lines
2.2 KiB
Vue
<template>
|
|
<div class="post-teaser-skeleton">
|
|
<div class="skeleton-image" />
|
|
<div class="skeleton-body">
|
|
<div class="skeleton-user">
|
|
<div class="skeleton-avatar" />
|
|
<div class="skeleton-user-text">
|
|
<div class="skeleton-line skeleton-line--short" />
|
|
<div class="skeleton-line skeleton-line--xshort" />
|
|
</div>
|
|
</div>
|
|
<div class="skeleton-title">
|
|
<div class="skeleton-line" />
|
|
<div class="skeleton-line skeleton-line--medium" />
|
|
</div>
|
|
<div class="skeleton-content">
|
|
<div class="skeleton-line" />
|
|
<div class="skeleton-line" />
|
|
<div class="skeleton-line skeleton-line--long" />
|
|
</div>
|
|
<div class="skeleton-footer">
|
|
<div class="skeleton-line skeleton-line--short" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'PostTeaserSkeleton',
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@keyframes skeleton-pulse {
|
|
0% {
|
|
opacity: 0.15;
|
|
}
|
|
50% {
|
|
opacity: 0.3;
|
|
}
|
|
100% {
|
|
opacity: 0.15;
|
|
}
|
|
}
|
|
|
|
.post-teaser-skeleton {
|
|
background: #fff;
|
|
border-radius: $border-radius-base;
|
|
box-shadow: $box-shadow-base;
|
|
overflow: hidden;
|
|
height: 100%;
|
|
}
|
|
|
|
.skeleton-image {
|
|
width: 100%;
|
|
padding-bottom: 56%;
|
|
background: currentColor;
|
|
animation: skeleton-pulse 1.5s ease-in-out infinite;
|
|
}
|
|
|
|
.skeleton-body {
|
|
padding: 12px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
}
|
|
|
|
.skeleton-user {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.skeleton-avatar {
|
|
width: 36px;
|
|
height: 36px;
|
|
border-radius: 50%;
|
|
background: currentColor;
|
|
flex-shrink: 0;
|
|
animation: skeleton-pulse 1.5s ease-in-out infinite;
|
|
}
|
|
|
|
.skeleton-user-text {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
flex: 1;
|
|
}
|
|
|
|
.skeleton-title {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.skeleton-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.skeleton-footer {
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.skeleton-line {
|
|
height: 12px;
|
|
border-radius: 6px;
|
|
background: currentColor;
|
|
animation: skeleton-pulse 1.5s ease-in-out infinite;
|
|
width: 100%;
|
|
|
|
&--xshort {
|
|
width: 25%;
|
|
}
|
|
&--short {
|
|
width: 40%;
|
|
}
|
|
&--medium {
|
|
width: 65%;
|
|
}
|
|
&--long {
|
|
width: 85%;
|
|
}
|
|
}
|
|
</style>
|