# Понедельник 3 твита
Я разрабатываю библиотеку jss для генерирования стилей на js, поэтому буду развлекать вас своими мыслями на эту и соседние темы.
15:02А кто здесь собственно пользовался уже любой cssinjs библиотекой?
15:36# Вторник 30 твитов
@oleg008 @jsunderhood 1. Доступны все переменные из js, не надо дублировать.8:31
@oleg008 @jsunderhood 2. Можно писать нормальные функции хелперы и не страдать8:33
@oleg008 @jsunderhood 3. Стили рядом с версткой, не надо переключаться. И можно использовать общий скоуп.8:33
@oleg008 @jsunderhood 4. Не надо учить новый язык8:33
@oleg008 @jsunderhood 5. Нет возможности писать вложенный ад )8:33
@pavelsilin я бы не говорил «богомерзкий CSS» — в CSS-in-JS всё равно есть CSS /cc @kizmarh альтернативное мнение о полезности CSS-in-JS8:40
@andrey_sitnik @kizmarh количество болей, страданий и +100500 костылей в виде препроцессоров и плагинов к postcss, делают его именно таким.8:41
Пожалуй надо сказать пару слов по поводу что такое хорошо и что такое плохо)
8:44Меня часто спрашивают что дает cssinjs чего не дает css. Раньше я давал ссылку на github.com/cssinjs/jss/bl… и говорил как много приимуществ.
8:47@jsunderhood Но на самом деле незаменимых преимуществ нету до тех пор пока вы не получите задачу где другие подходы вам что-то дают.
8:48Поэтому всем тем кто задают себе вопрос, нафига это вообще надо, вам ответ: вам не надо.
8:52Это всегда было фантазией, которую породило наличие отдельных языков под эти три задачи.
9:02К сожалению веб платформа никогда не предоставила возможности чисто разделять все эти вещи.
9:02CSS использует селекторы, которые прописаны в html а также использует его структуру.
9:04Плюс в js мы обычно также используем селекторы чтоб манипулировать DOM.
9:04Вот и получается хоть еще 10 языков специализированных изобретай, сущности не разделены, ничего хорошего не будет.
9:05Что делает React + JSS: стили, структура html и логика по манипуляции html кладется рядом. Разделение по языкам игнорируется.
9:06Зато разделяем все сущности очень четко. Сущность которая отвечает за отображение - один компонент с очень простым интерфейсом.
9:07Сущность которая отвечает за какую то специфическую логику, назовем ее "бизнес" опять таки отдельный компонент или функции.
9:08Сущность которая отвечает за работу с сервером, посылает запросы, обрабатывает данные итд - отдельно.
9:08Вобщем вместо того чтоб плодить языки, мы плодим сущности. И тем самым добиваемся более высокое переиспользование кода.
9:09Количество необходимых сущностей можно определять гибко, по задаче. Не везде нужен редукс, не везде jss.
9:11@taujavarob @pavelsilin @jsunderhood @oleg008 Это надо по ситуации смотреть. Иногда в тему и логика входит (фронтэнд же такой разный).10:30
все так фокусируются на том чтоб тщательно вытереть пыль и натереть до блеска что забывают что это машина у которой совсем другие задачи.
10:37Все остальное вообще похуй)
10:41Когда мы можем легко понять код, мы мы можем легко его исправить, выкинуть, заменить итд.
10:42Это самый важный фактор который делает программы и быстрыми и стабильными.
10:42я всегда стараюсь по максимуму логики выделить в чистые функции и потом их использовать уже где надо, включая в компонентах.
12:12. @jsunderhood я использую селекторы в CSS, чтобы манипулировать другими людьми!14:49
@taujavarob @jsunderhood immutable code это идея, которую я продвигаю btw14:52
# Среда 13 твитов
И так, поговорим о библиотеках для cssinjs и в часности об альтернативах JSS.
12:13Вот более менее полный список библиотек github.com/MicheleBertoli…
12:15Начнем с aphrodite. Я написал как то статью сравнивающую их: medium.com/@oleg008/aphro…
12:18Что характеризует афродиту: более высокий уровень абстракции, апи пытается дать пользователю инлайн стили которые генерируют CSS в <style>
12:21Но при ограниченом сабсете CSS который можно использовать: к примеру нету доступа к селекторам тепа ~> итд.
12:22Далее у афродиты только один режим рендеринга: все стили пишутся в один <style>. В JSS можно и так и так.
12:23Негативное у афродиты это батчинг - они прежде чем отрендерить стили ждут. Это может дать перерисовку.
12:26И не дает конечный (computed) результат если делать это синхронно. Тем самым заставляет тебя использовать setTimeout.
12:27Также некорректно сравнивать jss и aphrodite напрямую, для этого я написал отдельную библиотеку, которая совмещает обе идеи в одной.
12:28Эта библиотека дает API практически как у aphrodite но для описания стилей можно использовать весь JSS JSON DSL.
12:28Также там решена проблема с батчингом и всеми видами селекторов.
12:29@jsunderhood У меня это давало страшное мигание интерфейса, когда дом показывается без стилей, а затем применяются стили.15:09
@pavelsilin @jsunderhood у этого явления даже название есть en.m.wikipedia.org/wiki/Flash_of_…18:16
# Четверг 6 твитов
И так поговорим о библиотеке radium. Кто что может сказать по ней?
9:07@jsunderhood Вопросы тоже велком
9:07А это проблема когда есть длинные списки, тк для каждой строки дублируются одинаковые стили.
13:46@jsunderhood трогал его когда работал с github.com/FormidableLabs… Не понравилось, даже завел issue на какую-то мелочь github.com/FormidableLabs…14:59
На мой взгляд важная штука отличающая JSS от Radium: весь сгенерированый CSS можно посмотреть как он есть в доме в style тэге.
15:46Тоесть по сути также как и с чистым CSS.
15:46# Пятница 16 твитов
Cool presentation on how @MaterialUI uses #cssinjs by @olivtassinari Go check it out: oliviertassinari.github.io/a-journey-towa…9:12
Кто нибудь уже пользовался jss-isolate плагином?
11:37@jsunderhood Мне кажется что никто толком не понял для чего он и почему он очень круто меняет все.
11:38этот список можно также самому расширять или изменять и тем самым получить глобальные умолчания без использования глобальных стилей
13:42@iamstarkov, @boriscoder, @jsunderhood, лишь то, что кто-то понимает технологию и умеет ей пользоваться, не делает её хорошей.15:05
это дает более явный контрол компонента над самим собой.
15:57возьми любое из наследуемых свойств, представь что оно не прописано на твоей кнопке, и представь твоя кнопка будет в разных родителях
15:58в любом из родителей она может сломаться в зависимости от того какое наследуемое свойство родитель решил определить.
15:59это в конфликте с понятием компонент, внутренности которого не должны неявно меняться
15:59Вот еще о чем хотел поговорить, есть один плагин для jss который очень сильно меняет синтаксис для стилей. github.com/cssinjs/jss-ex…
18:28@jsunderhood главная особенность в том чтоб свойства которые имеют ряд значений разделенных пробелом не надо больше запоминать.
18:31а также это позволяет в большинстве случаев использовать числа как значения вместо строк.
18:32Лично мне кажется этот синтаксис не только приемлемым, а даже лучше чем CSS. 1. легче запомнить 2. легче читать и 3. Никакого дублирования.
18:34вы знаете что-то обо мне чего не знаю я?))))
19:36Кто еще что думает по поводу развернутого синтаксиса?
19:43# Суббота 4 твита
@jsunderhood все меняется, когда ты делаешь виджет, который ни страницу менять не должен, ни сам ломаться. И никаких стайлгайдов нет9:21
@jsunderhood поэтому всякие штуки, облегчающие изоляцию очень круты, чем больше они будут развиваться, тем лучше9:21
@jsunderhood Возможно, он мне скоро пригодится.10:36
Написал статью про "профессиональную деформацию" medium.com/@oleg008/profe…
12:46# Воскресенье 1 твит
Неделя пролета, скоро меня отсюда выкинут)))
20:39# Ссылки
github.com
- https://github.com/cssinjs/jss/blob/master/docs/benefits.md
- https://github.com/MicheleBertoli/css-in-js
- https://github.com/cssinjs/aphrodisiac
- https://github.com/markdalgleish/jss-loader
- https://github.com/FormidableLabs/spectacle
- https://github.com/cssinjs/jss-isolate/blob/master/src/reset.js
- https://github.com/cssinjs/jss-expand
other
- http://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-delete-not-easy-to
- https://medium.com/@oleg008/aphrodite-vs-jss-a15761b91ee3
- https://medium.com/@oleg008/professional-deformation-distortion-7eb8d88b562a
- https://en.m.wikipedia.org/wiki/Flash_of_unstyled_content
- https://oliviertassinari.github.io/a-journey-toward-better-style/#/?_k=cesdca
- https://www.w3.org/TR/CSS21/propidx.html