Files
neo 76c4c5b4fe design-systems: add 74 brand DESIGN.md files (VoltAgent/awesome-design-md)
- 74 brands: airbnb, stripe, apple, figma, linear, vercel, etc.
- 147 files: DESIGN.md + README.md per brand (~2.1 MB)
- Each DESIGN.md contains structured brand analysis (colors, typography, components)
- Updated 00-overview.md with new design-systems directory
2026-06-21 20:40:35 +05:00

276 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: psychology/visual-hierarchy
title: Visual Hierarchy & Conversion Patterns
description: Principles of visual hierarchy, CTA placement, and cognitive design patterns for maximum conversion.
tags: [psychology, ux, conversion, hierarchy, accessibility]
source: cialdini.com, Nielsen Norman Group, stripe.com, linear.app
---
# Visual Hierarchy & Conversion Patterns
## Что это
Система визуальной иерархии, которая направляет взгляд пользователя к целевому действию (CTA). Комбинация психологии поведения и технических приёмов.
## 7 Принципов Визуальной Иерархии
### 1. Размер (Size)
Крупнее = важнее. H1 должен быть в 2–3x крупнее body text.
```css
/* ✅ Правильный масштаб */
h1 { font-size: clamp(2.5rem, 6vw, 4rem); } /* 40–64px */
h2 { font-size: clamp(1.8rem, 4vw, 2.5rem); } /* 29–40px */
h3 { font-size: var(--text-xl); } /* 20px */
p { font-size: var(--text-base); } /* 16px */
```
### 2. Контраст (Contrast)
Высококонтрастные элементы привлекают внимание. CTA — самый контрастный элемент на странице.
```css
/* ✅ CTA имеет максимальный контраст */
.btn-primary {
background: #6366f1;
color: #ffffff;
/* Контраст 4.5:1+ для WCAG AA */
}
/* ❌ Плохо — CTA сливается с фоном */
.btn-bad {
background: rgba(99, 102, 241, 0.2);
color: #888888;
}
```
### 3. Пространство (Whitespace)
Больше пустого пространства вокруг = больше внимания.
```css
.section {
padding: 128px 0; /* Премиум — много воздуха */
}
.card {
padding: 48px; /* Карточки с воздухом внутри */
}
```
### 4. Цвет (Color)
Используйте акцентный цвет ТОЛЬКО для CTA и ключевых элементов.
```css
/* Правило 60-30-10 */
/* 60% — нейтральный фон (тёмный) */
/* 30% — вторичный текст (серый) */
/* 10% — акцентный цвет (CTA, важные цифры) */
```
### 5. Расположение (Position)
- **F-pattern** для текстовых страниц
- **Z-pattern** для экранов с CTA
- **Above the fold** — ключевое сообщение + CTA
```
Z-PATTERN:
┌─────────────────────────────────┐
│ Logo [CTA Button] │ ← Начало взгляда
├─────────────────────────────────┤
│ │
│ Главный заголовок │
│ Подзаголовок │
│ │
│ [CTA] │ ← Конец взгляда
└─────────────────────────────────┘
```
### 6. Группа (Grouping / Gestalt)
Связанные элементы группируются вместе (близость). Разные группы разделяются пространством.
```html
<!-- ✅ Сгруппировано логически -->
<div class="card">
<h3>Feature 1</h3>
<p>Description</p>
<a href="#" class="link">Learn more</a>
</div>
<!-- ❌ Разбросано -->
<h3>Feature 1</h3>
<p>Description</p>
<div class="separate">
<a href="#">Learn more</a>
</div>
```
### 7. Последовательность (Sequence)
Информация подается в логическом порядке:
1. Проблема (боль)
2. Решение (наш продукт)
3. Доказательство (кейс, цифры)
4. Действие (CTA)
## CTA Placement Patterns
### Pattern 1: Hero CTA (первый экран)
```
[Логотип] [CTA]
[Заголовок]
[Подзаголовок]
[CTA] [CTA secondary]
```
```html
<header class="nav">
<div class="logo">Brand</div>
<a href="#signup" class="btn btn-primary">Get Started</a>
</header>
<section class="hero">
<h1>Главный заголовок</h1>
<p>Подзаголовок</p>
<a href="#signup" class="btn btn-primary">Начать →</a>
<a href="#demo" class="btn btn-secondary">Смотреть демо</a>
</section>
```
### Pattern 2: Contextual CTA (после секции)
```
[Секция с описанием проблемы]
[CTA "Решить проблему"]
```
### Pattern 3: Sticky CTA (всегда виден)
```css
.sticky-cta {
position: fixed;
bottom: 24px;
right: 24px;
z-index: 100;
opacity: 0;
transform: translateY(20px);
transition: all 0.3s ease;
}
.sticky-cta.visible {
opacity: 1;
transform: translateY(0);
}
```
### Pattern 4: Exit Intent CTA
```javascript
let exitShown = false;
document.addEventListener('mouseleave', (e) => {
if (e.clientY < 0 && !exitShown) {
exitShown = true;
showExitPopup();
}
});
function showExitPopup() {
// Показать модальное окно с предложением
}
```
## Social Proof Placement
```
[Hero CTA]
↓
[Логотипы клиентов — 5–7 логотипов в ряд, монохром]
↓
[Секция "Цифры" — 3–4 больших числа]
↓
[Отзывы клиентов — карточки]
↓
[CTA]
```
```css
/* Логотипы клиентов — монохром */
.client-logos {
display: flex;
gap: 48px;
align-items: center;
opacity: 0.4;
filter: brightness(0) invert(1);
transition: opacity 0.3s;
}
.client-logos:hover {
opacity: 0.7;
}
/* Карточки отзывов */
.testimonial-card {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 16px;
padding: 32px;
}
```
## Hick's Law Application
**Чем больше вариантов, тем дольше принимается решение.**
```
❌ 5 кнопок в навигации + 3 CTA на экране = низкая конверсия
✅ 1 CTA на экран + 3–5 пунктов в навигации
```
```html
<!-- ✅ Один главный CTA -->
<section class="hero">
<h1>Главное сообщение</h1>
<a href="#signup" class="btn btn-primary btn-lg">
Начать бесплатно →
</a>
<p class="cta-subtext">Без кредитной карты</p>
</section>
```
## Fitts's Law Application
**Крупные элементы в доступных зонах = быстрее кликают.**
```css
.btn-primary {
min-width: 160px; /* Минимальная ширина */
min-height: 48px; /* Минимальная высота (палец) */
padding: 16px 32px; /* Щедрые отступы */
font-size: 1rem;
font-weight: 600;
}
```
## Anti-patterns
| ❌ Плохо | ✅ Хорошо |
|----------|-----------|
| 3 CTA на экране | 1 главный CTA + 1 вторичный |
| CTA сливается с фоном | CTA — самый контрастный элемент |
| Текст 12px | Минимум 16px для body |
| Без whitespace | 128px между секциями |
| Сложная навигация | 3–5 пунктов |
| Без визуальных направляющих | Стрелки, взгляды, линии к CTA |
## CV Service Validation
```bash
# Проверить визуальную иерархию
curl -s -X POST http://localhost:8001/design/analyze \
-H "Content-Type: application/json" \
-d '{"image_base64": "...", "full_analysis": false}' | python3 -c "
import sys, json
d = json.load(sys.stdin)
vh = d['dimensions'].get('visual_hierarchy', {})
print(f\"Visual Hierarchy: {vh.get('score', 'N/A')}/10\")
print(f\" Focal points: {vh.get('focal_points', 'N/A')}\")
print(f\" Eye flow: {vh.get('eye_flow', 'N/A')}\")
"
```
Ожидается: `visual_hierarchy` > 7.