Patrick Lid Monslaup
Technical manager & developer for Knowit Experience Bergen. Looking for a new job? Check out http://knowit.no/karriere
med Patrick Monslaup
.ball {
background: blue;
border-radius: 50%;
width: 50px;
height: 50px;
}<h2>Har du sett mine blå ball?</h2>
<div class="ball">ball</div>// vanlig knapp
<button class="button">
Button
</button>
// hul knapp
<button class="button button--hollow">
Button
</button>
// hul knapp som tar full bredde
<button class="button button--hollow button--full-width">
Button
</button>
// vanlig knapp som tar full bredde
<button class="button button--full-width">
Button
</button>
Knapper fra De Historiske sin styleguide
Block, Element, Modifier
// vanlig knapp
<button class="button">
Button
</button>
// hul knapp
<button class="button button--hollow">
Button
</button>
// hul knapp som tar full bredde
<button class="button button--hollow button--full-width">
Button
</button>
// vanlig knapp som tar full bredde
<button class="button button--full-width">
Button
</button>
Modifier: --hollow
Block: .button (classname)
Modifiers: --full-width, --hollow
Modifier: --full-width
Knapper fra De Historiske sin styleguide
En god måte å lære css på er å "inspisere" nettsider for å se styling
Komponenter sin bredde skal sjeldent kodes i piksler
Vi gjennomgår konkrete eksempler senere med flexbox
header .logo { background-color: #2fda95; }
header .menu .menu-item.active {
color: #2fda95;
border-bottom: 2px solid currentColor;
}
.banner form { background-color: #2fda95; }Problem:
CSS medfører duplisering av kode.
som fargen #2fda95
Farger fra tide buss
.ball {
background: blue;
border-radius: 50%;
width: 50px;
height: 50px;
}<h2>Har du sett mine blå ball?</h2>
<div class="ball">ball</div>`.ball` styler alle elementer med `class="ball"`
div {
background: blue;
border-radius: 50%;
width: 50px;
height: 50px;
}<h2>Har du sett mine blå ball?</h2>
<div class="ball">ball</div>`div` styler alle `<div>` elementer
Å style html elementer direkte er hovedskelig nyttig for å style spesifikke html elementer som <h2> med typografi, siden det skal gjelde overalt.
IKKE gjør det med uspesifikke elementer som div, da får du bugs overalt
#id {
background: blue;
border-radius: 50%;
width: 50px;
height: 50px;
}<h2>Har du sett mine blå ball?</h2>
<div id="ball">ball</div>`#ball` styler elementet med `id="ball"`
Det skal kun være 1 element med en gitt ID for at det er gyldig html
Hvilken styling et element får avhenger av "selector strength"
| Selektor | Eksempel | Styrke |
|---|---|---|
| element | div | 1 |
| class | .ball | 10 |
| id | #ball | 100 |
| important | !important | 1000 |
Ved lik styrke teller det som kommer sist
Best practice: Unngå sterke selektorer om mulig
Du kan kombinere selektorer, styrke er da additivt
| Eksempel | Effekt | Styrke |
|---|---|---|
| ul li | Style alle <li> elementer inni en <ul> | 2 |
| ul > li | Style alle <li> elementer som har <ul> som forelder | 2 |
| button.active | style <button> element med `class="active"` | 11 |
Det finnes mange flere selektorer som f.eks.
første element, annenhvert element osv!
Det er vanskelig å endre styling når alt har høy selektor-styrke.
Hold styrken lav ved å heller følge "BEM" konvensjonen
// styles/colors.scss
$tide-green: #2fda95;
$tide-blue: #...;// components/header.scss
@use '../styles/colors.scss';
header.logo {
background-color: colors.$tide-green;
}
header.menu.menu-item.active {
color: colors.$tide-green;
border-bottom: 2px solid currentColor;
}// components/bannerFormBlock.scss
@use '../styles/colors.scss';
.banner form {
background: colors.$tide-green;
}Men scss lar deg bruke
Og mye annet som..
npm install -g sassDerfra kan du kompilere sass til css ved å skrive..
sass --watch input.scss output.cssTypisk settes scss opp slik at det kompileres til minifisert css med "hacks" for browser compatability
Eksempel fra De Historiske sin styleguide
// vanlig knapp
<button class="button">
Button
</button>
// hul knapp
<button class="button button--hollow">
Button
</button>
// hul knapp som tar full bredde
<button class="button button--hollow button--full-width">
Button
</button>
// vanlig knapp som tar full bredde
<button class="button button--full-width">
Button
</button>
Hvordan burde en knapp-implementasjon være?
@mixin generateButton ($border-color, $border-hover-color, $background-color,
$background-hover-color, $font-color, $font-hover-color)
{
transition: all .2s linear;
color: $font-color;
background-color: $background-color;
border-color: $border-color;
border-width: 2px;
border-style: solid;
&:hover {
color: $font-hover-color;
background-color: $background-hover-color;
border-color: $border-hover-color;
}
}@mixin hollowButton ($border-color, $font-hover-color) {
@include generateButton($border-color, $border-color, transparent,
$border-color, $border-color, $font-hover-color);
}
@mixin solidButton ($background-color, $background-hover-color,
$font-color, $font-hover-color) {
@include generateButton($background-color, $background-hover-color,$background-color,
$background-hover-color,$font-color, $font-hover-color);
}
// Du bruker mixins slik:
@include hollowButton(/*sett inn parametere her*/);Hundrevis av verktøy har gode integrasjoner mot sass!
Brackets
Brunch
Connect/Express middleware
DocPad
Duo.js
Grunt
Gulp
Harp
Metalsmith
Meteor
Mimosa
med flere..
Vi går ikke i mer detaljer rundt oppsett av workflow automation i dag
Generelt er scss nesten alltid satt opp i moderne prosjekt
Det finnes utrolig gode guides og starter-kit på nett som er perfekt for å komme i gang.
https://nodejs.org/en/
npm install gulp --save
npm install gulp-connect --save
npm install gulp-sass --savepackage.json
kommandolinje
"dependencies": {
"gulp": "^3.9.1",
"gulp-connect": "^5.0.0",
"gulp-sass": "^3.1.0"
}npm installAndre kan da installere alle dependencies ved å skrive ...
bør installeres gjennom node, eller andre pakkesystem
Grunt eller gulp har f.eks. støtte for websockets, sass, og live-reload av nettsider når kode oppdateres.
For å bruke gulp, ..
var gulp = require('gulp');
var connect = require('gulp-connect');
// Create a gulp task called connect
// which when run connects to localhost
// with live reloading enabled
gulp.task('connect', function(){
connect.server({
root: 'public',
livereload: true
});
});
npm install gulp --save
npm install gulp-connect --save
npm install gulp-sass --savenpm install
gulp connectBy Patrick Lid Monslaup
Technical manager & developer for Knowit Experience Bergen. Looking for a new job? Check out http://knowit.no/karriere