댓글 카드 디자인 개선

This commit is contained in:
2026-04-07 13:36:39 +09:00
parent 173f547d8b
commit d5575d3028
8 changed files with 217 additions and 20 deletions

View File

@@ -258,7 +258,10 @@ onBeforeUnmount(() => {
<img v-if="avatarUrlOf(comment)" class="commentItem__avatar" :src="avatarUrlOf(comment)" :alt="displayNameOf(comment)" draggable="false" />
<div v-else class="commentItem__avatar commentItem__avatar--fallback">{{ avatarFallbackOf(comment) }}</div>
<div class="commentItem__meta">
<div class="commentItem__name">{{ displayNameOf(comment) }}</div>
<div class="commentItem__metaTop">
<div class="commentItem__name">{{ displayNameOf(comment) }}</div>
<span class="commentItem__badge">댓글</span>
</div>
<div class="commentItem__date">{{ formatDate(comment.createdAt) }}</div>
</div>
</div>
@@ -307,7 +310,10 @@ onBeforeUnmount(() => {
<img v-if="avatarUrlOf(reply)" class="commentItem__avatar" :src="avatarUrlOf(reply)" :alt="displayNameOf(reply)" draggable="false" />
<div v-else class="commentItem__avatar commentItem__avatar--fallback">{{ avatarFallbackOf(reply) }}</div>
<div class="commentItem__meta">
<div class="commentItem__name">{{ displayNameOf(reply) }}</div>
<div class="commentItem__metaTop">
<div class="commentItem__name">{{ displayNameOf(reply) }}</div>
<span class="commentItem__badge commentItem__badge--reply">답글</span>
</div>
<div class="commentItem__date">{{ formatDate(reply.createdAt) }}</div>
</div>
</div>
@@ -453,18 +459,36 @@ onBeforeUnmount(() => {
.commentsThread {
display: grid;
gap: 14px;
gap: 16px;
}
.commentItem {
padding: 16px;
border-radius: 22px;
position: relative;
padding: 18px 18px 16px;
border-radius: 24px;
background: linear-gradient(180deg, color-mix(in srgb, var(--theme-surface) 88%, var(--theme-surface-soft)) 0%, var(--theme-surface) 100%);
box-shadow:
inset 0 1px 0 color-mix(in srgb, white 6%, transparent),
0 14px 32px rgba(0, 0, 0, 0.08);
}
.commentItem--reply {
margin-top: 12px;
margin-left: 24px;
border-radius: 18px;
margin-left: 28px;
border-radius: 20px;
background: linear-gradient(180deg, color-mix(in srgb, var(--theme-accent) 6%, var(--theme-surface)) 0%, var(--theme-surface) 100%);
}
.commentItem--reply::before {
content: '';
position: absolute;
top: 22px;
left: -16px;
width: 12px;
height: calc(100% - 44px);
border-left: 2px solid color-mix(in srgb, var(--theme-accent) 36%, var(--theme-card-border));
border-bottom: 2px solid color-mix(in srgb, var(--theme-accent) 36%, var(--theme-card-border));
border-bottom-left-radius: 14px;
}
.commentItem--highlighted {
@@ -507,11 +531,37 @@ onBeforeUnmount(() => {
min-width: 0;
}
.commentItem__metaTop {
display: inline-flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.commentItem__name {
font-size: 14px;
font-weight: 800;
}
.commentItem__badge {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 9px;
border-radius: 999px;
background: color-mix(in srgb, var(--theme-surface-soft) 84%, transparent);
color: var(--theme-text-muted);
font-size: 11px;
font-weight: 900;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.commentItem__badge--reply {
background: color-mix(in srgb, var(--theme-accent) 15%, var(--theme-surface-soft));
color: var(--theme-text);
}
.commentItem__date {
margin-top: 4px;
font-size: 12px;
@@ -538,6 +588,10 @@ onBeforeUnmount(() => {
}
.commentItem__body {
padding: 14px 15px;
border-radius: 18px;
background: color-mix(in srgb, var(--theme-input-bg) 82%, var(--theme-surface));
border: 1px solid color-mix(in srgb, var(--theme-card-border) 76%, transparent);
white-space: pre-wrap;
word-break: break-word;
line-height: 1.6;
@@ -570,7 +624,12 @@ onBeforeUnmount(() => {
}
.commentItem--reply {
margin-left: 12px;
margin-left: 14px;
}
.commentItem--reply::before {
left: -10px;
width: 8px;
}
}
</style>