CSS-In-JS
The good, the bad and the ugly
Marius Hauken
Robin Sandborg
&
2001
2018
Tabelldesign og spacer.gif 😭
2001
2018
Eksterne stylesheets 😮
2001
2018
Flash 💥
2001
2018
La oss bare jobbe med print 📖
2001
2018
HTML5 + CSS3 + Responsivt 👌
2001
2018
BEM 👷
2001
2018
OOCSS / Inuit.css 🏃♀️
2001
2018
Skalering? ☠️
2001
2018
CSS-in-JS 💅
12
enkle tips
for bedre CSS
1.
Hold spesifisiteten lav
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4650626/specificity-graph-01.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4650629/specificity-graph-02.png)
2.
Bruk variabler
eller theming
// SCSS:
$color-primary: #00a190;
$color-white: #fff;
.button {
background-color: $color-primary;
color: $color-white;
}
// Styled-components
const theme = {
color: {
white: "#fff",
primary: "#00a190",
}
}
const Button = styled.button`
background-color: ${p => p.theme.color.primary};
color: ${p => p.theme.color.white};
`
3.
Klassenavn brukes
kun i én kontekst
![](https://media.giphy.com/media/l0ExncehJzexFpRHq/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4653987/Screenshot_2018-02-28_09.26.00.png)
4.
Tenk i
komponenter
![](https://media.giphy.com/media/103TZqgLqRJq0M/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4650669/Screenshot_2018-02-27_14.46.50.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4650675/Screenshot_2018-02-27_14.49.08.png)
✅
❌
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4650682/Screenshot_2018-02-27_14.51.47.png)
5.
Tenk nøye
på navngiving
![](https://media.giphy.com/media/8acGIeFnqLA7S/giphy.gif)
.btn--submit-form ==> .btn--primary
.btn--read-more ==> .btn--secondary
.box--green ==> .box--prominent
.card ==> .credit-card-image
6.
Ikke vær for overivrig med hjelpeklasser
<div class="box
box--warning
box--small
box--previous
hide
formfield__input--error
mb">
Error-message
</div>
7.
Ikke vær overivrig med shorthand-syntax
.btn {
background: red;
}
// Leses av browseren som:
.btn {
background-image: initial;
background-position-x: initial;
background-position-y: initial;
background-size: initial;
background-repeat-x: initial;
background-repeat-y: initial;
background-attachment: initial;
background-origin: initial;
background-clip: initial;
background-color: red;
}
// Gjør heller dette om det er det du mener:
.btn {
background-color: red;
}
8.
Unngå resetting
av stiler
// bad news:
border-bottom: none;
padding: 0;
float: none;
margin-left: 0;
9.
Unngå magic numbers
.site-nav > li:hover .dropdown {
position: absolute;
top: 37px;
left: 0;
}
🤮
10.
Unngå qualified selectors
// Unødvendig spesifikt
ul.nav {}
a.button {}
div.header {}
ul.nav li.active a {}
div.header a.logo img {}
.content ul.features a.button {}
11.
ALDRI bruk
#ID i CSS!
12.
Bli enige i teamet
![](https://media.giphy.com/media/Pkny92clCrzva/giphy.gif)
CSS-i-JS
eller hvorfor ikke bare kjøre css-i-css
CSS var aldri ment til å lage komponentbaserte systemer
Det er det egentlige problemet vi prøver å løse
Når du først jobber i React/Whathaveyou, har du tilgang på mer enn bare klassenavn for å stilsette, hvorfor ikke bruke det?
Isolering av regler
Deling av variabler fra
JS til CSS
import React from 'react';
import CommentItem from './CommentItem';
const Colors = ['#FDD161', '#E8A13D', '#29A4AC', '#445561', '#AFD5D9'];
const Comments = ({comments}) => (
<ul>
{comments.map((comment, index) => (
<CommentItem color={Colors[index % Colors.length]} comment={comment}/>)
)
}
</ul>
);
export default CommentList;
…men med det sagt kan det finnes mange gode grunner for å kjøre vanlig (s)css.
![](https://emotion.sh/static/emotion-a76dfa0d18a0536af9e917cdb8f873b9-a69fb.png)
Rockey
![](http://fela.js.org/docs/res/logo.png)
![](https://github.com/cssinjs/logo/raw/master/styled-jss-logo.png?raw=true)
https://github.com/tuchk4/awesome-css-in-js
![](https://cdn-images-1.medium.com/max/400/1*MLBT3C57Emb0G9R6CFSFrA.png)
Emotion
![](https://www.styled-components.com/static/logo.png)
styled-components
Aphrodite
styled-jsx
csx
glamor
R Radium
Aesthetic
j2c
![](https://media.giphy.com/media/wotqBCVmRVn2w/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651836/carbon__7_.png)
git clone https://github.com/staccx/bitshift-css-in-js.git
![](https://s3.amazonaws.com/media-p.slid.es/uploads/831227/images/4655592/Pasted_image_at_2018_01_31_02_21_PM.png)
Kjører ikke yarn?
://brew.sh
brew install yarn
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651845/Screenshot_2018-02-27_18.23.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651972/Screenshot_2018-02-27_19.04.38.png)
![](https://cdn-images-1.medium.com/max/1600/1*tBFD64u6_kmPVFNxjau17A.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651867/Screenshot_2018-02-27_18.29.16.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651871/Screenshot_2018-02-27_18.31.01.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651873/Screenshot_2018-02-27_18.32.05.png)
![](https://media.giphy.com/media/13RH0eYA9vEAso/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/831227/images/4655638/pasted-from-clipboard.png)
![](https://raw.githubusercontent.com/css-modules/logos/master/css-modules-logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651880/Screenshot_2018-02-27_18.35.54.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651883/Screenshot_2018-02-27_18.37.21.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651911/Screenshot_2018-02-27_18.41.33.png)
![](https://media.giphy.com/media/oS8pRFxbD0d44/giphy.gif)
Glamor
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651917/Screenshot_2018-02-27_18.42.43.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651923/Screenshot_2018-02-27_18.43.35.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651927/Screenshot_2018-02-27_18.44.26.png)
![](https://media.giphy.com/media/3aGZA6WLI9Jde/giphy.gif)
![](https://raw.githubusercontent.com/styled-components/brand/master/styled-components.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651936/Screenshot_2018-02-27_18.46.33.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651940/Screenshot_2018-02-27_18.46.42.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/26943/images/4651941/Screenshot_2018-02-27_18.47.41.png)
![](https://media.giphy.com/media/5AcR8w022Gk4E/giphy.gif)
En god løsing for CSS:
CSS/ BEM | Inline styles | CSS-Modules | Styled-components | |
---|---|---|---|---|
Støtter alt i CSS | ✅ | ❌ | ✅ | ✅ |
Støtter global CSS | ✅ | ❌ | ✅ | ✅ |
Isolert | ❌ | ✅ | ✅ | ✅ |
Samlokalisert | ❌ | ✅ | 😐 | ✅ |
Enkel å overstyre | ✅ | ❌ | ✅ | ✅ |
Theming | 😐 | ❌ | ❌ | ✅ |
Kan rendres på server | ✅ | ✅ | ✅ | ✅ |
Enkelt å gi navn til ting | ❌ | ✅ | 😐 | 😐 |
![](https://media.giphy.com/media/3oEdva9BUHPIs2SkGk/giphy.gif)
CSS-In-JS
By Marius Hauken
CSS-In-JS
- 103