Используйте четкие, организованные файлы CSS, чтобы ваш код оставался СУХИМ.

Я имел удовольствие изучать Гэтсби и экспериментировать с ним на прошлой неделе, работая над сайтом моего портфолио разработчиков (seanwelshbrown.com), и в нем было много вещей, которые мне действительно понравились.

Gatsby - это фреймворк, построенный на основе React для создания статических веб-сайтов с высокой производительностью и надежным SEO, и на официальном сайте у него есть фантастическое руководство и документация.

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

Модуль CSS отличается от глобальной таблицы стилей одним существенным образом, как указано в документации модуля CSS:

Модуль CSS - это файл CSS, в котором все имена классов и имена анимации по умолчанию ограничены локально

Это означает, что вместо того, чтобы гарантировать, что каждый отдельный элемент в проекте имеет полностью уникальное имя класса (которое может стать неорганизованным и трудно отслеживаемым, особенно когда несколько элементов могут выиграть от разных стилей, но одного и того же описательного класса name), отдельная страница или компонент в проекте может иметь свой собственный выделенный набор имен классов, которые привязаны только к этой странице или компоненту.

Это может не иметь смысла сразу, поэтому давайте рассмотрим это на примере! К счастью, Гэтсби работает с модулями CSS "из коробки", так что это отличный способ учиться.

На моем сайте портфолио у меня есть список проектов на моей странице проекты, которые составлены из простых тегов HTML:

  • ‹Div›
  • <p>
  • <a>
  • <ul>
  • <li>

Мне нужно, чтобы они были стилизованы определенным образом, и я мог бы сделать некоторые встроенные стили, чтобы они выглядели так, как я хочу, но это засорит мой файл .js, поскольку я буду повторять одни и те же теги и стили снова и снова.

Я также мог бы создать глобальную таблицу стилей и поместить туда стили, но это не имело бы особого смысла, поскольку мне нужны эти стили только на этой конкретной странице.

Здесь в игру вступает модуль CSS!

Прежде всего, мы смотрим на имя страницы или компонента, к которому мы хотим добавить таблицу стилей. В данном случае это «projects.js», поэтому в той же папке проекта мы создаем файл с тем же именем, но с расширением «.module.css», например:

Таким образом мы указываем, к какой части вашего веб-сайта будет применяться модуль.

Теперь на этой странице или в компоненте мы собираемся импортировать эту таблицу стилей как объект JavaScript в верхней части страницы:

Это позволило нам написать любые имена классов и CSS в модуле, как в обычной таблице стилей, но мы будем вызывать это в нашем коде, ссылаясь на имя класса как на ключ.

Итак, вместо глобальной таблицы стилей с:

.project-description {

}

И это вызывается в нашем JSX как:

<div className="project-description"></div>

Мы бы использовали то же имя класса в нашем модуле (только для соглашения измените его на camelCase), например:

.projectDescription {

}

И вызовите его с нашим импортированным модулем в нашем JSX вот так:

<div className={styles.projectDescription}></div>

Легкий! Вы заметите, что если вы попытаетесь использовать это имя класса в любой другой части вашего проекта, это не сработает; это связано с тем, что модуль, в котором он написан, имеет локальную область видимости только для тех мест в вашем проекте, куда он импортируется. Начинаете видеть потенциальные преимущества сохранения чистоты и организованности кода?

Если вы хотите использовать то же имя класса «projectDescription» на другой странице или в компоненте, но с другим стилем, новый модуль CSS позволит вам снова использовать имя класса без нарушения стиля на другой странице. Довольно круто!

CAVEAT

При использовании модулей CSS следует помнить о том, что следует придерживаться только имен классов и вложенных элементов. Если вы попытаетесь стилизовать все теги <p> на странице, например, следующим образом:

p {
  font-size: 20px;
}

Вы были бы неприятно удивлены, обнаружив, что ВСЕ теги <p> на каждой странице вашего сайта теперь имеют размер 20 пикселей. Ой!

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

Я назвал <div> именем класса 'projectDescription', а затем указал, что все теги <p> под ним будут иметь определенный стиль. Это отлично работает при использовании в моем JSX так:

Таким образом, мне не нужно беспокоиться о присвоении уникального имени класса каждому тегу <p>, а также я могу контролировать, как только будут выглядеть теги, которые я хочу стилизовать!

Если вам интересно, вот как выглядит мой последний модуль CSS для страницы:

Чисто, просто и легко читается.

Это краткое руководство по использованию модулей CSS в проекте Gatsby. Совсем не сложно, и отлично подходит для того, чтобы ваш проект и код оставались легкими и организованными. Надеюсь, вам понравилось читать и удачно развивались!