Николай Громов
Сеанс автоматической магии, делающей работу более быстрой, приятной и слегка
опасной.
Николай Громов. Внутренняя Монголия. Вечность, лето.
Вёрстка и модификация страниц.
Результат: HTML, CSS, JS, изображения, шрифты.
NTH-start-project/
build/ # результат сборки (редактировать файлы бессмысленно)
src/ # исходные файлы
src/
blocks/ # БЭМ блоки (каждый блок в своей подпапке)
favicon/ # иконки сайта (на вкладке браузера, для мобильных...)
fonts/ # шрифты
img/ # общие картинки (не завязанные на к-л БЭМ-блок)
js/ # общий javascript, не завязанный на к-л БЭМ-блок
pages/ # все страницы сайта
pug/ # доп. pug-файлы: раскладки, диспетчер примесей
scss/ # доп. стилевые файлы: переменные, диспетчер подключений
Разделение интерфейса на блоки, блоков на элементы.
<header class="page-header">
<div class="page-header__inner">
<a href="/" class="logo">
<svg class="logo__img">...</svg>
</a>
</div>
</header>
<div class="promo">
<div class="promo__inner slider">
<section class="slider__item">...</section>
<section class="slider__item">...</section>
<section class="slider__item">...</section>
</div>
</div>
<div class="catalog">
<div class="catalog__item">...<div>
<div class="catalog__item">
<article class="card">
<a class="card__wrap" href="...">
<img class="card__img" src="..." alt="Путеводитель по лжи">
<h2 class="card__title">Путеводитель по лжи</h2>
</a>
<p class="card__descr">Критическое мышление в эпоху постправды.</p>
<p class="card__price">630 ₽</p>
</article>
</div>
<div class="catalog__item">...<div>
...
</div>
cd /d/projects/SomeName
.npm start
(алиас s
).Пока сервер работает, проект можно просматривать с любого устройства в рамках локальной сети.
npm start
build/
src/pages/
в build/
src/scss/style.scss
.src/js/entry.js
.let config = {
'notGetBlocks': [], // Список файлов разметки, из которых не собирать блоки
'ignoredBlocks': [], // Список Блоков, которые никогда не брать в сборку
'alwaysAddBlocks': [], // Список блоков, которые всегда брать в сборку
'addStyleBefore': [], // Доп. стилевые файлы (брать в сборку до файлов блоков)
'addStyleAfter': [], // Доп. стилевые файлы (брать в сборку после файлов блоков)
'addJsBefore': [], // Доп. js-файлы (брать в сборку до файлов блоков)
'addJsAfter': [], // Доп. js-файлы (брать в сборку до файлов блоков)
'addAssets': {}, // Любые файлы и куда их копировать
'dir': {}, // Имена папок
};
let config = {
...
'addStyleBefore': [
'src/scss/variables.scss',
'src/scss/mixins.scss',
'somePackage/somePackage.css', // для 'node_modules/somePackage/somePackage.css'
],
...
};
src/
blocks/
btn/ # Папка блока
btn.pug
btn.scss
readme.md
burger/ # Папка блока
burger.js
burger.pug
burger.scss
readme.md
...
node createBlock.js new-block # создать папки, .scss, .md
node createBlock.js new-block pug # тоже, но ещё .pug
node createBlock.js new-block pug js # тоже, но ещё .pug и .js
// Файл src/blocks/card/card.pug
article.card
a.card__wrap(href='...')
img.card__img(src='...', alt='...')
h2.card__title Название книги
p.card__descr Описание книги
p.card__price 630 ₽
См. реальный пример
article.card(class=allMods)&attributes(attributes)
!= newLabel
if (data.url !== 'undefined' && data.url)
.card__inner
a.card__img-wrap(href=data.url)
img.card__img(src=data.img, alt=data.name)
h3.card__title
a(href=data.url)!= data.name
if (data.descr !== 'undefined' && data.descr)
p.card__descr!= data.descr
p.card__price!= price
else
.card__inner
span.card__img-wrap
img.card__img(src=data.img, alt=data.name)
h3.card__title!= data.name
if (data.descr !== 'undefined' && data.descr)
p.card__descr!= data.descr
p.card__price!= price
+btn('Купить', '')(class='card__buy')
&
// Файл src/blocks/promo/promo.scss
.promo {
padding: 0 1rem;
background-color: $gray-lighter;
&__inner {
max-width: $content-max-width;
margin: auto;
}
}
// Файл src/scss/style.scss
@import "src/scss/variables.scss";
@import "src/scss/mixins.scss";
@import "src/blocks/burger/burger.scss";
@import "src/blocks/logo/logo.scss";
@import "src/blocks/main-nav/main-nav.scss";
@import "src/blocks/page/page.scss";
@import "src/blocks/page-footer/page-footer.scss";
@import "src/blocks/page-header/page-header.scss";
Проверка eslint и stylelint по командам и по прекоммит-хуку.
© Николай Громов.
Бонус
скидка 10% на любой курс в EpicSkills по промо-коду GROMOV10