-
Notifications
You must be signed in to change notification settings - Fork 680
Добавляет статью про CSS-in-JS #5670
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Привет!
Спасибо за такую фундаментальную документацию) Я внес пару предложений
@ra1nbow1 большое спасибо за апдейт, беру в работу!) |
Статья получилась очень теоритической, кажется, что кусочки кода чуть-чуть добавят ясности
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Потрясно! С большим интересом прочитала. Спасибо!
Оставила несколько предложений по улучшению. Не пугайся, что их много. Все они больше про форматирование и про перестановку слов =)
Всё можем обсуждать!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кайф, мне всё нравится!
@solarrust, подскажи, пожалуйста, а мы тут ещё апрувы ждём или нужно сделать что-то еще?) |
Ага, ждём ещё аппрув от редактора раздела @HellSquirrel =) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Привет! Спасибо большое за статью. Я добавила несколько замечаний. Давай немножко уточним формулировки и переставим парочку абзацев :)
tools/css-in-js/index.md
Outdated
|
||
**CSS-in-JS** — это подход, при котором стили пишутся непосредственно в JavaScript-коде компонентов, а не в отдельных CSS-файлах. Это позволяет использовать возможности JavaScript для динамического управления стилями и обеспечивает изоляцию стилей на уровне компонентов, предотвращая конфликты и облегчая поддержку кода. | ||
|
||
Существуют разные решения, но все они работают схожим образом: стили задаются как [объекты](/js/object/) или [шаблонные строки](/js/template-strings/) и привязываются к компонентам через уникальные классы — это обеспечивает их изоляцию и упрощённое управление. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
И тут бы хорошо немного обобщить. Вот пример из vanilla-extract
margin: 0
});```
здесь вызывается функция и стиль не привязывается к классу
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Добавил в обобщении
tools/css-in-js/index.md
Outdated
|
||
Существуют разные решения, но все они работают схожим образом: стили задаются как [объекты](/js/object/) или [шаблонные строки](/js/template-strings/) и привязываются к компонентам через уникальные классы — это обеспечивает их изоляцию и упрощённое управление. | ||
|
||
Основные библиотеки для написания CSS внутри JS — это [Styled Components](https://styled-components.com/), [Emotion](https://emotion.sh/docs/introduction), [Styled JSX](https://github.com/vercel/styled-jsx) и [vanilla-extract](https://vanilla-extract.style/). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это не все библиотеки которыми пользуются. Есть еще :) (stitches, material-ui...)
Основные библиотеки для написания CSS внутри JS — это [Styled Components](https://styled-components.com/), [Emotion](https://emotion.sh/docs/introduction), [Styled JSX](https://github.com/vercel/styled-jsx) и [vanilla-extract](https://vanilla-extract.style/). | |
Вот несколько популярных CSS-in-JS библиотек: [Styled Components](https://styled-components.com/), [Emotion](https://emotion.sh/docs/introduction), [Styled JSX](https://github.com/vercel/styled-jsx) и [vanilla-extract](https://vanilla-extract.style/). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я тут брал данные из stateofcss, взял первые, самы популярные на тот момент, конечно список можно продолжить, н я хотел показать популярные решения. Могу уточнить что это на основе данные из stateofcss
tools/css-in-js/index.md
Outdated
|
||
## Почему CSS-in-JS? | ||
|
||
Главное преимущество использования подхода CSS-in-JS — возможность использовать конструкции JS при описании стилей компонента. В зависимости от проекта, это может помочь описывать динамические стили, которые зависят от условий, а также упростить работу с темизацией. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Возможно тут стоит добавить несколько слов про типизацию. Vanilla-extract продвигает это как основное приимущество фреймворка
tools/css-in-js/index.md
Outdated
|
||
☝️ CSS-in-JS не универсальное решение | ||
|
||
Многие задачи, такие как изоляция стилей, динамическая стилизация и управление темами, можно решить с помощью традиционного CSS, препроцессоров или CSS Modules. Выбор подхода зависит от специфики проекта и предпочтений команды. CSS-in-JS предлагает определённые преимущества, но не является универсальным решением для всех случаев. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Давайте добавим ссылочка на CSS Modules
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я не виду в доке статьи про CSS Modules, добавить сторонний ресурс?)
|
||
### Становление CSS | ||
|
||
CSS (Каскадные таблицы стилей) начал развитие в 90-е годы, был отмечен консорциумом [W3C](https://www.w3.org/) и начал стремительно развиваться. CSS стал методом определения стиля веб-документа. Он был мощным, чтобы удовлетворить потребности проектов тех лет, и был относительно прост, чтобы все желающие могли приступить к работе в короткий срок. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@solarrust а тут точно единственное число?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CSS как язык описания внешнего вида страницы, поэтому ед. число)
tools/css-in-js/index.md
Outdated
|
||
## Runtime и Zero-runtime | ||
|
||
За время развития CSS-in-JS появилось несколько вариантов реализации: от полностью рантайм-решений до почти «нулевого» времени исполнения. Ниже разберём ключевые варианты и их особенности. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Давай попробуем не упоминать термин без объяснения. Было бы лучше так
За время развития появилось несколько вариантов
- рантайм
- но-рантайм
И не будем убирать эти уточнения в это очень важный момент
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Переработал, постарался уточнить определния сразу
tools/css-in-js/index.md
Outdated
|
||
💡 Рантайм в контексте фронтенд-разработки обычно означает, что часть логики (в данном случае генерация стилей) выполняется напрямую в браузере, «на лету» при запуске приложения. То есть когда пользователь уже открыл страницу, JS-код просчитывает стили и «вживую» вставляет их в [`<style>`](/html/style/) или управляет классами. | ||
|
||
В отличие от этого, «zero-runtime» решения максимально переносят логику (включая генерацию CSS) на этап сборки, чтобы в браузер попадал уже готовый, статический CSS. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Zero-runtime переносят полностью. Almost-zero максимально
tools/css-in-js/index.md
Outdated
|
||
<aside> | ||
|
||
💡 Рантайм в контексте фронтенд-разработки обычно означает, что часть логики (в данном случае генерация стилей) выполняется напрямую в браузере, «на лету» при запуске приложения. То есть когда пользователь уже открыл страницу, JS-код просчитывает стили и «вживую» вставляет их в [`<style>`](/html/style/) или управляет классами. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не обязательно в style. Можно определять css переменные на лету или
что то типа такого
const sheet = new CSSStyleSheet(); sheet.replaceSync("body { background-color: lightblue; }"); document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Обощил
|
||
#### Суть подхода | ||
|
||
Стили формируются и добавляются в [DOM](/js/dom/) во время исполнения (рантайма) приложения. В процессе рендера или при изменении состояний создаются (или обновляются) соответствующие `<style>` или классы в браузере. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
как я уточняла выше механик больше чем две
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Добавил блок о том, что механик несколько, чтобы не перегуржать и без того не самую короткую статью 😅
@RuslanPro01 привет! Нужна помощь по этой статье? |
@ra1nbow1, привет |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кайф. Ждем финальный аппрув от Полины
@HellSquirrel Полин, посмотри пожалуйста |
Супер спасибо! |
Превью контента из 0bb56ea опубликовано. |
Описание
Добавляет статью про CSS-in-JS решения.
Это мой превый подобный опыт, так что буду рад обратной связи 😊
Closes #5238
Превью: https://content-5670.dev.doka.guide/tools/css-in-js/
Чек-лист
/css/color/
,/tools/json/
,/tools/gulp/#kak-ponyat
)images/example.png
,demos/example/
,../demos/example/
)