Site icon 8HOST.COM

Обзор CSS-in-JS: стилизация компонентов React

В этой статье мы рассмотрим 11 лучших библиотек CSS-in-JS, исходя из общего количества звезд на GitHub. Также мы поговорим об их особенностях, сильных и слабых сторонах. В обзор включены как новейшие библиотеки типа emotion, так и старые, такие как aphrodite.

Несмотря на преимущества CSS-in-JS, многим разработчикам потребовалось время, чтобы привыкнуть к этому инструменту. Если вы мало о нем знаете, советуем вам почитать эту статью.

Сегодня в CSS-in-JS нет недостатка в библиотеках, которые позволяют стилизовать компоненты React с помощью JavaScript. Фактически на момент написания данной статьи вышло 55 таких библиотек. Все они перечислены в репозитории css-in-js @MicheleBertoli, который представляет собой гигантский централизованный список библиотек с отдельными примерами стилизации базовой кнопки при помощи каждой из них.

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

Примечание: Для краткости мы не будем включать в обзор примеры кода. Если вы хотите увидеть, как каждая библиотека используется на практике, обратитесь к ресурсам на GitHub, ссылки на которые мы предоставим.

Библиотека emotion

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

Библиотека glamorous

glamorous основана на популярной библиотеке glamour. Она предоставляет опыт работы со стилизованными компонентами, но делает это с помощью синтаксиса JavaScript, а не интерполированных строк. Динамические свойства и темизация – большие преимущества этой библиотеки над другими. Если вы хотите поэкспериментировать с созданием стилизованных компонентов React с помощью синтаксиса JavaScript, библиотека glamorous может вас заинтересовать.

Библиотека styled-jsx

styled-jsx позволяет добавлять теги <style jsx /> внутри функций рендеринга компонентов. Благодаря этому мы можем писать стили в простом CSS. А дополнительное преимущество заключается в том, что CSS внутри них применяется только к текущей области DOM, отображаемой на этом уровне. Если вы хотите объединить CSS внутри своей функции render, styled-jsx идеально вам подойдет.

Библиотека jsxstyle

jsxstyle позволяет забыть об HTML-элементах, которые вы используете только для стилизации (например, <div />, <span />, <table /> и т.д.), и вместо них использовать стилизованные компоненты (как <Block /> , <Flex />, <Inline />, <Table />). Кроме того, она игнорирует многие нормы CSS и вместо них предоставляет разработчикам интересную возможность указывать псевдо-селекторы в качестве свойств (например, hoverColor). Если вы устали прописывать <div className={styles.container} /> в сотый раз, вам следует попробовать jsxstyle.

Библиотека TypeStyle

TypeStyle – это TypeScript CSS, отсюда и название. Основное внимание данная библиотека уделяет линтингу во время компиляции, автозаполнению и другим подобным функциям, которые обеспечивают удобство разработки и предотвращают ряд проблем во время выполнения. Главное преимущество TypeStyle – в том, что она не зависит от фреймворка, так что вы можете использовать ее где угодно. Если вы любите TypeScript, вам стоит взглянуть на TypeStyle.

Библиотека styled-components

Несомненно, самая популярная из библиотек CSS-in-JS. С ее помощью вместо добавления стилей к существующим компонентам вы можете создавать компоненты, воплощающие эти стили. Это позволяет писать декларативные и повторно используемые компоненты, которые представляют собой что-то между обычным HTML-элементом и полноценным компонентом React. К этой философии (и к интерполяции строк в стиле GraphQL) нужно привыкнуть, но, судя по невероятному количеству звезд, оно того стоит.

Читайте также: Обработка CSS в React с помощью styled-components

Библиотека glamor

Настоящая сила библиотеки glamor заключается в ее способности писать и комбинировать правила CSS. Обычно расширение и перезапись правил CSS-in-JS – задача не из простых; однако glamor позволяет либо разместить их последовательно внутри свойств компонента, либо перечислить их внутри его className. Если вы ищете надежную библиотеку, обратитесь к glamor.

Библиотека styletron

Популярность пришла к библиотеке styletron благодаря ее скорости, основанной на Virtual CSS (например, Virtual DOM), который абстрагирует преобразование JS-to-CSS и тем самым обеспечивает оптимизацию, ускорение, сокращение мертвого CSS и многое другое. Особое внимание уделяется минимизации CSS при рендеринге на стороне сервера для быстрой загрузки страницы. Если вы ищете хорошую библиотеку, которая обеспечивает огромный прирост скорости, попробуйте styletron.

Библиотека radium

radium – одна из первых библиотек CSS-in-JS, набор инструментов для управления встроенными стилями элементов React. Эта библиотека дает вам мощные возможности стилизации без CSS. Она пытается решить проблему обработки медиа-запросов, псевдоселекторов и модификаторов. radium по-прежнему входит в число самых популярных библиотек, что говорит о ее практичности и долговечности.

Библиотека react-css-modules

react-css-modules автоматически сопоставляет CSS модули. Каждому классу CSS присваивается идентификатор локальной области с глобальным уникальным именем. Так данная библиотека позволяет писать модульный и многоразовый CSS.

react-css-modules стремится к написанию чистого CSS в компонентах React. Буквально с ее помощью вы можете импортировать файлы .css и использовать их ключи в свойстве className. Это также одна из первых библиотек CSS-in-JS. Основная проблема, которую она пыталась решить, заключалась в определении области видимости CSS-селекторов. Рекомендуем также попробовать пакет babel-plugin-react-css-modules. Хотя у него меньше функций, зато она гораздо меньше по размеру и при этом гораздо более производительный.

Библиотека aphrodite

aphrodite написана и поддерживается Академией Хана. Это одна из первых библиотек CSS-in-JS. Она не зависит от фреймворка и поддерживает рендеринг на стороне сервера и префиксы браузера. Основное внимание она уделяет селекторам, медиа-запросам, анимации. Если вы ищете надежную библиотеку, поддерживаемую квалифицированными разработчиками, используйте aphrodite.

Библиотека ReactCSS

Еще одна из базовых библиотек CSS-in-JS, reactcss предоставляет встроенные стили в JS с поддержкой React, React Native, автопрефиксов, псевдоэлементов и медиа-запросов. Она фокусировалась на динамической замене стилей на основе свойств. Хотя сегодня эта функция есть у многих новых библиотек, следует отметить, что раньше ReactCSS опережала всех остальных именно благодаря ей. На эту библиотеку все же стоит обратить внимание, особенно если вам нужна полная поддержка CSS (включая автопрефиксы) или React Native.

Заключение

Теперь вы знакомы с основными библиотеками CSS-in-JS. Еще раз рекомендуем вам обратиться к репозиторию css-in-js, где вы найдете много полезной информации о других библиотеках.