CSS style sheets
CSS-selectors
Når du skriver en css-regel bruker du en css-selector til å bestemme hvilket/hvilke elementer regelen skal gjelde for.
- TAG
- CLASS
- ID
- Sammensat
En tag selector gjelder for alle elementer med denne taggen,
det kan være div, span, p, article, table, osv.
Du kan bruke alle gyldige tags for HTML.
Merk at en slik regel vil gjelde for alle elementer av den typen.
Bruk av css - regler
En css fil inneholder regler for hvordan elementer på en html side skal presenteres.
Under HTML kapitelet laga vi en side som så slik ut:
Legg merke til <link rel="stylesheet" href="eksempel.css">
Dette sier at html sida skal laste ned og ta i bruk eksempel.css. Denne filen har vi ikke laga ennå - så plasser markøren over
eksempel.css (du vil se Cmd+Click to follow link) og Ctrl/Cmd + click på filnavnet. (Ctrl windows, Cmd mac)
Nå vil VSCode varsle om at filen ikke finnes, velg at du vil lage den nå.
Skriv inn følgende regler i filen
Her har vi laga to regler: h1 { color:blue; } sier at alle <h1> tags skal vises med blå skrift.
body { background-color: teal; } sier at alle elementer inne i <body> skal ha bakgrunnsfargen teal.
css egenskaper
Dette er en liste over basis-egenskaper i css - disse skal du kunne.
- color - farge på skrift
- background-color - bakgrunsfarge
- font-size - skriftstørrelse
- position - plassering på skjermen
- left,top,right,bottom - avstand fra kanter
- width,height - størrelse (typisk på en div)
- background-image - bakgrunsbilde
- margin marg rundt elementet
- border en kantlinje rundt elementet
Størrelse
Du kan overstyre størrelsen til et element med egenskapene
- width bredde
- height høyde
- padding luft rundt innhold (inne i elementet)
- margin luft rundt diven (utforbi elementet)
I tillegg kan du sette begrensninger på width, height
- min-width:12rem;
- max-width:800px;
- ditto for height
css-selectors
Når du skriver en css-regel bruker du en css-selector til å bestemme hvilket/hvilke elementer regelen skal gjelde for.
tag-selector
Her gjelder regelen for alle <div> i dokumentet, de får grønn skriftfarrge.
Dette er et eksempel på en tag - selector (slik som div span p article table td li ol ul ...)
id-selector
Denne selectoren velger et element i dokumentet som har id="main" , f.eks <div id="main">. Alle tagger kan gis en id, men hver id skal være unik - bare brukes en gang. absolute
Dette er en class-selector, denne klassen kan settes på mange forskjellige elementer som vist under
Klasser brukes dersom regelen skal gjelde for mer enn ett element (men ikke alle av denne typen),
for elementer av forskjellige typer.
pseudo-selector
En pseudo-selector som gjelder for element når pekeren er over elementet. Kan brukes til å framheve det elementet
pekeren er over - ofte en link ( <a> ). Transition gjør at endringen fra normalt utseende skjer gradvis (1s).
En liste over vanlige pseudo-class selectors
- :active a:active - en link som brukeren klikker på
- :checked radio eller checkbox, style for de som er valgt
- :focus typisk input element, input:focus - brukeren har markør inne i elementet
- :hover muspeker er over elementet, div:hover
- :nth-of-type() tr:nt-of-type(odd) - alle odde rader i en tabell, kan også bruke (even)
- :valid typisk en input:valid - dersom det brukeren skriver er ok kan du vise dette med css
- :visited a:visited regel som gjelder for besøkte linker
sammensatte selectors
Etterkommere
Barn
Nære Naboer
Fjerne Naboer
Transition
Typisk bruk er for å framheve valg i menyer når musepeker er over alternativene.
Når bruker plasserer markøren over en link vil du se at endringene i style tar 1s og bruker ease-out.
eller på norsk: transition: egenskap varighet timing-metode utsettelse.
Dermed betyr transition: all 3s linear 1s; at alle endringer skal ta 3s, være lineære og ha en delay (utsettelse) på 1s.
Filter
Disse virker på alle elementer, men noen gir bare mening i forhold til bilder.
Layout med grid
Lag en div med klasse wrapper <div class="wrapper"> ... </div>
Alternativer for grid-template-columns: 1fr 1fr 1fr;
Du kan endre forholdet mellom de forskjellige kolonnene slik: 2fr 1fr 1fr . Nå vil den første være dobbelt så stor som de to andre.
grid-auto-rows: minmax(100px, auto);
Denne css reglen sier at hver rad skal ha minimumshøyde på 100px.
grid-gap: 10px er avstanden mellom hver rad/kolonne.
Du vil nå få en layout slik som under:
Du kan styre størrelsen på innholdet ved å lage en regel for elementene inne i grid.
Layout med Flex
Flex er godt egna til å lage layout som tilpasser seg til ulike bredder på display. Dermed kan en lage regler som gjør at på en stor skjerm kan man se flere bilder ved siden av hverandre, mens på en mobil blir de vist nedover (en i bredden).
Sentrering med flex
Git denne html koden: <div class="parent> <div class="child"> </div> </div>
Da vil følgende css sentere div.child midt inne i div.parent.
Plassering av elementer
Du kan ta kontroll over plasseringen til elementer.
Bruk left,top,bottom,right til å angi hvilken kant du plasserer i forhold til.
left:10px; betyr 10px fra venstre kant.
Position absolute
Denne regelen vil plassere elementet med id="test" 10px fra venstre kant og 10px fra toppen.
Position relative
Her angir du en forskyvning fra der hvor nettleseren ville ha plassert elementet.
CSS Nummerering
Vanligvis bruker du <ol> <li> for å lage nummererte lister. Du får da en liste nummerert som vist under:
- Punkt ein
- Punkt to
Alternativer til 1,2,3...
Du kan lage nummererte lister med andre tellemåter på denne måten:
Typen kan være en av decimal,lower-roman,upper-roman, ...
Du finner komplett liste på mdn
Dersom du ønsker å nummerere andre elementer enn ol og li kan du bruke følgende css som et utgangspunkt:
Her ønsker jeg at alle <div class="oppgave"> skal nummereres 1) 2) ...
Inne i slike div-er skal alle paragrafer nummereres med a) b) c) ...
Legg merke til counter(deloppgave, lower-latin) - her gir jeg beskjed om at jeg ønsker a) b) ...
som nummerering for denne telleren.
Du kan velge fra denne lista med nummereringer:
- decimal: 1,2,3, ...
- decimal-leading-zero : 01 02 ..
- lower-roman : i, ii, iii, iv ...
- lower-greek: α, β, γ ...
- lower-alpha, lower-latin: a,b,c...
- upper-xxx (roman,greek,alpha,latin)
En fancy nummerert liste
Media queries
Med @media queries kan vi lage regler som virker forskjellig avhengig av om vi skal ha utskrift (@media print), vise på skjerm (@media screen) eller også undersøke bredden på skjermen (@media screen and (max-width:1024px ) { ... }
I eksemplet under skal vi vise bilder med layout grid (6x) dersom vi har en stor skjerm, grid (4x) dersom mellomstor, (3x) dersom liten, (2x) dersom veldig liten - og skifte til layout:flex dersom bredden er mindre enn 450px.
Merk at jeg bruker --variable som er definert i :root{ }.
Dermed kan jeg endre verdiene på disse i de forskjellige @media-reglene og bruke samme css-regel for alle lenger nede. Der henter jeg verdien fra variablene med var(--variabelnavn) .
Merk at jeg beregner height på denne måten: height: calc(var(--width) - 50px);
Dermed har jeg en bredde som er gitt av --width, og en høyde som beregnes ut fra samme verdi.
Bruk av @media print
Når du skal skrive ut ønsker du ofte å fjerne elementer som ikke virker på papir - tenk på knapper og andre meny-elementer.
Ofte ønsker du også å styre hvordan siden deles opp
Her ønsker jeg ikke side-skift mellom bilde og forklarende tekst (de er begge inne i fugure tag-en). Jeg vil ha en ny side etter en article. Overskriften skal være på samme side som teksten den er tilknytta. Knapper skal ikke skrives ut. Ikke vis menyer (som har klassen .menu)