Чого можна досягнути з допомогою CSS змінних і неможливо зробити використовуючи препроцесори

4 хв. читання
23 листопада 2021

Зараз дуже популярним є використання препроцесорів для CSS: Less, Saas, Stylus. Основною причиною широкого застосування цих інструментів є можливість роботи зі змінними. Проте, після компіляції в звичайний CSS, всі значення є статичними.

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

Давайте розглянемо все це більш детально.

Теми сайту без CSS змінних

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

    .red-theme .primary-color {
      color: #801515;
    }
     
    .red-theme .primary-color-bg {
      background-color: #801515;
    }
     
    .red-theme .secondary-color {
      color: #D46A6A;
    }
     
    .red-theme .secondary-color-bg {
      background-color: #D46A6A;
    }
     
    .red-theme .tertiary-color {
      color: #AA3939;
    }
     
    .red-theme .tertiary-color-bg {
      background-color: #AA3939;
    }

Це призводить до 6 окремих селекторів в результуючому CSS - і це тільки для однієї теми. На додаток до цього, вам буде потрібно розмістити класи по всій розмітці або додати явні селектори в стилі CSS теми, які не дуже зручно "обслуговувати". Обидва способи не є ефективним рішенням проблеми.

Це значить:

    <h1 class="tertiary-color">For Example</h1>
    <button class="primary-color-bg">A button</button>
    <a class="secondary-color">A link</a>

Або:

    .red-theme .primary-color-bg,
    .red-theme button {
      background-color: #801515;
    }
     
    .red-theme .secondary-color,
    .red-theme a {
      color: #D46A6A;
    }
     
    .red-theme .tertiary-color,
    .red-theme h1 {
      color: #AA3939;
    }

Теми сайту з використанням CSS змінних

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

    .red-theme {
      --theme-primary: #801515;
      --theme-secondary: #D46A6A;
      --theme-tertiary: #AA3939;
    }
     
    button, a {
      background-color: var(--theme-primary);
      color: var(--theme-secondary);
    }
     
    h1 {
      color: var(--theme-tertiary);
    }

Це більш елегантне рішення проблеми. На додаток до цього, як згадувалося раніше, вони обмежені областю, тому нічого не заважає нам, використовуючи різні теми, скажімо, для панелі навігації.

      <nav class="blue-theme">
        <button>Blue button</button>
      </nav>
      <main>
        <button>Red button</button>
      </main>

Додаткові способи використання

Є купа додатків, де CSS змінні можуть розширити можливості препроцессорів. Інший приклад реалізації системи відстаней, подібної до Gmail. Вона дозволяє користувачеві вибрати варіант відображення інтерфейсу користувача.

    .compact {
      --option-padding: 0.1em 0.2em;
    }
     
    .cosy {
      --option-padding: 0.3em 0.6em;
    }
     
    .comfortable {
      --option-padding: 0.5em 1em;
    }
     
    .list-item {
      padding: var(--option-padding);
    }

Браузерна підтримка

На жаль, підтримка CSS змінних здійснються лише останньою версією Firefox та Firefox для Android.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.6K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація