Вся правда о CSS-in-JS

Ilya Lesik

Вся правда о CSS-in-JS

Илья Лесик

Hands on the orange typewriter in a park

Disclaimer

Примеры далее используют React и Styled Components

+

Что такое CSS-in-JS


		
		

Выражения fn`some string here`; называются Tagged Template Literal

Стили будут добавлены в CSSOM с помощью вызова insertRule(...)


			<style type="text/css">
  .eIxVkz { border-radius: 3px; padding: 0.25em 1em; margin: 0 1em;
    background: transparent; color: palevioletred; 
    border: 2px solid palevioletred; }
  .kqEuGv { border-radius: 3px;padding: 0.25em 1em; margin: 0 1em;
	background: transparent; color: palevioletred;
    border: 2px solid palevioletred;
    background:palevioletred; color:white; }
</style>
		

Что такое CSS-in-JS



		

		

Можем использовать Button как обычный React-компонент

Расширение стилей


		

		

Стилизация существующих компонентов


			

			
		

А может, не надо?

О нет, хипстеры опять хотят переусложнить нашу верстку и изобретают новые абстракции над абстракциями. Нам было так хорошо с ванильным CSS, версткой на таблицах и браузером Netscape Navigator 4. Именно с этого вашего Реакта и начался Майдан.

Неизвестный верстальщик

В чем профит?


		
	

Еще плюсы:

Есть и недостатки:

Инструменты

Плагины для редакторов / IDE
Atom
Sublime Text
VS Code
VIM NeoVim
WebStorm + другие JetBrains IDE
github.com/redisca/zeplin-styled-components

Сравнение библиотек

Package As Object As TL RN Support Agnostic Dynamic Babel plugins Stars
emotion + + + + + 3179
JSS + + + + + 3303
styled-components + + + + 15110
aphrodite + + 3971
glamor + + + 3036
styletron + + + 2414

Производительность

Package Use CSS Use Inline-Styles Mount Time (ms) Rerender time (ms)
react (with inline-styles) - + 28.7 51.53
react + css + + 38 76.34
emotion + - 102.5 107.06
JSS + - 310.3 340.36
styled-components (v3.1.6) + - 133.73 109.17
aphrodite + + 38.05 62.39
styletron + - 75.6 90.18

Production

dob-doc.ru

Субъективное сравнение

Верстка на SASS, LESS, PostCSS, БЭМ

Верстка на CSS-in-JS

Спасибо за внимание!

Ссылки

  1. styled-components
  2. CSS-IN-JS-Benchmarks
  3. emotion
  4. Exploring the CSSOM: Making a CSS Object Analyzer
  5. Awesome CSS in JS
  6. CSS in JS
  7. Stop using CSS in JavaScript for web development