Category: Frontend Processes

  • Changes in AFC Blocks and Page Builder Templates

    Riff Media

    Для проектів клієнту Riff Media сторінки наповнюються за допомогою темплейтів функціоналу ACF Flexible Content (т.н. Page Builder)

    Темплейти знаходиться в папці:

    wp-content/themes/general/template-parts/page-builder/section-*.php

    До назви темплейту додається слово section-*.php

    image-20250109-125029.pngimage-20250109-125713.png

    Інші клієнти

    Зазвичай для інших клієнтів сторінки наповнюються за допомогою ACF blocks

    ACF Block = section.php в папці wp-content/themes/general/frontend/components/sections/

    Назва блоку завжди така сама, як і назва файлу секції!

    index.php – головний файл блоку, де знаходиться вся HTML розмітка та php код виводу файлу.

    image-20250109-124412.pngimage-20250109-124702.png

  • CheIT Dev Work Flow

    Cхема роботи

    Cхематично наш flow можна подивитись нижче↓ за посиланням можна подивитись тут

    image-20240516-122714.png

    Відгалуження

    *MR - merge request

    *CR - Code Review

    Основні гілки

    На всіх проектах завжди присутні 2 основні гілки master і stage.

    master- основна гілка проекту. З неї починається будь-яка нова вхідна задача, з неї вона потрапляє на production сайт (цей процес ще поки що не автоматизований). У більшості випадків ми відштовхуємося від того, що код у гілці master і код на production сайт однаковий.

    stage- гілка для тестування виконаних задач. Код із цієї гілки протягом кількох хвилин після MR автоматично потрапляє на staging сайт.

    production- специальная ветка для того, чтобы код автоматически попадал попал на production сайт.

    В гілку production вливається тільки master!

    Забороняється робити MR з гілки stage в master!

    Забороняється закривати або підтверджувати (approve) MR іншого розробника!

    Інші гілки

    features/JS-8- основна гілка окремої задачі. Назва гілки береться строго з коду задачi в Jira.

    bugfix/JS-8- основна гілка окремої задачі де треба пофіксити баг, який було знайдено на сайті.

    Назва гілки береться строго з коду задачi в Jira. Знайти цей код можна тут:

    image-20240301-151056.png

    Порядок роботи

    Нижче описано порядок роботи з урахуванням того, що вже було розгорнуто локальну копію сайту.

    1. На Вас як розробника в Jira приходить задача в колонку TO DO або OPEN - її потрібно перевести в колонку IN PROGRESS

    2. У локальній копії сайту створити нову гілку з гілкиmaster (наприклад features/JS-8)

    3. Виконати задачу та опублікувати гілку features/JS-8 з коммітом у репозиторії проекту.

    4. Зробити MR гілкиfeatures/JS-8 в гілку stage:

      • features/JS-8 не видаляємо!

        image-20240315-130521.png

      • після чого запуститься процес автоматичного деплою на staging сайт. Перевірити це можна в розділі Built → Jobs:

        image-20240315-131400.png

    1. Перевірити працездатність виконаної задачі на staging сайті (за необхідності створити сторінку\пост, заповнити тестові дані тощо)

    2. Якщо на staging сайті ввімкнено кешування (зазвичай це плагін WP Rocket), то необхідно:

      • очистити кеш на всьому сайті (якщо це мультисайт - то необхідно очистити кеш на всіх сайтах окремо)

      • відключити плагін кешування (тільки в тому випадку, якщо плагін не важливий для поточного завдання)

    3. Змінити статус задачi на CODE REVIEW (у деяких випадках для CODE REVIEW може бути окремий стовпчик)

      • Обрати виконуючим відповідального за перевірку коду (CR) (зазвичай це Тім\Тех лiд)

      • У коментарях залишити:

        • посилання на MR у гілку stage

        • посилання на сторінку staging сайту, де велася робота

        • додати коментар, якщо необхідно на щось звернути увагу.

    4. Після виконаного CR може бути 2 варіанти:

      • Задача буде повернута на доопрацювання. У коментарях буде вказано причину цього + у самому MR будуть вказане посилання на код, який необхідно змінити\поправити\доопрацювати. У такому випадку задача залишається в колонці CODE REVIEW. Робочу процедуру необхідно буде повторити:

        • У локальній копії сайту в гілці features/JS-8 доопрацювати задачу

        • Зробити новий коміт і опублікувати його в репозиторії

          • У назві коміту(ів) потрібно додати строку “After CR day.month: message”.
            Наприклад After CR 13.09: fixing news section

        • Зробити MR у гілку stage

      • Задача успішно пройшла CR. Необхідно буде зробити наступне:

        • Зробити MR features/JS-8 у гілку master

        • Цього разу необхідно поставити галочку “Delete source branch…”, щоб гілка features/JS-8 була видалена пiсля завершення MR.

        • Переконатися в успішному (безконфліктному завершенні) MR.

        • Перемістити задачу в колонку READY FOR QA (інколи READY FOR TESTING)

        • Призначити виконавцем PM проекту

      • У разі успішного проходження QA, задача буде переміщуватися далі по дошці Jira (за це вже відповідає PM або QA)

      • Якщо QA знайде помилки, то необхідно буде повторити робочий цикл: задача переміщується в колонку TO DO або OPEN, і Ви призначаєтесь виконавцем.

    Робота з гілкою production

    Якщо в гіт репозиторії є гілка production - це означає те, що для цього проєкту налаштовано автоматичний деплой на production сайт. У більшості випадків це зроблено за допомогою протоколу Git FTP.

    Детальніше ознайомитися з протоколом та можливостями Git FTP можна тут

    Для того, щоб усе спрацювало, Вам необхідно просто MR з гілки master в ветку production. Статус деплою буде доступний в розділі Built → Jobs (з тегом deploy_production):

    image-20240516-160959.png

    Для коректної працездатності цього методу на production сайті буде створено файл .git-ftp.log!

    Файл зберігає в собі хеш інформацію про останній успішний деплой

    image-20240516-161746.png

    Забороняється видаляти або змінювати на production сайті файл .git-ftp.log!

    Список типів робіт, які необхідно передавати на CR

    1. Якщо повністю була закінчена сторінка з декiлькома блоками

    2. Блоки, які включають в себе роботу з js бібліотеками (slider, swiper і т.д)

    3. Наявність ajax функціоналу

    4. Наявність форм у блоці або на сторінці

    5. Будь-яка API інтеграція

    6. Будь яка бага, яка прийшла від клієнта!

    Інші роботи залишаються на розсуд розробника або PM проекту

  • Frontend Processes

    Description

    In a sentence or two, describe the purpose of this space.

    Search this Space






    Filter by Label

    These are all the labels in use in this space. Select a label to see a list of content the label has been applied to.

    1. A-Z

    Recently updated content

    This list below will automatically update each time somebody in your space creates or updates content.

  • Template – How-to guide

    (синяя звезда) Instructions

    Highlight important information in a panel like this one. To edit this panel’s color or style, select one of the options in the menu.

  • Template – Troubleshooting article

    (синяя звезда) Problem

    (синяя звезда) Solution

    Highlight important information in a panel like this one. To edit this panel’s color or style, select one of the options in the menu.

  • Верстка HTML листів

    Основні прийоми та необхідні знання, які необхідно опанувати для розробки електронної пошти.

    Основні принципи (правила) верстки Email:

    • Чим менше, тим краще

    Розмір файлу не повинен перевищувати 102 кб тільки HTML коду без картинок

    В Google Gmail він буде обрізаний та зявиться кнопка показати повну версію. 

    Розмір із картинками шрифтами оптимальна вага 1мб. 

    Фактори які впливають на розмір файлу:

    • Довжина електронного листа

    • Забагато зображень

    • Великі розміри зображення

    • Зображення без стиснення

    • Анімовані GIF-файли

    • Стиль кодування

    • Спеціальні шрифти

    Зображення:

    Всі зображення мають бути заздалегідь завантажені на сервер та прописані в хтмл прямий лінк на картинку

    Зображення слід додавати як атрибути, а не CSS. Outlook буде конвертуйти розміри в CSS автоматично у PX. 

    Обовязково додаємо інлайнові стилі width: 100%; max-width: 400px;

    <img src=”img-url.jpg width=”400” height=”100” style=”width: 100%; 
    max-width: 400px; display: block;” alt=”20% 
    off all seeds” />

    Добавити display: block;

    Обов’язково добавляємо ALT до зображення.

    Якщо не вірно відображає картинка тобто ширина висота то можна задати ще стилі для TD

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

    Google Gmail другий за популярністю емейл клієнт, на першому місці Apple далі йде Outlook. Yahoo

    Використовувати DIV чи TABLE

    <DIV>

    Плюси:

    • Більш гнучке планування.

    • Орієнтований на майбутнє. Код буде легко оновлювати в майбутньому, якщо припинять підтримку таблиць.

    • Більш доступний.

    Мінуси:

    • Потребує додаткового коду для роботи в Outlook.

    <TABLE>

    Плюси:

    • Краща підтримка у всіх поштових клієнтах.

    • Більш зрозумілий, оскільки не потребує додаткового коду який потрібен для роботи в Outlook. (тільки для нових версій)

    Мінуси:

    • Потребує додаткового стилю, щоб правильно відображатися.

    Основи верстки:

    Базова структура https://litmus.com/community/snippets/280-html-starter-template-from-carin-slater-foundations-of-email-development/
    xmlns:o="urn:schemas-microsoft-com:office:office"  використовується для 

    Outlook

    Виправляє помилку на Apple пристроях для корректного відображення масштабу, щоб не показувало на половину екрана)

    Мета теги для підтримки кольорової схеми встановленої в браузері.

    Для коректного відображення у Windows Outlook використовують слідуючий тег

    • <!--[if mso]> <![endif]--> Цей оператор if означає, що цей код видимий лише для версії Windows Outlook.

    • <o:PixelsPerInch>96</o:PixelsPerInch> це покращить візуалізацію моніторів з вищою роздільною здатністю або користувачів, які вручну вирішили збільшити роздільну здатність через консоль хром.

    role="article"

    Тег спеціальних можливостей який відповідає клієнту що це опис статті, хоча це може бути не стаття

    aria-roledescription="email"

    Тег який вказує тобто перейменовує із статті на електронну пошту. Можем написати щось своє)

    aria-label="email name"

    Тег в якому ми вставляємо від кого прийшов лист. Назву наприклад пошти чи ім’я

    Preheader це опис листа який ми бачимо коли приходить повідомлення, це не підпис Subject, це опис після підписа

    Коли використовуємо <table>

    потрібно обнулити border, cellpadding і cellspacing та додати атрибути для вирівнювання елементів у клітинок таблиці. 

    Ось приклад таблиці  600px. Максимальна ширина контейнера оптимальна 600px;

    @media screen and (max-width: 600px) {
     .responsive-table {
       width: 100% !important;
     }
    }

    role=“presentation” використовуємо для спеціальних можливостей, якщо використовуємо тільки візуально то цей тег не потрібний

    Приклад верстки на <table>

    TR – це як окрема секція, коли ми верстаємо окремі блоки тобто картку товара ми її обов’язково знову обертаємо в table наприклад в tr це як нова секція ми додаємо td із класом two-columns де буде 2 карточки товару, кожна карточка це новий table (inline-block) якому ми задаєм максмиальну ширну

    приклад верстки на <div>

    Як добавляти відступи в табличній верстці приклад:

    Фантомні теги

    <!–[if mso]> <![endif]–> – для підтримки Outlook 

    <!–[if (gte mso 9)|(IE)]><!–> <![endif]–> – щоб не відображати в Outlook на ПК

    Верстка кнопок

    Outlook не підтримує падінги на кнопках тому використовуємо фантомний тег для Outlook 

    Також Outlook не підтримує бордер радіус

    <a href="https://parcel.io" style="background-color:#005959; 
    text-decoration: none; padding: .5em 2em; color: #FCFDFF; 
    display:inline-block; border-radius:.4em; mso-padding-alt:0;
    text-underline-color:#005959">
      <!--[if mso]>
      <i style="mso-font-width:200%;mso-text-raise:100%" hidden>&emsp;</i>
      <span style="mso-text-raise:50%;">
      <![endif]-->My link text<!--[if mso]></span>
      <i style="mso-font-width:200%;" hidden>&emsp;&#8203;</i><![endif]-->
    </a>

    <a rel="noopener" target="_blank" href="https://www.litmus.com/" style="background-color: #1F7F4C; font-size: 18px; font-family: Helvetica, Arial, sans-serif; font-weight: bold; text-decoration: none; padding: 14px 20px; color: #ffffff; border-radius: 5px; display: inline-block; mso-padding-alt: 0;">
    
        <!--[if mso]>
        <i style="letter-spacing: 25px; mso-font-width: -100%; mso-text-raise: 30pt;">&nbsp;</i>
        <![endif]-->
        <span style="mso-text-raise: 15pt;">I am a button &rarr;</span>
        <!--[if mso]>
        <i style="letter-spacing: 25px; mso-font-width: -100%;">&nbsp;</i>
        <![endif]-->
    </a>
    <td style="text-align: center;background-color: #489DFF;border-radius: 7px;">
       <a href="#" target="_blank" style="background-color: #489DFF;font-weight: 600;font-size: 16px;line-height: 20px;color: #FFFFFF;text-align: center;text-decoration: none;padding: 16px 16px 16px 16px;display: inline-block;border-radius: 7px;">&nbsp;&nbsp;&nbsp;UPDATE NOW&nbsp;&nbsp;&nbsp;</a>
    </td>

    Скинути падінги – mso-padding-alt:0;

    Додати лівий та правий падіг Outlook <!–[if mso]> <![endif]–>

    <i style="mso-font-width:200%;mso-text-raise:100%" hidden>&emsp;</i>

      <i style="mso-font-width:200%;" hidden>&emsp;&#8203;</i>

    Додати падінг вниз

    <span style="mso-text-raise:50%;">My link Text</span>

    Додати падінг верх

    <i style="mso-font-width:200%;mso-text-raise:100%" hidden>&emsp;</i>

    role="button"

    border-radius до <a> Для Outlook будуть квадратними.

    лінки можна верстати через SPAN на TD або додати SPAN в тег A

    добто задаєм ті самі стилі дизайну що і самомій кнопці A

    Верстку кнопок як показує практика використовують тег img,

    Шрифти:

    Використання сторонії шрифтів рекомендують не використовувати. Варіант який можна використовувати це гугл шрифти за допомогою @import але надати альтернативу стандартним шрифтам Arial

    Текст та форматування:

    ul ol – можна використовувати – хто пам’ятає adobe dreamweaver

    обертаємо в тег <p> для стилізації

    для переноса використовують тег <br>

    Є кілька способів уникнути перенос текста. 

    Найпростіший – додати нерозривний пробіл (&nbsp;) 

    або нерозривний дефіс (&#8209;), щоб зв’язати два слова разом.

    Це вирішить більшість проблем з розривом рядка. 

    CТИЛІ

    Перед початком використовуємо CSS resets 

    https://github.com/JayOram/email-css-resets/blob/main/CSS-normalise.css

    Зовнішні стилі – не використовуємо

    Вбудовані стилі – використовуємо але потім проганяємо через сервіси які перероблять на інлайнові

    https://www.campaignmonitor.com/resources/tools/css-inliner/

    https://templates.mailchimp.com/resources/inline-css/

    Інлайнові стилі – рекомендують для використання

    Більшість електронної пошти використовують поєднання вбудованих та інлайнових стилів.

    Лінки URL

    Поштові клієнти Apple Gmail Samsung всім посиланням дають синій колір щоб цього позбутися додаємо стилі

    style>

    a[x-apple-data-detectors] {

        color: #77d6fc !important;

        font-size: inherit !important;

        font-family: inherit !important;

        font-weight: inherit !important;

        line-height: inherit !important;

    }

     

    u + #body a {

        color: #77d6fc !important;

        font-size: inherit !important;

        font-family: inherit !important;

        font-weight: inherit !important;

        line-height: inherit !important;

    }

     

    #MessageViewBody a {

        color: #77d6fc !important;

        font-size: inherit !important;

        font-family: inherit !important;

        font-weight: inherit !important;

        line-height: inherit !important;

    }

    </style>

    Використання медіа запиту для чорної теми

    Обовязково має бути присутній мета тег та додані стилі для підтримки чорної теми

    <!–to support dark mode meta tags–>

        <style type="text/css">

          :root {

            color-scheme: light dark;

            supported-color-schemes: light dark;

          }

        </style>

    @media (prefers-color-scheme: dark) {}

    щоб перебити стилі обов’язково вказуємо !important;

    color: #ffffff !important;

    Декілька правил

    Ширину слід додавати як властивості CSS до вбудованих таблиць

    Якщо не вірно відображає картинка тобто ширина висота то можна задати ще стилі для TD

    Адаптив:

    Як і в звичайній верстці ми використовуємо медіа запити

    якщо ми задали table інлайнові стилі max-width: 276px; то в медіа запитах нам потрібно вказати значення в !import

    width: 100% !important;

    max-width: 100% !important;

    @media screen and (max-width: 599.98px) {}

    reallygoodemails.com – email template

    https://putsmail.com/ – test email

    Convert inline style

    https://www.campaignmonitor.com/resources/tools/css-inliner/

    https://templates.mailchimp.com/resources/inline-css/

    Зображення зберегти

    https://imgbb.com/

    для плейсхолдера зображень

    https://placehold.co/

  • Front-end Style Guide

    Відступи та форматування:

    editorconfig

    Ось інструкції щодо застосування файлу .editorconfig для кожного з вказаних вами редакторів:

    Для PhpStorm і WebStorm:

    1. Помістіть файл .editorconfig в кореневу теку вашого проекту, якщо його ще немає.

    2. Відкрийте ваш проект в PhpStorm або WebStorm.

    3. У налаштуваннях редактора знайдіть розділ "Editor" (редактор) або "Code Style" (стиль коду).

    4. У налаштуваннях редактора знайдіть розділ "File and Code Templates" (шаблони файлів і коду).

    5. Переконайтеся, що опція "Enable EditorConfig support" (увімкнути підтримку EditorConfig) увімкнена.

    6. PhpStorm і WebStorm автоматично застосують налаштування з файлу .editorconfig при відкритті файлів проекту.

    Для Visual Studio Code (VSCode):

    1. Переконайтеся, що встановлено розширення "EditorConfig for VS Code". Якщо його немає, встановіть його з магазину розширень.

    2. Помістіть файл .editorconfig в кореневу теку вашого проекту, якщо його ще немає.

    3. Відкрийте ваш проект в VSCode.

    4. VSCode автоматично застосує налаштування з файлу .editorconfig при відкритті файлів проекту.

    Якщо ви хочете перевірити, чи застосовуються налаштування з файлу .editorconfig, ви можете відкрити файл в VSCode та перевірити, чи відповідають відступи та інші стилі вказаним у .editorconfig.


    Щоб файли автоматично форматувалися відповідно до налаштувань з .editorconfig під час коміту. Для цього ви можете використовувати вбудовані інструменти для роботи з git та налаштування кодування. Ось як це зробити:

    Налаштування кодування:

    В вашому редакторі (WebStorm або PhpStorm):

    1. Відкрийте налаштування (Settings).

    2. В розділі Editor (або Code Style) переконайтеся, що налаштування кодування відповідають вашим вимогам. Якщо потрібно, ви можете налаштувати відступи, стиль коду та інші параметри.

    3. Переконайтеся, що опція "Detect and use existing file indents for editing" вимкнена, щоб редактор не використовував вже існуючі відступи в файлах.

    4. Збережіть зміни.

    Налаштування автоматичного форматування під час коміту:

    1. У налаштуваннях редактора перейдіть до розділу Version Control (або VCS).

    2. Виберіть Git (або іншу систему керування версіями, яку ви використовуєте).

    3. Переконайтеся, що опція "Reformat code" увімкнена для комітів (вона повинна бути позначена галочкою).

    4. Також переконайтеся, що опція "Perform code analysis" увімкнена, щоб також виконувалися аналізи коду під час коміту.

    5. Збережіть зміни.

    Тепер, коли ви робите коміт у вашому репозиторії, файли будуть автоматично відформатовані відповідно до налаштувань з .editorconfig перед тим, як вони будуть зафіксовані. Це забезпечить однорідність стилю коду у вашому проекті та покращить читабельність коду для вас та ваших колег.


    Ви можете налаштувати Visual Studio Code (VSCode) так, щоб файли автоматично форматувалися відповідно до налаштувань з файлу .editorconfig при коміті. Для цього вам знадобиться розширення, яке автоматично виконує форматування, наприклад, EditorConfig for VS Code. Ось як це зробити:

    1. Встановлення розширення:

      • Відкрийте VSCode та перейдіть у Магазин розширень (Extensions).

      • Введіть "EditorConfig" у поле пошуку та знайдіть розширення EditorConfig for VS Code.

      • Клацніть "Install" для встановлення розширення.

    2. Налаштування розширення:

      • Перейдіть у налаштування VSCode, натиснувши на іконку шестеренки у лівому нижньому куті та оберіть "Settings".

      • У полі пошуку введіть "format on save" та переконайтеся, що опція "Editor: Format On Save" встановлена в значення "on". Це дозволить автоматично форматувати файли при збереженні.

      • Поверніться до налаштувань та знайдіть "Editor: Default Formatter" (Редактор: Стандартний форматувальник). Виберіть "EditorConfig" зі списку форматувальників.

      • Збережіть налаштування.

    Тепер, коли ви зберігаєте файл у VSCode, він буде автоматично форматуватися відповідно до налаштувань з файлу .editorconfig. Це полегшить підтримку стилю коду в вашому проекті та зробить вашу роботу більш зручною.

    Найменування класів та ідентифікаторів:

    • Використовуйте осмислені імена класів та ідентифікаторів, які відображають їх призначення чи вміст.

    • Уникайте використання надто загальних або надто специфічних імен.

    • Використовуєм методологію БЕМ https://ru.bem.info/methodology/quick-start/

    • Обов’язковий моменд додавати унікальний клас на саму секцію виходячи з назви до прикладу: .info__section

    • Зараз на беку виділення кольору частини серед заголовку підставляє тег <mark> замість <span> (як ми звикли), якщо треба змінити font-weight: для частини заголовку – використовуєм <strong>

    <section class="info info_black" id="infoSection">
        <div class="container">
            <div class="info__row">
                <div class="info__content">
                    <h1 class="h1-title">Don't let <mark>your pet get</mark> fleas and worms.</h1>
                    <h2 class="h1-title">Don't let your pet get fleas and worms.</h2>
                    <p>Get individually tailored treatments direct from your trusted vet.</p>
                    <a href="" class="btn btn_large btn_primary">Get started</a>
                </div>
                <div class="info__img">
                    <img src="images/img01.jpg" width="300" height="250"  alt="img">
                </div>
            </div>
        </div>
    </section>

    Виділю що для майже в усіх тайтлів повинен бути свій клас від .h1-title … .h6-title

    h1, .h1-title {
      font-weight: 800;
      font-size: 75px;
      line-height: 100%;
      text-transform: uppercase;
    }
    h2, .h2-title {
      font-weight: 800;
      font-size: 75px;
      line-height: 100%;
      text-transform: uppercase;
    }
    
    ...
    
    .info {
      &__row {
      }
      &_right {
      
      }
    }

    для дескріпшинів типу які відрізняються від звичайної <p>, можна використовувати .sub-title_large, .sub-title_small

    Угруповання та порядок правил CSS/SCSS:

    • Групуйте правила CSS логічно за функціональністю.

    • Підтримуйте єдиний порядок властивостей у правилах CSS, наприклад спочатку позиціонування, потім відображення, потім друкарня і т.д.

    • використовуйте @mixin з нашої збірки, усі px перекладайте у rem

    Важливим моментом є те що в admin.scss повинен додаватися весь css з фронта (усі секції, базові стилі і тд)

    Снимок экрана 2024-04-18 в 10.38.26.png

    /* Приклад SCSS згідно БЕМ та попередього прикладу */
    .info {
      border-top: 1px solid #000;
      &__row {
        position: relative;
        display: flex;
        flex-direction: column;
        font-size: 16px;
      }
      &__content {
        padding: 12px;
      }
      &__img {
        max-width: 400px;
        img {
          display:block;
        }
      }
    }

    image (4)-20240315-100529.png

    Коментарі:

    • Використовуйте коментарі, щоб пояснити складні або ключові частини коду.

    • Позначте тимчасові рішення або області для покращення коментарів TODO або FIXME.

    /* Приклад CSS */
    /* TODO: Додати стилі для мобільних пристроїв */
    .selector {
        property: value;
    }
    <!-- Приклад HTML -->
    <!-- FIXME: Необхідно виправити вирівнювання -->
    <div class="container">
      <p>Text</p>
    </div>
    // Приклад для JS
    // тут ми додаємо віскі
    for(let i = 0; i < 10; i++) {
      let drop = getWhiskey();
      smell(drop);
      add(drop, glass);
    }
    • Робіть css змінні  для root в файлі _variable.scss де потім перевизначте у scss змінні для зручності

    :root {
      --color-primary: #235ad1;
    }
    $primary: var(--color-primary);
    

    Класи для JS

    • Основні елементи до яких буде звернення та анімування з використанням JS треба дописувати спеціальний js-class

    • Використовуйте осмислені імена класів та ідентифікаторів, які відображають їх призначення чи вміст.

    • Уникайте використання надто загальних або надто специфічних імен.

    • До цих класів СSS стилі не використовуєм !!!

     <div class="faq__item">
        <div class="faq__header h3-title js-accordion-header active">What are the premium benefits?</div>
        <div class="faq__body js-accordion-body">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
    </div>
    
    //faq
    $('.js-accordion-header').on('click', function () {
        $(this).toggleClass('active').siblings('.js-accordion-body').slideToggle();
    })

    Компонентний підхід

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

    Суть підходу що на кожну Секцію потрібен свій JS CSS та шаблон HTML/PHP

    Всю цю базову розбивку ви побачите у нашому стартовому проекті

    Снимок экрана 2024-04-17 в 14.46.51.png

    Снимок экрана 2024-04-17 в 14.46.05.png

    Треба зазначити що зараз в нашій збірці працює така логіка, якщо файл scss або js названий без “_“ або “-“ то цей файл автоматично буде утворювати на виході окремий свій css або js файл з додатком назви папки

    For example:
    якщо назвати файл main.scss то на виході отримаєте main.css
    якщо назвати файл в папці section hero.scss то на виході отримаєте section-hero.css

    якщо назвати файл _main.scss то на виході ви нічого не отримаєте

    Снимок экрана 2024-04-18 в 10.04.31.png

    .js/.css для фронт підключення .min.js/.min.css для бекендів

    Підключення картинок має відбуватись з папки assets/img – туда потрапляють оптимізовані картинки з папки src/img, тобто оригінал заливаєм у src/img, в assets/img вони потрапляють самі при старті збірки на webpack

    Приклад розмітки home.php

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    	<meta charset="UTF-8">
    	<title>Home</title>
    	<?php include('../components/head/_head.php') ?>
    	<link rel="stylesheet" href="../assets/libs/swiper/swiper.min.css" />
    	<link rel="stylesheet" href="../assets/css/element-swiper.min.css">
    	<link rel="stylesheet" href="../assets/css/element-articleCard.min.css">
    	<link rel="stylesheet" href="../assets/css/section-hero.min.css">
    	<link rel="stylesheet" href="../assets/css/section-steps.min.css">
    	<link rel="stylesheet" href="../assets/css/section-statistic.min.css">
    	<link rel="stylesheet" href="../assets/css/section-schedules.min.css">
    	<link rel="stylesheet" href="../assets/css/section-diagram.min.css">
    	<link rel="stylesheet" href="../assets/css/section-hits.min.css">
    	<link rel="stylesheet" href="../assets/css/section-logos.min.css">
    </head>
    <body>
    	<!-- Use with element-menuToggler.min.js -->
    	<?php include('../components/header/_header.php') ?>
    	<main>
    		<?php include('../components/sections/hero.php') ?>
    		<?php include('../components/sections/steps.php') ?>
    		<?php include('../components/sections/statistic.php') ?>
    		<!-- Use with libs/swiper/swiper.min.css | element-swiper.min.css | libs/swiper/swiper.min.js -->
    		<?php include('../components/sections/schedules.php') ?>
    		<!-- Use with libs/chart/chart.min.js -->
    		<?php include('../components/sections/diagram.php') ?>
    		<!-- Use with libs/swiper/swiper.min.css | element-swiper.min.css | libs/swiper/swiper.min.js -->
    		<?php include('../components/sections/hits.php') ?>
    		<!-- Use with libs/swiper/swiper.min.css | element-swiper.min.css | libs/swiper/swiper.min.js -->
    		<?php include('../components/sections/logos.php') ?>
    		<!-- Use with libs/swiper/swiper.min.css | element-swiper.min.css | libs/swiper/swiper.min.js | element-articleCard.min.css -->
    		<?php include('../components/sections/news.php') ?>
    	</main>
    	<?php include('../components/footer/_footer.php') ?>
    	<script src="../assets/libs/swiper/swiper.min.js"></script>
    	<script src="../assets/libs/chart/chart.min.js"></script>
    	<script src="../assets/js/element-menuToggler.min.js"></script>
    	<script src="../assets/js/section-schedules.min.js"></script>
    	<script src="../assets/js/section-diagram.min.js"></script>
    	<script src="../assets/js/section-hits.min.js"></script>
    	<script src="../assets/js/section-logos.min.js"></script>
    	<script src="../assets/js/section-news.min.js"></script>
    </body>
    </html>

    Важливо зазначити що для кожної секції повинен бути коментар з використанням js/css якщо в ній є більше ніж 1 по назві секції js/css

    Підключення скриптів та стилів повинно бути в такій послідовності бібліотеки → елементи → секції

    Використання svg для іконок

    <svg id="test" class="icon">
        <use href="../assets/icons/sprite.svg?v=1#cloud-fog-svgrepo-com"></use>
    </svg>

    Іконки svg додаються в папку src/icons/ потім треба згенерувати спрайти з них, або перезавантажте збірку вебпак або в окремій консолі npm run prod
    На виході отримаєм одну svg іконку /assets/icons/sprite.svg в якій усі дефолтні fill / stroke переписуються на currentColor
    айді спрайта = назві іконки в src/icons/

    також обовʼязково додаєм .icon { fill: currentColor; stroke: currentColor;}

    Тепер достатньо родичу прописати color: red; і іконка успадковує цей колір

    ?v=1 – використовується для того щоб не кешувався спрайт, бо зазвичай на нього впливає дуже сильне кешування

    Використання нашого uiKit

    У папці frontend > ui-library > components буде знаходитись все що ми накопичили з нашого досвіду.
    Усі ці скрипти обовʼязкові до використання або як база для ваших більш складних.

    Зауважу на таких файлах як:

    • cf7-example.html

    • header.html

    • pagination.html

    • breadcrumbs.html

    Ці заготовлені структури повинні використовуватись у всіх проектах під WordPress для швидкого адаптуання беків

    CheckList перевірки проекту для продакшена

    1. Перевірка на PixelPerfect

    2. Кроссбраузерність:

      • Перевірте, що верстка коректно відображається в останніх версіях основних браузерів (Chrome, Firefox, Safari, Edge).

      • Переконайтеся, що верстка також працює в старих версіях браузерів, якщо це потрібно.

    3. Відгук на різні розміри екрану (Responsive Design):

      • Перевірте, що верстка адаптується під різні розміри екранів (мобільні пристрої 320-767, планшети 768-1280, десктопи 1280++). Рекомендую завантажити https://responsively.app/

      • Переконайтеся, що контент коректно масштабується і розташовується на різних пристроях.

      • Кращім варіантом проклацати сайт на своєму смартфоні або використати https://www.lambdatest.com/lp/automation-testing

    4. Валідність коду:

      • Перевірте HTML та CSS код на відповідність стандартам W3C. https://validator.w3.org/

      • Переконайтеся, що немає помилок та попереджень у консолі розробника.

    5. Семантичність HTML:

      • Перевірте, що HTML елементи використовуються згідно їх семантичного призначення (наприклад, використання заголовків <h1>, <h2>, списків <ul>, <ol> тощо).

    6. Оптимізація зображень:

      • Перевірте, що зображення оптимізовані для мінімального часу завантаження сторінки.

      • Використовуйте сучасні формати зображень, та які ідеально підходять для кожного з використань.

    7. Тестування інтерактивності:

      • Переконайтеся, що всі інтерактивні елементи (кнопки, посилання, меню тощо) працюють коректно.

      • Перевірте анімації та ефекти на відповідність дизайну та продуктивності.

      • Coverage https://developer.chrome.com/docs/devtools/coverage?hl=ru

      • якщо дизайном не було передбачено ховери або інші положення, то або узгоджуйте с PM або робіть дефолтні ( як приклад для ховеру opacity:0.8)

    8. Підтримка ретіни:

      • Переконайтеся, що зображення підтримують пристрої з високою щільністю пікселів (Retina) і виглядають чітко на таких екранах. ()

    9. SEO-оптимізація:

      • Перевірте, що ключові елементи для SEO (метатеги, заголовки сторінок, альтернативні тексти для зображень тощо) присутні і відповідають вимогам.

    10. Кроссплатформена сумісність:

      • Переконайтеся, що верстка коректно відображається на різних операційних системах (Windows, macOS, Linux, iOS, Android тощо).

    11. Тестування на реальних даних:

      • Перевірте, що верстка коректно відображається з реальними даними та контентом, включаючи довгі тексти, зображення різного розміру тощо.

    12. Перевірка швидкості завантаження:

      • Використовуйте інструменти для аналізу продуктивності та швидкості завантаження сторінки (наприклад, Google PageSpeed Insights) та оптимізуйте верстку для швидкого завантаження.

      • або в випадках коли сайт заблокований від інших використовуйте LightHouse https://prnt.sc/s6XEeAfAShP-

    13. Обовʼязкове додавання favicon

      • favicon повинна бути підключена окремо в папці assets/favicon з розширенням .png та розміром 512 на 512, підключення всього 1 раз, інші вже зроблять на беку

    Після ретельної перевірки всіх вищезазначених пунктів можна вважати, що верстка готова до розгортання на продакшн.

    База корисних знань: