06ロゴ信頼のレビュー
レビューカードの上でグレーのロゴチップ6個が横に無限スクロールし、導入企業を示します。ホバーしたチップだけ色が戻ります。
使いどころ導入企業ロゴ帯・信頼指標
무한 로고 마퀴grayscale 호버 해제margin-right 간격

<main class="stage">
<div class="logotrust">
<figure class="logotrust__quote">
<blockquote>「オンボーディングが1日で完了しました。」</blockquote>
<figcaption>— ニンバス ・ 運用チームリーダー</figcaption>
</figure>
<div class="logotrust__viewport">
<div class="logotrust__track" aria-hidden="true">
<span class="logotrust__chip">Nimbus</span>
<span class="logotrust__chip">Ledger</span>
<span class="logotrust__chip">Northwind</span>
<span class="logotrust__chip">Vertex</span>
<span class="logotrust__chip">Harborline</span>
<span class="logotrust__chip">Anchorpay</span>
<span class="logotrust__chip">Nimbus</span>
<span class="logotrust__chip">Ledger</span>
<span class="logotrust__chip">Northwind</span>
<span class="logotrust__chip">Vertex</span>
<span class="logotrust__chip">Harborline</span>
<span class="logotrust__chip">Anchorpay</span>
</div>
</div>
</div>
</main>@use "../../../../site/static/demo-tokens" as *;
$duration: 6s; // 열두 칩(원본6+복제6)이 한 바퀴 도는 시간 — $dur-loop 보다 길어야 흐름이 자연스럽다(합치지 않는다, 규칙2)
$easing: linear;
$color: $subject-blue;
$trust-graytint: #f1f5f9;
$trust-ink: $subject-ink;
$trust-slate: #475569;
$trust-blue: $subject-blue;
@include stage($trust-graytint);
.logotrust {
display: flex;
flex-direction: column;
align-items: center;
gap: $sp-4;
width: 320px;
}
.logotrust__quote {
margin: 0;
box-sizing: border-box;
width: 100%;
padding: $sp-3 $sp-4;
border-radius: $r-card;
background: $stage-paper;
box-shadow: 0 8px 18px rgba($trust-ink, .07);
text-align: center;
}
.logotrust__quote blockquote {
margin: 0 0 $sp-1;
color: $trust-ink;
font-weight: 700; font-size: 13px; line-height: 1.4;
font-family: inherit;
}
.logotrust__quote figcaption {
color: $trust-slate;
font-weight: 500; font-size: 11px; line-height: 1.3;
font-family: inherit;
}
.logotrust__viewport {
width: 100%;
overflow: hidden;
}
.logotrust__track {
display: flex;
width: max-content;
animation: scrollLogos $duration $easing infinite;
}
.logotrust__chip {
flex: 0 0 auto;
margin-right: $sp-3;
border-radius: $r-pill;
background: $stage-paper;
color: $trust-slate;
padding: $sp-1 $sp-4;
font-weight: 700; font-size: 12px; line-height: 1.6;
font-family: inherit;
box-shadow: 0 4px 10px rgba($trust-ink, .06);
}
.logotrust__chip:hover {
color: $trust-blue;
box-shadow: 0 6px 14px rgba($trust-blue, .18);
}
// 데모: 원본 6개 + 복제 6개를 이어 붙여 -50% 만큼 옮기면 이음새 없이 무한히 흐른다. 간격은 flex gap 대신 margin-right(BD15)
@keyframes scrollLogos {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
@media (max-width: 340px), (max-height: 220px) {
.logotrust { width: 260px; gap: $sp-2; }
.logotrust__quote { padding: $sp-2 $sp-3; }
.logotrust__quote blockquote { font-size: 11px; }
.logotrust__chip { padding: 4px $sp-3; font-size: 11px; margin-right: $sp-2; }
}
@media (prefers-reduced-motion: reduce) {
.logotrust__track { animation: none !important; }
}html, body {
margin: 0;
overflow: hidden;
}
.stage {
box-sizing: border-box;
min-height: 100vh;
display: grid;
place-items: center;
margin: 0;
background: #f1f5f9;
font-family: -apple-system, "Segoe UI", "Noto Sans KR", sans-serif;
padding: clamp(8px, 4vw, 24px);
}
.logotrust {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
width: 320px;
}
.logotrust__quote {
margin: 0;
box-sizing: border-box;
width: 100%;
padding: 12px 16px;
border-radius: 16px;
background: #ffffff;
box-shadow: 0 8px 18px rgba(23, 20, 26, 0.07);
text-align: center;
}
.logotrust__quote blockquote {
margin: 0 0 4px;
color: #17141a;
font-weight: 700;
font-size: 13px;
line-height: 1.4;
font-family: inherit;
}
.logotrust__quote figcaption {
color: #475569;
font-weight: 500;
font-size: 11px;
line-height: 1.3;
font-family: inherit;
}
.logotrust__viewport {
width: 100%;
overflow: hidden;
}
.logotrust__track {
display: flex;
width: max-content;
animation: scrollLogos 6s linear infinite;
}
.logotrust__chip {
flex: 0 0 auto;
margin-right: 12px;
border-radius: 999px;
background: #ffffff;
color: #475569;
padding: 4px 16px;
font-weight: 700;
font-size: 12px;
line-height: 1.6;
font-family: inherit;
box-shadow: 0 4px 10px rgba(23, 20, 26, 0.06);
}
.logotrust__chip:hover {
color: #2f6df6;
box-shadow: 0 6px 14px rgba(47, 109, 246, 0.18);
}
@keyframes scrollLogos {
from {
transform: translateX(0);
}
to {
transform: translateX(-50%);
}
}
@media (max-width: 340px), (max-height: 220px) {
.logotrust {
width: 260px;
gap: 8px;
}
.logotrust__quote {
padding: 8px 12px;
}
.logotrust__quote blockquote {
font-size: 11px;
}
.logotrust__chip {
padding: 4px 12px;
font-size: 11px;
margin-right: 8px;
}
}
@media (prefers-reduced-motion: reduce) {
.logotrust__track {
animation: none !important;
}
}import type { CSSProperties } from "react";
import styles from "./LogoTrust.module.scss";
export type LogoTrustProps = {
quote?: string;
author?: string;
logos?: string[];
duration?: number;
easing?: string;
color?: string;
};
type Vars = CSSProperties & { "--duration"?: string; "--easing"?: string; "--color"?: string };
export default function LogoTrust({
quote = '"온보딩이 하루 만에 끝났습니다"',
author = "— 니임버스 · 운영팀장",
logos = ["Nimbus", "Ledger", "Northwind", "Vertex", "Harborline", "Anchorpay"],
duration = 6000,
easing = "linear",
color = "#2f6df6",
}: LogoTrustProps) {
const vars: Vars = { "--duration": `${duration}ms`, "--easing": easing, "--color": color };
const doubled = [...logos, ...logos];
return (
<div className={styles.wrap} style={vars}>
<figure className={styles.quote}>
<blockquote>{quote}</blockquote>
<figcaption>{author}</figcaption>
</figure>
<div className={styles.viewport}>
<div className={styles.track} aria-hidden="true">
{doubled.map((name, i) => (
<span key={`${name}-${i}`} className={styles.chip}>{name}</span>
))}
</div>
</div>
</div>
);
}06 ロゴ信頼のレビュー — 計測 累積面積 5.942% · 動いたフレーム 23/23GODRICH オリジナル · SCSS と React は zip に同梱 · saas サイト デザイン 信頼感キット、クリーンなセクション9選
このデモが属する記事
saas サイト デザイン 信頼感キット、クリーンなセクション9選saas サイト デザインの良さは、白とオフホワイトという二つの中立な背景の上に、ブランドカラーを青一色だけ重ね、影は色付きにせずグレー系で浅く、角の丸みも抑えた半径に統一するところにあります。パステルやキャンディグラデーションの明るさとは この記事のデモをすべて見る


