Slide 1

Slide 1 text

Component-based CSS Developer Camp 2018

Slide 2

Slide 2 text

DAE?

Slide 3

Slide 3 text

Component-based CSS pros • reusable • more maintainable • more comprehensible in the markup • easier to refactor • plays nicely with the component-based web

Slide 4

Slide 4 text

Nice! But...

Slide 5

Slide 5 text

.component-one { position: relative; font-family: "Fancy Font"; font-weight: 500; font-size: 20px; color: #ff99ff; width: 100%; height: 880px; margin-bottom: 20px; padding: 10px 15px; background-color: #000033; }

Slide 6

Slide 6 text

.component-two { position: relative; font-family: "Fancy Font"; font-weight: 700; font-size: 15px; color: #ff99ff; width: 100%; height: 880px; margin-top: 20px; padding: 10px 15px; background-color: #000033; }

Slide 7

Slide 7 text

.component-three { font-family: "Fancy Font"; font-weight: 500; font-size: 20px; color: #ff99ff; height: 880px; margin-top: 20px; background-color: #000033; border-top: 1px solid #ff99ff; &:hover { background-color: #ff99ff; color: #000033; } }

Slide 8

Slide 8 text

What about repetition?

Slide 9

Slide 9 text

CSS component !== Web Component • Not every CSS component mirrors a component in the markup. • Seperation of concern. (Ok. Kinda.)

Slide 10

Slide 10 text

My current approach for seperation Basic component general styles like: fontstyles, colors, variables Utility component repeating styles that can be used universally Conterpart component counterpart to our web component

Slide 11

Slide 11 text

Characteristics Basic component Are like a CI Styleguide. They'll tell you how the brand looks and behaves like. Utility component Helps you with all the things you would write over and over again. They'll support you with a consistent style on a small level. Conterpart component They determine the rules how a specific web component has to look like. The component will work in every place of the markup.

Slide 12

Slide 12 text

Rules

Slide 13

Slide 13 text

Naming consistent and clear • mirror web component name & use them for scoping • use speaking class names • don't generate unexpected results (sideeffects)

Slide 14

Slide 14 text

Naming approach - components .ComponentOne { color: pink; .ComponentOne-logo { height: 120px; } //alternativ &-logo { height: 120px; } } // the scoping adds a bit of saftey

Slide 15

Slide 15 text

Naming approach - utility & basic .text-lg { font-size: $font-base * 1.5; } .d-flex { display-flex; } .background-warning { background-color: $warning-color; } // ( ᐛ )و

Slide 16

Slide 16 text

Nope .background-red { background-color: $warning-color; // $warning-color = orange; font-weight: bold; } // <(ҹ^´)>

Slide 17

Slide 17 text

Markup Use composition to define appearance.

ALERT

>

Slide 18

Slide 18 text

Nest components, not styles Components can be nested in other components, but never nest CSS components to overwrite styles.
stuff
some stuff

Slide 19

Slide 19 text

.ButtonComponent { font-size: 10px; padding-top: 5px; padding-bottom: 5px; } .SearchResult { .ButtonComponent { font-size: 10px; padding-top: 10px; padding-bottom: 10px; } } // ( ಠ ಠ )

Slide 20

Slide 20 text

Never add styles based on location .ComponentTwo { div { .d-flex { background-color: red; } } } // ҵ(`O´)҈

Slide 21

Slide 21 text

Create independent web components Counterpart components should only contain styles that define their unique apparance, they're independent from their environment. You should be able to put them anywhere in the markup without changing their style.

Slide 22

Slide 22 text

#LifeProTips

Slide 23

Slide 23 text

My #LPT so far (Part 1) • don't write CSS on the side, think about a useful architecture for your project • plan your "CI styleguide" carefully • use and adapt the styleguide • commit to and write down naming rules • refactor early and often - CSS grows rampart if you don't look at it for, like, 5 minutes

Slide 24

Slide 24 text

My #LPT so far (Part 2) • use your basic and utility components generously • if you write similar styles the third time, think about creating utility components • unify rules and styles when possible - there's seldom need for margin: 13px and margin: 14px in the same view • if you add the third variation of a style to a dynamic web component, think about creating a new one

Slide 25

Slide 25 text

And that's it! Feel free to contact me with questions. My approach is still work in progress so I'm very happy about feedback when you give it a try. Twitter: @mirjam_diala Github: programmiri