Css encapsulation strategies | Marcin Mazurek

25
CSS encapsulation strategies Marcin Mazurek Front-end developer @ Site Base

Transcript of Css encapsulation strategies | Marcin Mazurek

Page 1: Css encapsulation strategies | Marcin Mazurek

CSS encapsulation strategies

Marcin Mazurek Front-end developer @ Site Base

Page 2: Css encapsulation strategies | Marcin Mazurek
Page 3: Css encapsulation strategies | Marcin Mazurek

CSS 101

Page 4: Css encapsulation strategies | Marcin Mazurek

Inheritance

Page 5: Css encapsulation strategies | Marcin Mazurek

Cascading1.importance2.specificity3.order of declaration

Page 6: Css encapsulation strategies | Marcin Mazurek

Specificity Calculator

https://specificity.keegan.st/

Page 7: Css encapsulation strategies | Marcin Mazurek

Proper solution?

Shadow DOM

Page 8: Css encapsulation strategies | Marcin Mazurek
Page 9: Css encapsulation strategies | Marcin Mazurek
Page 10: Css encapsulation strategies | Marcin Mazurek
Page 11: Css encapsulation strategies | Marcin Mazurek
Page 12: Css encapsulation strategies | Marcin Mazurek

Alternatives?

Page 13: Css encapsulation strategies | Marcin Mazurek

<iframe>

Page 14: Css encapsulation strategies | Marcin Mazurek

#root { all: initial;}

Page 15: Css encapsulation strategies | Marcin Mazurek
Page 16: Css encapsulation strategies | Marcin Mazurek

CSS encapsulation POC™

A Site Base team proposal:

Page 17: Css encapsulation strategies | Marcin Mazurek

<Modal <ModalTitle <ModalContent <p </ModalContent></Modal>

> >Hello</ModalTitle> >>Hello world!</p>

data-sb data-sb data-sbdata-sb

Babel plugin to denote Site Base DOM nodes

Page 18: Css encapsulation strategies | Marcin Mazurek

PostCSS plugin to append :not() selector

h1 font-family: 'Comic Sans MS'; color: pink;}

.modal border: 1px solid tomato;}

:not([data-sb])

:not([data-sb])

{

{

Page 19: Css encapsulation strategies | Marcin Mazurek

body:not([data-site-base]) { font: 16px 'Comic Sans MS';}

Blocking inheritance with all: initial;

#root-reset { all: initial;}

<div id="root-reset"> <!-- SB component --></div>

Page 20: Css encapsulation strategies | Marcin Mazurek

Let's not forget about IE11#root-reset { background: #fff; border: none; color: #000; display: block; font: 16px sans-serif; height: auto; letter-spacing: normal; line-height: normal; margin: 0; padding: 0; text-transform: none; visibility: visible; width: auto; word-spacing: normal; z-index: auto;}

Page 22: Css encapsulation strategies | Marcin Mazurek

Performance

Page 23: Css encapsulation strategies | Marcin Mazurek
Page 24: Css encapsulation strategies | Marcin Mazurek

Bundle sizes, gzipped

Sample generated markup in React with 2000 DOM nodes - 177kb ⇒ 178kb (>1%)

Sportsbook CSS - 90kb ⇒ 94kb (4%)

Page 25: Css encapsulation strategies | Marcin Mazurek

Thank you!