oneClassLayout

oneClassLayout

Компилятор одноклассовой вёрстки. Одноклассовая вёрстка - один из способов снижения связанности стилей при вёрстке страницы, что делает вёрстку страницы простым и увлекательным занятием.

oneClassLayout (Одноклассовая вёрстка).

Компилятор одноклассовой вёрстки. Одноклассовая вёрстка - один из способов снижения связанности стилей при вёрстке страницы, что делает вёрстку страницы простым и увлекательным занятием.

Откуда появилась одноклассовая вёрстка?

При вёрстке любой страницы возникает очень неприятная вешь - зависимости между классами. И чем объёмная вёрстка, тем больше зависимостей возникает между классами элементов.

Если вы используете в атрибуте class микс классов и по задумке какой-то класс из этого микса должен заменить ("перекрыть") другой класс, у вас появляется такая неприятная зависимость, как место указания класса в файле стилей, когда нижестоящие классы перекрывают вышестоящие классы.

Уйти от такой зависимости позволяет использование одного класса у элемента. Такой подход к вёрстке называется одноклассовая вёрстка. В такой вёрстке единственный класс, указанный у элемента, наследует свойства из файла стилей.

Рассмотрим вёрстку:

<div class="m1 m3 m2">Мой текст</div>

Отображение элемента создают сразу три класса: m1, m2 и .m3. Если хоть в одном из представленных классов одно свойство переопределяет другое, то будет важен порядок указания класса в файле стилей.

.m1 {color: red}
.m2 {color: green}
.m3 {color: black}

В данном примере фраза Мой текст будет отображена черным цветом, так как класс .m3 указан последним.

Выходом из такой ситуации будет использование у элемента одного класса, который будет наследовать свойства из файла стилей.

Предположим, что вы хотите изменить уже готовый элемент, а именно, изменить цвет шрифта.

<div class="m">Мой текст</div>
.m {
  border: 1px solid green;
  color: red;
}

Обычно, при изменение нового элемента на основе старого, к классу элемента добавляют класс, в котором новое свойство перекрывает старое, например, вот так:

<div class="m z">Мой текст</div>
.m {
  border: 1px solid green;
  padding: 10px;
  color: red;
}
.z {color: black}

При одноклассовой вёрстке новый элемент будет таким:

<div class="z">Мой текст</div>
.m, .z {
  border: 1px solid green;
  padding: 10px;
}
.m {color: red}
.z {color: black}

Класс .z ничего не переопределяет, а только добавляет новые свойства. Это основное правило одноклассовой вёрстки: одноклассовая вёрстка должна добавлять новые свойства стилей, а не переопределять. Обратите внимание, что мы сначала определили, что наш модификатор должен изменить и указали цвет шрифта отдельно для каждого варианта.

Теперь, чтобы поменять только цвет шрифта, не затрагивая другие стили элемента, достаточно поменять класс .z на класс .m. Отсюда и появилось название - одноклассовая вёрстка, т.е. элемент может содержать только один класс.

Имена классов.

В одноклассовой верстке имена классов строятся из одного или нескольких слов. Если при указании имени класса используется несколько слов, то между словами ставят знаки дефиса. Если класс у элемента заменяется динамически на другой класс (например, при помощи javascript), то такой класс называется модификаторм.

Классы, которые наследуют свойства базового класса, но добавляют свои стили, называются модификаторами.

Примеры базовых стилей и модификаторов, унаследованных от базовых стилей:

.panel {
  border: 1px solid green;
  color: red;
}

Теперь создадим для базового класса модификатор:

.panel, .panel_color-black {
  border: 1px solid green;
}
.panel {
  color: red;
}
.panel_color-black {
  color: black;
}

Упрощение наследования в одноклассовой вёрстке.

Вы можите использовать принцип одноклассовой вёрстки, как было показано в примере выше, не применяя каких-либо специальных методов. Я же предлагаю вам воспользоваться простым методом, который позволит наследовать код стилей, а также применять заимствованные стили.

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

.имя_класса[перечень_имен_наследуемых_классов] {св-ва_для_добавления_или_изменения_наследуемых_свойств_класса}

Далее, такой код стилей необходимо подвергнуть компиляции при помощи встроенного компилятора. Делается это при помощи команды из терминала:

$ node compile.js

Давайте перепишем вышеприведённый код:

.m {
  border: 1px solid green;
  padding: 10px;
  color: red;
}
.z[.m] {color: black}

Здесь класс .z наследует все свойства класса .m, при этом, свойства, указанные в классе .z либо добавляются, либо заменяются при их совпадении. В итоге, применение класса .z на элементе, приведёт к тому, что текст будет показан черным цветом.

В скобках можно указывать множество классов, через запятую:

.z[.m,.p-all-3] {...}

Также можно заимствовать классы без добавления и изменения заимствованных свойств, для этого скобки {} нужно оставить пустыми.

Можно применять множественное последовательное наследование классов, когда следующий класс наследует предыдущий. Например:

.m {
  border' 1px solid green;
  padding: 10px;
  color: red;
}
.z[.m] {
  font-size: 2em;
}
.k[.z] {
  margin: 10px;
}

Класс .k, указанный самым последним, будет содержать все свойства классов .m, .z.

Заимствованные стили.

При вёрстке страницы очень часто пользователь сталкивается с применением одних и тех же свойств от проекта к проекту.

Файл templates.css содержит шаблоны стилей, которые во время компиляции могут быть скопированы в основной файл styles.css.

Указываются заимствованные стили точно также, как и было показано выше, используя квадратные скобки [] для обозначения заимствованных стилей классов.

Например, вы хотите стилизовать панель, но часть классов хотите заимствовать из файла заимствованных стилей:

.panel[.p-all-2, .c-1, .bc-1] {}

Классы, перечисленные, как заимствованные, будут взяты и унаследованы из файла templates.css.

Компиляция файлов стилей.

Итак, перед компиляцией стилей одноклассовой вёрстки необходимо подготовить файл styles.css для компиляции, а именно, внутри этого файла должны быть настройки для всего сайта, которые должны быть указаны в :root {}.

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

Также необходимо в виде значений в :root {} указать значения цветов, используемых на сайте.

Пример:

:root {
  /* Минимальная единица. */
  --side: 0.5em;

  --side-1: calc(var(--side) * 1);
  --side-2: calc(var(--side) * 2);
  --side-3: calc(var(--side) * 3);
  --side-4: calc(var(--side) * 4);
  --side-5: calc(var(--side) * 5);

  /* Цвета. */
  --color-1: #72DEC2;
  --color-2: #DE728E;
  --color-3: #C4DE72;
  --color-4: #8C72DE;
}