--- title: Mobile Form Patterns created: 2026-07-03 updated: 2026-07-03 type: system tags: [mobile, forms, input, validation, UX, conversion] sources: - https://www.formCreatorai.com/mobile-form-design-patterns-maximize-completion - https://subux.pro/guides/article/input-field-types-and-usage - https://askusers.org/en/blog/mobile-form-optimization-completion-rates - https://www.getworkform.com/blog/mobile-form-design-tips - https://tinyform.com/post/mobile-form-statistics-ux-trends - https://www.reform.app/blog/10-mobile-form-design-tips-for-better-ux confidence: high --- # Mobile Form Patterns — Формы и инпуты для мобильных ## 1. Mobile Form Statistics - **63%** мобильных форм бросают на полпути (мобильная форма для завершения) - Оптимизированные формы увеличивают completion rate до **43%** - Мобильные формы имеют более высокий abandonment rate, чем десктоп - Каждый дополнительный field = 10% снижение completion rate ## 2. Input Types & Keyboards ### 2.1 Correct Input Types ```html ``` ### 2.2 inputmode for Custom Keyboards ```html ``` ### 2.3 Keyboard Hints ```html ``` ## 3. Form Layout Patterns ### 3.1 Single-Column Form ```css .mobile-form { display: flex; flex-direction: column; gap: 20px; padding: 20px 16px; } .form-group { display: flex; flex-direction: column; gap: 8px; } ``` ### 3.2 Floating Label Pattern ```css .form-group { position: relative; } .form-input { min-height: 48px; padding: 16px 12px 8px; border: 1px solid var(--border-1); border-radius: 8px; background: var(--surface-1); font-size: 16px; /* Prevents iOS zoom */ width: 100%; transition: border-color 0.15s, box-shadow 0.15s; } .form-input:focus { border-color: var(--primary); outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 20%, transparent); } .form-label { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--text-secondary); pointer-events: none; transition: all 0.15s ease; font-size: 16px; } .form-input:focus ~ .form-label, .form-input:not(:placeholder-shown) ~ .form-label { top: 8px; font-size: 12px; color: var(--primary); } ``` ### 3.3 Multi-Field Row (When Appropriate) ```css .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .form-row-3 { grid-template-columns: 1fr 1fr 1fr; } ``` **Правила:** - Только для связанных полей (имя/отчество, город/индекс) - Всегда single-column на экранах < 360px - Never for unrelated fields ## 4. Validation Patterns ### 4.1 Real-Time Validation ```css .form-input.valid { border-color: #22c55e; } .form-input.invalid { border-color: #ef4444; animation: shake 0.3s ease; } .form-error { font-size: 12px; color: #ef4444; margin-top: 4px; display: flex; align-items: center; gap: 4px; } .form-success { font-size: 12px; color: #22c55e; margin-top: 4px; } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-4px); } 75% { transform: translateX(4px); } } ``` ### 4.2 Inline Validation on Blur ```javascript // Validate on blur, not on every keystroke input.addEventListener('blur', () => { const value = input.value; if (!validate(value)) { input.classList.add('invalid'); showError(input, getMessage(value)); } else { input.classList.remove('invalid'); input.classList.add('valid'); showSuccess(input); } }); ``` ### 4.3 Validation Error Summary ```html
Исправьте следующие ошибки: