CSS
Типографика
В данный момент Дизайн-Система не предоставляет атомы гайдлайна в виде утилитарных классов CSS для типографики. Используйте поставленный компонент Text.
<!-- Так делать больше не надо! -->
<span class="my-custom-class-for-typography">Я продолжаю верстать как хочу!</span>
<!-- Так правильно! -->
<ds-text token="mascarpone" color="harakiri" value="Я использую компоненты ДС!"></ds-text>Палитра, нерозрачности и скругления
Вы можете использовать CSS Custom Properties для нанесения цветов, прозрачностей и скруглений по гайду на любые элементы в вашей верстке. С помощью компонента Theme можно переключать темы.
/* Custom Properties */
:root {
/* Скругления */
--jade: 0;
--akbu: 2px;
--rajol: 4px;
--theku: 6px;
--bana: 8px;
--sylilis: 12px;
--kurza: 16px;
--eluno: 20px;
--geban: 24px;
--nemea: 32px;
/* Непрозрачности */
--odo: 1;
--pake: 0.96;
--pudre: 0.88;
--tesa: 0.8;
--ekas: 0.72;
--zeton: 0.64;
--qarta: 0.56;
--anie: 0.48;
--puzo: 0.4;
--biqe: 0.32;
--hemza: 0.24;
--sedra: 0.16;
--dere: 0.12;
--kima: 0.08;
--imi: 0;
}
.selector {
color: var(--harakiri);
opacity: var(--ekas);
border-radius: var(--bana);
}Тени
Тени предоставляются в виде классов CSS на разметку. Требует подключения глобальных стилей библиотеки.
.bigShadow,
.bigShadowStatic {
box-shadow: 0 8px 32px 0 var(--hamilton);
}
.bigShadow:hover {
box-shadow: 0 8px 32px 0 var(--hamiltonHover);
}
.bigShadow:active {
box-shadow: 0 8px 32px 0 var(--hamiltonPressed);
}
.mediumShadow,
.mediumShadowStatic {
box-shadow: 0 4px 16px 0 var(--hamilton);
}
.mediumShadow:hover {
box-shadow: 0 4px 16px 0 var(--hamiltonHover);
}
.mediumShadow:active {
box-shadow: 0 4px 16px 0 var(--hamiltonPressed);
}
.smallShadow,
.smallShadowStatic {
box-shadow: 0 4px 4px -2px var(--hamilton);
}
.smallShadow:hover {
box-shadow: 0 4px -2px 0 var(--hamiltonHover);
}
.smallShadow:active {
box-shadow: 0 4px -2px 0 var(--hamiltonPressed);
}
.zelipea {
box-shadow: 0 2px 8px 0 var(--rockyOpacity);
}
.kalypise {
box-shadow: 0 2px 8px 0 var(--matrixOpacity);
}
.ambrosia {
box-shadow: 0 2px 8px 0 var(--lebowskiOpacity);
}
.meilitae {
box-shadow: 0 2px 8px 0 var(--fargoOpacity);
}
.asteria {
box-shadow: 0 2px 8px 0 var(--gentelmenOpacity);
}
.menodice {
box-shadow: 0 2px 8px 0 var(--metropolisOpacity);
}
.pontoporeia {
box-shadow: 0 2px 8px 0 var(--fightclubOpacity);
}
.plephione {
box-shadow: 0 2px 8px 0 var(--aquamanOpacity);
}
.leuciphia {
box-shadow: 0 2px 8px 0 var(--goodfellasOpacity);
}
.creasi {
box-shadow: 0 0 0 4px var(--avengers);
}
.mango {
box-shadow: 0px 0px 4px 0px var(--shindler);
}Утилитарные классы для адаптивной разметки
Дизайн-Система предоставляет полезные утилитарные классы для быстрого "дублирования" вариантов разметки в шаблоне на различных стандартных типоразмерах. Этот раздел документации призван максимально доступно обьяснить что это, и как это можно использовать.
Предположим, вы верстаете красивый лендинг, и поведение различных крупных блоков, или даже просто переносы в текстовом контенте, очень сильно отличается на графических прототипах для разных устройств и экранов. Разрабочик ДС, на своем продолжительном опыте в верстке, достоверно выяснил, что некоторые подобные требования, не то что намного проще, но иногда даже практически невозможно реализовать "без какого-то такого стандартного средства". Доставлять их "с помощью джаваскрипта" и утилитарной функции Screen, о который было рассказано в разделе Основное документации - кажется излишним и неудобным (хотя при желании и допустимо, конечно). Вот тут нам на помощь приходит CSS.
Вам доступно использование утилитарных классов, надежно переключающих видимость элементов с учетом их типа отображения и типоразмеров обьявленных в гайдлайне. Селекторы формируются по простому соглашению:
.[видимость элемента]--[тип отображения элемента]--[типоразмер]Списки доступных значений:
$visibility = "visible" "hidden"
$displayType = "block" "inline-block" "inline" "flex" "inline-flex" "grid"
$screenType = "widest" "wide" "not-gadgets" "middle" "narrow" "gadgets" "not-narrow"Препроцессор в ДС генерирует следующие конструкции для всех возможных сочетаний этих значений:
@media only screen and (min-width: 1360px) {
.visible--block--widest {
display: block !important;
}
}
@media only screen and (min-width: 1024px) and (max-width: 1359px) {
.visible--block--widest {
display: none !important;
}
}
@media only screen and (max-width: 1023px) {
.visible--block--widest {
display: none !important;
}
}
@media only screen and (min-width: 1360px) {
.hidden--block--widest {
display: none !important;
}
}
@media only screen and (min-width: 1024px) and (max-width: 1359px) {
.hidden--block--widest {
display: block !important;
}
}
@media only screen and (max-width: 1023px) {
.hidden--block--widest {
display: block !important;
}
}
/* И все остальные варианты сочетаний ... */Предположим, у вас есть кастомная сетка (элемент с типом отображения display: grid;), и макеты требуют перестроения порядка дочерних элементов на мобильных устройствах, смартфонах:
.grid-element {
diplay: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 0 24px;
}
@media only screen and (max-width: 599px) {
.grid-element {
grid-template-columns: 1fr;
gap: 16px 0;
}
}На всех десктопах и планшетах должен быть порядок дочерних блоков 1 - 2 - 3, а на наладонниках - 3 - 2 - 1, "дизайнеру так захотелось". Вы можете легко добиться этого, с помощью дублирования сетки в шаблоне и утилитарных классов переключающих видимость:
<div class="grid-element hidden--grid--narrow">
<div id="grid-block--1">A</div>
<div id="grid-block--2">B</div>
<div id="grid-block--3">C</div>
</div>
<div class="grid-element visible--grid--narrow">
<div id="grid-block--3">C</div>
<div id="grid-block--2">B</div>
<div id="grid-block--1">A</div>
</div>Что эквивалентно:
<ds-grid
class="visible--grid--not-narrow"
gap-widest="0 24px"
gap-wide="0 24px"
>
<div id="grid-block--1" slot="1">A</div>
<div id="grid-block--2" slot="2">B</div>
<div id="grid-block--3" slot="3">C</div>
</ds-grid>
<ds-grid
class="hidden--grid--not-narrow"
gap-middle="16px 0"
gap-narrow="16px 0"
columns-middle="1fr"
>
<div id="grid-block--3" slot="1">C</div>
<div id="grid-block--2" slot="2">B</div>
<div id="grid-block--1" slot="3">A</div>
</ds-grid>Или даже так, смотрите на порядок-имена слотов:
<ds-grid
gap-widest="0 24px"
gap-wide="0 24px"
gap-middle="0 24px"
gap-narrow="16px 0"
columns-middle="1fr 1fr 1fr"
>
<div class="visible--block--not-narrow" id="grid-block--1" slot="1">A</div>
<div class="visible--block--not-narrow" id="grid-block--2" slot="2">B</div>
<div class="visible--block--not-narrow" id="grid-block--3" slot="3">C</div>
<div class="hidden--block--not-narrow" id="grid-block--1" slot="3">A</div>
<div class="hidden--block--not-narrow" id="grid-block--2" slot="2">B</div>
<div class="hidden--block--not-narrow" id="grid-block--3" slot="1">C</div>
</div>В реальной ситуации ожидается, что вы будете использовать компонент сетки из ДС, но это, в любом случае, просто условный, максимально доступный и наглядный пример. Показывающий, что в некоторых ситуациях, вместо того чтобы, "писать много CSS ручками", намного проще и надежнее просто "взять пару готовых стилевых классов для адаптива из ДС".
Или еще один, крайне распрастраненный случай, где такие классы крайне удобны и эффективны - разный перенос и разрывы строки в простом тектовом потоке:
<div>
Платформа для автоматизации основных бизнес-процессов<br
class="hidden--inline--gadgets"
/><span class="hidden--inline--not-gadgets"> </span>ресурсоснабжающих
предприятий и создания единого<br class="hidden--inline--gadgets" /><span
class="hidden--inline--not-gadgets"
> </span
>информационного пространства.
</div>