Описание

# Установка, подключение

Установка в проект:
npm i goodt-framework-css --save
npm i less --save-dev
npm i less-loader --save-dev
Подключение в проекте:
// ваш <enty-point>.js
import 'goodt-framework-css/src/_all.less'
Stand-alone сборка:
npm run build

# Структура

Описание директории .src/
components/... набор компонентов
_all.less точка входа, собирает все части фреймворка воедино
_helpers.less набор вспомогательных примесей
_params.less основные параметры всего фреймворка, используются всеми частями фреймворка
grid.less отзывчивая flex сетка 5%, 1/12, 1/24
typography.less базовые стили, типографика
utility.less набор вспомогательных классов "утилит"

# Компоненты

Компонент условно делится на три части

[1] параметры параметры, которые использует компонент
[2] хуки встроенные в стили компонента хуки, которые позволяют внедрять кастомный стиль в то или иное правило компонента
[3] стиль стиль компонента, описывающий внешний вид компонента, используя параметры и хуки

Пример компонента

components/example.less
// [1] параметры, которые использует компонент
@example-font-size: .8rem;
@example-line-height: 1.5;
@example-padding: @spacer3 @spacer4;
@example-color: @color-white;
@example-background: @color-body;

// [2] хук, вызываемый в стиле компонента; позволяет переопределить стиль компонента
.hook-example() {}

// [3] стиль
.example {
    position: relative;
    display: inline-block;
    vertical-align: middle;
    padding: @example-padding; // <-- использование параметров [1]
    color: @example-color;
    font-size: @example-font-size;
    line-height: @example-line-height;
    background: @example-background;
    .hook-example(); // <-- вставка хука [2]
}

# Кастомизация

Для кастомизации необходимо импортировать точку входа _all.less в свой .less файл, далее можно уже переопределить любой параметр фреймворка в тч элементов или компонентов; или переопределить стили используя хуки.
Пример: my-theme.less
// импорт фреймворка
@import './<путь>/_all.less';

// переопределяем базовые параметры, используемые всеми частями фреймворка из ~ params.less
@font-family: Helvetica, Arial, sans-serif;
@font-family-headings: Helvetica, Arial, sans-serif;
@font-size: 16px;

// переопределяем параметры конкретного компонента  ~ components/toast.less
@toast-font-size: 1rem;
// используем хук компонента ~ toast.less
.hook-toast() {
    display: inline-flex; // <-- переопределяет "display", который изначально в компоненте "inline-block"
}

# Система отступов

В фреймворке реализована система отступов, которая используется для задания padding и margin
Отступы разделены на две группы: @spacer и @spacer-layout. Отступы расчитываются от базового значения 16px
Таблица отступов
название значение итог
@spacer1 0.125 2px
@spacer2 0.25 4px
@spacer3 0.5 8px
@spacer4 0.75 12px
@spacer5 1 16px
@spacer6 1.5 24px
@spacer7 2 32px
@spacer8 2 40px
@spacer9 2 48px
@layout-spacer1 1 16px
@layout-spacer2 1.5 24px
@layout-spacer3 2 32px
@layout-spacer4 3 48px
@layout-spacer5 4 64px
@layout-spacer6 6 96px
@layout-spacer7 10 160px

# Responsive

Фреймворк позволяет делать отзывчивые (responsive) интерфейсы засчет наличия отзывчивой сетки и набора утилит и хелперов.
Отзывчивость достигается за счет деления всех разрешений экранов по ширине на условные группы — {viewport}.
Утилиты, css-классы, которые поддерживают работу с режимами отзывчивости помечены responsive и имеют базовый вид:
.{viewport}-{classname}

// например
.s-text-small

// где
// {viewport} — s
// {classname} — text-small
Для использования групп {viewport} в кастомных компонентах или классах используйте less хелпер .media
@import './<путь>/_helpers.less'
// пример использования .media хелпера
.my-class {
    font-size: 1rem;
}
.media(@viewport-s, .my-class {
    font-size: .9rem;
})

# Viewport

Как было сказано выше, все разрешения экранов разбиты по ширине на {viewport}; ниже показан их список.
less переменная название {viewport} ширина экрана приоритет
самый низкий
@viewport-xl xl 0 - 1280px отменяет default
@viewport-l l 0 - 1024px отменяет xl default
@viewport-m m 0 - 840px отменяет l xl default
@viewport-s s 0 - 640px отменяет m l xl default

# Css переменные

Ниже приведен список доступных css переменных фреймворка (элемента :root)
css переменная значение
--viewport-xl 1280px
--viewport-l 1024px
--viewport-m 840px
--viewport-s 640px
--ratio-scaling-enabled false
--ratio-scaling-viewport-min-width 1600px
--container-max-width 1100px
--font-family 'PTRootUIWebRegular',Helvetica,Arial,sans-serif
--font-family-headings 'PTRootUIWebRegular',Helvetica,Arial,sans-serif
--font-size-base 16px
--font-size-h1 3rem ~ 48px
--h1-line-height 3.75rem ~ 60px
--h1-margin-bottom 2rem ~ 32px
--font-size-h2 2rem ~ 32px
--h2-line-height 2.5rem ~ 40px
--h2-margin-bottom 1.5rem ~ 24px
--font-size-h3 1.5rem ~ 24px
--h3-line-height 1.875rem ~ 30px
--h3-margin-bottom 1rem ~ 16px
--font-size-h4 1.125rem ~ 18px
--h4-line-height 1.4375rem ~ 23px
--h4-margin-bottom .5rem ~ 8px
--font-size-xsmaller .75rem ~ 12px
--font-size-smaller .875rem ~ 14px
--font-size-larger 1.125rem ~ 18px
--line-height 1.5
--color-body #2c2c2c
--color-link #1a67fe
--color-link-dark #013cb1
--color-link-light #80aafe
--color-link-focus rgba(26,103,254,0.3)
--color-link-hover #0156fd
--color-primary #1a67fe
--color-primary-dark #013cb1
--color-primary-light #80aafe
--color-primary-focus rgba(26,103,254,0.3)
--color-primary-hover #0156fd
--color-red #ed5564
--color-red-dark #c71527
--color-red-light #f7b1b8
--color-red-focus rgba(237,85,100,0.3)
--color-red-hover #eb3e4f
--color-green #0acf83
--color-green-dark #056e45
--color-green-light #49f6b3
--color-green-focus rgba(10,207,131,0.3)
--color-green-hover #09b774
--color-blue #5e9dec
--color-blue-dark #1868cc
--color-blue-light #b9d5f7
--color-blue-focus rgba(94,157,236,0.3)
--color-blue-hover #478fe9
--color-yellow #f7c844
--color-yellow-dark #cc9909
--color-yellow-light #fbe5a6
--color-yellow-focus rgba(247,200,68,0.3)
--color-yellow-hover #f6c12c
--color-orange #ff994d
--color-orange-dark #e66200
--color-orange-light #ffd3b3
--color-orange-focus rgba(255,153,77,0.3)
--color-orange-hover #ff8a33
--color-grey #999
--color-grey-dark #666
--color-grey-light #dcdcdc
--color-grey-lighter #f6f6f6
--color-white #fff
--color-black #000
--color-muted #dcdcdc
--color-disabled #eee
--color-disabled-dark #c8c8c8
--color-border #eee
--color-highlight #ffd
--color-focus rgba(26,103,254,0.3)
--color-scrollbar #ccc
--border-radius .25rem ~ 4px
--border-radius1 .25rem ~ 4px
--border-radius2 .5rem ~ 8px
--border-radius3 1rem ~ 16px
--border-radius4 2rem ~ 32px
--border-radius5 4rem ~ 64px
--unit .5rem ~ 8px
--spacer 1rem ~ 16px
--spacer1 .125rem ~ 2px
--spacer2 .25rem ~ 4px
--spacer3 .5rem ~ 8px
--spacer4 .75rem ~ 12px
--spacer5 1rem ~ 16px
--spacer6 1.5rem ~ 24px
--spacer7 2rem ~ 32px
--spacer8 2.5rem ~ 40px
--spacer9 3rem ~ 48px
--spacer-layout1 1rem ~ 16px
--spacer-layout2 1.5rem ~ 24px
--spacer-layout3 2rem ~ 32px
--spacer-layout4 3rem ~ 48px
--spacer-layout5 4rem ~ 64px
--spacer-layout6 6rem ~ 96px
--spacer-layout7 10rem ~ 160px
--width-fixed 8rem ~ 128px
--width-fixed1 8rem ~ 128px
--width-fixed2 16rem ~ 256px
--width-fixed3 24rem ~ 384px
--width-fixed4 32rem ~ 512px
--width-fixed5 40rem ~ 640px
--width-fixed6 48rem ~ 768px
--width-fixed7 56rem ~ 896px

# Less переменные

Ниже приведен список доступных less переменных фреймворка
core
переменная значение
components