Mediavalg i CSS
Mediatyper
CSS versjon 2 introduserer mediaspesifikasjon som en av flere interessante muligheter. Utgangspunktet er at de sidene vi produserer skal kunne fungere på ulike media. For å få til dette må vi kunne undersøke hvilket media som skal vise fram vår side. W3C har introdusert Media Queries [2] for å hjelpe oss med dette.
W3C foreslo i versjon 2 en rekke mediadefinisjoner og forutså at det ville bli behov for flere.
all | generell, brukes til alle media |
screen | "normale" dataskjermer |
sideorienterte enheter | |
aural | stemme syntesizere |
braille | enheter som gir blindeskrift |
embossed | enheter som gir sideorientert blindeskrift |
handheld | små, håndholdte enheter, typisk med liten "skjerm" |
projection | projiserte presentasjoner |
tty | enkle, karakterorienterte enheter |
tv | lav oppløsning, begrenset scroll, tilgang på lyd |
I praksis er det vel slik at det er de tre første som er implementert i de fleste nettlesere. Vi kan kanskje forvente at aural, kanskje under navnet speech, er den neste som bli vanlig ?. Opera hadde i noen versjoner en ganske fiks implementering av projection. Synd at den forsvant fordi det gjorder det enkelt å vedlikehold både en web-side, et printet dokument og en "foredrags"-versjon (projection).
Vi kan bruke et eksempel til å studere dette nærmere.
Vi tar for oss en enkel, og meningsløs, HTML-fil som ser slik ut:
Som det gå fram av koden er det koplet til et stilsett, demostil2.css. Dette stilsettet definerer stiler for to forskjellige medier: screen og print. Stilsettet er i sin helhet slik:
Stilsettet er altså forberedt for å ta signaler om mediaskifte. Hvis vi skal se på HTML-fila i en nettleser så er vi avhengige av at nettleseren kan gjenkjenne og reagere på skifte i medium, eller med andre ord kan vi provosere fram en situasjon som tolkes som mediaskifte. I de fleste nettlesere skal vi kunne se print-varianten når vi printer eller når vi ber om å få se print-preview.
Prøv her https://borres.hiof.no/wep/css/media/mediademo2.html
Eller du kan forsøke å be om File - Print Preview av den siden du leser nå.
Spesifikasjon (queries)
Vi kan gå nærmere i detalj ved å spesifisere flere egenskaper ved mediet. W3C [2] foreslår følgende :
- width
- height
- device-width
- device-height
- orientation
- aspect-ratio
- device-aspect-ratio
- color
- color-index
- monochrome
- resolution
- scan
- grid
Ikke alle disse er implementert i de vanlige nettleserne. De viktigste vi kan bruke i øyeblikket er : width, max-width, min-width og orientation. F.eks:
@media (width: 400px) {} @media (min-width: 100px) {} @media (max-width: 1000px) {} @media screen and (max-width: 699px) and (min-width: 520px) {} @media all and (orientation:landscape) {}
Vi ser at det er egenskaper av denne typen som kan hjelpe oss å identifisere brett og mobiler av ulik størrelse, og som er orientert på forskjellig måte. Det er imidlertid en del skjær i sjøen hvis vi skal være veldig nøyaktige. Ulike enheter rapporterer ikke på samme måte når det gjelder bredde. Vi har da valget om vi vil sette oss inn i alle detaljer når det gjelder alle aktuelle medier, eller om vi lager løsninger som er "bra nok".
Merk også at mange av de forklaringene og strategiene du finner på nette for å bruke disse egenskapene refererer til begrepet viewport. Dette begrepet opptrer også i en meta-tag som vi praksis ønsker å bruke n på websider vi ønsker å lage fleksible, f.eks:
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
Valg av stilsett
Vi kan altså legge media-spesifikasjoner inne i et style element
<style> @media all{ h1{font-size: 24px;} p{font-size: 12px;} } @media print{ h1{font-size: 48px; page-break-before:always} } @media screen{ .printOnly{display:none} } </style>
eller i .css-filer som vi linker til
Vi kan også bruke separate filer og gjøre slik på websiden:
<link rel="stylesheet" media="screen and (min-width:500px)" href="big.css" />