🔥 Typeahead в духе Spotlight выглядит как мелочь, но внутри это очень нетривиальный UI-паттерн
Обычный автокомплит показывает список под полем. Typeahead работает иначе: продолжение появляется прямо внутри строки, и за счет этого пользователь не прыгает взглядом между инпутом и выпадающим списком. На словах просто. На деле это почти полностью кастомное поведение, которое не совпадает с нативной логикой HTML-инпутов.
Флориан Шульц очень хорошо разбирает, почему такая штука сложнее, чем кажется. Сначала он попробовал идти через реальное выделение текста, но на iOS это сразу развалилось из-за ручек выделения и странного поведения браузера. Потом пришел к overlay-подходу, где completion рисуется поверх инпута отдельным слоем, а дальше началась настоящая инженерия: beforeinput, кастомная обработка backspace, скрытие каретки, переполнение текста и даже проблема кернинга, из-за которой буквы начинали прыгать при вводе.
Внутри:
– Чем typeahead отличается от обычного автокомплита со списком подсказок;
– Почему решение через реальное выделение текста ломается на мобильных;
– Как работает overlay-подход с отдельным слоем поверх инпута;
– Какие события приходится перехватывать, чтобы поведение было естественным;
– Почему стандартный Highlight не дает одинаковый результат в разных браузерах;
– Как обрабатывать состояния фокуса, очистки и переполнения текста;
– Откуда берется проблема с кернингом при разбиении строки на span;
– Как можно компенсировать этот сдвиг, не отключая кернинг полностью.
➡️ Читать статью
———
💻 Курс по поиску работы 😍 Про дизайн
🔥 Вакансии дизайнерам
🎨 Референсы