Компонент · рівень 2

Банер

Шість непов'язаних блоків під одним ім'ям файлу, і всі шість живуть рівно на чотирьох екранах - головній у чотирьох станах. Це не компонент, це стилевий лист головної сторінки.

рівень 2design/system/components/banner.css291 рядок73 селектори6 блоків11 екранів
Шість блоків, чотири екрани

Заміряно в браузері на 390, 720 і 1280 по всіх 39 кольорових екранах. Кожен блок цього файлу рендериться на home-buyer, home-cart, home-coach і index - і більше ніде.

БлокНа екранЩо це
.hbanners .hslider .hpromo .hdots1 · 1 · 3 · 1слайдер промо з крапками
.hdeal1картка пропозиції дня
.pstrip1смуга «увійдіть» з кнопкою
.tbanners .tbn1 · 5п'ять банерів довіри
.promo1широкий блок під фотовуаллю

Розбити файл на шість - не робота цього кроку. Від імені файлу залежать реєстр, вітрина і рахунок молекул, а звести імена угоди до імен картки - це підмітання розмітки. І те, і те - Крок 6, після етапу 09. Цей крок робить інше: перестає давати файлу брехати про свій вміст і бере два факти, які не просто тісні, а неправильні.

Анатомія

Розмітка звідси - та сама, що на index.html, скопійована рядок у рядок.

слайд промо сам по собі · .hpromo - обличчя, яке дає banner.css
Акція тижняЗнижки до −25%на протеїн і креатин - спокійно, без таймерів
і той самий слайд у стрічці · .hbanners .hslider .hstrip - обличчя, яке дає hero.css
пропозиція дня · .hdeal
Пропозиція дня фото Optimum Nutrition · США Gold Standard 100% Whey 2270 г В наявності 1 520 ₴−15%1 290 ₴ 18 ₴ / порція · +13 ₴ бонус У кошик
смуга входу · .pstrip
Увійдіть, щоб бачити персональні знижки та бонуси Увійти
банери довіри · .tbanners .tbn
широкий промо · .promo
Знижки тижня - до −25% на протеїн і креатин
Спокійно, без таймерів. Усі акції →
Тут стояв четвертий блок, .tband, і на 12.18 його видалено. 7.44 залишив правило з причиною «кольоровий двійник ще не приїхав - це його половина, яка чекає», і на той день це було правильно. Двійник приїхав на етапі 12 і відмовився від класу: смуга довіри на coach-landing - це .tbanners, ті самі чотири картки-посилання, що на головній. Причина «чекає» не застаріла, вона відповіджена, а відповіджена причина - це виняток, який нічого не покриває

Перший слайд - інший компонент, і вирішує це його позиція

Порівняйте два демо вгорі. Сам по собі слайд білий, заголовок 24, надзаголовок і підпис приглушені - це те, що оголошує banner.css. У стрічці перший стає чорнильним, заголовок росте до 38px, напис іде в акцент, підпис - у --text-oninverse-muted. Дає це не банер:

/* hero.css - організм, рівень 3 */ .hstrip > .hpromo:nth-child(1){ background:var(--bg-inverse); border-color:var(--line-inverse); } .hstrip > .hpromo:nth-child(1) .hph{ color:var(--text-oninverse); font-size:38px; }

Обличчя слайда вирішує його місце в стрічці, а не його розмітка. Переставте слайди місцями - і темним стане інший. Це та сама форма, що чекбокс на 7.38, тільки на рівень вище: організм перефарбовує частини молекули по імені. Не виправлено тут: розібратись, чи це варіант .hpromo--lead, чи два різні компоненти, - робота етапу 09.

1Слайд - надзаголовок, заголовок і підпис на фотографії під вуаллю. Три на екран, гортаються, крапки під ними показують який
2Угода - те саме, що картка товару, під третім набором імен. Ціна, знижка й наявність у ній - уже атоми
3Смуга - речення, розпірка й кнопка. Три елементи, більше в ній немає нічого
4Банер довіри - фото зверху, жирний рядок і курсив під ним. П'ять поспіль, на 700px стають рядом з п'яти замість двох
5Промо - фотографія на всю ширину з градієнтною вуаллю зліва направо, щоб текст на ній читався
Угода - це третя картка товару

Її частини лягають на .pcard одна в одну, і атоми це вже знають: 7.35 забрав наявність, 7.36 ціну, 7.36b чип знижки - усі три просто додавши hd--імена до списку селекторів атома.

Рольсіткоюспискомугода
мітка.tag.tag.hd-tag
фото.ph.lph.hd-ph
бренд.pbrand.lbrand.hd-brand
назва.nm.lnm.hd-nm
наявність.pavail.lavail.hd-av
ціна.pnew .pold.lprice .lold.hd-new .hd-old

Молекула цього не знала. Її рядок бренда читав --text-muted ще через день після того, як 7.43 віддав сітковій картці --text-brandline за той самий рядок - і токен у tokens.css перелічує три читачі, з яких брав роль лише один. Тепер беруть усі три.

Що не зроблено і сказано вголос: ім'я товару тут набране дисплейною гарнітурою (Oswald 20/600), тоді як обидві картки називають його Inter 16/600. Один і той самий рядок у трьох гарнітурах. Це рішення про типографіку, у нього власник в етапі 09.

Підйом - дев'ять проти одного

Зібрано з розібраного CSSOM по всій системі: скільки піднімається поверхня під курсором.

ПідйомХто
−1px.btn--lift .pm-stars .pmst
−2px.hpromo .hdeal .tbn .blogcard .certthumb .gthumb .gtile .hvert .tsx .uiv-ic - дев'ять у восьми файлах
−3px.pcard - один, і на цьому кроці став −2

Глибину система звела в шкалу на 6.0. Підйом відповідає на те саме питання - «ось ця, під курсором» - і лишався одним значенням плюс одним винятком. Змінна: наскільки поверхня піднімається під курсором. Значення: −2px. Чому: дев'ять проти одного - це не рішення про картки, це те, що не потрапило під зачистку.

Стани
СтанЩо робитьЧому так
спокій--elevation-1 у слайда, угоди й банера довіри; .promo і .pstrip без тініправила, яке поверхня бере тінь, а яка ні, немає - етап 09
наведенняпідйом −2px і --elevation-2; у банера довіри ще й край в акцентодна відповідь на всі поверхні, що піднімаються
наведення на угодуїї кнопка бере filter: brightness(.95)кнопка всередині картки-посилання: вона не власний контроль, а частина однієї цілі
крапка слайдера.on - --bg-action, решта --bg-trackтой самий поділ, що в усіх контролів: увімкнене - акцент, порожнє - доріжка
натисканнянемаєусі шість блоків - посилання цілком, і затемнювати банер на весь екран під пальцем немає чим
фокуснемає власногокожен блок - <a>, і кільце йому дає link-row.css. Етап 09 звірить, чи цього досить на фото
Коли вживати

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

Правило і антиправило

Правило

Банер продає ідею, картка продає товар. Якщо в блоці з'явились ціна, наявність і кнопка «у кошик» - це вже картка, і вона має брати анатомію картки, а не власну.

Антиправило

Не заводь нове ім'я для тієї самої частини. Три набори імен для одного бренда, однієї назви й однієї ціни - це не три компоненти, це один, у якого тричі забули спитати, як він зветься.
Обмеження

Правила вживання, які називають саме цей компонент: U8. Автор правил один, і це architecture.html, розділ I; тут - витяг.

Коли на сторінці є кошик-полиця, головна дія належить їй, а залита дія смуги стає контурною - правило записане ще на етапі 07 у wireframes/docs/critique.md.

Банер рекомендації

.recbanner стоїть над добіркою і каже, ЧОМУ вона така. Маскот тут не прикраса: він єдиний у продукті носить власну плинну величину --rbear (68 на 360 -> 92 на 560), бо круг, обрізаний по обличчю, на вузькій ширині мусить меншати швидше за текст поруч.

Підібрали під вашу ціль
Холостий контроль

Сторінка звіряє себе з файлом: 30 власних класів і 3 стани оголошено в banner.css. Нижче - ті, яких на цій сторінці немає ні в демо, ні в розмітці.

ПОВЕДІНКА НА ШИРИНІ - етап 10, крок 4

Три різні відповіді в одному файлі, і це навмисно. 1) .tbanners - запит зник: п'ять смуг довіри заповнюють ряд через auto-fit з підлогою 8rem. На 360 обидві редакції дають 2 x 158, на 720 - 5 x 128; між ними ряд тепер стає трьома на 440 і чотирма на 580 замість того, щоб тримати дві колонки 360 пікселів поспіль. 2) .hbanners і .hpromo - 720 -> 620: 2fr 1fr з явним розміщенням це композиція, і auto-fit її не вміє. Зміряно: на 620 колонка акції виходить 192px, а на 860, де .hero-wrap бере собі компаньйона і тисне цю сітку до 562, та сама картка вже 183px. 3) .recbanner - запит зник: гап, портрет і кегль стрибали на 559, тепер це три пандуси, кожен кінчається тим числом, яке там і стояло. .hpromo min-height пішла тим самим шляхом: 300 на 360, 340 від 620.
Рух

Робота: ВІДПОВІДЬ. Рухається: transform, тінь, рамка і filter на зображенні. Тривалість --dur-fast (150ms), крива --ease-standard. Значення читаються через var(): підміна токена в браузері веде за собою кожне з них, тобто числа у файлі немає. При prefers-reduced-motion рух зникає, а стан лишається.

filter у переході це малювання: один банер витримає, і саме тому він тут лишився, а перегляд ціни кадру стоїть на кроці 5.

Токени

Прочитані з banner.css, не переписані руками. Колір іде лише через роль, геометрія - напряму з примітива.

Семантичні ролі (18)Примітиви (29)
--bg-action --bg-page --bg-sunken --bg-surface --bg-track --elevation-1 --elevation-2 --fade-surface --line-action --line-hair --text-action --text-body --text-brandline --text-onaction --text-primary --text-secondary --veil-surface --veil-surface-mid--font-display --font-mono --fs-12 --fs-14 --fs-16 --fs-18 --fs-20 --fs-24 --fs-30 --fw-black --fw-bold --fw-medium --fw-semibold --lh-airy --lh-flat --lh-snug --ls-caps --ls-eyebrow --ls-lead --radius-12 --radius-16 --radius-circle --space-2 --space-4 --space-8 --space-12 --space-16 --space-24 --space-32
–--dur-fast --ease-standard
Розмітка
<a class="hpromo" href="listing.html"> <span class="hptag">Акція тижня</span> <span class="hph">Знижки до −25%</span> <span class="hps">на протеїн і креатин</span> </a> <div class="hdots"><i class="on"></i><i></i><i></i></div>

Кожен із шести блоків - одне посилання цілком, а не картка з кнопкою всередині. Тому .hd-cta це <span>, а не <button>: вкладена кнопка в посиланні дала б дві цілі там, де дія одна.

Де вживається

Якорі: .hbanners .hdeal .pstrip .tbanners .promo

Заміряно в браузері на 390, 720 і 1280: усі шість блоків на чотирьох кольорових екранах з 39, і на жодному іншому.

Немає в коді -> етап 09

Чого бракує

  • Три стопки «надзаголовок - заголовок - підпис» без нічого спільного, крім дисплейної гарнітури. Надзаголовки: Mono 12/500 в слайда проти Oswald 20/700 в угоди. Заголовки: 38 / 30 / 24 / 20. Підписи: два по 14/400 з різними інтерлиньяжами, причому один свій не оголошує взагалі й успадковує 1.6 від body
  • 38px - НЕ цього файлу, і це знайшлось при складанні стенда. banner.css дає заголовку слайда --fs-24; літеральні 38px приходять з hero.css:26 - організм, який перефарбовує частини молекули за позицією в стрічці. Це та сама форма, що 7.38, на рівень вище
  • П'ять поверхонь, два радіуси, три тіні і жодного правила: .hpromo 16/тінь, .hdeal 16/тінь, .tbn 12/тінь, .promo 16/без, .pstrip 12/без
  • Дві цифри в .hd-meta не розмічені - «18 ₴ / порція · +13 ₴ бонус» іде суцільним текстом, тоді як у картці ті самі дві величини несуть <b> і моноширинну гарнітуру. Це питання до розмітки й до IA, а не рядок CSS
  • Розбити файл на шість і звести імена угоди до імен картки - Крок 6

Не домальовано наперед і не замовчано: етап 09 стартує з цього списку, зведеного в design/kit/docs/architecture.md.