Як я можу використовувати власні палітри тем у Angular?


97

Я хочу використовувати кольори бренду моєї компанії в усьому додатку.

Я знайшов цю проблему: AngularJS 2 - Дизайн матеріалу - встановіть палітру кольорів, де я можу створити нібито власну тему, але в основному це просто використання різних частин заздалегідь побудованих палітр. Я не хочу використовувати заздалегідь визначені кольори Material2. Я хочу свої унікальні та особливі фірмові кольори. Чи є кращий спосіб (простіший?) Створити власну тему, ніж просто хакнути _palette.scss?

Чи потрібно робити суміш для своєї палітри бренду? Якщо так - будь-які вказівки щодо того, як це зробити правильно? Які значення мають різні відтінки кольорів (позначені цифрами, такими як: 50, 100, 200, A100, A200 ...)?

Будь-яка інформація про цю область буде дуже вдячна!



@anshuVersatile Дякуємо за внесок! Тепер я розумію нумерацію. Дуже вдячний :-)
Narxx 03

Відповіді:


245

Після деяких досліджень я закінчив цей висновок, який вирішив це для мене, сподіваюся, це допоможе і вам.

Крок 1. Створіть власні палітри з кольорів фірмових символів.

Знайшов цей чудовий веб-сайт, де ви вводите колір бренду, і він створює повну палітру з різними відтінками цього бренду: http://mcg.mbitson.com

Я використовував цей інструмент як для свого primaryкольору (що є кольором моєї марки), так і для accentкольору.

Крок 2: Створіть палітри у своєму користувацькому файлі теми

ось посібник зі створення такого .scssфайлу: https://github.com/angular/material2/blob/master/guides/theming.md

@import '~@angular/material/theming';

// Be sure that you only ever include 'mat-core' mixin once!
// it should not be included for each theme.
@include mat-core(); 

// define a real custom palette (using http://mcg.mbitson.com)
$bv-brand: (
    50: #ffffff,
    100: #dde6f3,
    200: #b4c9e4,
    300: #7fa3d1,
    400: #6992c9,
    500: #5282c1,
    600: #4072b4,
    700: #38649d,
    800: #305687,
    900: #284770,
    A100: #ffffff,
    A200: #dde6f3,
    A400: #6992c9,
    A700: #38649d,
    contrast: (
        50: $black-87-opacity,
        100: $black-87-opacity,
        200: $black-87-opacity,
        300: $black-87-opacity,
        400: $black-87-opacity,
        500: white,
        600: white,
        700: white,
        800: white,
        900: white,
        A100: $black-87-opacity,
        A200: $black-87-opacity,
        A400: $black-87-opacity,
        A700: white,
    )
);

$bv-orange: (
    50: #ffffff,
    100: #fff7f4,
    200: #fecdbd,
    300: #fc9977,
    400: #fc8259,
    500: #fb6c3b,
    600: #fa551d,
    700: #f44205,
    800: #d63a04,
    900: #b83204,
    A100: #ffffff,
    A200: #fff7f4,
    A400: #fc8259,
    A700: #f44205,
    contrast: (
        50: $black-87-opacity,
        100: $black-87-opacity,
        200: $black-87-opacity,
        300: $black-87-opacity,
        400: $black-87-opacity,
        500: white,
        600: white,
        700: white,
        800: white,
        900: white,
        A100: $black-87-opacity,
        A200: $black-87-opacity,
        A400: $black-87-opacity,
        A700: white,
    )
);

// mandatory stuff for theming
$bv-palette-primary: mat-palette($bv-brand);
$bv-palette-accent:  mat-palette($bv-orange);

// include the custom theme components into a theme object
$bv-theme: mat-light-theme($bv-palette-primary, $bv-palette-accent);

// include the custom theme object into the angular material theme
@include angular-material-theme($bv-theme);

Деякі пояснення наведеного вище коду

Цифри з лівого боку встановлюють "рівень" яскравості. За замовчуванням - 500 (що є справжнім відтінком мого брендового кольору / кольору акценту). Отже, у цьому прикладі колір мого бренду такий #5282c1. Решта - інші відтінки цього кольору (де нижчі цифри означають яскравіші відтінки, а вищі цифри означають темніші відтінки). Це AXXXрізні відтінки. Не впевнений (поки), де вони використовуються. Знову ж, менша цифра означає яскравішу, а вища цифра означає темнішу.

contrastВстановлює колір шрифту над цим кольором фону. Дуже важко (або навіть неможливо) розрахувати за допомогою CSS, де шрифт повинен бути яскравим (білим) або темним (чорний з непрозорістю 0,87), тому його легко читати навіть для дальтоніків. Отже, це встановлено вручну та жорстко закодовано у визначенні палітри. Ви також отримуєте це з генератора палітр, який я зв'язав вище (хоча він виводиться у старому форматі Material1, і вам доведеться вручну перетворити його у формат Material2, як я розмістив тут).

Встановіть тему, щоб використовувати кольорову палітру бренду як primaryколір, а будь-що для акценту - як ваш accentколір.

Крок 3: використовуйте тему в усьому додатку, де б ви не могли

Деякі елементи можуть взяти кольору теми, як <md-toolbar>, <md-input>, <md-button>, <md-select>і так далі. Вони використовуватимуть primaryза замовчуванням, тому обов’язково встановіть палітру кольорів бренду як основну. Якщо ви хочете змінити колір, використовуйте colorдирективу (це директива Angular?).

Наприклад:

<button mat-raised-button color="accent" type="submit">Login</button>


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

1
Так, я просто спробував це, і це спрацювало. Єдине, що змінилося - це частина імпорту. Вам не потрібні змінні, і ви лише імпортуєте / включаєте файли @import '~@angular/material/theming'; @include mat-core();
тематики

1
Подивіться на цю статтю, вона дуже добре пояснює, як все це працює blog.thoughtram.io/angular/2017/05/23/…
Мартін Андерсен

1
@TrevorGoodchild, чесно кажучи, ми застаріли наш проект Angular і написали його з нуля, використовуючи VueJS, тому я навіть не пам'ятаю, як ми в кінцевому підсумку визначили тему в Angular :) Просто спробуйте додати більше змінних кольорів і додати їх усіх на функцію теми матового світла.
Narxx

1
@Narxx Відповідно до наведеної нижче відповіді, значення AXXX призначені для плаваючих кнопок дії та інтерактивних елементів із знаком "А", що означає "Акцент". graphicdesign.stackexchange.com/a/69470
Тревор Каряніс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.