visa hela sajten visa mobil version
Improove på Twitter:
"improove: Improove | Lärdomar och trender från Nordic eCommerce Summit 2012: Jag fick chansen att gå på Nordic eCommerce S... http://t.co/g3R8SyQU"
Sagt om oss på Twitter:
"@improove @24hbc @peterrosdahl @ptz0n Yey! Ska bli så kul :D"

Så växlar du mellan desktop- och mobil med responsive webdesign

21 Aug 2011 Övrigt

Jag har tidigare skrivit lite om responsive webdesign på bloggen(här och här) och höll en session på SSWC för ett tag sedan. En nyttig session med mycket bra input från flera av deltagarna. Vi hade bland annat et mycket intressant samtal om mobilversioner överhuvudtaget och hur irriterande det är när en mobilversion av en webbplats inte innehåller all den funktionalitet som finns i desktop-versionen. Frågan som ställdes var om det i vissa fall inte är bättre att skippa en mobilanpassad version och bara låta besökarna se den ordinarie versionen av sajten.

Detta har fått mig att tänka på hur man enklast sköter växling mellan desktopversoinen(med full funktionalitet) och en ev. begränsad mobilversion i responseive webdesign(och media queries). Det vanliga angreppssättet att växla mellan versioner av webbplatsen är att lösa detta med cookies som skickar information till servern om vad användaren valt. Efter en stunds funderande slår det mig att också detta moment blir enklare i en responsive-approach. Så pass att också går att lösa med…CSS helt utan php-kod.

Eftersom media queries bara väljer css kan man i responsive webdesign sköta detta helt och hållet på klientsidan. Genom att lägga in två st knappar på sidan. En för mobilversionen och en för desktopversionen kan man helt enkelt dölja eller visa dessa beroende på vilken CSS-som visas. Ett tryck på denn knapp gör sedan två saker.

  1. Sätter en cookie via javascript som håller reda vilken version man vill visa.
  2. Aktiverar ett javascript som tömmer eller lägger till css beroende på vilken version som är vald.
Detta kan se ut som nedan. När man trycker på knappen tas iphone-css-filen som media queries aktiverat bort och istället visas den vanliga sajten som användaren får zooma i om man vill. Helt utan sidomladdningar och det går blixtsnabbt eftersom allt content redan är inladdat.

Återigen förbluffande enkelt. Knapparna jag lägger in har följande kod.

<a id="normalLink" href="javascript:removejscssfile('style_iphone.css', 'css')">visa hela sajten</a>
<a id="mobileLink" href="javascript:applycssfile('style_iphone.css', 'mobileStyle')">visa mobil version</a>

I css för mobil-sajten har #normalLink ”display: inline” och #mobileLink ”display:none”. När css-filerna switchas så växlas bara dessa värden och den knapp som nyss visades döljs och vice versa.

För att slippa ladda om sidan använder jag mig av följande javascript-metod för att rensa bort css-kod som lagts till av media queries-frågan. Det funkar helt smärtfritt i de tester jag gjort.

function removejscssfile(filename, filetype) {
	var targetelement = "link";
	var targetattr = "href";
	var allsuspects=document.getElementsByTagName(targetelement)

	for (var i=allsuspects.length; i>=0; i--) {
		if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1) {
		   allsuspects[i].parentNode.removeChild(allsuspects[i])
		}
	}
}
I de fall jag behöver lägga till en inte inladdad css använder jag istället denna metod.
function applycssfile(filename) {
	$('head').append('<link rel="stylesheet" href="'+filename+'" type="text/css" />');
}

3 svar to “Så växlar du mellan desktop- och mobil med responsive webdesign”

  1. JoakimNo Gravatar - http://www.joakimgreen.com

    Som ett tillägg skulle jag föreslå att du med hjälp av JS även ser till att initial-scale bara är 1.0 när mobilversionen visas. Vad tror du om det?

  2. P-M NordkvistNo Gravatar - http://www.improove.se

    Verkligen. Som jag gör nu har jag ninitial-scale 1.0 men jag har inte låst zoom-funktionen i mobilversionen. Den enda anledningen till detta är att jag inte vill köra ett javascript för att ändra viewport men det är ju inte något jätteproblem i sammanhanget.

    Bra ide.

  3. David LindnerNo Gravatar -

    Det borde verkligen vara obligatoriskt att ha en ”visa hela sajten” länk lätt åtkomling på alla mobilsajter. Så irriterande när man inte lätt har tillgång till det alternativet.

    / David

Kommentera inlägget