Етап 08 · перед розкоткою

Перепис кнопок

Не список класів зі стилю, а перелік того, що людина реально бачить на екранах. Браузер обійшов 180 екранів у двох в'юпортах і зняв обчислений стиль з кожного клікабельного елемента: 22 229 спостережень. Далі вони згорнулись у форми, форми - в осі, осі - у закритий набір.

Перепис стоїть перед кроком 6. Крок 6 нічого не вирішує, він тиражує: те, що система скаже, помножиться на 102 ще не пофарбованих екранів. Помилка в наборі варіантів коштує тут одну правку, а після тиражу - сто.

141 сірих екранів39 кольорових390 і 1280 px24 варіантів
Після зведення (крок 5.5)

Перепис вище - знімок того, що знайшли, і він лишається як є: з нього виводились рішення. Нижче - той самий продукт, переміряний тим самим обходом після зведення значень. Дві колонки, бо знахідка без «стало» не закривається, а «стало» без знахідки не пояснюється.

ЩоБулоСталоРішення
радіус53було 10/11/8/12/0, стало 8/12/0
колір рамки44не зведено: контурна кнопка й далі бере і --line-strong, і --line-hair - дві оголошені ролі на одному компоненті
кегль1111не чіпали: кегль кнопки це вісь розміру, не дрейф

Повний список рішень зі словами «змінна -> значення -> чому» - design/kit/docs/consolidation.md.

Метод: два джерела, а не одне

Сірий прототип каже, які роботи взагалі є в продукті: кожна річ, на яку можна натиснути. Кольорові екрани кажуть, які форми вже вирішені. Перетин дає три списки, і кожен потрібен: робота з формою, робота без форми, і дві форми на одну роботу.

Форму знімає браузер, а не читання css. Це принципово: .btn.dark усередині #coach-banner перевизначено на білу заливку, тобто клас з іменем «dark» рендериться білим. Читання файлу цього не показує, обчислений стиль показує одразу.

Лійка
РівеньСкількиЩо це
Клікабельних елементів22 229усе, що має курсор-палець, посилання, кнопку або роль кнопки
З них коробок4 593має заливку або рамку і висоту 22-84 px
З них кнопок-дій2 120робить або веде; чіпи, таби, мініатюри, картки і поля - інші компоненти
Кнопок-дій у кольорі464тільки вони мають вирішену форму
Різних форм24після згортання за осями наголосу, вмісту і розміру
Закритий набір: 24 форм

Кожен рядок - реальна форма, яка сьогодні стоїть на екрані, з лічильником і класами, що її дають. Це перелік того, що є, а не пропозиція. Зведення значень - крок 8, бо значення змінює власник, а не перепис.

ЗразокНаголосВмістРозмірРазівКласиПриклади
Залиталише іконкаквадрат188.cartbtnУ кошик · Додати до замовлення
Мій кабінетКонтурнатекстсередній53.btn .loadmoreМій кабінет · Переглянути кошик
У кошикЗалитатекстмалий44.btn .goУ кошик · Зберегти
лише в контексті .bb .addcartЗалитатекствеликий37.addcart .auth-cta .btnПройти квіз · У кошик
ЗмінитиКонтурнатекстмалий32.btn .co-editЗмінити · Деталі та ТТН
✕Контурнаведучий гліф + текстмалий18.auth-x .btn .cd-x✕ · + Додати адресу
УвійтиЗалитатекстсередній17.btnУвійти · Повторити замовлення
Контурналише іконкамалий16.cartbtn .wishПовідомити про надходження · В обране
+ Нова сесіяЗалитаведучий гліф + текстсередній8.btn+ Нова сесія · + Залишити відгук
GoogleКонтурнаіконка + текстсередній7.co-soc .ob-collapseGoogle · Apple
Для тренерів →Оберненатекст + кінцева стрілкавеликий6.btnДля тренерів → · Стати тренером →
Продовжити з GoogleКонтурнаіконка + текствеликий6.sbtnПродовжити з Google · Продовжити з Apple
← Повернутись до колекціїКонтурнаведучий гліф + текстсередній4.btn .pmback← Повернутись до колекції
Одеса · змінитиКонтурнаіконка + текстмалий4.co-cityОдеса · змінити · Оберіть місто · обов'язков
Оплату підтверджено - продЗалитатекст + кінцева стрілкавеликий4.auth-cta .co-proc-goОплату підтверджено - прод · Код надіслано - ввести →
Повторити замовленняЗалитаіконка + текстмалий4.btnПовторити замовлення
Оформити замовлення →Залитатекст + кінцева стрілкасередній2.btnОформити замовлення →
Повторити замовленняОберненатекстсередній2.btnПовторити замовлення
+ Нова сесіяОберненаведучий гліф + текствеликий2.btn+ Нова сесія
Повідомити про надходженняЗалитаіконка + текстсередній2.btnПовідомити про надходження
Оформити замовленняГлухатекстсередній2.cd-blockedОформити замовлення
Отримати кодЧорнатекстмалий2.co-getcodeОтримати код
Надіслати новий кодКонтурнатекствеликий2.auth-altНадіслати новий код
+ Додати адресуЗалитаведучий гліф + текстмалий2.btn+ Додати адресу
Осі і правило вибору
ВісьЗначенняПравило вибору
Наголосзалита · контурна · оберненаЗаливка акцентом означає головну дію ділянки, і вона в ділянці одна. Обернена - та сама головна дія, коли поверхня темна. Дві залиті поруч це не наголос, а його втрата.
Вмісттекст · іконка+текст · текст+стрілка · лише іконкаВедуча іконка - дія тут (у кошик, увійти через Google). Кінцева стрілка - перехід звідси (усі покупки, для тренерів). Лише іконка - там, де слово не вміщається і робота однозначна з контексту, і тоді потрібна назва для читача екрана.
Розмірмалий · середній · великийДиктує контейнер, а не важливість: рядок списку бере малий, картка і форма - середній, смуга покупки і порожній стан - великий. Ширина сюди не входить: 100%% проти auto вирішує макет, тому кнопка в картці і кнопка в смузі - одна кнопка.
Сусідствоокремо · приварена до поляКнопка «Знайти» в шапці (.go, 34 екрани, лише на 1280) має радіус 0: вона зрощена з полем пошуку і мусить бути з ним одним прямокутником. Це не варіант наголосу і не розмір - це четверта вісь, і вона вмикається лише в парі з полем.

Побічно перепис знайшов колізію імен: .go це і кнопка пошуку в шапці, і статус «в дорозі» на пілюлі замовлення (.oh-status.go). Сьогодні вони не б'ються, бо обидві заскоплені, але одне ім'я на два різні компоненти - це міна під наступним рефакторингом.

Дрейф усередині одного сімейства

Це та сама кнопка-дія, знята з екранів. Скільки різних значень вона має сьогодні на кожній властивості. 0px у кеглі і падінгах - це квадратні кнопки лише з іконкою.

ВластивістьРізнихЗначення
колір рамки4rgb(217, 217, 217)×106, rgb(255, 90, 0)×61, rgb(233, 231, 226)×40, rgb(255, 255, 255)×8
радіус510px×275, 11px×91, 8px×54, 0px×36, 12px×8
кегль110px×188, 13px×49, 13.5px×46, 16px×44, 14.5px×40, 17px×27, 19px×26, 14px×18
падінг згори90px×256, 11px×77, 10px×50, 14px×28, 12px×20, 15px×14, 13px×9, 16px×6
падінг збоку110px×222, 16px×76, 17px×46, 18px×28, 20px×24, 14px×18, 26px×14, 13px×13
товщина рамки21.5px×196, 1px×19

Найдорожче тут не кегль, а колір рамки: контурна кнопка бере три різні лінії. Це та сама роль на тому самому компоненті, тобто чистий дрейф, а не рішення. Зведення - крок 8, через власника значення.

Одна робота - різні форми

Той самий рядок тексту, тобто та сама робота для людини, реалізований різними класами або різним наголосом. Кожен рядок тут - питання «чому», на яке має бути відповідь, інакше це дрейф.

НаписКласиНаголосЕкрани
У кошик.addcart .btn .mbaЗалита×8account, product, product-reviews
Спробувати ще раз.auth-cta .btnЗалита×10account-error, auth-error, checkout-declined, listing-error
Додати клієнту.addcart .mbaЗалита×3product-coach
← Повернутись до колекції.btn .pmbackКонтурна×4product-oos, product-reviews
✕.auth-x .cd-xКонтурна×16auth, auth-code, auth-error, auth-loading
Оформити замовлення.btn .cd-blockedЗалита×2, Глуха×2cart, cart-oos
Отримати код.auth-cta .co-getcodeЧорна×2, Залита×2auth, checkout
Повторити замовлення.btnЗалита×6, Обернена×2account, account-orders, home-buyer, home-cart
+ Нова сесія.btnЗалита×2, Обернена×2home-coach
+ Додати адресу.btnЗалита×2, Контурна×2account-addresses, account-empty

«Отримати код» - найгостріше: у діалозі входу вона залита акцентом, у чекауті - чорна. Одна дія, два різні кольори, і жоден з них не пояснений.

Робота без форми: 9 кнопок

Ці кнопки існують у сірому прототипі і жодного разу не рендерились у кольорі. Майже всі - тренерський канал, тобто primary аудиторія. Якби крок 6 стартував зараз, форму для них довелось би вигадувати на льоту, по одній, на різних екранах, і вони б розійшлись.

КласРазівНаписЕкрани
.coach-newcta34+Нова сесіяcoach-client-new, coach-clients, coach-clients-cap
.ch-edit8Редагувати клієнтаcoach-client, coach-client-empty, coach-client-error
.cv-cta6Перейти до магазину · Надіслати інше посиланняcoach-verify, coach-verify-deadend, coach-verify-error
.ck-btn6Прийняти всі · Тільки необхідніsystem
.tier-cta4Активувати Free · Оформити Procoach-verify-tier
.ctab2+ Клієнтcoach-session-empty
.wa2Оновити ціниcoach-session-priceblock
.rev-google2🔗 Оцінити в Googlecontent-reviews
.next2Початиquiz

Плюс 23 некнопкових контролів без форми: чіпи пошуку (.sc-chip, .ov-chip), абетковий покажчик брендів (.dim), плитки вибору ролі (.opt-tile), поле міста (.addr-cityfld). Вони підуть своїми переписами - кнопка тут пілот методу.

Причина: стиль, який живе на сторінці

Дірки вище не випадкові. 74 сторінки сірого прототипу несуть власний <style> - разом 2710 рядків і 501 селектор, яких немає в _wf.css. Найбільші: quiz 125, coach-session-addclient 120, coach-session-addempty 119, coach-session-priceblock 96.

Кольоровий шар накладався на спільний стиль, тому все, що осіло на сторінці, він ніколи не бачив. Саме тому .ch-edit, .cv-cta, .tier-cta, .ctab, .wa, .rev-google і .next не мають форми: вони не в системі взагалі. А .coach-newcta і .ck-btn у системі є і колір отримають самі - їм просто бракує пофарбованого екрана.

Це порушення власного правила

wireframes/docs/conventions.md: «One shared stylesheet _wf.css ... No per-file style forests». Форест виріс на 74 сторінках з 141, і найгустіший - у тренерському каналі, тобто в primary аудиторії.

Знято на перевірці

.go - не діра, і помилка була моя

Grep по статичній розмітці на слово «Знайти» дав нуль, і я сказав, що кнопка пошуку не має вирішеної форми. Шапку вставляє design/_nav.js, тому в розмітці її немає взагалі, а на 390px десктопної шапки не існує. Обхід браузером на 1280 знаходить її на 34 кольорових екранах. Звідси два правила методу: перепис знімається в браузері, ніколи грепом, і завжди на двох ширинах. Знято.

.tbuy - не дефект

Перепис показав, що кнопка «У кошик» на полиці вкладок товару має форму в сірому і не має в кольорі. Перевірка в браузері: у кольорі вона display:none і вмикається класом .stuck, який вішає скрол. Тобто форма є, просто за станом, а статичний обхід стану не бачить. Знято. Запис лишається: інакше знахідка повернеться наступного разу тими самими словами.

Що це змінює

Сторінка кнопки перестає бути теорією. Її блок «варіанти» тепер закритий набір з лічильниками і екранами, а не матриця, яку я придумав з голови.

Крок 6 отримує повний список. 9 кнопок, які інакше винайшли б по дорозі, тепер названі до того, як почався тираж.

Крок 8 отримує рахунок. Дрейф порахований по кожній властивості, і зведення піде числом, а не на око.