Webbutveckling01 [weuweb01]

Moment07 - Responsiv design

Introduktion

I det förra momentet så märkte vi att det ställs en del krav på oss att skapa webbsidor som ser bra ut i flera olika användaragenter. Vi skall nu lära oss responsiv design för att kunna styra hur webbsidor skall visas upp på en laptop, en tablet och en smartphone.

Momentets mål

I varje moment så jobbar vi mot ett eller flera mål som skolverket har satt upp i varje kurs.

Centralt innehåll

  • Märkspråk och deras inbördes roller, syntax och semantik – där det huvudsakliga innehållet är standarderna för HTML 5 (Hyper Text Markup Language) och CSS (Cascading Style Sheets) samt orientering om dokumentobjektsmodellen, DOM (Document Object Model) och Ecmaskript.
  • Bilder och media med alternativa format, optimering och tillgänglighet.
  • Nationella och internationella riktlinjer för god praxis inom webbutveckling.
  • Uppnående av interoperabilitet genom att följa standarder och testa på olika användaragenter.
  • Applikationer som fungerar oberoende av val av användaragent, operativsystem eller hårdvaruplattform samt hur tillgänglighet uppnås utifrån att applikationerna ska vara användarvänliga och robusta även för användare med funktionsnedsättning.
  • Kvalitetssäkring av applikationens funktion och validering av kodens kvalitet.
  • Terminologi inom området webbutveckling.

Responsiv design

Responsiv design handlar om att anpassa webbsidorna till olika användaragenter. Tidigare har utvecklare byggt olika sidor för olika enheter, kanske har du någon gång blivit överflyttad till m.coolasidan.nu när du går in på coolasidan med en mobiltelefon. Det där är en rest från hur det såg ut tidigare när det tekniskt var svårare att utveckla för flera olika enheter samtidigt. Men idag är det inte speciellt svårt och vi vill åt mer och mer sömlösa övergångar mellan olika agenter. En stående smartphone har en ganska smal bild, en liggande smartphone är nästan lika bred som en stående tablet och en liggande tablet kan visa lika många pixlar som en laptop. Detta innebär att vi måste ta hänsyn till vårt förändrade förhållningssätt till hur vi använder webbsidor.

Som så mycket inom webbutveckling så går utvecklingen väldigt fort. De som jobbar i branschen är ofta väldigt insatta i teknikerna och vet precis vad som är det senaste och det som är mest effektivt för tillfället. Det jag vill att du lär dig i detta moment är själva konceptet kring responsiv design. De tekniker jag använder i övningarna kommer säkerligen fungera i flera år framåt men de kommer hela tiden nya tekniker och lösningar. Förstår du dock varför och hur du behöver tänka så är du mottaglig för den nya tekniken.

Övning genom exempel

Jag visar med exempel. Jag har byggt om den samlingssidan som vi gemensamt byggde i början av kursen. Här hittar du filen. Naturligtvis har jag skruvat till den lite extra så att vi har lite jobb att göra för att få sidan att bli responsiv. Validering av html- och css-kod går utan problem, tillgänglighetsvalideringen går också bra. Om vi gör ett test på mobilvänligheten så får vi däremot underkänt.

bild

Webben vimlar av mer eller mindre bra tjänster, här vill jag visa en som inte validerar koden men som på ett enkelt sätt visar hur din sida ser ut i fyra olika agenter på samma gång, ami.responsivedesign.is. Extra smidig blir tjänsten då du kan köra direkt från localhost. Bild på hur min samlingssida ser ut hittar du nedan, länken hittar du här.

bild

Relativa enheter

På samlingssidan så har jag använt mig av enheter som har absoluta längder, i mitt fall px som står för pixlar. Jag har t.ex. talat om att bredden på main-elementet skall vara 1200px vilket den alltid kommer vara oavsett hur bred skärmen är. Pixel är ju ett mått på den minsta enhet som kan visas på en skärm. Beroende på upplösningen på skärmen så kan det visas fler pixlar i bredd. Fler absoluta enheter är cm (centimeter), mm (millimeter) och pt (points).

Alternativet till absoluta längder är att använda relativa längder. Exempel på relativa enheter är % (procent av skärmen), vw (motsvarar 1% av bredden på viewport, vilket motsvarar browserns bredd), vh (motsvarar 1% av höjden på viewport) sedan finns det em och rem som båda är storleken i relation till ett elements font-size. Em står för det elementets font-size medan rem står för root-elementets font-size. Mer info om de olika enheterna kan du hitta här. Em och rem är lämpligast att använda för att bestämma storlek för text och % har varit den vanligaste enheten för övriga elements storlek även om vw och vh blir mer och mer populära allt eftersom webbläsare stödjer dessa enheter, i dagsläget stödjer alla moderna webbläsare vw och vh.

Kolla vilka element och attribut som stöds av de olika webbläsarna här, det är framförallt viktigt att testa när det dyker upp nya element och attribut som du vill använda i utvecklingen av webbsidor.

Övning

Dags att ge sig på samlingssidan, jag kommer att ersätta alla storlekar med vw, vh och rem. Det jag vill få fram är att sidan skall se likadan ut i fullskärm som tidigare men att den skall skalas ner och behålla proportionerna även på en mindre skärm. Jag är medveten om att mobilvänligheten kanske inte blir så mycket bättre på en väldigt liten skärm men jag vill inte att någon del av sidan skall befinna sig utanför skärmen som det är just nu.

Borders, padding och margin har ofta små värden och här kan det vara aktuellt att använda px. Det gäller att prova sig fram lite. Våra koder är ju validerade så vi har inte gjort något fel så här långt, nu gäller det bara att skapa den upplevelsen av sidan som vi vill åt.

Den uppdaterade filen hittar du här. Välj att visa sidkällan för att se all kod, vill du på ett enkelt sätt se skillnaden på den tidigare koden så använd tjänsten diffnow.com.

När vi testar mobilvänligheten så får den nya sidan grönt ljus.

bild

Det går naturligtvis att se att sidan inte är helt perfekt men det som vi ser är att på smalare skärmar så byter våra section-element rad när de inte får plats vilket gör att hela sidan aldrig blir bredare än skärmens bredd. Vi ser också på bilden nedan att på smartphonen så visas bara ett section-element i bredd eftersom det inte får plats med två stycken i bredd som det gör på skärmen för en tablet. Utseendemässigt är jag inte helt nöjd med hur header-elementet visas upp på en smartphone, men det får vara så för tillfället.

bild

Uppgift

För att du själv skall bli duktig på att skapa responsiva webbsidor så kan ett första sätt vara att bygga om din samlingssida med bara relativa enheter.

Media queries

Nästa teknik vi skall kolla på är att jobba med Media queries vilket gör att vi kan styra så att olika delar av css-koden skall användas beroende på bredden av skärmen. På detta sätt kan vi styra fler saker än vi gjorde tidigare när vi bara använde oss av relativa enheter. Kika på bilden ovan där jag visar den nya sidan på olika skärmar. De tre rutorna för olika kurser ser olika ut på olika enheter, på de två stora skärmarna så visas alla tre rutor på en rad, på smartphonen så visas alla rutorna under varandra och på tableten så bryts raden med rutor så att det visas två rutor på första raden och en ensam på andra raden. Detta skall vi åtgärda lite senare.

För att tala om för webbläsaren att den behöver ta hänsyn till webbläsarens storlek så skriver vi följande html-kod.

<meta name="viewport" content="width=device-width" />

Nedan ser du grundsyntaxen för hur @media query skrivs i css. Argumentet screen and (max-width: 599px) innebär att detta skall gälla på alla skärmar där bredden är max 599px, vilket då gäller smartphones och eventuellt mindre tablets. Inne i @media-elementet så skriver du nu argument precis som vanligt. På detta sätt kan du sedan skapa olika regler som gäller generellt eller när skärmen har en viss storlek (eller webbläsarens bredd).

@media screen and (max-width: 599px){

}

Här hittar du en film som visar hur det fungerar att skapa många olika regler för media queries.

Övning

Jag skall visa ett exempel på hur man kan jobba med @media-elementet. Jag skall ändra bakgrundsfärg på header&footer-elementen beroende på skärmens storlek och sedan ta hand om hur kursrutorna visas upp i tabletmode, jag vill att de hamnar under varandra på samma sätt som de visas i en smartphone. En sista sak är storleken på texten inne i header-elementet på en smartphone som just nu är för stor, det behöver fixas till.

bild

Den uppdaterade filen hittar du här. Välj att visa sidkällan för att se all kod, vill du på ett enkelt sätt se skillnaden på den tidigare koden så använd tjänsten diffnow.com.

Om du testar förminska webbsidan som visar mitt exempel så kommer du se att designen hoppar lite vilket den gör eftersom det finns lägen mellan de olika skärmstorlekarna där vi inte har styrt designen perfekt. Detta är lätt hänt när det finns många inställningar som gäller vid olika tillällen. Ett sätt att få bättre koll på detta är att utgå från mobile first vilket innebär att du börjar designa webbsidan för den minsta skärmstorleken och sedan förändrar designen när bredden överstiger ett visst värde, precis tvärt om mot hur vi har gjort med andra ord. För att se vilka problem du själv får i designen så behöver du öka och minska storleken på webbläsaren för att se hur den reagerar vid olika storlekar.

Uppgift

Det här är lite svårare än den förra uppgiften och det kan ofta kännas lite pilligt att anpassa webbsidan på flera olika sätt. Men det är också bra träning och om du vill nå de högre betygen på denna kursen så behöver du behärska detta arbetet.

Träna på att bygga om din samlingssida eller något tidigare projekt du har gjort som Evas Frukt eller Hit & Dit-resor.

Ramverk

Vi skall avsluta med att kolla på ett ramverk som hjälper oss väldigt mycket när vi skall göra responsiva webbsidor. Det mest populära ramverket för detta heter för tillfället bootstrap och det är både kraftfullt och omfattande. Bootstrap kommer vi jobba med i fortsättningskursen Webbutveckling02. För många känns det dock som ett väl stort steg att ta direkt och då finns det ett enklare ramverk som heter Materialize css. När jag pratar om ett enkelt ramverk så är det naturligtvis relativt. Alla ramverk har sin uppsättning av regler och så länge man följer dessa så kommer sidan fungera som det är tänkt. Nackdelen med ramverk är ofta att de kräver lite arbete och tid att komma över tröskeln för att få allt att fungera. Alla regler gör det enkelt att tappa bort sig och gå vilse om man inte är strukturerad i sitt kodande.

På ramverkets hemsida så finns all info som kommer behövas. Den grundläggande html-strukturen finns att hämta och sedan handlar det om att hämta kod för olika komponenter och pussla ihop din sida. Det tar en liten stund att komma in i det men när du förstår hur det är uppbyggt så handlar det om att klippa, klistra och ändra. Ett tips från coachen är att se till att koden är korrekt indenterad annars kommer du gå vilse när du skall flytta element eller placera ut nya element i din befintliga struktur.

Övning

Jag kommer bygga om samlingssidan med hjälp av Materialize css och det finns en film som gör nästan samma sak som jag vill göra.

Samlingssidan skapad med Materialize css hittar du här och så här ser sidan ut när jag är klar. Det mesta ser bra ut förutom kursrubriken Webbserverprogrammering01 som har blivit för lång. Detta lägger jag ingen energi på nu, men hade jag lämnat in denna uppgift så hade det inte varit godkänt.

bild

Uppgift

Det här är ännu lite svårare än de tidigare uppgifterna men om du tycker att det är kul med webbutveckling och vill lära dig att arbeta med ramverk för att snabbt bygga snygga webbsidor så är det värt att göra denna uppgiften.

Redovisning

Minst en uppgift skall göras och redovisas. Länka till sidan du har skapat och presentera uppgiften/uppgifterna i inlägg på din wordpressida.