<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sv">
	<id>https://webbling.se/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PGJ</id>
	<title>Webbling - Användarbidrag [sv]</title>
	<link rel="self" type="application/atom+xml" href="https://webbling.se/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PGJ"/>
	<link rel="alternate" type="text/html" href="https://webbling.se/index.php/Special:Bidrag/PGJ"/>
	<updated>2026-04-26T03:11:17Z</updated>
	<subtitle>Användarbidrag</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://webbling.se/index.php?title=Att_skapa_interaktivitet_med_Leaflet&amp;diff=5087</id>
		<title>Att skapa interaktivitet med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_skapa_interaktivitet_med_Leaflet&amp;diff=5087"/>
		<updated>2024-09-18T07:14:44Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi får ju redan i grunden en del automatisk interaktivitet när vi använder oss av Leaflet. Användaren kan panorera och zooma runt i kartan. Vi ska nu titta på hur man kan lägga till mer saker som gör att användaren kan interagera med kartan.&lt;br /&gt;
&lt;br /&gt;
== Popups ==&lt;br /&gt;
Popups är ett bra sätt att visa upp extra information som gäller för intressepunkter på kartan. Det finns bra stöd i Leaflet för detta och det är mycket enkelt att koppla popups till objekt som lagts till på kartan. Popup triggas igång och visas när användaren klickar på det objekt till vilket popup:en är kopplad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Man kan bara ha en popup framme samtidigt. Om en popup redan är öppen och användaren klickar på en ny popup, så kommer den första popup:en att stängas ned. Om vi klickar en gång till på samma objekt ifrån vilket det öppnades en popup, så kommer den kopplade popup:en att stängas ned. Likaså försvinner popup:er även om vi klickar utanför det kopplade objektet, oavsett om en ny popup triggas igång eller ej. Självklart kan användaren även klicka på det lilla krysset i popup:en för att stänga denna.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Vi utgår ifrån det sista exemplet i förra aktiviteten. Där ritade vi ut en polygon kring Soltorgsgymnasiet. Vi ska nu göra så att en popup med information dyker upp när vi klickar på polygonen. Det gör vi så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;pgedqJ&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;650&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;bindPopup&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Vi behöver ha en instansvariabel som pekar på det kartobjekt som vi vill koppla vår popup till. I vårt exempel har vi  sparat undan vårt objekt i &amp;lt;code&amp;gt;polygon&amp;lt;/code&amp;gt;. I detta objekt finns en metod som heter &amp;lt;code&amp;gt;bindPopup&amp;lt;/code&amp;gt; med vilken vi kan koppla till popup-funktionalitet.&lt;br /&gt;
&lt;br /&gt;
I den enklaste varianten tar &amp;lt;code&amp;gt;bindPopup&amp;lt;/code&amp;gt; en sträng som input. Strängen innehåller det som ska visas när användaren klickar. Strängens innehåll kommer att tolkas som HTML-kod. Vi kan alltså använda så gott som alla HTML-taggar här och på så vis bygga upp en relativt snygg popup. Vi skulle även kunna skicka med ett redan existerande HTML-element som då skulle visas i popup:en.&lt;br /&gt;
&lt;br /&gt;
Vanligtvis utgår popup:ens position från den punkt där användaren klickade. Det går även att ange på vilken latitud och longitud som popup:en ska hamna. Dessa anges då som sista parametrar till metoden, t.ex.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
polygon.bindPopup(&amp;quot;Hej&amp;quot;, &amp;lt;latitud&amp;gt;, &amp;lt;longitud&amp;gt;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denna variant kan vara bra att använda om du alltid vill att popup:en ska placeras på en likformig plats, oavsett vilken position som användaren klickar på. En orsak till att göra detta kan vara att man vill undvika att popup:en täcker viss information på kartan.&lt;br /&gt;
&lt;br /&gt;
== Händelser ==&lt;br /&gt;
Vi kan även koppla så att kod körs när olika händelser inträffar. I stort sett fungerar detta som händelser vanligtvis gör när vi kodar mot webbläsaren. Vi kopplar en händelsehanterare till vald Leaflet komponent och den triggas igång när en händelse inträffar. Det finns flera olika händelsetyper. Några av dessa är unika för vissa typer av kartobjekt, medan andra är universiella och gäller för alla typer av kartobjekt. Vi kan inte täcka alla varianter här, så kolla gärna på [http://leafletjs.com/reference.html Leflets dokumentation] för att i detalj se vilka händelser som är tillgängliga för de olika objekttyperna.&lt;br /&gt;
&lt;br /&gt;
==== Klickhändelser ====&lt;br /&gt;
Vi ska titta på hur man kan lägga till en händelse som triggas när användaren klickar på ett kartobjekt.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;gPmoYE&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;875&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den viktigaste kodraden är den där vi kopplar händelsen till vår händelsehanterarande funktion. Vi kan använda denna metod på de flesta typer av Leaflet-objekt. Precis som i fallet med [[jQuery]] tar metoden händelsetypen som första parameter. Den andra parametern är den funktion som vi vill ska triggas igång när händelsen inträffar. &lt;br /&gt;
&lt;br /&gt;
Vår funktion &amp;lt;code&amp;gt;klickade&amp;lt;/code&amp;gt; kommer alltså att köras när användaren klickar i vår polygon. I den kollar vi först vilken färg vår polygon har för tillfället. Vi kan komma åt alla utseende-inställningarna via &amp;lt;code&amp;gt;options&amp;lt;/code&amp;gt;. I vårt fall vill vi alltså ta fram färgen, vilken vi kommer åt med &amp;lt;code&amp;gt;options.color&amp;lt;/code&amp;gt;. Om denna är satt till gul, vilket den är från starten, ändrar vi den till röd. Metoden &amp;lt;code&amp;gt;setStyle&amp;lt;/code&amp;gt; möjliggör alltså att vi kan gå in och redigera ett objekts utseende efter det att det har skapats. Dess inparameter är ett objekt som innehåller alla de inställningar vi vill förändra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Lägg märke till att om du klickar flera gånger och råkar klicka för &amp;quot;fort&amp;quot;, kommer dina klick inte att tas som en klickhändelse. Istället ses det som ett dubbelklick. Då körs förstås inte vår händelse-hanterare.&lt;br /&gt;
&lt;br /&gt;
Så som exemplet ser ut nu, tar Leaflet ett dubbelklick som en zoom-gest.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
I nästa aktivitet ska vi gå igenom ett litet fylligare Leaflet-exempel.&lt;br /&gt;
&lt;br /&gt;
[[En exempelapplikation i Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_l%C3%A4gga_till_extra_data_med_Leaflet&amp;diff=5086</id>
		<title>Att lägga till extra data med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_l%C3%A4gga_till_extra_data_med_Leaflet&amp;diff=5086"/>
		<updated>2024-09-18T07:09:29Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska nu titta på några olika metoder för att lägga till markörer och liknande i våra kartor. Dessa kan användas för att t.ex. visa upp intressepunkter eller för att åskådliggöra statistik på ett geografiskt plan. Leaflet har många olika metoder som kan användas för detta.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till en markör ==&lt;br /&gt;
Som första exempel ska vi lägga till en markör i kartan. Denna markör kan användas för att markera var en intressepunkt finns. Ofta använder vi denna för att visa upp en specifik punkt som användaren sökt efter eller för att markera var något intressant finns.  När man skrollar runt eller zooma runt i kartan, kan man lätt tappa bort vilken punkt det var man sökte efter och markören kan då hjälpa en att hitta tillbaka.&lt;br /&gt;
&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Vi utgår från vårt tidigare exempel där vi visade upp var användaren befinner sig på en karta. Vi utökar det så att det läggs till en markör på den punkt där webbläsaren rapporterar att användaren finns. Kom ihåg att det finns en viss felmarginal som gör att den kanske inte placeras på den exakta positionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;PZpOGa&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;marker&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Den intressantaste kodraden ligger en bit ner i vår &amp;lt;code&amp;gt;VisaPosition&amp;lt;/code&amp;gt;-funktion. Sist i denna har vi en ny rad som ser ut så här (den är utmärkt i exemplet med ett antal &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;-tecken):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
let marker = L.marker(koordinater).addTo(map);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vi kan alltså mycket enkelt lägga till en markör. Vi behöver bara kalla på &amp;lt;code&amp;gt;marker&amp;lt;/code&amp;gt; och skicka med koordinaterna till den punkt som vi vill markera. Koordinaterna  skickas i en array som innehåller latitud och longitud.&lt;br /&gt;
&lt;br /&gt;
För att markören ska visas i kartan gör vi en &amp;lt;code&amp;gt;addTo&amp;lt;/code&amp;gt; på slutet. Som inparameter tar den ett objekt som representerar den kartvy i vilken vi vill visa markören. Vi kan självklart ha olika kartvyer igång samtidigt.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till en cirkel ==&lt;br /&gt;
När vi jobbar med kartor vill vi ofta markera en hel region. Här kan det vara bra att kunna lägga till cirklar. Dessa är mycket användbara för att indikera saker som utsträckning, felmarginal eller liknande. Även dessa är lätta att skapa i Leaflet&lt;br /&gt;
&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Som vi nämnde tidigare så får vi inte exakta positionsangivelser från webbläsaren. Vi kunde med hjälp av &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt;-värdet läsa ut felmarginalen. Vi skulle kunna använda denna information för att utöka föregående exempel med en cirkel som visar felmarginallen som gäller för mätningen. Det kan vi göra så här:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;jWBGjQ&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Vi skapar cirkeln med metoden &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;. Som inparameterar tar den först den koordinat som ska gälla som centrum för cirkeln. I vårt fall vill vi använda de koordinater som vi fick ut från webbläsarens positioneringsangivelse. Därefter föjer den radie som vi vill att cirkeln ska ha. Radien anges i meter. Vilket ju var samma enhet som &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; rapporterades i. Vi kan alltså använda den rakt av.&lt;br /&gt;
&lt;br /&gt;
==== Utritningsinställningar ====&lt;br /&gt;
Den sista parametern till &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;-metoden anger inställningar för hur cirkeln ska ritas ut. Man kan sätta många olika saker här. Läs mer på [http://leafletjs.com/reference.html#path-options Path Options] om du vill se allt som går att göra. I vårt fall anger vi fyra saker, nämligen:&lt;br /&gt;
;&amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt;: Vilken färg ska cirkeln ha? Alla de färgangivelserna som är tillgängliga för CSS går att använda här. Se &amp;quot;[[Färg]]&amp;quot;-aktiviteten för mer information om CSS och färger. Defaultvärdet är &amp;lt;code&amp;gt;#03f&amp;lt;/code&amp;gt;.&lt;br /&gt;
;&amp;lt;code&amp;gt;opacity&amp;lt;/code&amp;gt;: Hur genomskinlig ska cirkelkanten vara? Anges som ett flyttal mellan &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, helt genomskinlig, och &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, helt ogenomskinlig. Det är alltså ett [[alfavärde]] och kan ses som en procentsats. Defaultvärdet är &amp;lt;code&amp;gt;0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
;&amp;lt;code&amp;gt;fillColor&amp;lt;/code&amp;gt;:  Här anges den färg som cirkeln ska fyllas med, även här fungerar alla CSS-färgangivelser. Defaultvärdet är samma färg som cirkelramen.  (Om man inte vill fylla cirkeln, kan man använda &amp;lt;code&amp;gt;fill: false&amp;lt;/code&amp;gt;).&lt;br /&gt;
;&amp;lt;code&amp;gt;fillOpacity&amp;lt;/code&amp;gt;:Hur genomskinlig ska fyllningen vara. Fungerar såsom &amp;lt;code&amp;gt;opacity&amp;lt;/code&amp;gt; ovan. Defaultvärdet är &amp;lt;code&amp;gt;0.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till en Polygon ==&lt;br /&gt;
En polygon är ju en månghörning. Med hjälp av polygoner kan vi markera regioner rätt så fritt. Vi kan ange så få eller så många hörnpunkter som vi vill. Den faktiska form som polygongen får styrs såväl av antalet hörnpunkter som av hörnpunkternas placering.&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Den här gången utgår vi från vårt tidigare exempel där vi visade upp Soltorgsgymnasiet i Borlänge. Nu ska vi rita en fyrhörning polygon runt skolan. Det kanske inte blir absolut rätt placering av hörnpunkterna, men det får duga som ett exempel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MKpOpW&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;polygon&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Som vi ser i exemplet så ritar vi ut polygoner med hjälp av metoden &amp;lt;code&amp;gt;polygon&amp;lt;/code&amp;gt;.&lt;br /&gt;
==== Hörnkoordinater ====&lt;br /&gt;
Den viktigaste parametern för denna metod är den första. Detta är en array som anger på vilka  koordinater som polygonens hörn ska placeras ut. Koordinaterna är &amp;quot;vanliga&amp;quot; longitud- och latitud-angivelser. Mellan varje angiven hörnpunkt kommer det att ritas en linje. Från den första till den sista hörnpunkten ritas automatiskt en linje som sluter polygonen. Den slutna figuren som bildas av polygonen kommer till sist att fyllas med angiven färg.&lt;br /&gt;
&lt;br /&gt;
==== Utritningsparametrar ====&lt;br /&gt;
Precis som i fallet med &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;, kan vi skicka med ett objekt som innehåller diverse inställningar som styr hur utritningen ska gå till. Som tidigare finns &amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;opacity&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;fillOpacity&amp;lt;/code&amp;gt; med och dessa fungerar såsom beskrevs under &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;-exemplet. Soltorgsgymnasiet ska förstås markeras ut med rejält gula färger!&lt;br /&gt;
&lt;br /&gt;
Det vi lagt till extra här är &amp;lt;code&amp;gt;weight&amp;lt;/code&amp;gt; som anger hur tjock den utritade linjen ska vara. I exemplet har vi satt den något fetare än normalt, defaultvärdet är &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;. Vi har med andra ord angett att linjen ska vara ungefär dubbelt så fet som normala linjer.&lt;br /&gt;
&lt;br /&gt;
== Många fler möjligheter ==&lt;br /&gt;
Det finns långt många fler metoder i Leaflet än vi kan täcka här. Du kan läsa deras [http://leafletjs.com/reference.html API-referens] för att få mer information.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi ska gå vidare med Leaflet och titta på hur man kan ge användaren tillfälle att interagera med kartan på olika vis.&lt;br /&gt;
&lt;br /&gt;
[[Att skapa interaktivitet med Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_l%C3%A4gga_till_extra_data_med_Leaflet&amp;diff=5085</id>
		<title>Att lägga till extra data med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_l%C3%A4gga_till_extra_data_med_Leaflet&amp;diff=5085"/>
		<updated>2024-09-18T06:51:26Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska nu titta på några olika metoder för att lägga till markörer och liknande i våra kartor. Dessa kan användas för att t.ex. visa upp intressepunkter eller för att åskådliggöra statistik på ett geografiskt plan. Leaflet har många olika metoder som kan användas för detta.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till en markör ==&lt;br /&gt;
Som första exempel ska vi lägga till en markör i kartan. Denna markör kan användas för att markera var en intressepunkt finns. Ofta använder vi denna för att visa upp en specifik punkt som användaren sökt efter eller för att markera var något intressant finns.  När man skrollar runt eller zooma runt i kartan, kan man lätt tappa bort vilken punkt det var man sökte efter och markören kan då hjälpa en att hitta tillbaka.&lt;br /&gt;
&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Vi utgår från vårt tidigare exempel där vi visade upp var användaren befinner sig på en karta. Vi utökar det så att det läggs till en markör på den punkt där webbläsaren rapporterar att användaren finns. Kom ihåg att det finns en viss felmarginal som gör att den kanske inte placeras på den exakta positionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;PZpOGa&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;marker&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Den intressantaste kodraden ligger en bit ner i vår &amp;lt;code&amp;gt;VisaPosition&amp;lt;/code&amp;gt;-funktion. Sist i denna har vi en ny rad som ser ut så här (den är utmärkt i exemplet med ett antal &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;-tecken):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
let marker = L.marker(koordinater).addTo(map);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vi kan alltså mycket enkelt lägga till en markör. Vi behöver bara kalla på &amp;lt;code&amp;gt;marker&amp;lt;/code&amp;gt; och skicka med koordinaterna till den punkt som vi vill markera. Koordinaterna  skickas i en array som innehåller latitud och longitud.&lt;br /&gt;
&lt;br /&gt;
För att markören ska visas i kartan gör vi en &amp;lt;code&amp;gt;addTo&amp;lt;/code&amp;gt; på slutet. Som inparameter tar den ett objekt som representerar den kartvy i vilken vi vill visa markören. Vi kan självklart ha olika kartvyer igång samtidigt.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till en cirkel ==&lt;br /&gt;
När vi jobbar med kartor vill vi ofta markera en hel region. Här kan det vara bra att kunna lägga till cirklar. Dessa är mycket användbara för att indikera saker som utsträckning, felmarginal eller liknande. Även dessa är lätta att skapa i Leaflet&lt;br /&gt;
&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Som vi nämnde tidigare så får vi inte exakta positionsangivelser från webbläsaren. Vi kunde med hjälp av &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt;-värdet läsa ut felmarginalen. Vi skulle kunna använda denna information för att utöka föregående exempel med en cirkel som visar felmarginallen som gäller för mätningen. Det kan vi göra så här:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;jWBGjQ&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Vi skapar cirkeln med metoden &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;. Som inparameterar tar den först den koordinat som ska gälla som centrum för cirkeln. I vårt fall vill vi använda de koordinater som vi fick ut från webbläsarens positioneringsangivelse. Därefter föjer den radie som vi vill att cirkeln ska ha. Radien anges i meter. Vilket ju var samma enhet som &amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt; rapporterades i. Vi kan alltså använda den rakt av.&lt;br /&gt;
&lt;br /&gt;
==== Utritningsinställningar ====&lt;br /&gt;
Den sista parametern till &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;-metoden anger inställningar för hur cirkeln ska ritas ut. Man kan sätta många olika saker här. Läs mer på [http://leafletjs.com/reference.html#path-options Path Options] om du vill se allt som går att göra. I vårt fall anger vi fyra saker, nämligen:&lt;br /&gt;
;&amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt;: Vilken färg ska cirkeln ha? Alla de färgangivelserna som är tillgängliga för CSS går att använda här. Se &amp;quot;[[Färg]]&amp;quot;-aktiviteten för mer information om CSS och färger. Defaultvärdet är &amp;lt;code&amp;gt;#03f&amp;lt;/code&amp;gt;.&lt;br /&gt;
;&amp;lt;code&amp;gt;opacity&amp;lt;/code&amp;gt;: Hur genomskinlig ska cirkelkanten vara? Anges som ett flyttal mellan &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, helt genomskinlig, och &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, helt ogenomskinlig. Det är alltså ett [[alfavärde]] och kan ses som en procentsats. Defaultvärdet är &amp;lt;code&amp;gt;0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
;&amp;lt;code&amp;gt;fillColor&amp;lt;/code&amp;gt;:  Här anges den färg som cirkeln ska fyllas med, även här fungerar alla CSS-färgangivelser. Defaultvärdet är samma färg som cirkelramen.  (Om man inte vill fylla cirkeln, kan man använda &amp;lt;code&amp;gt;fill: false&amp;lt;/code&amp;gt;).&lt;br /&gt;
;&amp;lt;code&amp;gt;fillOpacity&amp;lt;/code&amp;gt;:Hur genomskinlig ska fyllningen vara. Fungerar såsom &amp;lt;code&amp;gt;opacity&amp;lt;/code&amp;gt; ovan. Defaultvärdet är &amp;lt;code&amp;gt;0.2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till en Polygon ==&lt;br /&gt;
En polygon är ju en månghörning. Med hjälp av polygoner kan vi markera regioner rätt så fritt. Vi kan ange så få eller så många hörnpunkter som vi vill. Den faktiska form som polygongen får styrs såväl av antalet hörnpunkter som av hörnpunkternas placering.&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Den här gången utgår vi från vårt tidigare exempel där vi visade upp Soltorgsgymnasiet i Borlänge. Nu ska vi rita en fyrhörning polygon runt skolan. Det kanske inte blir absolut rätt placering av hörnpunkterna, men det får duga som ett exempel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MKpOpW&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;polygon&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Polygoner ritas med hjälp av metoden &amp;lt;code&amp;gt;polygon&amp;lt;/code&amp;gt;.&lt;br /&gt;
==== Hörnkoordinater ====&lt;br /&gt;
Den viktigaste parametern för denna metod är den första. Detta är en array som anger på vilka  koordinater som polygonens hörn ska placeras ut. Koordinaterna är &amp;quot;vanliga&amp;quot; longitud- och latitud-angivelser. Mellan varje angiven hörnpunkt kommer det att ritas en linje. Mellan den första och den sista hörnpunkten ritas en linje som sluter polygonen. Den slutna figuren som bildas av polygonen kommer till sist att fyllas med angiven färg.&lt;br /&gt;
&lt;br /&gt;
==== Utritningsparametrar ====&lt;br /&gt;
Precis som i fallet med &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;, kan vi skicka med ett objekt som innehåller diverse inställningar som styr hur utritningen ska gå till. Som tidigare finns &amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;opacity&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;fillOpacity&amp;lt;/code&amp;gt; med och dessa fungerar såsom beskrevs under &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;-exemplet. Soltorgsgymnasiet ska förstås markeras ut med rejält gula färger!&lt;br /&gt;
&lt;br /&gt;
Det vi lagt till extra här är &amp;lt;code&amp;gt;weight&amp;lt;/code&amp;gt; som anger hur tjock den utritade linjen ska vara. Här har vi satt den något fetare än normalt, defaultvärdet är &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;. Vi har med andra ord angett att linjen ska vara ungefär dubbelt så fet som normala linjer.&lt;br /&gt;
&lt;br /&gt;
== Många fler möjligheter ==&lt;br /&gt;
Det finns långt många fler metoder i Leaflet än vi kan täcka här. Du kan läsa deras [http://leafletjs.com/reference.html API-referens] för att få mer information.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi ska gå vidare med Leaflet och titta på hur man kan ge användaren tillfälle att interagera med kartan på olika vis.&lt;br /&gt;
&lt;br /&gt;
[[Att skapa interaktivitet med Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5084</id>
		<title>Att komma igång med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5084"/>
		<updated>2024-09-18T06:48:47Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Leaflet är öppen källkod och utvecklas med hjälp av ett community. Det fungerar bra tillsammans med alla vanligt förekommande webbläsare, såväl på skrivbordet som på mobila enheter. Det finns många olika plugins till biblioteket som kan användas för att lägga till ytterligare funktionalitet. På det hela taget är det enkelt att jobba med Leaflet.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till Leaflet ==&lt;br /&gt;
För att lägga till Leaflet behöver vi inkludera två filer - dels en CSS-fil, dels en JavaScript-fil. CSS-filen lägger vi till i vår sidas &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;. Följande kommer att ta ner nuvarande version av Leaflet. Kolla alltid deras webbsajt för att se om det kommit en nyare version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://unpkg.com/leaflet@1.9.4/dist/leaflet.css&amp;quot;&lt;br /&gt;
     integrity=&amp;quot;sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=&amp;quot;&lt;br /&gt;
     crossorigin=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detta är grundinställningar för den CSS som Leaflet behöver. Dessa CSS-regler kommer antagligen inte att störa den CSS som du själv lagt till sidan. Men du kan ju vara uppmärksam på om det händer något oväntat i din sida när du lägger till denna rad.&lt;br /&gt;
&lt;br /&gt;
Därefter lägger vi till själva JavaScript-biblioteket. Man lägger oftast till detta någonstans i slutet av sidan, t.ex. strax före &amp;lt;code&amp;gt;&amp;amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;. Var man än placerar den, så måste JavaScript-delen laddas in efter CSS-delen. Så det är bäst att lägga den i slutet av HTML-koden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;script src=&amp;quot;https://unpkg.com/leaflet@1.9.4/dist/leaflet.js&amp;quot;&lt;br /&gt;
     integrity=&amp;quot;sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=&amp;quot;&lt;br /&gt;
     crossorigin=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Med dessa två rader på plats kan vi skapa ett exempel.&lt;br /&gt;
&lt;br /&gt;
== Leaflet-exempel ==&lt;br /&gt;
Låt säga att vi skulle vilja se var Soltorgsgymnasiet i Borlänge ligger. Då kunde vi göra som i följande exempel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;adJmEj&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Som vanligt, kom ihåg att även titta på &amp;quot;Result&amp;quot;-fliken.)&lt;br /&gt;
&lt;br /&gt;
Låt oss gå igenom exempelet och se vad de olika delarna gör för något.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
I HTML-koden började vi med att lägga till CDN-hämtningarna som förser oss med Leaflet. Förutom detta så har vi skapat en tom &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt; som fått ID:n &amp;lt;code&amp;gt;karta&amp;lt;/code&amp;gt;. Här kommer vi att visa upp vår karta.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
I CSS:en har vi inte gjort så mycket mer än att ge en storlek till den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; som ska innehålla kartan. Viktigast är höjden, bredden kommer att sättas till 100 % om vi inte anger något annat. Anger vi ingen höjd kommer vår karta inte att synas. Detta är på grund av att &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en är helt tom och därmed får sin höjd satt till &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
I JavaScript-delen har vi gjort lite mer. Vi tar och går igenom detta i mer detalj.&lt;br /&gt;
&lt;br /&gt;
==== Initiering av Leaflet ====&lt;br /&gt;
På den första raden skapar vi en karta och ställer vi in grunderna för den. Leaflet registreas som &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; när vi lägger till det. De flesta metoder som vi vill kalla på ligger alltså samlade i &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;-objektet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; skapar en ny kartregion Som inparameter tar den ID:t för den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där kartan ska visas. Därefter talar vi om vilka koordinater som vi är intresserade av genom att anropa metoden &amp;lt;code&amp;gt;setView&amp;lt;/code&amp;gt;. Som inparameterar tar denna en array med koordinaterna, först latitud och sen longitud. Vår karta kommer att centreras kring den angivna koordinaten. Den sista parametern anger vilken zoomfaktor som kartan ska visas upp med, desto högre tal desto längre inzoomade är vi.&lt;br /&gt;
&lt;br /&gt;
==== Inställningar för datakälla ====&lt;br /&gt;
Vi måste nu ange varifrån all kartdata ska hämtas. Vi kommer att använda oss av Open Street Map.&lt;br /&gt;
&lt;br /&gt;
==== Kart-tiles ====&lt;br /&gt;
Med &amp;lt;code&amp;gt;tileLayer&amp;lt;/code&amp;gt; anger vi dels att kartan vi ska hämta består av karttiles. Där tiles mer eller mindre betyder mosaikbitar. Det vill säga, det är småbitar som bygger upp en större helhet och kartan kommer att laddas in som ett flertal mindre grafikfiler. Dessa kombineras och visas bredvid varandra och på så vis byggs den kompletta kartvyn upp. När vi skrollar runt i kartan så laddas enbart de nya tiles som behövs för att täcka den inskrollade arean. Dessa läggs intill redan befintliga tiles och gör vår kartvy komplett igen. Om vi skrollar tillbaka kommer de tiles som redan är nedladdade att användas. Zoomar vi in eller ut, måste förstås nya karttiles laddas in.&lt;br /&gt;
&lt;br /&gt;
Hanteringen av karttiles gör att vi minimerar hur mycket data som måste hämtas när användaren skrollar runt i kartan. Denna teknik för karthämtning på webben uppfanns av Google när de skapade sin karttjänst Google Maps. Så gott som alla webbaserade karttjänster använder sig av liknande metoder.&lt;br /&gt;
&lt;br /&gt;
Om vi redan laddat in en kartbit så kommer den att lagras i webbläsarens cache, vilket gör att den kommer att återanvändas nästa gång den kartbiten är aktuell. Det går med andra ord mycket snabbare att visa de kartbitar som redan är hämtade.&lt;br /&gt;
&lt;br /&gt;
==== Att ange datakälla ====&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;tileLayers&amp;lt;/code&amp;gt; en länk till den server som kommer att tillhandahålla vår kartdata. Därefter följer ett objekt som innehåller de inställningar som ska gälla för källan. I vårt exempel anger vi varifrån data hämtas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Kom ihåg att ett av kraven som ställdes för att få utnyttja Open Street Map i en applikation var att man angav vilken källa data hämtades ifrån. Det är alltså viktigt att ha med denna information, speciellt i applikationer som vi ska &amp;quot;visa&amp;quot; upp för världen.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Koppla data till vy ====&lt;br /&gt;
När vi skapat ett objekt som kan tillhandahålla oss med kartdata måste vi även länka detta till vår kartvy. Detta gör vi med det chainade metodanropet &amp;lt;code&amp;gt;addTo&amp;lt;/code&amp;gt;. Som inparameter tar denna metod det objekt som vi fick tillbaka när vi körde &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;-metoden. Det vill säga det objekt som innehåller information om vår kartvy.&lt;br /&gt;
&lt;br /&gt;
== Vår första karta ==&lt;br /&gt;
Om du klickar på &amp;quot;Resultat&amp;quot; bör du nu se vår första karta! Förutom att kartan visas upp, så har man automatiskt fått med en del finesser. Man kan panorera genom att dra runt kartan. Man kan zooma, antingen med &amp;quot;+/-&amp;quot;-knapparna eller via musens skrollhjul. I det nedre hörnet finns information om vad som används för att skapa/visa kartan - dvs Open Street Map och Leaflet. Länken till Open Street Map är nödvändig för att uppfylla användningsvillkoren för Open Street Maps. Så kom alltid ihåg att ha något liknande med!&lt;br /&gt;
&lt;br /&gt;
== Kombination av våra geografiska exempel ==&lt;br /&gt;
Man skulle förstås kunna kombinera vårt nuvarande exempel med det som vi gjorde tidigare i &amp;quot;[[Att ta reda på var någon befinner sig]]&amp;quot;-aktiviteten. Ett sådant exempel skulle kunna tänkas se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;pgeWKx&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1300&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns väl inte så mycket att tillägga angående vad koden gör. I stort sett är allt det samma som i våra tidigare exempel, förutom att istället för att använda fasta koordinatvärden så visar vi istället upp en karta som centreras kring den punkt där webbläsaren anger att vi befinner oss. &lt;br /&gt;
&lt;br /&gt;
Här kan det bli mer uppenbart om positionen är ett närmevärde. Prova gärna att köra exemplet både på din dator och på en mobil enhet som har GPS. Det borde märkas en väsentlig skillnad i precision på positionsangivelsen.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
I nästa aktivitet ska vi titta på hur man kan lägga ut diverse typer av extrainformation i kartor, vilket kan behövas om vi ska skapa appar som är baserade kring kartor och geografisk data.&lt;br /&gt;
&lt;br /&gt;
[[Att lägga till extra data med Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5083</id>
		<title>Ännu en SPA med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5083"/>
		<updated>2024-08-12T08:59:59Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska gå igenom hur man kan göra en variant på föregående SPA. Sveriges Radio har flera öppna API:er där man kan få tillgång till diverse data. Vi ska ta och titta närmare på deras API för trafikmeddelanden. Här kan man läsa ut information om de trafiksituationer som uppstår runt om i landet. Vi kan bland annat läsa ut är koordinater, titel och beskrivning. Sveriges Radios API:er kräver ingen [[API-nyckel]]. De supportar även [[CORS]] så vi kan hämta data direkt ifrån vår webbapplikation. Detta är alltså en utmärkt källa till exempeldata.&lt;br /&gt;
&lt;br /&gt;
För denna app ska vi ha ett något annorlunda upplägg. Kartan visar var det finns trafikmeddelanden och när användaren för musen över dessa så visar vi information om datapunkten i ett informationsfönster.&lt;br /&gt;
&lt;br /&gt;
== Vår applikation ==&lt;br /&gt;
Väldigt mycket av koden kommer att påminna om den som vi skrev för vår föregående [[SPA]], så vi kommer bara att gå igenom skillnaderna.&lt;br /&gt;
&lt;br /&gt;
== HTML ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Den största skillnaden är att vi lägger till en extra &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där vi ska visa information om vald trafiksituation. Vi delar upp ytan för trafikinformationen i två delar; en för kartan och en för textinformationen. Dessa ska vi sedan snygga till med lite CSS.&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;css&amp;quot; height=&amp;quot;700&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en till en flexbox, så att informationen som finns inuti den kommer att radas upp på samma rad. Vi väljer att de ska placeras ut likformigt med &amp;lt;code&amp;gt;jusitfy-content: space-around;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;#info&amp;lt;/code&amp;gt; till samma storlek, så det blir att se proportionellt ut. &lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1200&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I JavaScriptet har vi gjort en hel del ändringar...&lt;br /&gt;
&lt;br /&gt;
=== Zoomnivå ===&lt;br /&gt;
Första zoomar ut kartan och centrerar den så vi ser det mesta av Sverige (i alla fall om det finns plats i vår webbläsare).&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Vi döper om vår funktion avsedd för att hämta data till &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt;. Även Sveriges Radios API är ett [[REST]]-API, så vi kan kalla på det med en &amp;quot;vanlig&amp;quot; URL. Den enda inparameter vi bryr oss om att skicka med är &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt;, då vi vill ha data i JSON-format.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; är i det närmaste helt omskriven. Den data vi får ifrån Sveriges Radio är inte i GeoJSON. Vi får därför göra en egen loop som går igenom datan och behandlar varje post. För omväxlingens skull använder vi en anonym funktion denna gång. &lt;br /&gt;
&lt;br /&gt;
Vi lägger först till en markör på den position som anges för trafikmeddelandet. Vi kopplar en popup till varje markör - när användaren klickar på markören kommer namnet på platsen att visas. Därefter binder vi några händelsehanterare till markören. Först en som kommer att triggas när användaren sätter muspekaren ovanför markören och sedan en som triggas när muspekaren avlägsnas från markören.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Till &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; skickar vi även med nuvarande trafikmeddelande. När funktionen triggas kommer &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; att vara satt till respektive trafikmeddelande. Vi kan nu läsa ut informationen om trafikmeddelandet och sätta respektive informationsfält till den data som vi vill visa upp.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; gör inte speciellt mycket mer än att den rensar informationsfälten.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi är klara med sektionen som handlar om applikationer som körs i webbläsaren. Nu ska vi gå vidare och lära oss om hur man skapar serverapplikationer....&lt;br /&gt;
&lt;br /&gt;
[[Node - En introduktion]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5082</id>
		<title>Ännu en SPA med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5082"/>
		<updated>2024-08-12T08:59:23Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska gå igenom hur man kan göra en variant på föregående SPA. Sveriges Radio har flera öppna API:er där man kan få tillgång till diverse data. Vi ska ta och titta närmare på deras API för trafikmeddelanden. Här kan man läsa ut information om de trafiksituationer som uppstår runt om i landet. Vi kan bland annat läsa ut är koordinater, titel och beskrivning. Sveriges Radios API:er kräver ingen [[API-nyckel]]. De supportar även [[CORS]] så vi kan hämta data direkt ifrån vår webbapplikation. Detta är alltså en utmärkt källa till exempeldata.&lt;br /&gt;
&lt;br /&gt;
För denna app ska vi ha ett något annorlunda upplägg. Kartan visar var det finns trafikmeddelanden och när användaren för musen över dessa så visar vi information om datapunkten i ett informationsfönster.&lt;br /&gt;
&lt;br /&gt;
== Vår applikation ==&lt;br /&gt;
Väldigt mycket kommer att påminna om vår föregående [[SPA]], så vi kommer bara att gå igenom skillnaderna.&lt;br /&gt;
&lt;br /&gt;
== HTML ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Den största skillnaden är att vi lägger till en extra &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där vi ska visa information om vald trafiksituation. Vi delar upp ytan för trafikinformationen i två delar; en för kartan och en för textinformationen. Dessa ska vi sedan snygga till med lite CSS.&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;css&amp;quot; height=&amp;quot;700&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en till en flexbox, så att informationen som finns inuti den kommer att radas upp på samma rad. Vi väljer att de ska placeras ut likformigt med &amp;lt;code&amp;gt;jusitfy-content: space-around;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;#info&amp;lt;/code&amp;gt; till samma storlek, så det blir att se proportionellt ut. &lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1200&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I JavaScriptet har vi gjort en hel del ändringar...&lt;br /&gt;
&lt;br /&gt;
=== Zoomnivå ===&lt;br /&gt;
Första zoomar ut kartan och centrerar den så vi ser det mesta av Sverige (i alla fall om det finns plats i vår webbläsare).&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Vi döper om vår funktion avsedd för att hämta data till &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt;. Även Sveriges Radios API är ett [[REST]]-API, så vi kan kalla på det med en &amp;quot;vanlig&amp;quot; URL. Den enda inparameter vi bryr oss om att skicka med är &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt;, då vi vill ha data i JSON-format.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; är i det närmaste helt omskriven. Den data vi får ifrån Sveriges Radio är inte i GeoJSON. Vi får därför göra en egen loop som går igenom datan och behandlar varje post. För omväxlingens skull använder vi en anonym funktion denna gång. &lt;br /&gt;
&lt;br /&gt;
Vi lägger först till en markör på den position som anges för trafikmeddelandet. Vi kopplar en popup till varje markör - när användaren klickar på markören kommer namnet på platsen att visas. Därefter binder vi några händelsehanterare till markören. Först en som kommer att triggas när användaren sätter muspekaren ovanför markören och sedan en som triggas när muspekaren avlägsnas från markören.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Till &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; skickar vi även med nuvarande trafikmeddelande. När funktionen triggas kommer &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; att vara satt till respektive trafikmeddelande. Vi kan nu läsa ut informationen om trafikmeddelandet och sätta respektive informationsfält till den data som vi vill visa upp.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; gör inte speciellt mycket mer än att den rensar informationsfälten.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi är klara med sektionen som handlar om applikationer som körs i webbläsaren. Nu ska vi gå vidare och lära oss om hur man skapar serverapplikationer....&lt;br /&gt;
&lt;br /&gt;
[[Node - En introduktion]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=HTML5-taggar&amp;diff=5081</id>
		<title>HTML5-taggar</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=HTML5-taggar&amp;diff=5081"/>
		<updated>2024-08-12T08:57:18Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Här är en lista över alla [[tagg]]ar/[[HTML-element]] som är tillgängliga i [[HTML5]]. Om du är van med &amp;quot;uråldrig&amp;quot; [[HTML]], dvs före HTML5, finns det ett antal [[tagg]]ar som nu har annorlunda definition än tidigare.&lt;br /&gt;
&lt;br /&gt;
När du ska använda en [[tagg]] måste den sitta inom &amp;quot;&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;&amp;quot; och &amp;quot;&amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;quot;. Så &amp;lt;code&amp;gt;[[a]]&amp;lt;/code&amp;gt;-[[tagg]]en skrivs &amp;quot;&amp;lt;code&amp;gt;&amp;amp;lt;[[a]]&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;. För att avsluta behöver du oftast en [[sluttagg]]. Denna skrivs enligt samma mall som starttaggen, fast med ett &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; före taggnamnet. Så sluttaggen för vår exempeltagg skulle bli &amp;lt;code&amp;gt;&amp;amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;. Se [[TLDR_Taggar|taggar-diagrammet]] för mer ingående information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Observera att [[HTML]] är en levande [[standard]], som utvecklas kontinuerligt. Det gör att det kan komma till [[tagg]]ar, det kan försvinna [[tagg]]ar och deras betydelse kan förändras med tiden. Följande taggar är dock tillgängliga i dagens HTML5.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== A ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;[[a]]&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att definiera länkar.&lt;br /&gt;
=== &amp;lt;code&amp;gt;[[abbr]]&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definierar en förkortning och eventuellt en förklaring.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[address]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Kontaktinformation relaterad till den sektion som innehåller taggen.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[area]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används i &amp;lt;code&amp;gt;[[map]]&amp;lt;/code&amp;gt;-element för att definiera vilka regioner som är klickbara. Kan även koppla länkar till regionerna.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[article]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar innehåll på sidan som är ett eget, självständig stycke.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[aside]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar innehåll som är marginellt kopplat till huvudinnehållet.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[audio]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att inkludera ljudinnehåll i en webbsida.&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[b]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Text som på något vis skiljer sig ifrån övrig text, t.ex. produktnamn eller något som ska stå ut ifrån annan text.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[base]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definerar vilken grund-[[URL]] som ska användas för relativa länkar.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[bdi]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att indikera text som kan skrivas i omvänd ordning, t.ex. Arabiska.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[bdo]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att indikera text som ska skrivas i annan ordning, t.ex. för att växla mellan latinska språk och Arabiska och vice versa.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[blockquote]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Ett längre, blockcitat.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[body]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
I denna finns själva innehållet på sidan.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[br]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Infogar en radbrytning.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[button]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En knapp i ett formulär.&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[canvas]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definierar upp en region som skriptspråk kan använda för att rita figurer.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[caption]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att ge en figurtext till en tabell.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[cite]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att lägga till källhänvisning till ett citat.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[code]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Ett block med programkod.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[col]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En tabellkolumn.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[colgroup]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att grupper ett antal kolumner i en tabell.&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[data]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Kopplar data till innehållet, som sedan kan användas av skript eller liknande.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[datalist]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definierar en lista med alternativ för en [[input|&amp;lt;input&amp;gt;]]-kontroll.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[dd]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En förklaring till en term.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[del]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar att text tagits bort ifrån ett dokument, t.ex. för att indikera att det redigerats. Ofta visas detta genom överstruken text.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[details]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Visar antingen mer information om någonting eller anger var man kan hitta mer information.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[dfn]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definierar en term.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[div]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att gruppera samman innehåll. Har ingen semantisk betydelse.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[dl]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En lista med termer och dess definition.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[dt]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En term som ska definieras.&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[em]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Innehållet innanför taggen ska betonas med emfas.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[embed]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att infoga något slags extern komponent i webbsidan, t.ex. en plug-in.&lt;br /&gt;
&lt;br /&gt;
== F ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[fieldset]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Grupperar samman ett antal formulärkontroller.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[figcaption]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En förklarande text till en illustration/figur, ofta en bildtext.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[figure]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En egen sektion som på något vis illustrerar något i huvudsektionen, ofta en bild eller illustration.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[footer]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Material som ska vara med i sidfoten.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[form]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Påbörjar ett formulär.&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[hx|h1]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Översta rubriknivån. Denna ska enbart användas en gång per sektionselement.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[hx|h2]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Andra rubriknivån.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[hx|h3]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Tredje rubriknivån.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[hx|h4]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Fjärde rubriknivån.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[hx|h5]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Femte rubriknivån.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[hx|h6]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Sjätte rubriknivån.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[head]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Metadata om sidan, t.ex. sidonamn.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[header]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Material som ska vara med i sidhuvudet.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[hr]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Indikerar en brytning mellan två paragrafer.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[html-tagg|html]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Roten till HTML-dokumentet. Alla HTML-taggar måste ligga inuti denna.&lt;br /&gt;
&lt;br /&gt;
== I ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[i]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Text som på något vis skiljer sig ifrån övrig text, t.ex. tankar eller utländska ord.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[iframe]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att infoga en webbsida i en annan webbsida.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[img]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att lägga till en bild i en webbsida.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[input]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för olika typer av användarinmatning i formulär.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[ins]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar att text lagts till i ett dokument, t.ex. för att indikera att det redigerats.&lt;br /&gt;
&lt;br /&gt;
== K ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[kbd]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Exempel på indata som en användare kan skriva in.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[keygen]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att skicka med en publik nyckel för ett certifikat.&lt;br /&gt;
&lt;br /&gt;
== L ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[label]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Anger en rubrik för formulärkontroller.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[legend]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Anger en rubrik för formulärkontroller.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[li]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En post i en lista.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[link]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definerar förhållanden mellan detta dokument och externa resurser. Används bl.a. för att länka till CSS-filer.&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[main]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar vad som är sidans huvudinnehåll.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[map]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definierar klickbara regioner i en grafisk bild.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[mark]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar text på något vis, t.ex. för att markera upp sökta ord i en text.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[math]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Indikerar en region av mathml.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[menu]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Visar en lista över kommandon som kan genomföras.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[menuitem]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Ett kommando i en [[menu|&amp;lt;menu&amp;gt;]]-lista.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[meta]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Olika typer av metadata som inte det finns specifika taggar för.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[meter]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En mätare som visar och kan sätta ett valt värde mellan ett minimun och maximum.&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[nav]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar innehåll som används för navigation.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[noscript]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Innehållet visas enbart om webbläsaren inte kan köra JavaScript.&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[object]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Indikerar en extern resurs som hanteras av en plug-in.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[ol]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En ordnad lista.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[optgroup]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Grupperar [[option]]-element i ett [[select]]-element.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[option]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Valbara element i ett [[select]]-element.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[output]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att markera var i formuläret resultatet ifrån något slags beräkning/körning ska hamna.&lt;br /&gt;
&lt;br /&gt;
== P ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[p]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Ett textstycke.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[param]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Definierar parametrar till [[object]]-taggen.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[pre]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Förformaterad text, som inte ska formateras om av webbläsaren.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[progress]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Indikerar på något vis hur mycket som är genomfört.&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[q]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Ett kortare citat i löpande text.&lt;br /&gt;
&lt;br /&gt;
== R ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[rp]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att definiera hur ett tecken ska visas om det inte finns i teckensnittet, t.ex. för asiatiska språk. Används inuti [[rt]]-taggar.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[rt]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att definiera det korrekta uttalet på asiatiska tecken, t.ex. kanji.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[ruby]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att definiera det korrekta uttalet på asiatiska tecken, t.ex. kanji. Används inuti [[rt]]-taggar.&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[s]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Överstruken text, indikerar att innehållet inte längre är relevant.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[samp]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Exempel på utdata ifrån ett datorprogram.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[script-tagg|script]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att lägga in eller ladda in ett [[skript]].&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[section]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Grupperar samman en del av dokumentet.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[select]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Påbörjar en meny i ett formulär.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[small]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Finstilt innehåll, t.ex. copyright-information.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[source]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används inuti [[video]]- och [[audio]]-taggar för att ange vilket material som ska spelas upp.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[span]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar ett löptext som på något vis hör samman. Har ingen semantisk betydelse.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[strong]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Innehållet i taggen har stark betydelse.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[style]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att inkludera [[CSS]]-kod i HTML-dokument.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[sub]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Nedsänkt text.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[summary]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Visar en kort beskrivning om datan i en [[details]]-tagg.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[sup]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Upphöjd text.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[svg]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att infoga vektorgrafik av typen svg.&lt;br /&gt;
&lt;br /&gt;
== T ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[table]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att skapa en tabell.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[tbody]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att definiera huvudinnehållet i en tabell.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[td]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar en tabellcell.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[textarea]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Ett redigerbart textfält.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[tfoot]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att definiera tabellfoten i en tabell.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[th]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En tabellcell som är en rubrik.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[thead]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att definiera tabellhuvudet i en tabell.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[time]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En tidsangivelse, tid eller datum.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[title]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Titeln på webbsidan.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[tr]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar en tabellrad.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[track]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används av [[video]] och [[audio]] för att lägga till olika typer av extra data, t.ex. för textning av en film.&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[u]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Text som på något vis kommenterar annan text, t.ex. för att indikera att något är felstavat.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[ul]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
En oordnad lista.&lt;br /&gt;
&lt;br /&gt;
== V ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[var]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Ett variabelnamn, t.ex. för matematik eller programmering.&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[video]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Används för att inkludera videoinnehåll i en webbsida.&lt;br /&gt;
&lt;br /&gt;
== W ==&lt;br /&gt;
=== &amp;lt;code&amp;gt; [[wbr]] &amp;lt;/code&amp;gt; ===&lt;br /&gt;
Markerar en plats i en text där det är ett bra tillfälle att göra en radbrytning om en sådan behövs.&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Huvudsida&amp;diff=5080</id>
		<title>Huvudsida</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Huvudsida&amp;diff=5080"/>
		<updated>2024-08-09T16:31:04Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;well well-cocktail&amp;quot;&amp;gt;&lt;br /&gt;
== Välkommen till Webbling ==&lt;br /&gt;
&lt;br /&gt;
Webbling är en öppen lärresurs som är avsedd för dig som vill lära dig mer om   [[Introduktion till webbteknik|webbteknik]], [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]]. Här kan du lära dig alltifrån hur man skapar enkla webbsidor till avancerade webbapplikationer och webbtjänster. Materialet är främst tänk för dig som går på gymnasiet och läser någon av kurserna inom webbteknik, programmering eller gränssnitt. Förhoppningen är dock att denna resurs kan vara till hjälp för alla som vill veta mer om hur man går tillväga med [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;card bg-light p-3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;card-title&amp;gt;&lt;br /&gt;
==Innehåll ==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;card-text mb-0&amp;quot;&amp;gt;&lt;br /&gt;
Här finner du [[referensmaterial]], t.ex. [[HTML5-taggar]] och [[CSS-egenskapslista|CSS-egenskaper]] samt mycket [[studiematerial]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== Nyheter ==&lt;br /&gt;
Alla exempel som använde jQuery är nu omskrivna till plainJS.&lt;br /&gt;
&lt;br /&gt;
jQuery-sektionen är märkt som föråldrad och kommer inte att uppdateras mer.&lt;br /&gt;
&lt;br /&gt;
SPA-exemplen är uppdaterade så de fungerar som de ska.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-mango&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorer ==&lt;br /&gt;
[[Webbutveckling]]sdelen och [[Referensmaterial | referensmaterialet]] angående webbtekniker sponsrades av [http://www.internetfonden.se/ Internetfonden].&lt;br /&gt;
&lt;br /&gt;
Delarna om [[JavaScript]]-programmering, jQuery, Node.js och [[öppen data]] sponsrades av [http://vinnova.se/ Vinnova].&lt;br /&gt;
&lt;br /&gt;
Webbling har delvis tagits fram för att användas som studiematerial vid [http://soltorgsgymnasiet.se Soltorgsgymnasiet] i Borlänge.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-concrete-light&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rättigheter ==&lt;br /&gt;
Allt material på Webbling kan delas i enlighet med följande; &lt;br /&gt;
&lt;br /&gt;
[http://creativecommons.org/licenses/by-sa/4.0/ https://i.creativecommons.org/l/by-sa/4.0/88x31.png]&amp;lt;br&amp;gt;&lt;br /&gt;
Webbling av [mailto:pgj@gnulix.org Patrik Grip-Jansson] och [http://soltorgsgymnasiet.se Soltorgsgymnasiet] är licenserad under en [http://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Erkännande-DelaLika 4.0 Internationell licens]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Huvudsida&amp;diff=5079</id>
		<title>Huvudsida</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Huvudsida&amp;diff=5079"/>
		<updated>2024-08-09T16:24:47Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;well well-cocktail&amp;quot;&amp;gt;&lt;br /&gt;
== Välkommen till Webbling ==&lt;br /&gt;
&lt;br /&gt;
Webbling är en öppen lärresurs som är avsedd för dig som vill lära dig mer om   [[Introduktion till webbteknik|webbteknik]], [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]]. Här kan du lära dig alltifrån hur man skapar enkla webbsidor till avancerade webbapplikationer och webbtjänster. Materialet är främst tänk för dig som går på gymnasiet och läser någon av kurserna inom webbteknik, programmering eller gränssnitt. Förhoppningen är dock att denna resurs kan vara till hjälp för alla som vill veta mer om hur man går tillväga med [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;card well-hearts&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Innehåll ==&lt;br /&gt;
Här finner du [[referensmaterial]], t.ex. [[HTML5-taggar]] och [[CSS-egenskapslista|CSS-egenskaper]] samt mycket [[studiematerial]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== Nyheter ==&lt;br /&gt;
Alla exempel som använde jQuery är nu omskrivna till plainJS.&lt;br /&gt;
&lt;br /&gt;
jQuery-sektionen är märkt som föråldrad och kommer inte att uppdateras mer.&lt;br /&gt;
&lt;br /&gt;
SPA-exemplen är uppdaterade så de fungerar som de ska.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-mango&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorer ==&lt;br /&gt;
[[Webbutveckling]]sdelen och [[Referensmaterial | referensmaterialet]] angående webbtekniker sponsrades av [http://www.internetfonden.se/ Internetfonden].&lt;br /&gt;
&lt;br /&gt;
Delarna om [[JavaScript]]-programmering, jQuery, Node.js och [[öppen data]] sponsrades av [http://vinnova.se/ Vinnova].&lt;br /&gt;
&lt;br /&gt;
Webbling har delvis tagits fram för att användas som studiematerial vid [http://soltorgsgymnasiet.se Soltorgsgymnasiet] i Borlänge.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-concrete-light&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rättigheter ==&lt;br /&gt;
Allt material på Webbling kan delas i enlighet med följande; &lt;br /&gt;
&lt;br /&gt;
[http://creativecommons.org/licenses/by-sa/4.0/ https://i.creativecommons.org/l/by-sa/4.0/88x31.png]&amp;lt;br&amp;gt;&lt;br /&gt;
Webbling av [mailto:pgj@gnulix.org Patrik Grip-Jansson] och [http://soltorgsgymnasiet.se Soltorgsgymnasiet] är licenserad under en [http://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Erkännande-DelaLika 4.0 Internationell licens]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=En_webbsidas_anatomi&amp;diff=5078</id>
		<title>En webbsidas anatomi</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=En_webbsidas_anatomi&amp;diff=5078"/>
		<updated>2024-08-06T14:34:42Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nu har vi gått igenom grundkoncepten bakom [[HTML]]. Men innan vi kan skapa vår första [[HTML]]-dokument, måste vi lära oss ett antal grundtaggar som ingår i alla [[HTML]]-dokument.&lt;br /&gt;
&lt;br /&gt;
== Ett första webbdokument ==&lt;br /&gt;
Exemplet nedan är grunden för en minimal webbsida. Vi kommer att gå igenom vad varje kodrad i exemplet betyder. Var lugn, det är inte så krångligt som det kan se ut vid första anblicken...&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;OVQPRz&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;html,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kan en sida bli tråkigare? Förhoppningsvis inte!&lt;br /&gt;
&lt;br /&gt;
Nu tar vi och går igenom koden och undersöker vad de olika taggarna gör.&lt;br /&gt;
&lt;br /&gt;
== [[doctype|&amp;amp;lt;!doctype html&amp;gt;]] ==&lt;br /&gt;
Det här är den första grej som man måste ange i början av varje webbdokument. Det är den så kallade ”&amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt;”, vilket är en förkortning för engelskans ”Document Type” eller dokumenttyp. Denna tjänar som en indikation på vilken typ av dokument det handlar om, samt vilken [[HTML]]-[[standard]] som används i dokumentet. Detta gör att webbläsaren kan hantera alla [[tagg]]ar i ditt webbdokument på ett korrekt vis. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt; ska anges allra först i ditt dokument, innan du använder dig av någon [[tagg]]. Den har lite speciellt utseende som skiljer sig från [[HTML]]-[[tagg]]arna och det finns heller ingen [[sluttagg]] för den. För [[HTML5]] är det väldigt enkelt att ange &amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt;, man skriver nämligen så här:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Svårare än så är det inte. (Äldre versioner av HTML hade långa, krångliga varianter av &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, men man beslöt sig att förenkla detta rejält i HTML5.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Anledningen att &amp;lt;code&amp;gt;DOCTYPE&amp;lt;/code&amp;gt; ser lite annorlunda ut är att det faktiskt inte är en egentlig HTML-tagg. Den är ett arv ifrån språket SGML. Vilket kan ses som en förfader till HTML. Dock är inte HTML kompatibelt med SGML längre. Den enda kvarlevan är &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Du bör inte utelämna &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, för då kommer inte alla webbläsare att fatta att ditt dokument är ett [[HTML5]]-dokument. Istället finns chansen att webbläsaren kommer att försöka tolka det enligt någon gammal standard eller gå in i så kallad ”[[quirks mode]]” – vilket antagligen kommer att göra att din sida visas på något konstigt sätt och den kanske inte alls får den funktionalitet som du förväntade dig.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[html-tagg|html]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Den första, riktiga [[tagg]]en vi måste ha med är &amp;lt;code&amp;gt;&amp;amp;lt;[[html-tagg|html]]&amp;gt;&amp;lt;/code&amp;gt;. Detta är en inledande [[tagg]] som talar om för webbläsaren var [[HTML]]-innehållet börjar. [[Tagg]]en ska sitta före alla andra [[tagg]]ar, förutom &amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt;. Sluttaggen &amp;lt;code&amp;gt;&amp;amp;lt;/[[html-tagg|html]]&amp;gt;&amp;lt;/code&amp;gt; ska ska vara den sista [[sluttagg]]en i dokumentet, eftersom den &amp;quot;talar om&amp;quot; att det är slut på [[HTML]]-koden.&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det får endast förekomma ett &amp;lt;code&amp;gt;[[HTML]]&amp;lt;/code&amp;gt;-element i varje webbdokument. Det enda möjliga undantaget där man har flera &amp;lt;code&amp;gt;[[HTML]]&amp;lt;/code&amp;gt;-element i en webbsida är när man inkluderar en annan sida via &amp;lt;code&amp;gt;[[iframe]]&amp;lt;/code&amp;gt;. Detta är dock ett specialfall där webbläsaren ser den inkluderade sidan som ett helt separat HTML-dokument (vilket det också är).&lt;br /&gt;
&lt;br /&gt;
Det finns några fler taggar som bara får förekomma en gång i varje webbdokument. De flesta taggar får dock användas flera gånger i samma sida.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
=== &amp;lt;code&amp;gt;&amp;amp;lt;[[HTML]]&amp;gt;&amp;lt;/code&amp;gt; är roten till hela sidan ===&lt;br /&gt;
När webbläsaren ska tolka ditt webbsida, kommer den att bygga upp en datatyp som kallas för ett träd. Detta träd representerar ditt webbdokuments struktur. De olika [[element]]en kommer att bli grenar på trädet. Roten på trädet är &amp;lt;code&amp;gt;[[HTML-tagg|HTML]]&amp;lt;/code&amp;gt;-elementet, utifrån detta sprids underliggande [[element]] som grenar. Därför kallas ibland &amp;lt;code&amp;gt;[[html]]&amp;lt;/code&amp;gt;-elementet även för rot-elementet.&lt;br /&gt;
&lt;br /&gt;
Vi återkommer till träd-konceptet när vi tittar närmare på [[DOM]] – eller ”[[Document Object Model]]”.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[head]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Inom [[tagg]]en &amp;lt;code&amp;gt;&amp;amp;lt;[[head]]&amp;gt;&amp;lt;/code&amp;gt; placerar man så kallad [[metadata]] om dokumentet. Det är den data som beskriver dokumentet och dess innehåll. Det här är information som är till för webbläsaren/sökmotorer och liknande, snarare än att det är till för slutanvändaren. Sånt som man kan hitta här är t.ex.; vilken [[teckenkodning]] som används på sidan, länkar till andra dokument som krävs för att visa sidan korrekt (såsom [[CSS]]-filer), namnet på den som skapat sidan, sökord, osv. &lt;br /&gt;
&lt;br /&gt;
Det finns några [[tagg]]ar som enbart får förekomma inom &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet. Så gott som alla undertaggar i &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-element är icke-visuella, dvs de innehåller ingenting som kommer att visas för slutanvändaren när sidan skapas.&lt;br /&gt;
&lt;br /&gt;
Så här i början behöver vi inte bry oss i de flesta av de möjliga undertaggarna som kan förekomma i &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det får bara finnas ett [[head]]-element i varje dokument.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[title]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet har en undertagg som är visuell, dvs den kommer att visas för slutanvändaren. Det är taggen ”&amp;lt;code&amp;gt;&amp;amp;lt;[[title]]&amp;gt;&amp;lt;/code&amp;gt;”. Vilket alltså är sidans namn/titel. Titeln på sidan kommer att visas antingen som namnet på ett webbläsarfönster eller som namnet på en flik i webbläsaren. En bra titel gör det lättare för användaren att navigera bland flikarna i dennes webbläsare.&lt;br /&gt;
&lt;br /&gt;
Titeln visas inte bara i webbläsaren, den är även grunden för det namn väljas när användaren skapar ett bokmärke till sidan. Återigen är det en god vana att ange en bra titel som ger ett vettigt grundnamn för bokmärket. På så vis får användaren ett bokmärke som är lätt att identifiera, utan att behöva redigera bokmärkesnamnet.&lt;br /&gt;
&lt;br /&gt;
Det är alltså viktigt att välja sidnamn på ett bra sätt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
=== Att välja sidtitel ===&lt;br /&gt;
När man ska välja ett sidnamn bör man försöka få med de absolut viktigaste orden redan i början av namnet. Det finns flera anledningar till detta, bland annat:&lt;br /&gt;
&lt;br /&gt;
* När sidnamnet visas på en flik så kommer det ofta att klippas av mitt i. Desto fler flikar man har, desto mindre blir flikytan där namnet ska visas. Vill man att det ska vara lätt hitta rätt flik, gäller det alltså att ha ett kort och kärnfullt namn.&lt;br /&gt;
&lt;br /&gt;
* När användaren skapar ett bokmärke, utgår webbläsaren oftast ifrån sidans titel som namn för bokmärket. Om titeln är för lång, kan det hända att bokmärkesnamnet kapas av mitt i. Står det då inte någonting med mycket informationsinnehåll, är chansen liten att användaren kommer att komma ihåg vad sidan handlade om.&lt;br /&gt;
&lt;br /&gt;
Ett vanligt fel är att döpa sin sida till något i stil med, ”Välkommen till min fin, fina sida”. Eftersom det är så vanligt med frasen ”Välkommen”, är chansen stor att användaren får en drös av flikar där det bara syns ”Välkommen” eller, ännu värre, en massa bokmärken där det bara står ”Välkommen”.&lt;br /&gt;
&lt;br /&gt;
I många fall kan det även vara dumt att skriva saker som ens firmanamn som första delen i titeln. Återigen kan det bli massa flikar/bokmärken där bara ”Murres webbshop” eller liknande syns. Försök därför att inleda titeln med ett eller två ord som verkligen beskriver sidans innehåll. Det är iofs inget fel att ha sitt firmanamn som sidtitel, men se i så fall till att det är den ”första” sidan på din sajt som har den titeln och att du har specialiserade namn på undersidorna.&lt;br /&gt;
&lt;br /&gt;
Ovanstående problem var tidigare mycket vanligt förekommande på tidningarnas webbsidor. Men det har alltmer förändrats. Nu för tiden är t.ex. Aftonbladet förstasida benämnd ”Aftonbladet: Sveriges nyhetskälla och mötesplats”, medan de olika undersidornas titlar är uppbyggda efter mallen ”Nyhetsnamn | Kategori | Aftonbladet”. Det vill säga, man bygger upp titeln genom att sätta det mest specifika först och därefter blir titeln allt mer generell. Detta är ett mycket bra sätt att namnge sina sidor på.&lt;br /&gt;
&lt;br /&gt;
Titeln kan även vara viktig för så kallad [[SEO]] – eller [[Search Engine Optimization]]. Detta innebär att man försöker optimera sidan så att sidan hamnar så tidigt som möjligt bland sökresultaten på söksidor, såsom Google. Att hamna bland de första sökresultaten innebär att det är mycket större chans att folk kommer att besöka sidan. De flesta vill ju ha så många besökare som möjligt på sin sida – inte minst om man har finansiell vinning av besökare, kanske genom att visa reklam på sidan eller för att man försöker sälja en produkt av något slag.&lt;br /&gt;
&lt;br /&gt;
Så, redan här, där vi har den första [[tagg]]en där du kan sätta något eget innehåll, ser man att man måste tänka sig för innan man skapar sin webbplats. Det är inte bara att sätta igång och börja tok-koda, utan man måste planera och tänka sig för redan i förväg. Mycket förarbete och planering, innan själva kodandet, är en bra metodik som man tjänar på i längden!&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[meta]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&amp;lt;code&amp;gt;[[Meta]]&amp;lt;/code&amp;gt;-element används inuti &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet. Dessa är till för att beskriva dokumentets innehåll. Det finns en mängd olika saker som kan anges i &amp;lt;code&amp;gt;[[meta]]&amp;lt;/code&amp;gt;-elementen, vi ska dock enbart titta på ett just nu. &lt;br /&gt;
&lt;br /&gt;
Man bör alltid ange vilken [[teckenkodning]] som används i ett dokument. Om man inte gör det kan webbläsaren få problem med att tolka innehållet i dokumentet på ett korrekt vis. [[Teckenkodning]] är ett komplext område och det förtjänar sin egen sektion. För tillfället väljer vi att ange att vårt dokument är kodat med [[UTF-8]]. Detta är den idag vanligaste [[teckenkodning]]sstandarden och det används i de flesta webbverktygen (skulle t.ex. dina svenska ”åäö” bli att se konstiga ut, beror det säkerligen på att någonting i utvecklingskedjan använder sig av ”fel” [[teckenkodning]]).&lt;br /&gt;
&lt;br /&gt;
För att ange [[UTF-8]] i vårt webbdokument, skriver vi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=”utf-8”&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vi anger då att det är ett &amp;lt;code&amp;gt;[[meta]]&amp;lt;/code&amp;gt;-element och vi anger att vi vill sätt [[attribut]]et &amp;lt;code&amp;gt;charset&amp;lt;/code&amp;gt;. Det senare är en förkortning av engelskans ”character set”, eller teckenuppsättning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Meta]]&amp;lt;/code&amp;gt;-elementen brukar man &#039;&#039;inte&#039;&#039; stänga med en avslutande sluttagg. En del använder sig av [[självstängande-tagg]]ar i detta fall. Men det är varken nödvändigt eller rekommenderat för HTML5.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[body]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Nu har vi lämnat &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet och det är dag för nästa viktiga [[tagg]], vilken är &amp;lt;code&amp;gt;&amp;amp;lt;[[body]]&amp;gt;&amp;lt;/code&amp;gt;. Allt i detta [[element]] är själva sid-kroppen. Här samlas allt det innehåll som ska visas på sidan. Så gott som alla [[element]] som definieras innanför &amp;lt;code&amp;gt;&amp;amp;lt;[[body]]&amp;gt;&amp;lt;/code&amp;gt; styr på något vis dokumentets struktur och följaktligen även hur det ska återges. Man skulle kunna säga att &amp;lt;code&amp;gt;[[body]]&amp;lt;/code&amp;gt;-elementets innehåll är själva sidan, i alla fall den visuella delen. Så gott som alla [[HTML]]-[[tagg]]ar går att använda inuti &amp;lt;code&amp;gt;[[body]]&amp;lt;/code&amp;gt;, förutom ett litet fåtal som enbart ska användas i &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det får enbart förekomma ett &amp;lt;code&amp;gt;[[body]]&amp;lt;/code&amp;gt;-element i varje dokument. Om du vill dela upp dokumentet i underdokument, får du antingen göra olika webbsidor eller använda dig av någon av de olika [[tagg]]ar som finns för att sektionera upp innehållet på en sida.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Även om vi angivit en titel i vårat &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-element, så vill vi oftast ha en titel som syns även i själva sidan (och inte enbart på fliken eller fönstret). För överskrifter eller huvudrubriker använder vi oss av &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-taggen. ”H” står i detta fall för engelskans ”header”, eller rubrik på svenska. Siffran som följer efter talar om vilken rubriknivå det handlar om. Det finns sex möjliga rubriknivåer att tillgå, dvs; &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h2]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h3]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h4]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h5]]&amp;gt;&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h6]]&amp;gt;&amp;lt;/code&amp;gt;. Har du jobbat med något ordbehandlingsprogram och använt deras stilmallar är rubriknivåer säkert inget nytt koncept för dig.&lt;br /&gt;
&lt;br /&gt;
Rubrikerna ska användas i stigande ordning och de ska förekomma i en konsekvent serie. Vi ska t.ex. aldrig ange en &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h2]]&amp;gt;&amp;lt;/code&amp;gt; utan att ha en &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;gt;&amp;lt;/code&amp;gt;. Inte heller ska vi hoppa över någon rubriknivå, t.ex. att gå ifrån &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h2]]&amp;gt;&amp;lt;/code&amp;gt; direkt till &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h4]]&amp;gt;&amp;lt;/code&amp;gt;. Rubriknivåerna bygger upp en logisk struktur för vårat dokument och vi kan lätt se vilka underrubriker som tillhör respektive huvudrubriker, precis såsom du bygger upp en logisk struktur då du skriver en uppsats.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[hx|H1]]&amp;lt;/code&amp;gt;-elementet är lite speciellt. Tidigare fick det enbart förekomma en gång per [[HTML]]-dokument. Numera, i och med [[HTML5]], får det dock användas mer flitigt. Allt material som är helt avskilt ifrån övrigt material kan ha en egen &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-rubrik. Den kan till exempel användas i sidhuvud, sidfot, underartiklar eller i en egen sektion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det är väldigt viktigt att komma ihåg att man inte ska använda sig av &amp;lt;code&amp;gt;[[hx]]&amp;lt;/code&amp;gt;-elementen (eller något annat [[element]]) enbart för att ge ett specifik utseende till något. [[Tagg]]arna är till för strukturen och inte för utseendet. Om du vill ha stor text ska du inte använda en &amp;lt;code&amp;gt;[[hx]]&amp;lt;/code&amp;gt;-tagg, utan istället använder du dig av t.ex. &amp;lt;code&amp;gt;&amp;amp;lt;[[span]]&amp;gt;&amp;lt;/code&amp;gt; och skapar en [[CSS]]-regel som anger att innehållet i &amp;lt;code&amp;gt;[[span]]&amp;lt;/code&amp;gt;-elementet ska ha större text. Om du ska jobba inom webbranschen bör du veta att det anses som en dödssynd att använda [[tagg]]ar för utseendets skull!&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sammanfattning ==&lt;br /&gt;
[[Fil:tldr1.png]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[En webbsidas anatomi övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Våra första webbsidor]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=En_webbsidas_anatomi&amp;diff=5077</id>
		<title>En webbsidas anatomi</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=En_webbsidas_anatomi&amp;diff=5077"/>
		<updated>2024-08-06T14:28:21Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nu har vi gått igenom grundkoncepten bakom [[HTML]]. Men innan vi kan skapa vår första [[HTML]]-dokument, måste vi lära oss ett antal grundtaggar som ingår i alla [[HTML]]-dokument.&lt;br /&gt;
&lt;br /&gt;
== Ett första webbdokument ==&lt;br /&gt;
Exemplet nedan är grunden för en minimal webbsida. Vi kommer att gå igenom vad varje kodrad i exemplet betyder. Var lugn, det är inte så krångligt som det kan se ut vid första anblicken...&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;OVQPRz&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;html,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kan en sida bli tråkigare? Förhoppningsvis inte!&lt;br /&gt;
&lt;br /&gt;
Nu tar vi och går igenom koden och undersöker vad de olika taggarna gör.&lt;br /&gt;
&lt;br /&gt;
== [[doctype|&amp;amp;lt;!doctype html&amp;gt;]] ==&lt;br /&gt;
Det här är den första grej som man måste ange i början av varje webbdokument. Det är den så kallade ”&amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt;”, vilket är en förkortning för engelskans ”Document Type” eller dokumenttyp. Denna tjänar som en indikation på vilken typ av dokument det handlar om, samt vilken [[HTML]]-[[standard]] som används i dokumentet. Detta gör att webbläsaren kan hantera alla [[tagg]]ar i ditt webbdokument på ett korrekt vis. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt; ska anges allra först i ditt dokument, innan du använder dig av någon [[tagg]]. Den har lite speciellt utseende som skiljer sig ifrån [[HTML]]-[[tagg]]arna och det finns heller ingen [[sluttagg]] för den. För [[HTML5]] är det väldigt enkelt att ange &amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt;, man skriver nämligen så här:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Svårare än så är det inte. (Äldre versioner av HTML hade långa, krångliga varianter av &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, men man beslöt sig att förenkla detta rejält inför HTML5.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Anledningen att &amp;lt;code&amp;gt;DOCTYPE&amp;lt;/code&amp;gt; ser lite annorlunda ut är att det faktiskt inte är en egentlig HTML-tagg. Den är ett arv ifrån språket SGML. Vilket kan ses som rötterna till HTML. Dock är inte HTML kompatibelt med SGML längre. Den enda kvarlevan är &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Du bör inte utelämna &amp;lt;code&amp;gt;doctype&amp;lt;/code&amp;gt;, för då kommer inte alla webbläsare att fatta att ditt dokument är ett [[HTML5]]-dokument. Istället finns chansen att webbläsaren kommer att försöka tolka det enligt någon gammal standard eller gå in i så kallad ”[[quirks mode]]” – vilket antagligen kommer att göra att din sida visas på något konstigt sätt och den kanske inte alls får den funktionalitet som du förväntade dig.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[html-tagg|html]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Den första, riktiga [[tagg]]en vi måste lära oss är &amp;lt;code&amp;gt;&amp;amp;lt;[[html-tagg|html]]&amp;gt;&amp;lt;/code&amp;gt;. Detta är en inledande [[tagg]] som talar om för webbläsaren var [[HTML]]-innehållet börjar. [[Tagg]]en ska sitta före alla andra [[tagg]]ar, förutom &amp;lt;code&amp;gt;[[doctype]]&amp;lt;/code&amp;gt;, och dess motsvarande [[sluttagg]] ska ska sitta som den sista [[sluttagg]]en i dokumentet. &lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det får endast förekomma ett &amp;lt;code&amp;gt;[[HTML]]&amp;lt;/code&amp;gt;-element i varje webbdokument. Det enda möjliga undantaget där man har flera &amp;lt;code&amp;gt;[[HTML]]&amp;lt;/code&amp;gt;-element i en webbsida är när man inkluderar en annan sida via &amp;lt;code&amp;gt;[[iframe]]&amp;lt;/code&amp;gt;. Detta är dock ett specialfall där webbläsaren ser den inkluderade sidan som ett helt separat HTML-dokument (vilket det också är).&lt;br /&gt;
&lt;br /&gt;
Det finns några fler taggar som bara får förekomma en gång i varje webbdokument. De flesta taggar får dock användas flera gånger i samma sida.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
=== &amp;lt;code&amp;gt;&amp;amp;lt;[[HTML]]&amp;gt;&amp;lt;/code&amp;gt; är roten till hela sidan ===&lt;br /&gt;
När webbläsaren ska tolka ditt webbsida, kommer den att bygga upp en datatyp som kallas för ett träd. Detta träd representerar ditt webbdokuments struktur. De olika [[element]]en kommer att bli grenar på trädet. Roten på trädet är &amp;lt;code&amp;gt;[[HTML-tagg|HTML]]&amp;lt;/code&amp;gt;-elementet, utifrån detta sprids underliggande [[element]] som grenar. Därför kallas ibland &amp;lt;code&amp;gt;[[html]]&amp;lt;/code&amp;gt;-elementet även för rot-elementet.&lt;br /&gt;
&lt;br /&gt;
Vi återkommer till träd-konceptet när vi tittar närmare på [[DOM]] – eller ”[[Document Object Model]]”.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[head]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Inom [[tagg]]en &amp;lt;code&amp;gt;&amp;amp;lt;[[head]]&amp;gt;&amp;lt;/code&amp;gt; placerar man så kallad [[metadata]] om dokumentet. Det är den data som beskriver dokumentet och dess innehåll. Det här är information som är till för webbläsaren/sökmotorer och liknande, snarare än att det är till för slutanvändaren. Sånt som man kan hitta här är t.ex.; vilken [[teckenkodning]] som används på sidan, länkar till andra dokument som krävs för att visa sidan korrekt (såsom [[CSS]]-filer), namnet på den som skapat sidan, sökord, osv. &lt;br /&gt;
&lt;br /&gt;
Det finns några [[tagg]]ar som enbart får förekomma inom &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet. Så gott som alla undertaggar i &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-element är icke-visuella, dvs de innehåller ingenting som kommer att visas för slutanvändaren när sidan skapas.&lt;br /&gt;
&lt;br /&gt;
Så här i början behöver vi inte bry oss i de flesta av de möjliga undertaggarna som kan förekomma i &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det får bara finnas ett [[head]]-element i varje dokument.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[title]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet har en undertagg som är visuell, dvs den kommer att visas för slutanvändaren. Det är taggen ”&amp;lt;code&amp;gt;&amp;amp;lt;[[title]]&amp;gt;&amp;lt;/code&amp;gt;”. Vilket alltså är sidans namn/titel. Titeln på sidan kommer att visas antingen som namnet på ett webbläsarfönster eller som namnet på en flik i webbläsaren. En bra titel gör det lättare för användaren att navigera bland flikarna i dennes webbläsare.&lt;br /&gt;
&lt;br /&gt;
Titeln visas inte bara i webbläsaren, den är även grunden för det namn väljas när användaren skapar ett bokmärke till sidan. Återigen är det en god vana att ange en bra titel som ger ett vettigt grundnamn för bokmärket. På så vis får användaren ett bokmärke som är lätt att identifiera, utan att behöva redigera bokmärkesnamnet.&lt;br /&gt;
&lt;br /&gt;
Det är alltså viktigt att välja sidnamn på ett bra sätt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
=== Att välja sidtitel ===&lt;br /&gt;
När man ska välja ett sidnamn bör man försöka få med de absolut viktigaste orden redan i början av namnet. Det finns flera anledningar till detta, bland annat:&lt;br /&gt;
&lt;br /&gt;
* När sidnamnet visas på en flik så kommer det ofta att klippas av mitt i. Desto fler flikar man har, desto mindre blir flikytan där namnet ska visas. Vill man att det ska vara lätt hitta rätt flik, gäller det alltså att ha ett kort och kärnfullt namn.&lt;br /&gt;
&lt;br /&gt;
* När användaren skapar ett bokmärke, utgår webbläsaren oftast ifrån sidans titel som namn för bokmärket. Om titeln är för lång, kan det hända att bokmärkesnamnet kapas av mitt i. Står det då inte någonting med mycket informationsinnehåll, är chansen liten att användaren kommer att komma ihåg vad sidan handlade om.&lt;br /&gt;
&lt;br /&gt;
Ett vanligt fel är att döpa sin sida till något i stil med, ”Välkommen till min fin, fina sida”. Eftersom det är så vanligt med frasen ”Välkommen”, är chansen stor att användaren får en drös av flikar där det bara syns ”Välkommen” eller, ännu värre, en massa bokmärken där det bara står ”Välkommen”.&lt;br /&gt;
&lt;br /&gt;
I många fall kan det även vara dumt att skriva saker som ens firmanamn som första delen i titeln. Återigen kan det bli massa flikar/bokmärken där bara ”Murres webbshop” eller liknande syns. Försök därför att inleda titeln med ett eller två ord som verkligen beskriver sidans innehåll. Det är iofs inget fel att ha sitt firmanamn som sidtitel, men se i så fall till att det är den ”första” sidan på din sajt som har den titeln och att du har specialiserade namn på undersidorna.&lt;br /&gt;
&lt;br /&gt;
Ovanstående problem var tidigare mycket vanligt förekommande på tidningarnas webbsidor. Men det har alltmer förändrats. Nu för tiden är t.ex. Aftonbladet förstasida benämnd ”Aftonbladet: Sveriges nyhetskälla och mötesplats”, medan de olika undersidornas titlar är uppbyggda efter mallen ”Nyhetsnamn | Kategori | Aftonbladet”. Det vill säga, man bygger upp titeln genom att sätta det mest specifika först och därefter blir titeln allt mer generell. Detta är ett mycket bra sätt att namnge sina sidor på.&lt;br /&gt;
&lt;br /&gt;
Titeln kan även vara viktig för så kallad [[SEO]] – eller [[Search Engine Optimization]]. Detta innebär att man försöker optimera sidan så att sidan hamnar så tidigt som möjligt bland sökresultaten på söksidor, såsom Google. Att hamna bland de första sökresultaten innebär att det är mycket större chans att folk kommer att besöka sidan. De flesta vill ju ha så många besökare som möjligt på sin sida – inte minst om man har finansiell vinning av besökare, kanske genom att visa reklam på sidan eller för att man försöker sälja en produkt av något slag.&lt;br /&gt;
&lt;br /&gt;
Så, redan här, där vi har den första [[tagg]]en där du kan sätta något eget innehåll, ser man att man måste tänka sig för innan man skapar sin webbplats. Det är inte bara att sätta igång och börja tok-koda, utan man måste planera och tänka sig för redan i förväg. Mycket förarbete och planering, innan själva kodandet, är en bra metodik som man tjänar på i längden!&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[meta]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&amp;lt;code&amp;gt;[[Meta]]&amp;lt;/code&amp;gt;-element används inuti &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet. Dessa är till för att beskriva dokumentets innehåll. Det finns en mängd olika saker som kan anges i &amp;lt;code&amp;gt;[[meta]]&amp;lt;/code&amp;gt;-elementen, vi ska dock enbart titta på ett just nu. &lt;br /&gt;
&lt;br /&gt;
Man bör alltid ange vilken [[teckenkodning]] som används i ett dokument. Om man inte gör det kan webbläsaren få problem med att tolka innehållet i dokumentet på ett korrekt vis. [[Teckenkodning]] är ett komplext område och det förtjänar sin egen sektion. För tillfället väljer vi att ange att vårt dokument är kodat med [[UTF-8]]. Detta är den idag vanligaste [[teckenkodning]]sstandarden och det används i de flesta webbverktygen (skulle t.ex. dina svenska ”åäö” bli att se konstiga ut, beror det säkerligen på att någonting i utvecklingskedjan använder sig av ”fel” [[teckenkodning]]).&lt;br /&gt;
&lt;br /&gt;
För att ange [[UTF-8]] i vårt webbdokument, skriver vi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=”utf-8”&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vi anger då att det är ett &amp;lt;code&amp;gt;[[meta]]&amp;lt;/code&amp;gt;-element och vi anger att vi vill sätt [[attribut]]et &amp;lt;code&amp;gt;charset&amp;lt;/code&amp;gt;. Det senare är en förkortning av engelskans ”character set”, eller teckenuppsättning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Meta]]&amp;lt;/code&amp;gt;-elementen brukar man &#039;&#039;inte&#039;&#039; stänga med en avslutande sluttagg. En del använder sig av [[självstängande-tagg]]ar i detta fall. Men det är varken nödvändigt eller rekommenderat för HTML5.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[body]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Nu har vi lämnat &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet och det är dag för nästa viktiga [[tagg]], vilken är &amp;lt;code&amp;gt;&amp;amp;lt;[[body]]&amp;gt;&amp;lt;/code&amp;gt;. Allt i detta [[element]] är själva sid-kroppen. Här samlas allt det innehåll som ska visas på sidan. Så gott som alla [[element]] som definieras innanför &amp;lt;code&amp;gt;&amp;amp;lt;[[body]]&amp;gt;&amp;lt;/code&amp;gt; styr på något vis dokumentets struktur och följaktligen även hur det ska återges. Man skulle kunna säga att &amp;lt;code&amp;gt;[[body]]&amp;lt;/code&amp;gt;-elementets innehåll är själva sidan, i alla fall den visuella delen. Så gott som alla [[HTML]]-[[tagg]]ar går att använda inuti &amp;lt;code&amp;gt;[[body]]&amp;lt;/code&amp;gt;, förutom ett litet fåtal som enbart ska användas i &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-elementet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det får enbart förekomma ett &amp;lt;code&amp;gt;[[body]]&amp;lt;/code&amp;gt;-element i varje dokument. Om du vill dela upp dokumentet i underdokument, får du antingen göra olika webbsidor eller använda dig av någon av de olika [[tagg]]ar som finns för att sektionera upp innehållet på en sida.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;gt;&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Även om vi angivit en titel i vårat &amp;lt;code&amp;gt;[[head]]&amp;lt;/code&amp;gt;-element, så vill vi oftast ha en titel som syns även i själva sidan (och inte enbart på fliken eller fönstret). För överskrifter eller huvudrubriker använder vi oss av &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-taggen. ”H” står i detta fall för engelskans ”header”, eller rubrik på svenska. Siffran som följer efter talar om vilken rubriknivå det handlar om. Det finns sex möjliga rubriknivåer att tillgå, dvs; &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h2]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h3]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h4]]&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h5]]&amp;gt;&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h6]]&amp;gt;&amp;lt;/code&amp;gt;. Har du jobbat med något ordbehandlingsprogram och använt deras stilmallar är rubriknivåer säkert inget nytt koncept för dig.&lt;br /&gt;
&lt;br /&gt;
Rubrikerna ska användas i stigande ordning och de ska förekomma i en konsekvent serie. Vi ska t.ex. aldrig ange en &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h2]]&amp;gt;&amp;lt;/code&amp;gt; utan att ha en &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;gt;&amp;lt;/code&amp;gt;. Inte heller ska vi hoppa över någon rubriknivå, t.ex. att gå ifrån &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h2]]&amp;gt;&amp;lt;/code&amp;gt; direkt till &amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h4]]&amp;gt;&amp;lt;/code&amp;gt;. Rubriknivåerna bygger upp en logisk struktur för vårat dokument och vi kan lätt se vilka underrubriker som tillhör respektive huvudrubriker, precis såsom du bygger upp en logisk struktur då du skriver en uppsats.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[[hx|H1]]&amp;lt;/code&amp;gt;-elementet är lite speciellt. Tidigare fick det enbart förekomma en gång per [[HTML]]-dokument. Numera, i och med [[HTML5]], får det dock användas mer flitigt. Allt material som är helt avskilt ifrån övrigt material kan ha en egen &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-rubrik. Den kan till exempel användas i sidhuvud, sidfot, underartiklar eller i en egen sektion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Det är väldigt viktigt att komma ihåg att man inte ska använda sig av &amp;lt;code&amp;gt;[[hx]]&amp;lt;/code&amp;gt;-elementen (eller något annat [[element]]) enbart för att ge ett specifik utseende till något. [[Tagg]]arna är till för strukturen och inte för utseendet. Om du vill ha stor text ska du inte använda en &amp;lt;code&amp;gt;[[hx]]&amp;lt;/code&amp;gt;-tagg, utan istället använder du dig av t.ex. &amp;lt;code&amp;gt;&amp;amp;lt;[[span]]&amp;gt;&amp;lt;/code&amp;gt; och skapar en [[CSS]]-regel som anger att innehållet i &amp;lt;code&amp;gt;[[span]]&amp;lt;/code&amp;gt;-elementet ska ha större text. Om du ska jobba inom webbranschen bör du veta att det anses som en dödssynd att använda [[tagg]]ar för utseendets skull!&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sammanfattning ==&lt;br /&gt;
[[Fil:tldr1.png]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[En webbsidas anatomi övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Våra första webbsidor]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Element-grunder&amp;diff=5076</id>
		<title>Element-grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Element-grunder&amp;diff=5076"/>
		<updated>2024-08-06T14:27:13Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ett taggpar plus dess innehåll skapar tillsammans vad vi kallar för ett [[element]].&lt;br /&gt;
&lt;br /&gt;
== Element ==&lt;br /&gt;
Ett exempel på ett komplett [[element]] kan vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;YwGeNr&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detta är ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element vars innehåll är texten ”Detta är en huvudrubrik”. På detta vis talar vi om för webbläsaren att texten har ett speciellt syfte. I det här fallet anges att detta är sektionens huvudrubrik. Vi talar dock inte om hur texten ska visas, utan enbart dess syfte. Alla webbläsare har ett grundutseende för hur olika [[element]] ska återges. I vårt fall kommer innehållet antagligen att visas med lite större och fetare text. Så länge vi jobbar med [[HTML]], fokuserar vi dock inte på utseende.&lt;br /&gt;
&lt;br /&gt;
Det exakta utseendet som elementen ger upphov till skiljer sig mellan olika webbläsare. Det kan till och med vara som så att slutanvändaren som använder vår webbsida är blind (eller har något annat handikapp) och därför får sidan uppläst. När vi jobbar med ren [[HTML]], kan vi aldrig vara säkra på hur slutresultatet kommer att återges. Med hjälp av [[CSS]] får vi mer kontroll över hur sidan återges, men inte ens då kan vi inte vara 100&amp;amp;nbsp;% säkra på att slutanvändaren kommer att uppleva sidan exakt så som vi tänkt oss. Vi återkommer till utseende i senare aktiviteter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
De flesta exempel på Webbling använder sig av webbtjänsten [http://codepen.io CodePen.io]. I exemplen finns flera flikar som du kan välja mellan. Lite beroende på vilken typ av exempel det handlar om så kan där finnas HTML-, CSS-, JavaScript och Result-flikar.&lt;br /&gt;
&lt;br /&gt;
I de exempel som inte behöver bestå av en fullständig sida, kommer vi att utelämna de &amp;quot;onödiga&amp;quot; kodbitarna. CodePen skapar nämligen en grundsida åt oss, så vi behöver inte ha med all HTML för att exemplen ska fungera.&lt;br /&gt;
&lt;br /&gt;
Det går även att klicka på &amp;quot;Edit on CodePen&amp;quot; i exemplen för att gå till dem på [http://codepen.io CodePens sajt]. Om du gör det så kan du förändra och redigera koden, så att du kan se vad som händer om man väljer att göra saker på olika sätt. Detta är ett bra sätt att lära sig mer om hur webbteknikerna fungerar, så passa på att experimentera med exemplen!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Underelement och nästling ==&lt;br /&gt;
[[Element]] kan i sin tur innehålla andra [[element]]. Ett exempel på det skulle kunna vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;yNEbow&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;em&amp;gt;huvudrubrik&amp;lt;/em&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Här har vi alltså ett &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-element som är nästlat inuti ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element. Det gör att &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-elementet är en del av &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-elementet. Man behöver ofta nästla olika element inuti varandra för att få till den struktur man vill ha. Oftast krävs det nästling när man ska skapa en snygg layout. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Em]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att markera att något har mer emfas än omkringliggande material – det vill säga att det ska betonas på något vis. I de flesta fall kommer webbläsaren att visa sådan text som fet eller kursiv.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Följande (konstlade och dumma) kod är ett mer avancerat exempel på nästling:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdZNrX&amp;quot; height=&amp;quot;240&amp;quot; tab=&amp;quot;html,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Det mest intressanta med ovanstående exempel är att vi har ett &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element nästlat inuti i ett annat &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element. Webbläsaren kan alltså förstå och hantera att man nästlar samma typ av element inuti varandra. Den kommer även att kunna hantera hur de olika start- och sluttaggarna hänger samman.&lt;br /&gt;
&lt;br /&gt;
När webbläsaren ska tolka ovanstående, så kommer den fatta att den första ”&amp;lt;code&amp;gt;&amp;amp;lt;/[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en är [[sluttagg]]en till den andra ”&amp;lt;code&amp;gt;&amp;amp;lt;[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en och att den sista [[sluttagg]]en hör samman med den första [[starttagg]]en. Webbläsaren är alltså rätt så ”smart” när den ska tolka hur [[tagg]]ar och [[sluttagg]]ar hör samman, dock gäller det att se till så att man får dit [[sluttagg]]ar som gäller för olika element i rätt ordning.&lt;br /&gt;
&lt;br /&gt;
I teorin kan du nästla saker inuti varandra i all oändlighet. Det är dock dumt att nästla saker och ting alltför djupt, det gör nämligen din kod mer svårläst och därmed svår att jobba med.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Div]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att ange att något innehåll hänger samman som ett block, men att det inte har någon speciell semantisk betydelse. Detta används ofta för layout. Lite längre fram kommer vi att använda denna tagg för många olika ändamål.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vikten av snygg kod ==&lt;br /&gt;
När man skriver omfattande och komplex kod, kan det lätt bli en enda stor soppa av allting. Med lite tur är det en soppa som webbläsaren klarar av att tolka, medan du, som skrivit koden, kanske tappar bort dig helt. I värsta fall är det en soppa som vare sig du eller webbläsaren klarar av att tolka. Det gäller alltså att strukturera sin kod på ett vettigt vis.&lt;br /&gt;
&lt;br /&gt;
Det finns en del tricks, eller goda vanor, som gör att det blir enklare att hålla ordning på koden. I exemplet ovan har vi använt oss av så kallad [[indentering]]. Det vill säga vi har skjutit in texten med några extra mellanslag (tabbar går också bra) på vänster sida. Det gör att vi kan följa strukturen i koden och att vi lätt ser vilka start- och sluttaggar som hör samman. Vi återkommer till goda kodvanor i en senare aktivitet.&lt;br /&gt;
&lt;br /&gt;
== Verktyg hjälper dig ==&lt;br /&gt;
Moderna webbutvecklingsverktyg har bra stöd som hjälper dig med att skriva korrekt, snygg och vettig kod. Detta gör de på flera olika sätt.&lt;br /&gt;
&lt;br /&gt;
När du börjar skriva, så ger de flesta verktyg förslag på vad det kan vara som du håller på att skriva. Det gör att du snabbt kan skriva en bokstav eller två och vips så kan din editor fylla i och komplettera vad du vill skriva. Detta gör att man skriver snabbare och att det blir färre fel. I många fall föreslår din editor kompletteringar utifrån sammanhanget runt om det du skriver. Om du ska ange ett färgattribut, så fattar editorn antagligen att det är en färg som du håller på att ange och ger förslag på olika färgkombinationer.&lt;br /&gt;
&lt;br /&gt;
De flesta verktyg hjälper dig att sätta [[sluttagg]]arna där de hör hemma. Detta gör editorn genom att fylla i korrekt sluttaggsnamn direkt du skriver ”&amp;lt;code&amp;gt;&amp;amp;lt;/&amp;lt;/code&amp;gt;”. &lt;br /&gt;
&lt;br /&gt;
Editorer brukar även vara duktiga på att se till att din kod blir snyggt och korrekt indenterad. Vilket gör att saker hamnar på &amp;quot;rätt&amp;quot; plats i förhållande till kringliggande kod. Detta gör det &#039;&#039;mycket&#039;&#039; lättare att läsa din kod.&lt;br /&gt;
&lt;br /&gt;
Lär dig att använda ditt verktyg. Det kommer att göra ditt liv enklare. Du kommer att behöva skriva mycket mindre och det är stor chans att saker blir korrekta redan från början. Men kom ihåg att man inte kan förlita sig helt på att verktygen gör allting rätt...&lt;br /&gt;
&lt;br /&gt;
== Felaktigt angivna sluttaggar ==&lt;br /&gt;
När vi skapar nästlade [[element]] gäller det att hålla tungan rätt i munnen och se till att [[tagg]]arna hamnar i rätt ordning. Det här skulle till exempel bli rejält fel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;i&amp;gt;huvudrubrik&amp;lt;/h1&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Här har vi satt [[sluttagg]]arna i fel ordning, vilket kommer att ge webbläsaren en hel del huvudbry. De flesta webbläsare är godvilliga och sväljer flertalet fel utan några direkta klagomål. I vissa fall kommer slutresultatet att bli felaktigt, men förvånansvärt ofta lyckas webbläsaren få till en korrekt tolkning av dokumentet trots att man gjort fel. Dock kan det vara som så att den typ av fel som en webbläsare klarar av, kanske en annan webbläsare inte alls klarar.&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Det är viktigt att använda sig av testverktyg som kollar igenom ens [[HTML]]-kod och påpekar fel och brister. Dessa testverktyg sväljer inte vad som helst, utan de är riktigt, riktigt petiga och ska ha allt absolut rätt innan de godkänner koden. Användningen av dylika testverktyg ger mer robust kod, som är lättare att felsöka och underhålla. Så gör det till en god vana att testa din kod ofta – det vinner du på i längden. Ett bra ställe att hitta webbverktyg som gör dessa kontroller är:&lt;br /&gt;
&lt;br /&gt;
http://www.w3.org/developers/tools&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Element, sammanfattning ==&lt;br /&gt;
[[Fil:tldr3a.png|center|Elementens uppbyggnad]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[Elementens-grunder övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[En webbsidas anatomi]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Element-grunder&amp;diff=5075</id>
		<title>Element-grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Element-grunder&amp;diff=5075"/>
		<updated>2024-08-06T14:25:23Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ett taggpar plus dess innehåll skapar tillsammans vad vi kallar för ett [[element]].&lt;br /&gt;
&lt;br /&gt;
== Element ==&lt;br /&gt;
Ett exempel på ett komplett [[element]] kan vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;YwGeNr&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detta är ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element vars innehåll är texten ”Detta är en huvudrubrik”. På detta vis talar vi om för webbläsaren att texten har ett speciellt syfte. I det här fallet anges att detta är sektionens huvudrubrik. Vi talar dock inte om hur texten ska visas, utan enbart dess syfte. Alla webbläsare har ett grundutseende för hur olika [[element]] ska återges. I vårt fall kommer innehållet antagligen att visas med lite större och fetare text. Så länge vi jobbar med [[HTML]], fokuserar vi dock inte på utseende.&lt;br /&gt;
&lt;br /&gt;
Det exakta utseendet som elementen ger upphov till skiljer sig mellan olika webbläsare. Det kan till och med vara som så att slutanvändaren som använder vår webbsida är blind (eller har något annat handikapp) och därför får sidan uppläst. När vi jobbar med ren [[HTML]], kan vi aldrig vara säkra på hur slutresultatet kommer att återges. Med hjälp av [[CSS]] får vi mer kontroll över hur sidan återges, men inte ens då kan vi inte vara 100&amp;amp;nbsp;% säkra på att slutanvändaren kommer att uppleva sidan exakt så som vi tänkt oss. Vi återkommer till utseende i senare aktiviteter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
De flesta exempel på Webbling använder sig av webbtjänsten [http://codepen.io CodePen.io]. I exemplen finns flera flikar som du kan välja mellan. Lite beroende på vilken typ av exempel det handlar om så kan där finnas HTML-, CSS-, JavaScript och Result-flikar.&lt;br /&gt;
&lt;br /&gt;
I de exempel som inte behöver bestå av en fullständig sida, kommer vi att utelämna de &amp;quot;onödiga&amp;quot; kodbitarna. CodePen skapar nämligen en grundsida åt oss, så vi behöver inte ha med all HTML för att exemplen ska fungera.&lt;br /&gt;
&lt;br /&gt;
Det går även att klicka på &amp;quot;Edit on CodePen&amp;quot; i exemplen för att gå till dem på [http://codepen.io CodePens sajt]. Om du gör det så kan du förändra och redigera koden, så att du kan se vad som händer om man väljer att göra saker på olika sätt. Detta är ett bra sätt att lära sig mer om hur webbteknikerna fungerar, så passa på att experimentera med exemplen!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Underelement och nästling ==&lt;br /&gt;
[[Element]] kan i sin tur innehålla andra [[element]]. Ett exempel på det skulle kunna vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;yNEbow&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;em&amp;gt;huvudrubrik&amp;lt;/em&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Här har vi alltså ett &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-element som är nästlat inuti ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element. Det gör att &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-elementet är en del av &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-elementet. Man behöver ofta nästla olika element inuti varandra för att få till den struktur man vill ha. Oftast krävs det nästling när man ska skapa en snygg layout. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Em]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att markera att något har mer emfas än omkringliggande material – det vill säga att det ska betonas på något vis. I de flesta fall kommer webbläsaren att visa sådan text som fet eller kursiv.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Följande (konstlade och dumma) kod är ett mer avancerat exempel på nästling:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdZNrX&amp;quot; height=&amp;quot;240&amp;quot; tab=&amp;quot;html,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Det mest intressanta med ovanstående exempel är att vi har ett &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element nästlat inuti i ett annat &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element. Webbläsaren kan alltså förstå och hantera att man nästlar samma typ av element inuti varandra. Den kommer även att kunna hantera hur de olika start- och sluttaggarna hänger samman.&lt;br /&gt;
&lt;br /&gt;
När webbläsaren ska tolka ovanstående, så kommer den fatta att den första ”&amp;lt;code&amp;gt;&amp;amp;lt;/[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en är [[sluttagg]]en till den andra ”&amp;lt;code&amp;gt;&amp;amp;lt;[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en och att den sista [[sluttagg]]en hör samman med den första [[starttagg]]en. Webbläsaren är alltså rätt så ”smart” när den ska tolka hur [[tagg]]ar och [[sluttagg]]ar hör samman, dock gäller det att se till så att man får dit [[sluttagg]]ar som gäller för olika element i rätt ordning.&lt;br /&gt;
&lt;br /&gt;
I teorin kan du nästla saker inuti varandra i all oändlighet. Det är dock dumt att nästla saker och ting alltför djupt, det gör nämligen din kod mer svårläst och därmed svår att jobba med.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Div]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att ange att något innehåll hänger samman som ett block, men att det inte har någon speciell semantisk betydelse. Detta används ofta för layout. Lite längre fram kommer vi att använda denna tagg för många olika ändamål.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vikten av snygg kod ==&lt;br /&gt;
När man skriver omfattande och komplex kod, kan det lätt bli en enda stor soppa av allting. Med lite tur är det en soppa som webbläsaren klarar av att tolka, medan du, som skrivit koden, kanske tappar bort dig helt. I värsta fall är det en soppa som vare sig du eller webbläsaren klarar av att tolka. Det gäller alltså att strukturera sin kod på ett vettigt vis.&lt;br /&gt;
&lt;br /&gt;
Det finns en del tricks, eller goda vanor, som gör att det blir enklare att hålla ordning på koden. I exemplet ovan har vi använt oss av så kallad [[indentering]]. Det vill säga vi har skjutit in texten med några extra mellanslag (tabbar går också bra) på vänster sida. Det gör att vi kan följa strukturen i koden och att vi lätt ser vilka start- och sluttaggar som hör samman. Vi återkommer till goda kodvanor i en senare aktivitet.&lt;br /&gt;
&lt;br /&gt;
== Verktyg hjälper dig ==&lt;br /&gt;
Moderna webbutvecklingsverktyg har bra stöd som hjälper dig med att skriva korrekt, snygg och vettig kod. Detta gör de på flera olika sätt.&lt;br /&gt;
&lt;br /&gt;
När du börjar skriva, så ger de flesta verktyg förslag på vad det kan vara som du håller på att skriva. Det gör att du snabbt kan skriva en bokstav eller två och vips så kan din editor fylla i och komplettera vad du vill skriva. Detta gör att man skriver snabbare och att det blir färre fel. I många fall föreslår din editor kompletteringar utifrån sammanhanget runt om det du skriver. Om du ska ange ett färgattribut, så fattar editorn antagligen att det är en färg som du håller på att ange och ger förslag på olika färgkombinationer.&lt;br /&gt;
&lt;br /&gt;
De flesta verktyg hjälper dig att sätta [[sluttagg]]arna där de hör hemma. Detta gör editorn genom att fylla i korrekt sluttaggsnamn direkt du skriver ”&amp;lt;code&amp;gt;&amp;amp;lt;/&amp;lt;/code&amp;gt;”. &lt;br /&gt;
&lt;br /&gt;
Editorer brukar även vara duktiga på att se till att din kod blir snyggt och korrekt indenterad. Vilket gör att saker hamnar på &amp;quot;rätt&amp;quot; plats i förhållande till kringliggande kod. Detta gör det &#039;&#039;mycket&#039;&#039; lättare att läsa din kod.&lt;br /&gt;
&lt;br /&gt;
Lär dig att använda ditt verktyg. Det kommer att göra ditt liv enklare. Du kommer att behöva skriva mycket mindre och det är stor chans att saker blir korrekta redan från början. Men kom ihåg att man inte kan förlita sig helt på att verktygen gör allting rätt...&lt;br /&gt;
&lt;br /&gt;
== Felaktigt angivna sluttaggar ==&lt;br /&gt;
När vi skapar nästlade [[element]] gäller det att hålla tungan rätt i munnen och se till att [[tagg]]arna hamnar i rätt ordning. Det här skulle till exempel bli rejält fel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;i&amp;gt;huvudrubrik&amp;lt;/h1&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Här har vi satt [[sluttagg]]arna i fel ordning, vilket kommer att ge webbläsaren en hel del huvudbry. De flesta webbläsare är godvilliga och sväljer flertalet fel utan några direkta klagomål. I vissa fall kommer slutresultatet att bli felaktigt, men förvånansvärt ofta lyckas webbläsaren få till en korrekt tolkning av dokumentet trots att man gjort fel. Dock kan det vara som så att det fel som en typ av webbläsare klarar av, kanske en annan webbläsare inte alls klarar.&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Det är viktigt att använda sig av testverktyg som kollar igenom ens [[HTML]]-kod och påpekar fel och brister. Dessa testverktyg sväljer inte vad som helst, utan de är riktigt, riktigt petiga och ska ha allt absolut rätt innan de godkänner koden. Användningen av dylika testverktyg ger mer robust kod, som är lättare att felsöka och underhålla. Så gör det till en god vana att testa din kod ofta – det vinner du på i längden. Ett bra ställe att hitta webbverktyg som gör dessa kontroller är:&lt;br /&gt;
&lt;br /&gt;
http://www.w3.org/developers/tools&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Element, sammanfattning ==&lt;br /&gt;
[[Fil:tldr3a.png|center|Elementens uppbyggnad]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[Elementens-grunder övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[En webbsidas anatomi]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Element-grunder&amp;diff=5074</id>
		<title>Element-grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Element-grunder&amp;diff=5074"/>
		<updated>2024-08-06T14:18:04Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ett taggpar plus dess innehåll skapar tillsammans vad vi kallar för ett [[element]].&lt;br /&gt;
&lt;br /&gt;
== Element ==&lt;br /&gt;
Ett exempel på ett komplett [[element]] kan vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;YwGeNr&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detta är ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element vars innehåll är texten ”Detta är en huvudrubrik”. På detta vis talar vi om för webbläsaren att texten har ett speciellt syfte. I det här fallet anges att detta är sektionens huvudrubrik. Vi talar dock inte om hur texten ska visas, utan enbart dess syfte. Alla webbläsare har ett grundutseende för hur olika [[element]] ska återges. I vårt fall kommer innehållet antagligen att visas med lite större och fetare text. Så länge vi jobbar med [[HTML]], fokuserar vi dock inte på utseende.&lt;br /&gt;
&lt;br /&gt;
Det exakta utseendet som elementen ger upphov till skiljer sig mellan olika webbläsare. Det kan till och med vara som så att slutanvändaren som använder vår webbsida är blind (eller har något annat handikapp) och därför får sidan uppläst. När vi jobbar med ren [[HTML]], kan vi aldrig vara säkra på hur slutresultatet kommer att återges. Med hjälp av [[CSS]] får vi mer kontroll över hur sidan återges, men inte ens då kan vi inte vara 100&amp;amp;nbsp;% säkra på att slutanvändaren kommer att uppleva sidan exakt så som vi tänkt oss. Vi återkommer till utseende i senare aktiviteter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
De flesta exempel på Webbling använder sig av webbtjänsten [http://codepen.io CodePen.io]. I exemplen finns flera flikar som du kan välja mellan. Lite beroende på vilken typ av exempel det handlar om så kan där finnas HTML-, CSS-, JavaScript och Result-flikar.&lt;br /&gt;
&lt;br /&gt;
I de exempel som inte behöver bestå av en fullständig sida, kommer vi att utelämna de &amp;quot;onödiga&amp;quot; kodbitarna. CodePen skapar nämligen en grundsida åt oss, så vi behöver inte ha med all HTML för att exemplen ska fungera.&lt;br /&gt;
&lt;br /&gt;
Det går även att klicka på &amp;quot;Edit on CodePen&amp;quot; i exemplen för att gå till dem på [http://codepen.io CodePens sajt]. Om du gör det så kan du förändra och redigera koden, så att du kan se vad som händer om man väljer att göra saker på olika sätt. Detta är ett bra sätt att lära sig mer om hur webbteknikerna fungerar, så passa på att experimentera med exemplen!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Underelement och nästling ==&lt;br /&gt;
[[Element]] kan i sin tur innehålla andra [[element]]. Ett exempel på det skulle kunna vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;yNEbow&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;em&amp;gt;huvudrubrik&amp;lt;/em&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Här har vi alltså ett &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-element som är nästlat inuti ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element. Det gör att &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-elementet är en del av &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-elementet. Man behöver ofta nästla olika element inuti varandra för att få till den struktur man vill ha. Oftast krävs det nästling när man ska skapa en snygg layout. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Em]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att markera att något har mer emfas än omkringliggande material – det vill säga att det ska betonas på något vis. I de flesta fall kommer webbläsaren att visa sådan text som fet eller kursiv.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Följande (konstlade och dumma) kod är ett mer avancerat exempel på nästling:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdZNrX&amp;quot; height=&amp;quot;240&amp;quot; tab=&amp;quot;html,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Det mest intressanta med ovanstående exempel är att vi har ett &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element nästlat inuti i ett annat &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element. När webbläsaren ska tolka ovanstående, så kommer den fatta att den första ”&amp;lt;code&amp;gt;&amp;amp;lt;/[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en är [[sluttagg]]en till den andra ”&amp;lt;code&amp;gt;&amp;amp;lt;[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en och att den sista [[sluttagg]]en hör samman med den första [[starttagg]]en. Webbläsaren är alltså rätt så ”smart” när den ska tolka hur [[tagg]]ar och [[sluttagg]]ar hör samman, dock gäller det att se till så att man får dit [[sluttagg]]ar som gäller för olika element i rätt ordning.&lt;br /&gt;
&lt;br /&gt;
I teorin kan du nästla saker inuti varandra i all oändlighet. Det är dock dumt att nästla saker och ting alltför djupt, det gör nämligen din kod mer svårläst och därmed mer svårarbetad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Div]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att ange att något innehåll hänger samman som ett block, men att det inte har någon speciell semantisk betydelse. Detta används ofta för layout. Lite längre fram kommer vi att använda denna tagg till många olika saker.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vikten av snygg kod ==&lt;br /&gt;
När man skriver omfattande och komplex kod, kan det lätt bli en enda stor soppa av allting. Med lite tur är det en soppa som webbläsaren klarar av att tolka, medan du, som skrivit koden, kanske tappar bort dig helt. I värsta fall är det en soppa som vare sig du eller webbläsaren klarar av att tolka. Det gäller alltså att strukturera sin kod på ett vettigt vis.&lt;br /&gt;
&lt;br /&gt;
Det finns en del tricks, eller goda vanor, som gör att det blir enklare att hålla ordning på koden. I exemplet ovan har vi använt oss av så kallad [[indentering]]. Det vill säga vi har skjutit in texten med några extra mellanslag (tabbar går också bra) på vänster sida. Det gör att vi kan se strukturen i koden och att vi lätt ser vilka start- och sluttaggar som hör samman. Vi återkommer till goda kodvanor i en senare aktivitet.&lt;br /&gt;
&lt;br /&gt;
== Verktyg hjälper dig ==&lt;br /&gt;
Moderna webbutvecklingsverktyg har bra stöd som hjälper dig med att skriva korrekt, snygg och vettig kod. Detta gör de på flera olika sätt.&lt;br /&gt;
&lt;br /&gt;
När du börjar skriva, så ger de flesta verktyg förslag på vad det kan vara som du håller på att skriva. Det gör att du snabbt kan skriva en bokstav eller två och vips så kan din editor fylla i och komplettera vad du vill skriva. Detta gör att man skriver snabbare och att det blir färre fel. I många fall föreslår din editor kompletteringar utifrån sammanhanget runt omkring det du skriver. Om du ska ange ett färgattribut, så fattar editorn antagligen att det är en färg som du håller på att ange och ger förslag på olika färgkombinationer.&lt;br /&gt;
&lt;br /&gt;
De flesta verktyg hjälper dig att få dit [[sluttagg]]arna där de hör hemma. Detta gör editorn genom att fylla i korrekt sluttaggsnamn direkt du skriver ”&amp;lt;code&amp;gt;&amp;amp;lt;/&amp;lt;/code&amp;gt;”. &lt;br /&gt;
&lt;br /&gt;
Editorer brukar även vara duktiga på att se till att din kod blir snyggt och korrekt indenterad. Vilket gör att saker hamnar på korrekt plats i förhållande till kringliggande kod. Detta gör det &#039;&#039;mycket&#039;&#039; lättare att läsa din kod.&lt;br /&gt;
&lt;br /&gt;
Lär dig att använda ditt verktyg. Det kommer att göra ditt liv enklare. Du kommer att behöva skriva mycket mindre och det är stor chans att saker blir korrekta redan från början. Men kom ihåg att man inte kan förlita sig helt på att verktygen gör allting rätt...&lt;br /&gt;
&lt;br /&gt;
== Felaktigt angivna sluttaggar ==&lt;br /&gt;
När vi skapar nästlade [[element]] gäller det att hålla tungan rätt i munnen och se till att [[tagg]]arna hamnar i rätt ordning. Det här skulle till exempel bli rejält fel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;i&amp;gt;huvudrubrik&amp;lt;/h1&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Här har vi satt [[sluttagg]]arna i fel ordning, vilket kommer att ge webbläsaren en hel del huvudbry. De flesta webbläsare är godvilliga och sväljer flertalet fel utan några direkta klagomål. I vissa fall kommer slutresultatet att bli felaktigt, men förvånansvärt ofta lyckas webbläsaren få till en korrekt tolkning av dokumentet trots att man gjort fel. Dock kan det vara som så att det fel som en typ av webbläsare klarar av, kanske en annan webbläsare inte alls klarar.&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Det är viktigt att använda sig av testverktyg som kollar igenom ens [[HTML]]-kod och påpekar fel och brister. Dessa testverktyg sväljer inte vad som helst, utan de är riktigt, riktigt petiga och ska ha allt absolut rätt innan de godkänner koden. Användningen av dylika testverktyg ger mer robust kod, som är lättare att felsöka och underhålla. Så gör det till en god vana att testa din kod ofta – det vinner du på i längden. Ett bra ställe att hitta webbverktyg som gör dessa kontroller är:&lt;br /&gt;
&lt;br /&gt;
http://www.w3.org/developers/tools&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Element, sammanfattning ==&lt;br /&gt;
[[Fil:tldr3a.png|center|Elementens uppbyggnad]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[Elementens-grunder övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[En webbsidas anatomi]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Element-grunder&amp;diff=5073</id>
		<title>Element-grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Element-grunder&amp;diff=5073"/>
		<updated>2024-08-06T14:17:08Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ett taggpar plus dess innehåll skapar tillsammans vad vi kallar för ett [[element]].&lt;br /&gt;
&lt;br /&gt;
== Element ==&lt;br /&gt;
Ett exempel på ett komplett [[element]] kan vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;YwGeNr&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detta är ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element vars innehåll är texten ”Detta är en huvudrubrik”. På detta vis talar vi om för webbläsaren att texten har ett speciellt syfte. I det här fallet anges att detta är sektionens huvudrubrik. Vi talar dock inte om hur texten ska visas, utan enbart dess syfte. Alla webbläsare har ett grundutseende för hur olika [[element]] ska återges. I vårt fall kommer innehållet antagligen att visas med lite större och fetare text. Så länge vi jobbar med [[HTML]], fokuserar vi dock inte på utseende.&lt;br /&gt;
&lt;br /&gt;
Det exakta utseendet som elementen ger upphov till skiljer sig mellan olika webbläsare. Det kan till och med vara som så att slutanvändaren som använder vår webbsida är blind (eller har något annat handikapp) och därför får sidan uppläst. När vi jobbar med ren [[HTML]], kan vi aldrig vara säkra på hur slutresultatet kommer att återges. Med hjälp av [[CSS]] får vi mer kontroll över hur sidan återges, men inte ens då kan vi inte vara 100&amp;amp;nbsp;% säkra på att slutanvändaren kommer att uppleva sidan exakt så som vi tänkt oss. Vi återkommer till utseende i senare aktiviteter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
De flesta exempel på Webbling använder sig av webbtjänsten [http://codepen.io CodePen.io]. I exemplen finns flera flikar som du kan välja mellan. Lite beroende på vilken typ av exempel det handlar om så kan där finnas HTML-, CSS-, JavaScript och Result-flikar.&lt;br /&gt;
&lt;br /&gt;
I de exempel som inte behöver bestå av en fullständig sida, kommer vi att utelämna de &amp;quot;onödiga&amp;quot; kodbitarna. CodePen skapar nämligen en grundsida åt oss, så vi behöver inte ha med all HTML för att exemplen ska fungera.&lt;br /&gt;
&lt;br /&gt;
Det går även att klicka på &amp;quot;Edit on CodePen&amp;quot; i exemplen för att gå till dem på [http://codepen.io CodePens sajt]. Om du gör det så kan du förändra och redigera koden, så att du kan se vad som händer om man väljer att göra saker på olika sätt. Detta är ett bra sätt att lära sig mer om hur webbteknikerna fungerar, så passa på att experimentera med exemplen!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Underelement och nästling ==&lt;br /&gt;
[[Element]] kan i sin tur innehålla andra [[element]]. Ett exempel på det skulle kunna vara:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;yNEbow&amp;quot; tab=&amp;quot;html,result&amp;quot; height=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;em&amp;gt;huvudrubrik&amp;lt;/em&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Här har vi alltså ett &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-element som är nästlat inuti ett &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-element. Det gör att &amp;lt;code&amp;gt;[[em]]&amp;lt;/code&amp;gt;-elementet är en del av &amp;lt;code&amp;gt;[[hx|h1]]&amp;lt;/code&amp;gt;-elementet. Man behöver ofta nästla olika element inuti varandra för att få till den struktur man vill ha. Oftast krävs det nästling när man ska skapa en snygg layout. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Em]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att markera att något har mer emfas än omkringliggande material – det vill säga att det ska betonas på något vis. I de flesta fall kommer webbläsaren att visa sådan text som fet eller kursiv.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Följande (konstlade och dumma) kod är ett mer avancerat exempel på nästling:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdZNrX&amp;quot; height=&amp;quot;240&amp;quot; tab=&amp;quot;html,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Det mest intressanta med ovanstående exempel är att vi har ett &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element nästlat inuti i ett annat &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt;-element. När webbläsaren ska tolka ovanstående, så kommer den att fatta att den första ”&amp;lt;code&amp;gt;&amp;amp;lt;/[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en är [[sluttagg]]en till den andra ”&amp;lt;code&amp;gt;&amp;amp;lt;[[div]]&amp;amp;gt;&amp;lt;/code&amp;gt;”-[[tagg]]en och att den sista [[sluttagg]]en hör samman med den första [[starttagg]]en. Webbläsaren är alltså rätt så ”smart” när den ska tolka hur [[tagg]]ar och [[sluttagg]]ar hör samman, dock gäller det att se till så att man får dit [[sluttagg]]ar som gäller för olika element i rätt ordning.&lt;br /&gt;
&lt;br /&gt;
I teorin kan du nästla saker inuti varandra i all oändlighet. Det är dock dumt att nästla saker och ting alltför djupt, det gör nämligen din kod mer svårläst och därmed mer svårarbetad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[[Div]]&amp;lt;/code&amp;gt;-[[tagg]]en används för att ange att något innehåll hänger samman som ett block, men att det inte har någon speciell semantisk betydelse. Detta används ofta för layout. Lite längre fram kommer vi att använda denna tagg till många olika saker.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vikten av snygg kod ==&lt;br /&gt;
När man skriver omfattande och komplex kod, kan det lätt bli en enda stor soppa av allting. Med lite tur är det en soppa som webbläsaren klarar av att tolka, medan du, som skrivit koden, kanske tappar bort dig helt. I värsta fall är det en soppa som vare sig du eller webbläsaren klarar av att tolka. Det gäller alltså att strukturera sin kod på ett vettigt vis.&lt;br /&gt;
&lt;br /&gt;
Det finns en del tricks, eller goda vanor, som gör att det blir enklare att hålla ordning på koden. I exemplet ovan har vi använt oss av så kallad [[indentering]]. Det vill säga vi har skjutit in texten med några extra mellanslag (tabbar går också bra) på vänster sida. Det gör att vi kan se strukturen i koden och att vi lätt ser vilka start- och sluttaggar som hör samman. Vi återkommer till goda kodvanor i en senare aktivitet.&lt;br /&gt;
&lt;br /&gt;
== Verktyg hjälper dig ==&lt;br /&gt;
Moderna webbutvecklingsverktyg har bra stöd som hjälper dig med att skriva korrekt, snygg och vettig kod. Detta gör de på flera olika sätt.&lt;br /&gt;
&lt;br /&gt;
När du börjar skriva, så ger de flesta verktyg förslag på vad det kan vara som du håller på att skriva. Det gör att du snabbt kan skriva en bokstav eller två och vips så kan din editor fylla i och komplettera vad du vill skriva. Detta gör att man skriver snabbare och att det blir färre fel. I många fall föreslår din editor kompletteringar utifrån sammanhanget runt omkring det du skriver. Om du ska ange ett färgattribut, så fattar editorn antagligen att det är en färg som du håller på att ange och ger förslag på olika färgkombinationer.&lt;br /&gt;
&lt;br /&gt;
De flesta verktyg hjälper dig att få dit [[sluttagg]]arna där de hör hemma. Detta gör editorn genom att fylla i korrekt sluttaggsnamn direkt du skriver ”&amp;lt;code&amp;gt;&amp;amp;lt;/&amp;lt;/code&amp;gt;”. &lt;br /&gt;
&lt;br /&gt;
Editorer brukar även vara duktiga på att se till att din kod blir snyggt och korrekt indenterad. Vilket gör att saker hamnar på korrekt plats i förhållande till kringliggande kod. Detta gör det &#039;&#039;mycket&#039;&#039; lättare att läsa din kod.&lt;br /&gt;
&lt;br /&gt;
Lär dig att använda ditt verktyg. Det kommer att göra ditt liv enklare. Du kommer att behöva skriva mycket mindre och det är stor chans att saker blir korrekta redan från början. Men kom ihåg att man inte kan förlita sig helt på att verktygen gör allting rätt...&lt;br /&gt;
&lt;br /&gt;
== Felaktigt angivna sluttaggar ==&lt;br /&gt;
När vi skapar nästlade [[element]] gäller det att hålla tungan rätt i munnen och se till att [[tagg]]arna hamnar i rätt ordning. Det här skulle till exempel bli rejält fel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Detta är en &amp;lt;i&amp;gt;huvudrubrik&amp;lt;/h1&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Här har vi satt [[sluttagg]]arna i fel ordning, vilket kommer att ge webbläsaren en hel del huvudbry. De flesta webbläsare är godvilliga och sväljer flertalet fel utan några direkta klagomål. I vissa fall kommer slutresultatet att bli felaktigt, men förvånansvärt ofta lyckas webbläsaren få till en korrekt tolkning av dokumentet trots att man gjort fel. Dock kan det vara som så att det fel som en typ av webbläsare klarar av, kanske en annan webbläsare inte alls klarar.&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Det är viktigt att använda sig av testverktyg som kollar igenom ens [[HTML]]-kod och påpekar fel och brister. Dessa testverktyg sväljer inte vad som helst, utan de är riktigt, riktigt petiga och ska ha allt absolut rätt innan de godkänner koden. Användningen av dylika testverktyg ger mer robust kod, som är lättare att felsöka och underhålla. Så gör det till en god vana att testa din kod ofta – det vinner du på i längden. Ett bra ställe att hitta webbverktyg som gör dessa kontroller är:&lt;br /&gt;
&lt;br /&gt;
http://www.w3.org/developers/tools&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Element, sammanfattning ==&lt;br /&gt;
[[Fil:tldr3a.png|center|Elementens uppbyggnad]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[Elementens-grunder övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[En webbsidas anatomi]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Tagg-grunder&amp;diff=5072</id>
		<title>Tagg-grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Tagg-grunder&amp;diff=5072"/>
		<updated>2024-08-06T14:10:35Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Som vi konstaterade tidigare så bygger [[HTML]] på [[tagg]]ar och [[element]]. Taggarna är de byggklossar som bygger upp sidans grundutseende och struktur. För att kunna förstå [[HTML]], måste vi förstå hur dess [[tagg]]ar och [[element]] är uppbyggda.&lt;br /&gt;
&lt;br /&gt;
I de allra flesta fall består [[HTML]]-[[tagg]]arna av ett taggpar, man har en [[starttagg]] och en [[sluttagg]]. Innehållet som finns mellan [[tagg]]-delarna är den data som vi vill märka upp på något vis. När webbläsaren sedan tolkar dokumentet kommer den, med hjälp av [[tagg]]arna, att kunna behandla dokumentet på ett korrekt vis och skapa [[element]] utifrån [[tagg]]arna och deras innehåll.&lt;br /&gt;
&lt;br /&gt;
== Taggarnas uppbyggnad ==&lt;br /&gt;
Alla [[tagg]]ar, såväl start som slut, ligger inom tecknen ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;” och ”&amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;”. Så en [[tagg]] kan se ut så här ”&amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;amp;gt;&amp;lt;/code&amp;gt;”. Detta är &amp;lt;code&amp;gt;h1&amp;lt;/code&amp;gt;-taggen, vilken används för att markera att något är en huvudrubrik. När webbläsaren tolkar ett dokument och träffar på ett ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;”-tecken kommer den att börja tolka allt från och med detta tecken som en tagg, ända tills den hittar ett motsvarande ”&amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;”-tecken.&lt;br /&gt;
&lt;br /&gt;
HTML:s hantering av ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;”, gör att man inte kan lägga in dessa tecken hur som helst i sina dokument. Så om man vill använda sig av ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;” som ett vanligt tecken och inte som start för en HTML-tagg, måste man ange en specialkod.  Vi återkommer till denna typ av specialkoder.&lt;br /&gt;
&lt;br /&gt;
== HTML5:s tagguppsättning ==&lt;br /&gt;
Man kan inte uppfinna nya [[tagg]]ar allteftersom man känner för det, utan det finns en förutbestämd uppsättning av [[tagg]]ar som definierats i [[HTML5]]-[[standard]]en och det är enbart dessa taggar som webbläsare fattar. Det finns en uppsjö av olika [[tagg]]ar. Dock är det inte helt nödvändigt att kunna dem alla utantill. Det är bra att komma ihåg vilka olika typer av [[tagg]]ar som finns, men de mer obskyra [[tagg]]arna kan man alltid slå upp när man väl behöver dem.&lt;br /&gt;
&lt;br /&gt;
I de flesta fall finns det en [[tagg]] som passar det syfte man är ute efter, men för de tillfällen då man inte hittar exakt vad man behöver så finns det några generella [[tagg]]ar som kan användas för att märka upp information som inte har någon speciell [[semantik|semantisk]] betydelse. En vanlig anledning till att vilja markera upp saker med dessa generella [[tagg]]ar är för att informationen ska ges ett speciellt utseende, med hjälp av [[CSS]], eller för att informationen ska behandlas av ett [[JavaScript]]-program.&lt;br /&gt;
&lt;br /&gt;
== Starttaggar ==&lt;br /&gt;
Man inleder alltså ett element i HTML-kod med en starttagg. Starttaggen anges på formen &amp;lt;code&amp;gt;&amp;amp;lt;&#039;&#039;taggnamn&#039;&#039;&amp;amp;gt;&amp;lt;/code&amp;gt;, där &amp;lt;code&amp;gt;&#039;&#039;taggnamn&#039;&#039;&amp;lt;/code&amp;gt; är en av alla de taggar som finns med i HTML5-standarden. Man kan även ange attribut och liknande i en tagg, men det återkommer vi snart till. Det är viktigt att se till att man stavar taggnamnet helt korrekt, annars kommer inte webbläsaren att fatta vad man menar. I HTML5 går det att blanda stora/små bokstäver i ett taggnamn, men det är bäst att skriva taggnamn med små bokstäver (gemena).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
För att skriva vettig kod är det viktigt att du använder taggarna på rätt sätt. Varje tagg har ett specifikt syfte och ska enbart användas för detta syfte. Om du är osäker på hur en tagg ska användas, läs på innan du börjar använda den! En bra början är att titta på [[HTML5-taggar|listan över taggar]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sluttaggar ==&lt;br /&gt;
För så gott som alla [[tagg]]ar används även en [[sluttagg]]. Precis som [[starttagg]]en talar om var ett en tagg börjar gälla, talar [[sluttagg]]en om var taggen upphör att gälla. [[Sluttagg]]ar ser ut som och heter det samma som [[starttagg]]arna, med den skillnaden att man alltid lägger till ett ”&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;”-tecken före taggnamnet. Den [[tagg]] som vi hade som exempel tidigare; ”&amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;amp;gt;&amp;lt;/code&amp;gt;”, har alltså en motsvarande [[sluttagg]] som ser ut så här; ”&amp;lt;code&amp;gt;&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;/code&amp;gt;”. Liksom med starttaggarna är det viktigt att stava rätt. Det är extra viktigt att inte utelämna &amp;quot;&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;&amp;quot;-tecknet. Gör du det kommer webbläsaren att tro att det är en ny starttagg, vilket kan leda till oförutsedda konsekvenser (knappast bra sådana).&lt;br /&gt;
&lt;br /&gt;
== Utelämna sluttaggar ==&lt;br /&gt;
I vissa fall kan man utelämna [[sluttagg]]en, men det är oftast en bra vana att lägga dit den även om den inte är nödvändig. Det gör det lättare att se var ett [[element]] börjar och var det slutar, samt att vissa utvecklingsverktyg fungerar bättre om båda [[tagg]]-delarna är med. I de fall man råkar utelämna sluttaggen och den är nödvändig, kan det bli rejäla fel när webbläsaren försöker tolka ditt dokument och slutresultatet kanske inte alls blir vad du tänkt dig.&lt;br /&gt;
&lt;br /&gt;
Dock finns det ett fåtal [[tagg]]ar till vilka man &#039;&#039;aldrig&#039;&#039; använder en [[sluttagg]]. Ett exempel på det är &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; som används för att lägga in bilder. Vi kommer att se några till exempel på denna typ av taggar längre fram.&lt;br /&gt;
&lt;br /&gt;
== Hur skriver man ett &amp;quot;&amp;amp;lt;&amp;quot;-tecken? ==&lt;br /&gt;
Som vi konstaterat så indikerar &amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt; att en tagg ska starta. Om man vill ha ett ”mindre än”-tecken i sitt dokument, måste man skriva det med hjälp av en speciell kod – i detta fall är koden ”&amp;lt;code&amp;gt;&amp;amp;amp;lt;&amp;lt;/code&amp;gt;”. Då kommer webbläsaren att förstå att man vill visa det specifika tecknet och att det inte är en [[starttagg]]. Det finns många dylika [[teckenkod]]er, men för de flesta tecken behöver man inte använda sig av en kod.&lt;br /&gt;
&lt;br /&gt;
== Sammanfattning av taggar ==&lt;br /&gt;
[[Fil:tldr2.png|center|En taggs uppbyggnad]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[Tagg-grunder övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa sektion ==&lt;br /&gt;
[[Element-grunder]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Tagg-grunder&amp;diff=5071</id>
		<title>Tagg-grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Tagg-grunder&amp;diff=5071"/>
		<updated>2024-08-06T14:08:49Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Som vi konstaterade tidigare så bygger [[HTML]] på [[tagg]]ar och [[element]]. Taggarna är de byggklossar som bygger upp sidans grundutseende och struktur. För att kunna förstå [[HTML]], måste vi förstå hur dess [[tagg]]ar och [[element]] är uppbyggda.&lt;br /&gt;
&lt;br /&gt;
I de allra flesta fall består [[HTML]]-[[tagg]]arna av ett taggpar, man har en [[starttagg]] och en [[sluttagg]]. Innehållet som finns mellan [[tagg]]-delarna är den data som vi vill märka upp på något vis. När webbläsaren sedan tolkar dokumentet kommer den, med hjälp av [[tagg]]arna, att kunna behandla dokumentet på ett korrekt vis och skapa [[element]] utifrån [[tagg]]arna och deras innehåll.&lt;br /&gt;
&lt;br /&gt;
== Taggarnas uppbyggnad ==&lt;br /&gt;
Alla [[tagg]]ar, såväl start som slut, ligger inom tecknen ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;” och ”&amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;”. Så en [[tagg]] kan se ut så här ”&amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;amp;gt;&amp;lt;/code&amp;gt;”. Detta är &amp;lt;code&amp;gt;h1&amp;lt;/code&amp;gt;-taggen, vilken används för att markera att något är en huvudrubrik. När webbläsaren tolkar ett dokument och träffar på ett ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;”-tecken kommer den att börja tolka allt från och med detta tecken som en tagg, ända tills den hittar ett motsvarande ”&amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;”-tecken.&lt;br /&gt;
&lt;br /&gt;
HTML:s hantering av ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;”, gör att man inte kan lägga in dessa tecken hur som helst i sina dokument. Så om man vill använda sig av ”&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;” som ett vanligt tecken och inte som start för en HTML-tagg, måste man ange en specialkod.  Vi återkommer till denna typ av specialkoder.&lt;br /&gt;
&lt;br /&gt;
== HTML5:s tagguppsättning ==&lt;br /&gt;
Man kan inte uppfinna nya [[tagg]]ar allteftersom man känner för det, utan det finns en förutbestämd uppsättning av [[tagg]]ar som definierats i [[HTML5]]-[[standard]]en och det är enbart dessa taggar som webbläsare fattar. Det finns en uppsjö av olika [[tagg]]ar. Dock är det inte helt nödvändigt att kunna dem alla utantill. Det är bra att komma ihåg vilka olika typer av [[tagg]]ar som finns, men de mer obskyra [[tagg]]arna kan man alltid slå upp när man väl behöver dem.&lt;br /&gt;
&lt;br /&gt;
I de flesta fall finns det en [[tagg]] som passar det syfte man är ute efter, men för de tillfällen då man inte hittar exakt vad man behöver så finns det några generella [[tagg]]ar som kan användas för att märka upp information som inte har någon speciell [[semantik|semantisk]] betydelse. En vanlig anledning till att vilja markera upp saker med dessa generella [[tagg]]ar är för att informationen ska ges ett speciellt utseende, med hjälp av [[CSS]], eller för att informationen ska behandlas av ett [[JavaScript]]-program.&lt;br /&gt;
&lt;br /&gt;
== Starttaggar ==&lt;br /&gt;
Man inleder alltså ett element i HTML-kod med en starttagg. Starttaggen anges på formen &amp;lt;code&amp;gt;&amp;amp;lt;&#039;&#039;taggnamn&#039;&#039;&amp;amp;gt;&amp;lt;/code&amp;gt;, där &amp;lt;code&amp;gt;&#039;&#039;taggnamn&#039;&#039;&amp;lt;/code&amp;gt; är en av alla de taggar som finns med i HTML5-standarden. Man kan även ange attribut och liknande i en tagg, men det återkommer vi snart till. Det är viktigt att se till att man stavar taggnamnet helt korrekt, annars kommer inte webbläsaren att fatta vad man menar. I HTML5 går det att blanda stora/små bokstäver i ett taggnamn, men det är bäst att skriva taggnamn med små bokstäver (gemena).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
För att skriva vettig kod är det viktigt att du använder taggarna på rätt sätt. Varje tagg har ett specifikt syfte och ska enbart användas för detta syfte. Om du är osäker på hur en tagg ska användas, läs på innan du börjar använda den! En bra början är att titta på [[html5-taggar|listan över taggar]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sluttaggar ==&lt;br /&gt;
För så gott som alla [[tagg]]ar används även en [[sluttagg]]. Precis som [[starttagg]]en talar om var ett en tagg börjar gälla, talar [[sluttagg]]en om var taggen upphör att gälla. [[Sluttagg]]ar ser ut som och heter det samma som [[starttagg]]arna, med den skillnaden att man alltid lägger till ett ”&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;”-tecken före taggnamnet. Den [[tagg]] som vi hade som exempel tidigare; ”&amp;lt;code&amp;gt;&amp;amp;lt;[[hx|h1]]&amp;amp;gt;&amp;lt;/code&amp;gt;”, har alltså en motsvarande [[sluttagg]] som ser ut så här; ”&amp;lt;code&amp;gt;&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;/code&amp;gt;”. Liksom med starttaggarna är det viktigt att stava rätt. Det är extra viktigt att inte utelämna &amp;quot;&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;&amp;quot;-tecknet. Gör du det kommer webbläsaren att tro att det är en ny starttagg, vilket kan leda till oförutsedda konsekvenser (knappast bra sådana).&lt;br /&gt;
&lt;br /&gt;
== Utelämna sluttaggar ==&lt;br /&gt;
I vissa fall kan man utelämna [[sluttagg]]en, men det är oftast en bra vana att lägga dit den även om den inte är nödvändig. Det gör det lättare att se var ett [[element]] börjar och var det slutar, samt att vissa utvecklingsverktyg fungerar bättre om båda [[tagg]]-delarna är med. I de fall man råkar utelämna sluttaggen och den är nödvändig, kan det bli rejäla fel när webbläsaren försöker tolka ditt dokument och slutresultatet kanske inte alls blir vad du tänkt dig.&lt;br /&gt;
&lt;br /&gt;
Dock finns det ett fåtal [[tagg]]ar till vilka man &#039;&#039;aldrig&#039;&#039; använder en [[sluttagg]]. Ett exempel på det är &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;gt;&amp;lt;/code&amp;gt; som används för att lägga in bilder. Vi kommer att se några till exempel på denna typ av taggar längre fram.&lt;br /&gt;
&lt;br /&gt;
== Hur skriver man ett &amp;quot;&amp;amp;lt;&amp;quot;-tecken? ==&lt;br /&gt;
Som vi konstaterat så indikerar &amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt; att en tagg ska starta. Om man vill ha ett ”mindre än”-tecken i sitt dokument, måste man skriva det med hjälp av en speciell kod – i detta fall är koden ”&amp;lt;code&amp;gt;&amp;amp;amp;lt;&amp;lt;/code&amp;gt;”. Då kommer webbläsaren att förstå att man vill visa det specifika tecknet och att det inte är en [[starttagg]]. Det finns många dylika [[teckenkod]]er, men för de flesta tecken behöver man inte använda sig av en kod.&lt;br /&gt;
&lt;br /&gt;
== Sammanfattning av taggar ==&lt;br /&gt;
[[Fil:tldr2.png|center|En taggs uppbyggnad]]&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[Tagg-grunder övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa sektion ==&lt;br /&gt;
[[Element-grunder]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=HTML-grunder&amp;diff=5070</id>
		<title>HTML-grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=HTML-grunder&amp;diff=5070"/>
		<updated>2024-08-06T13:58:59Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HTML]] är den grund på vilken all [[webbutveckling]] vilar. Alla andra [[webbteknik]]er går det att klara sig utan, men man kan inte bygga upp en webbsida utan [[HTML]].&lt;br /&gt;
&lt;br /&gt;
Det går visserligen att skapa webbsidor utan att lära sig [[HTML]]. Det kan man göra genom att använda sig av så kallade [[WYSIWYG]]-verktyg.  I dessa skapar man sidorna visuellt, snarare än genom att skriva koder – exempel på sådana verktyg är [http://www.adobe.com/se/products/dreamweaver.html Adobe Dreamweaver] och [http://www.aptana.com/ Aptana] (den senare är helt gratis). Även om du kan skapa riktigt avancerade sidor i dylika verktyg, kommer du inte att komma långt med [[webbutveckling]] om du inte lär dig grunderna inom [[HTML]]. Detta gäller inte minst om du ska skapa [[webbplats|webbplatser]] med dynamiskt innehåll. Turligt nog är inte [[HTML]] så jättesvårt att lära sig.&lt;br /&gt;
== Vad betyder HTML? ==&lt;br /&gt;
[[HTML]] är en förkortning av &amp;quot;HyperText Markup Language&amp;quot;. Vi jobbar oss igenom termerna baklänges för att förstå vad de handlar om.&lt;br /&gt;
&lt;br /&gt;
=== Language ===&lt;br /&gt;
”Language” gör att vi kan förstå att detta är ett slags språk. I grund och botten består HTML-språket av engelska ord, eller förkortningen av engelska ord. Liksom för det mesta när man jobbar med datorer har de olika orden en väldigt specifik mening och när vi lär oss [[HTML]] så lär vi oss hur webbklienter, oftast webbläsare, kommer att tolka dessa ord. Det är vi som måste anpassa oss till att använda språket på ett sätt som webbläsaren kan förstå. Vi kan inte använda vilka uttryck som helst, utan vi måste använda oss av de fåtal ord som webbläsaren förstår och vi måste använda dem på ett vis som klienten klarar av att begripa. Man talar ofta om [[syntax]] och [[semantik]] i dessa sammanhang, vi återkommer till vad dessa begrepp betyder lite senare.&lt;br /&gt;
&lt;br /&gt;
=== Markup ===&lt;br /&gt;
Vad betyder då resten av förkortningen? ”Markup” kommer från att vi markerar information i vårt dokument med hjälp av olika [[tagg]]ar. Dessa är ungefär samma sak som etiketter och de markerar vad innehållet innanför dem har för funktionalitet. På så vis beskriver vi strukturen i ett dokument, där vi noggrant talar om vad varje bit av dokumentet har för funktion. Markeringarna är instruktioner till de [[webbklient]]er som ska tolka och visa upp sidan. För att åstadkomma dessa markeringar använder vi oss av [[HTML]]-[[tagg]]ar.&lt;br /&gt;
&lt;br /&gt;
[[Tagg]]ar är alltså små, korta ”etiketter” som anger hur efterföljande data ska tolkas. De flesta taggar består av ett taggpar, en [[starttagg]] och en [[sluttagg]]. Allt som befinner sig innanför dessa taggpar bildar ett [[element]]. Sammantaget är det dessa [[element]] som bygger upp en komplett webbsida. När vi nu börjar att lära oss [[HTML]], är det just de olika [[tagg]]arna vi kommer att lära oss. Vi kommer att gå in på vad de heter, vad de gör och hur de ska användas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
  [[HTML5-taggar|Här]] hittar du en lista över de taggar som är tillgängliga i [[HTML5]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HyperText ===&lt;br /&gt;
Sen har vi då det sista, mer kryptiska ordet i förkortningen – nämligen, [[hypertext]]. Detta är en teknik som gör att man kan länka samman olika typer av information. Även om ”text” verkar ange att det enbart är text som kan länkas, så stämmer det inte längre. I stort sett kan vad som helst vara en länk som leder vidare till annan information. Det handlar alltså om webblänkar, såna som används i alla webbsidor. Informationen man länkar till kan i princip vara vad som helst, kanske en annan webbsida eller någon annan typ av media som ska visas upp.&lt;br /&gt;
&lt;br /&gt;
I [[HTML]]s grundkoncept ingår alltså tanken att man ska kunna länka samman olika typer av information. Länkarna kan ses som trådar som leder kors och tvärs mellan olika typer av information. Trådar som i sin tur bildar ett nät – vilket är det som gett namnet åt webben (”web” betyder ju nät eller spindelnät på engelska). Idén med hyperlänkat material är långt ifrån ny och du kan läsa mer om historiken i ett [[Webbhistorik|annat avsnitt]] .&lt;br /&gt;
&lt;br /&gt;
== Vad används [[HTML]] till? ==&lt;br /&gt;
[[HTML]] är alltså en teknik som används för att skapa dokument, ge dem en struktur samt att det ger möjligheten att länka dokumentets innehåll så att det leder till annat innehåll. Inom datavärlden brukar vi kalla detta för ett dokumentformat eller ett dataformat. [[HTML]] är relativt strikt, man kan inte skapa nya [[tagg]]ar eller använda taggar hipp som happ, utan man måste följa den angivna mallen – eller [[standard]]en.&lt;br /&gt;
&lt;br /&gt;
Den version av [[HTML]] som vi kommer att lära oss här på Webbling är [[HTML5]]. Vilket är, i skrivandes stund, den senaste [[HTML]]-versionen.&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
[[HTML-grunder övningar]]&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivtet ==&lt;br /&gt;
[[Tagg-grunder]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Introduktion_till_webbteknik&amp;diff=5069</id>
		<title>Introduktion till webbteknik</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Introduktion_till_webbteknik&amp;diff=5069"/>
		<updated>2024-08-06T13:35:13Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Om du lyckats ta dig till den här sidan, vet du nog ganska bra hur man använder en webbläsare för att navigera på webben. Men du kanske inte känner till de tekniker som används för att skicka, tolka och visa en webbsida. Det händer en hel del ”bakom kulisserna”, från det du begär att du vill hämta en specifik sida, tills att den visas upp i din webbläsare. &lt;br /&gt;
== Webbutveckling ==&lt;br /&gt;
Webbutveckling är termen som man använder för arbetet kring att skapa webbsidor, webbplatser och webbapplikationer. Allt som har med webbens funktionalitet att göra kallas för webbteknik. Dessa begrepp kan dock innefatta en hel del olika saker, eftersom det är så breda fält. I webbutveckling kan det ingå allt möjligt; design av sidans utseende (kanske i Photoshop eller som en skiss på papper), framtagandet av prototyper, kodningen av själva sidan, testning av sidan, optimering av sidan, publicering av sidan och mycket, mycket mer. Webbteknik handlar mer om de rent tekniska aspekterna och inte så mycket om design och utseende.&lt;br /&gt;
&lt;br /&gt;
== Webbtekniker ==&lt;br /&gt;
Vi kommer att börja med att titta på en webbsidas anatomi. Hur är den uppbyggd? Vilka tekniker, protokoll och standarder är det som samarbetar för att visa en sida? Vad betyder alla koder som syns om man tittar på källkoden till en webbsida?&lt;br /&gt;
&lt;br /&gt;
Det finns några tekniker som är absolut nödvändiga för att skapa sidor. En del av dessa tekniker är nyare än andra. När webben skapades 1989, var den främst tänkt att användas till att distribuera vetenskapliga rapporter. Till att börja med kunde man inte ens lägga in grafik i en webbsida! Idag har vi dock webbsidor som kan innehålla det mest spektakulära multimediala innehållet.&lt;br /&gt;
&lt;br /&gt;
== Webbsidans grundstenar ==&lt;br /&gt;
En modern webbsida byggs upp med hjälp av flertalet olika webbtekniker. I grunden handlar det om följande komponenter:&lt;br /&gt;
&lt;br /&gt;
=== [[HTML]] ===&lt;br /&gt;
[[HTML]] beskriver sidans struktur och informationens logiska uppdelning. Även om en webbsida kan vara fylld av allt möjligt multimedialt innehåll, så är HTML-kod helt och hållet ren text. Detta gäller även för CSS och JavaScript.&lt;br /&gt;
&lt;br /&gt;
=== [[CSS]] ===&lt;br /&gt;
[[CSS]] används för att skapa utseende och layout för en webbsida. [[CSS]] kan även användas för att skapa diverse effekter, animationer och viss interaktivitet. &lt;br /&gt;
&lt;br /&gt;
=== [[JavaScript]] ===&lt;br /&gt;
[[JavaScript]] används för att skapa interaktivitet på sidan och för att programmera sådant som inte ovanstående grundtekniker klarar av. Detta är grunden för de flesta webbapplikationer, såsom t.ex. Facebook, Gmail, osv.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well-danger&amp;quot;&amp;gt;&lt;br /&gt;
(Obs: programmeringsspråken [[JavaScript]] och [[Java]] har inget med varandra att göra, det är två helt olika språk!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Andra tekniker ===&lt;br /&gt;
Förutom de ovannämnda teknikerna, finns det olika typer av grafik-, ljud- och video-format samt allt möjligt annat som kan ingå i en modern webbsida.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivtet ==&lt;br /&gt;
Vi kommer gå in på vardera teknik i mer detalj följande avsnitt, till att börja med ska vi koncentrera oss på [[HTML]].&lt;br /&gt;
&lt;br /&gt;
[[HTML-grunder]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Webbutveckling&amp;diff=5068</id>
		<title>Webbutveckling</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Webbutveckling&amp;diff=5068"/>
		<updated>2024-08-06T13:28:11Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Webben har kommit att bli den naturliga plattformen för så gott som allt som publiceras idag. Användningen av webben som informationskälla har vuxit lavinartat, samtidigt som webben även har blivit en stark plattform för att köra alla möjliga typer av applikationer.&lt;br /&gt;
&lt;br /&gt;
Webbutveckling är egentligen ett ganska brett område som täcker in många olika tekniker. Man brukar dock ofta dela in webbutveckling i två underområden:&lt;br /&gt;
==== Klientsidan ====&lt;br /&gt;
En klient är något hämtar en webbsida från en server. Oftast är klienten en webbläsare. Dock kan det även vara andra saker, t.ex. en sökmotor som läser in materialet på sidan.&lt;br /&gt;
&lt;br /&gt;
Om det är en webbläsare som hämtar och visar sidan, så har finns troligen en _användare_ som vill titta på sidan. Oftast så anpassar vi våra sidor så att användaren får en så bra upplevelse som möjligt.&lt;br /&gt;
&lt;br /&gt;
Utveckling för klientsidan, ofta kallat &amp;quot;front-end&amp;quot; eller &amp;quot;client-side&amp;quot; på engelska, omfattar allt som kommer att köras och synas på användaren sida. Det kan alltså vara design, informationsinnehåll, [[skript]], o.s.v. Huvudteknikerna som används är [[HTML]], [[CSS]] och [[JavaScript]].&lt;br /&gt;
&lt;br /&gt;
==== Serversidan ====&lt;br /&gt;
Utveckling för serversidan, ofta kallat &amp;quot;back-end&amp;quot; på engelska, handlar om allt som körs på webbservern. Detta omfattar olika typer av applikationer som skapar webbmaterial som kan hämtas hem av en webbklient.&lt;br /&gt;
&lt;br /&gt;
Applikationerna kan skapas på en mängd olika vis, ofta är de programmerade i [[PHP]] eller [[JavaScript]]. Det kan även handla om olika typer av tjänster som inte är avsedda för en användare, t.ex. sådana tjänster som tillhandahåller andra webbapplikationer med data eller funktionalitet.&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Typografi_-_diverse_egenskaper&amp;diff=5067</id>
		<title>Typografi - diverse egenskaper</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Typografi_-_diverse_egenskaper&amp;diff=5067"/>
		<updated>2022-09-08T07:12:47Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lite gott och blandat med olika CSS-egenskaper som påverkar text.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;[[line-height]]&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Denna egenskap anger hur långt avståndet ska vara mellan två textrader. Detta går att ange på en rad olika vis. Följande värden kan sättas:&lt;br /&gt;
:&amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;:  Sätter normal radhöjd. Detta är defaultvärdet.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;&#039;&#039;siffra&#039;&#039;&amp;lt;/code&amp;gt;: En siffra utan efterföljande enhet anger en multiplikationsfaktor. Webbläsaren kommer att sätta linjeavståndet till faktorn multiplicerad med fontstorleken.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;&#039;&#039;höjd&#039;&#039;&amp;lt;/code&amp;gt;: Höjdvärdet ska efterföljas av en CSS-enhet, t.ex. &amp;lt;code&amp;gt;px&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;&#039;&#039;procent&#039;&#039;&amp;lt;/code&amp;gt;: Anger linjehöjden som en procent av nuvarande fontstorlek.&lt;br /&gt;
&lt;br /&gt;
Exempel på hur man kan använda radhöjd:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;mPWmpj&amp;quot; height=&amp;quot;940&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Typografi - diverse egenskaper]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5066</id>
		<title>Flexbox - styra layoutflödet längs korsaxeln</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5066"/>
		<updated>2022-09-08T07:03:10Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En av de viktigaste sakerna vi vill kunna styra över, är hur flexelementen placeras i förhållande till korsaxeln. Detta styr vi med hjälp av &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Med denna egenskap kan man ange hur flexinnehållet ska placeras ut i flexboxen. Detta används för att styra hur boxarna placeras i förhållande till korsaxeln.  Detta är en mycket användbar egenskap, som gör att man t.ex. kan centrera saker enkelt samt att man lätt kan skapa flera kolumner som har samma höjd (vilket tidigare var svårt i CSS).&lt;br /&gt;
&lt;br /&gt;
Här är de möjliga värdena på denna egenskap (alla exempel utgår ifrån att man placeras innehållet på en rad, men det fungerar likvärdigt för kolumner):&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-start&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexStart.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot starten på flexboxen. Det vill säga det som har &amp;lt;code&amp;gt;flex-direction: row;&amp;lt;/code&amp;gt; justeras mot &amp;quot;toppen&amp;quot; på flexboxen, medan det som har &amp;lt;code&amp;gt;flex-direction: column;&amp;lt;/code&amp;gt; justeras mot vänstermarginalen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;zGVNvq&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-end&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexEnd.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot slutet av flexboxen. Om man t.ex. har &amp;lt;code&amp;gt;flex-direction: row&amp;lt;/code&amp;gt; blir detta mot botten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MwMJjY&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsCenter.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centerjusteras mot flexboxens mitt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;waLgzR&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;stretch&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsStretch.png]]&lt;br /&gt;
&lt;br /&gt;
Detta är defaultvärdet. Flexinnehållet sträcks ut så att det fyller upp hela flexboxen ifrån topp till botten. Dock tar webbläsaren eventuella &amp;lt;code&amp;gt;height&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-height&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-width&amp;lt;/code&amp;gt;,  i beaktande och om dessa är angivna kommer flexinnehållet enbart att stretchas så de håller sig inom dessa gränser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdQEbN&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;baseline&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsBaseline.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centreras så att deras [[baseline|baslinje]] ligger på samma nivå. Speciellt användbart om man har olika textstorlek i flexmaterialet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;BNgpWv&amp;quot; height=&amp;quot;200&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Om man vill att en specifik flexelement ska ha en annan justering än övriga element i flexboxen, kan man sätta det med hjälp av &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;. Parametrarna till egenskapen fungerar precis som med &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt;, förutom att det enbart sätts på de element som CSS-regeln väljer ut. I detta exempel är defaultjusteringen &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt;, medan låda tre har &amp;lt;code&amp;gt;align-self: flex-end&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;doBNWJ&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
Välj &amp;quot;Edit on CodePen&amp;quot; för att göra övningarna där.&lt;br /&gt;
&lt;br /&gt;
=== Övning 1 ===&lt;br /&gt;
Ändra så att alla flexelement hamnar sist på flexaxeln.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;NwKMNj&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Övning 2 ===&lt;br /&gt;
Ändra så att alla flexelement ligger centrerade, förutom det första som ska ligga i starten och det sista som ska ligga i slutet.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MOgGOB&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Flexbox - styra layoutflödet längs flexaxeln]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_flexaxeln&amp;diff=5065</id>
		<title>Flexbox - styra layoutflödet längs flexaxeln</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_flexaxeln&amp;diff=5065"/>
		<updated>2022-09-08T07:02:42Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi vill självklart kunna styra hur layouten sker i förhållande till flexaxeln också. Det görs med egenskapen &amp;lt;code&amp;gt;[[justify-content]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;justify-content&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Med denna egenskap kan man sätta hur de olika flexelementen ska justeras/fördelas längs med flexaxeln.&lt;br /&gt;
&lt;br /&gt;
Följande värden kan anges:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-start&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:FlexboxJustifyStart.png]]&lt;br /&gt;
&lt;br /&gt;
Defaultvärdet. Allt flexmaterial samlas mot starten av flexboxen. Om vi har &amp;quot;normal&amp;quot; &amp;lt;code&amp;gt;[[ltr]]&amp;lt;/code&amp;gt; och det är en radbaserad flexbehållare, kommer allt innehåll att samlas mot vänsterkanten.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;LVKxLz&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-end&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
[[Fil:FlexboxJustifiedEnd.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial samlas i slutet av flexboxen. Om vi har &amp;quot;normal&amp;quot; &amp;lt;code&amp;gt;[[rtl]]&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;[[ltr]]&amp;lt;/code&amp;gt; och det är en radbaserad flexbehållare, kommer allt innehåll att samlas mot högerkanten.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;KpjavK&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:FlexboxJustifyCenter.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centreras mot mitten av flexboxen. Kombinerar vi detta med &amp;lt;code&amp;gt;align-items: center;&amp;lt;/code&amp;gt; kan vi enkelt centerjustera innehåll såväl horisontellt, som vertikalt. Vilket vi gör i följande exempel.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;eNqVNr&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;space-between&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
[[Fil:FlexboxJustifySpaceBetween.png]]&lt;br /&gt;
&lt;br /&gt;
Flexelementen distribueras jämt, längs med flexboxen. Tomrummet i flexbehållaren fördelas lika mellan flexelement och sätts som marginaler mellan dessa. De yttersta elementen i flexaxelns båda ändar får inga marginaler mot ändarna, utan de kommer att placeras i kant med slutpunkterna.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;waLgqO&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;space-around&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:FlexboxJustifySpaceAround.png]]&lt;br /&gt;
&lt;br /&gt;
Flexelementen distribueras jämt, längs med flexboxen och med lika mycket mellanrum mellan varje element. Tomrummet i flexbehållaren fördelas lika mellan flexelement och sätts som marginaler mellan dessa. De yttersta elementen i flexaxelns båda ändar får halva marginalstorleken jämtemot ändarna. Det vill säga om man lägger samman ändmarginalerna, så blir de tillsammans lika breda som övriga mellanmarginaler i flexbehållaren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;doBNZd&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
Välj &amp;quot;Edit on CodePen&amp;quot; för att göra övningarna där.&lt;br /&gt;
&lt;br /&gt;
=== Övning 1 ===&lt;br /&gt;
Flytta alla flexelement så de ligger jämt fördelade mot på raden. De ska börja ifrån kanten på flexlådan.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;dZbeeo&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Övning 2 ===&lt;br /&gt;
Alla boxar ska centreras horisontellt. Första boxen ska ligga längst upp, tvåan i mitten, trean längst ned och fyran i mitten.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;wPwjxr&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Flexbox - flexbehållare med flera rader]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5064</id>
		<title>Flexbox - styra layoutflödet längs korsaxeln</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5064"/>
		<updated>2022-09-08T07:01:58Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En av de viktigaste sakerna vi vill kunna styra över, är hur flexelementen placeras i förhållande till korsaxeln. Detta styr vi med hjälp av &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Med denna egenskap kan man ange hur flexinnehållet ska placeras ut i flexboxen. Detta används för att styra hur boxarna placeras i förhållande till korsaxeln.  Detta är en mycket användbar egenskap, som gör att man t.ex. kan centrera saker enkelt samt att man lätt kan skapa flera kolumner som har samma höjd (vilket tidigare var svårt i CSS).&lt;br /&gt;
&lt;br /&gt;
Här är de möjliga värdena på denna egenskap (alla exempel utgår ifrån att man placeras innehållet på en rad, men det fungerar likvärdigt för kolumner):&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-start&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexStart.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot starten på flexboxen. Det vill säga det som har &amp;lt;code&amp;gt;flex-direction: row;&amp;lt;/code&amp;gt; justeras mot &amp;quot;toppen&amp;quot; på flexboxen, medan det som har &amp;lt;code&amp;gt;flex-direction: column;&amp;lt;/code&amp;gt; justeras mot vänstermarginalen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;zGVNvq&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-end&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexEnd.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot slutet av flexboxen. Om man t.ex. har &amp;lt;code&amp;gt;flex-direction: row&amp;lt;/code&amp;gt; blir detta mot botten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MwMJjY&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsCenter.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centerjusteras mot flexboxens mitt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;waLgzR&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;stretch&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsStretch.png]]&lt;br /&gt;
&lt;br /&gt;
Detta är defaultvärdet. Flexinnehållet sträcks ut så att det fyller upp hela flexboxen ifrån topp till botten. Dock tar webbläsaren eventuella &amp;lt;code&amp;gt;height&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-height&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-width&amp;lt;/code&amp;gt;,  i beaktande och om dessa är angivna kommer flexinnehållet enbart att stretchas så de håller sig inom dessa gränser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdQEbN&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;baseline&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsBaseline.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centreras så att deras [[baseline|baslinje]] ligger på samma nivå. Speciellt användbart om man har olika textstorlek i flexmaterialet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;BNgpWv&amp;quot; height=&amp;quot;200&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Om man vill att en specifik flexelement ska ha en annan justering än övriga element i flexboxen, kan man sätta det med hjälp av &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;. Parametrarna till egenskapen fungerar precis som med &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt;, förutom att det enbart sätts på de element som CSS-regeln väljer ut. I detta exempel är defaultjusteringen &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt;, medan låda tre har &amp;lt;code&amp;gt;align-self: flex-end&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;doBNWJ&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
Välj &amp;quot;Edit on CodePen&amp;quot; för att göra övningarna där.&lt;br /&gt;
&lt;br /&gt;
=== Flexövning 1 ===&lt;br /&gt;
Ändra så att alla flexelement hamnar sist på flexaxeln.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;NwKMNj&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flexövning 2 ===&lt;br /&gt;
Ändra så att alla flexelement ligger centrerade, förutom det första som ska ligga i starten och det sista som ska ligga i slutet.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MOgGOB&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Flexbox - styra layoutflödet längs flexaxeln]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5063</id>
		<title>Flexbox - styra layoutflödet längs korsaxeln</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5063"/>
		<updated>2022-09-08T06:59:14Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En av de viktigaste sakerna vi vill kunna styra över, är hur flexelementen placeras i förhållande till korsaxeln. Detta styr vi med hjälp av &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Med denna egenskap kan man ange hur flexinnehållet ska placeras ut i flexboxen. Detta används för att styra hur boxarna placeras i förhållande till korsaxeln.  Detta är en mycket användbar egenskap, som gör att man t.ex. kan centrera saker enkelt samt att man lätt kan skapa flera kolumner som har samma höjd (vilket tidigare var svårt i CSS).&lt;br /&gt;
&lt;br /&gt;
Här är de möjliga värdena på denna egenskap (alla exempel utgår ifrån att man placeras innehållet på en rad, men det fungerar likvärdigt för kolumner):&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-start&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexStart.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot starten på flexboxen. Det vill säga det som har &amp;lt;code&amp;gt;flex-direction: row;&amp;lt;/code&amp;gt; justeras mot &amp;quot;toppen&amp;quot; på flexboxen, medan det som har &amp;lt;code&amp;gt;flex-direction: column;&amp;lt;/code&amp;gt; justeras mot vänstermarginalen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;zGVNvq&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-end&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexEnd.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot slutet av flexboxen. Om man t.ex. har &amp;lt;code&amp;gt;flex-direction: row&amp;lt;/code&amp;gt; blir detta mot botten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MwMJjY&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsCenter.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centerjusteras mot flexboxens mitt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;waLgzR&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;stretch&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsStretch.png]]&lt;br /&gt;
&lt;br /&gt;
Detta är defaultvärdet. Flexinnehållet sträcks ut så att det fyller upp hela flexboxen ifrån topp till botten. Dock tar webbläsaren eventuella &amp;lt;code&amp;gt;height&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-height&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-width&amp;lt;/code&amp;gt;,  i beaktande och om dessa är angivna kommer flexinnehållet enbart att stretchas så de håller sig inom dessa gränser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdQEbN&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;baseline&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsBaseline.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centreras så att deras [[baseline|baslinje]] ligger på samma nivå. Speciellt användbart om man har olika textstorlek i flexmaterialet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;BNgpWv&amp;quot; height=&amp;quot;200&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Om man vill att en specifik flexelement ska ha en annan justering än övriga element i flexboxen, kan man sätta det med hjälp av &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;. Parametrarna till egenskapen fungerar precis som med &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt;, förutom att det enbart sätts på de element som CSS-regeln väljer ut. I detta exempel är defaultjusteringen &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt;, medan låda tre har &amp;lt;code&amp;gt;align-self: flex-end&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;doBNWJ&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
Välj &amp;quot;Edit on CodePen&amp;quot; för att göra övningarna där.&lt;br /&gt;
&lt;br /&gt;
* Ändra så att alla flexelement hamnar sist på flexaxeln.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;NwKMNj&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ändra så att alla flexelement ligger centrerade, förutom det första som ska ligga i starten och det sista som ska ligga i slutet.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MOgGOB&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Flexbox - styra layoutflödet längs flexaxeln]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5062</id>
		<title>Flexbox - styra layoutflödet längs korsaxeln</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Flexbox_-_styra_layoutfl%C3%B6det_l%C3%A4ngs_korsaxeln&amp;diff=5062"/>
		<updated>2022-09-08T06:58:50Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En av de viktigaste sakerna vi vill kunna styra över, är hur flexelementen placeras i förhållande till korsaxeln. Detta styr vi med hjälp av &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Med denna egenskap kan man ange hur flexinnehållet ska placeras ut i flexboxen. Detta används för att styra hur boxarna placeras i förhållande till korsaxeln.  Detta är en mycket användbar egenskap, som gör att man t.ex. kan centrera saker enkelt samt att man lätt kan skapa flera kolumner som har samma höjd (vilket tidigare var svårt i CSS).&lt;br /&gt;
&lt;br /&gt;
Här är de möjliga värdena på denna egenskap (alla exempel utgår ifrån att man placeras innehållet på en rad, men det fungerar likvärdigt för kolumner):&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-start&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexStart.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot starten på flexboxen. Det vill säga det som har &amp;lt;code&amp;gt;flex-direction: row;&amp;lt;/code&amp;gt; justeras mot &amp;quot;toppen&amp;quot; på flexboxen, medan det som har &amp;lt;code&amp;gt;flex-direction: column;&amp;lt;/code&amp;gt; justeras mot vänstermarginalen.&lt;br /&gt;
&lt;br /&gt;
[http://exempel.webbling.se/flexbox11.html Exempel].&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;zGVNvq&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;flex-end&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsFlexEnd.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial justeras mot slutet av flexboxen. Om man t.ex. har &amp;lt;code&amp;gt;flex-direction: row&amp;lt;/code&amp;gt; blir detta mot botten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MwMJjY&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsCenter.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centerjusteras mot flexboxens mitt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;waLgzR&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;stretch&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsStretch.png]]&lt;br /&gt;
&lt;br /&gt;
Detta är defaultvärdet. Flexinnehållet sträcks ut så att det fyller upp hela flexboxen ifrån topp till botten. Dock tar webbläsaren eventuella &amp;lt;code&amp;gt;height&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-height&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;max-width&amp;lt;/code&amp;gt;,  i beaktande och om dessa är angivna kommer flexinnehållet enbart att stretchas så de håller sig inom dessa gränser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;JdQEbN&amp;quot; height=&amp;quot;500&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;baseline&amp;lt;/code&amp;gt; ===&lt;br /&gt;
[[Fil:AlignItemsBaseline.png]]&lt;br /&gt;
&lt;br /&gt;
Allt flexmaterial centreras så att deras [[baseline|baslinje]] ligger på samma nivå. Speciellt användbart om man har olika textstorlek i flexmaterialet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;BNgpWv&amp;quot; height=&amp;quot;200&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Om man vill att en specifik flexelement ska ha en annan justering än övriga element i flexboxen, kan man sätta det med hjälp av &amp;lt;code&amp;gt;align-self&amp;lt;/code&amp;gt;. Parametrarna till egenskapen fungerar precis som med &amp;lt;code&amp;gt;align-items&amp;lt;/code&amp;gt;, förutom att det enbart sätts på de element som CSS-regeln väljer ut. I detta exempel är defaultjusteringen &amp;lt;code&amp;gt;center&amp;lt;/code&amp;gt;, medan låda tre har &amp;lt;code&amp;gt;align-self: flex-end&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;doBNWJ&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
Välj &amp;quot;Edit on CodePen&amp;quot; för att göra övningarna där.&lt;br /&gt;
&lt;br /&gt;
* Ändra så att alla flexelement hamnar sist på flexaxeln.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;NwKMNj&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ändra så att alla flexelement ligger centrerade, förutom det första som ska ligga i starten och det sista som ska ligga i slutet.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;MOgGOB&amp;quot; height=&amp;quot;300&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Flexbox - styra layoutflödet längs flexaxeln]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Flexbox_-_s%C3%A4tta_storlek&amp;diff=5061</id>
		<title>Flexbox - sätta storlek</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Flexbox_-_s%C3%A4tta_storlek&amp;diff=5061"/>
		<updated>2022-09-08T06:50:44Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Det finns ett antal CSS-egenskaper som kan användas för att styra flexboxars layout och flöde. Vi börjar att titta på hur flexbox hanterar flexelementens storlek. Det är rätt så komplext hur den slutgiltiga storleken beräknas, men man behöver inte förstå detta i in i minsta detalj.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Lägg märke till att de CSS-egenskaper vi diskuterar i detta avsnitt sätts på de individuella flexelementen, inte på flexbehållaren!&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-danger&amp;quot;&amp;gt;&lt;br /&gt;
Här nedan presenteras storleksegenskaperna för flexelement var för sig. Det bästa är dock att sätta dem med [[samlingsegenskap]]en &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt;. Då får man vettigare defaultvärden som grund. Det är nämligen som så att de indviduella elementen har andra defaultvärden då de sätt individuellt än om man sätter dem med samlingsegenskapen. Vilket är rätt märkligt, men något som vi får leva med. Efter presentationen av de individuella egenskaperna, följer en presentation av samlingsegenskapen.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;[[flex-basis]]&amp;lt;/code&amp;gt; ==&lt;br /&gt;
För att sätta grundstorleken på ett flexelement används &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;. Den slutliga storleken kan bli något helt annat då det finns andra egenskaper som tas med i beräkningen.&lt;br /&gt;
&lt;br /&gt;
I stort sett fungerar denna egenskap som vanliga &amp;lt;code&amp;gt;[[width]]&amp;lt;/code&amp;gt; eller &amp;lt;code&amp;gt;[[height]]&amp;lt;/code&amp;gt; (beroende på &amp;lt;code&amp;gt;[[flex-direction]]&amp;lt;/code&amp;gt;). Du anger samma typ av värden här som för de egenskaperna. Värdet kan anges med hjälp av alla [[Måttenheter_i_CSS|CSS-måttenheter]].&lt;br /&gt;
&lt;br /&gt;
I följande exempel sätter vi att varje flexelement tar upp 10 % av flexbehållarens bredd. Detta är deras grundstorlek och den kan påverkas av övriga egenskaper som styr flex-elements storlek.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;PPZYGa&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det går även att ange ett av de två kodorden &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; eller &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; som värde till &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Om man anger &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; kommer webbläsaren att ta bredden ifrån eventuell &amp;lt;code&amp;gt;[[width]]&amp;lt;/code&amp;gt; (eller &amp;lt;code&amp;gt;[[height]]&amp;lt;/code&amp;gt;, beroende på &amp;lt;code&amp;gt;flex-direction&amp;lt;/code&amp;gt;). Om även denna är satt till &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, kommer det bli samma resultat som om man angav &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Storleken på flexelementet kommer att sättas utifrån storleken på dess innehåll. Webbläsaren kommer att sätta ett grundvärde på &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt; så att allt i elementet får plats.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;[[flex-grow]]&amp;lt;/code&amp;gt; ==&lt;br /&gt;
[[Fil:Flexgrow.png]]&lt;br /&gt;
&lt;br /&gt;
Lite förenklat kan man säga att &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt; anger hur flexboxarna ska &amp;quot;växa till sig&amp;quot; och fylla upp tillgängligt, fritt utrymme. Som parameter tar denna egenskap ett enhetslöst tal som anger hur stor proportion av det fria utrymmet i flexbehållaren som flexelementet ska använda sig av. Det fria utrymmet är alltså det utrymme i flexbehållaren som inte fylls upp av flexelementens när man tar deras grundstorlek i beräkning .&lt;br /&gt;
&lt;br /&gt;
Vad räknas som fritt utrymme? Här är ett exmpel:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;EKWZjo&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
I exemplet ovan, har vi tre flexelement som alla har &amp;lt;code&amp;gt;flex-basis: 10%;&amp;lt;/code&amp;gt;. De fyller med andra ord upp 30 % av flexbehållaren. Detta gör att vi har 70 % fritt utrymme över. Om du tittar på &amp;quot;result&amp;quot;-fliken i exemplet ovan, så är den bit som visas som gul det fria utrymmet. Det är fördelningen av  detta fria utrymme som &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt; styr över.&lt;br /&gt;
&lt;br /&gt;
I det enklaste fallet kanske vi har flexelement som alla har detta värde satt till &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Då kommer eventuellt fritt utrymme att fördelas med lika stor del till varje element. Vi modifierar det tidigare exemplet, så att det använder sig av &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;YywKQY&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
Eftersom alla lådor har såväl samma &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt; som &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt; får vi alltså tre lådor som alla har samma bred. Men låt säga att låda a, skulle haft dubbelt så stor &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;, dvs dubbelt så stor grundbredd, då hade det blivit att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;meVbwL&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;450&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
Nu används 10 % + 10 % + 20 %, dvs 40 %, av flexbehållaren. Vi har 60 % fritt utrymme, detta fördelas på de tre lådorna, så att de får 20 % extra utrymme var. Låda a blir då något större än de övriga. Den får fortfarande lika stor del av det tillgängliga tomrummet, men den är något större i grunden.&lt;br /&gt;
&lt;br /&gt;
Vi fortsätter med en modifikation av grundexemplet. Vi har tre element med samma &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;. Av dessa har två &amp;lt;code&amp;gt;flex-grow: 1;&amp;lt;/code&amp;gt;, medan de tredje har &amp;lt;code&amp;gt;flex-grow: 2;&amp;lt;/code&amp;gt;. Det senare kommer då att få dubbelt så stor del av det fria utrymmet som de som har &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;WQreOW&amp;quot; height=&amp;quot;450&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I vissa fall vill man att flexelementen ska sättas så att de tar upp allt tillgängligt utrymme och man bryr sig inte om några grundstorlekar. Det gör man genom att först sätta &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt; till &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; och därefter ange vettiga värden till &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt;. Då vet man att det &amp;quot;enda&amp;quot; som spelar in är proportionerna som anges i &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt; och innehållets storlek tas ej med i beaktande.&lt;br /&gt;
&lt;br /&gt;
Om man använder sig av samlingsegenskapen &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt;, så sätts &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;-värdet automatiskt till &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Vilket är ett bra defaultvärde.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;[[flex-shrink]]&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Det finns även en egenskap som anger hur elementet ska omformas om det finns för lite plats i flexbehållaren. I fallet med &amp;lt;code&amp;gt;[[flex-grow]]&amp;lt;/code&amp;gt; angavs hur webbläsaren skulle fördela eventuellt tomrum och använda detta till att göra flexinnehållet större. I fallet med &amp;lt;code&amp;gt;[[flex-shrink]]&amp;lt;/code&amp;gt; anges hur material som skulle hamnat utanför flexbehållaren ska hanteras.  I detta fall kommer flexelement att krympas så att det får plats i flexbehållaren.&lt;br /&gt;
&lt;br /&gt;
Låt säga att vi har en flexbehållare vars innehåll sammanlagt går utanför behållaren med 20 %, då anger &amp;lt;code&amp;gt;[[flex-shrink]]&amp;lt;/code&amp;gt; hur mycket de olika flexelement ska förminskas för att få plats med dessa 20 %. Egenskapens värde talar om hur stor andel av den överskjutande bredden, som ska dras ifrån varje element. Här följer ett exempel:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;QjyLme&amp;quot; height=&amp;quot;550&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
I exemplet ovan har alla tre lådorna &amp;lt;code&amp;gt;flex-basis: 40%;&amp;lt;/code&amp;gt;. De två först lådorna har &amp;lt;code&amp;gt;flex-shrink: 0&amp;lt;/code&amp;gt; och påverkas alltså inte av eventuell krympning. Den sista lådan har &amp;lt;code&amp;gt;flex-shrink: 1;&amp;lt;/code&amp;gt; och följdaktligen kommer den att krympas lika mycket som innehållet flödar över. Vilket i det här fallet är 20 % av flexbehållarens bredd.&lt;br /&gt;
&lt;br /&gt;
Hade vi haft samma situation, med skillnaden att de två sista lådorna bägge två hade &amp;lt;code&amp;gt;flex-shrink: 1;&amp;lt;/code&amp;gt;, så skulle den överskjutande bredden fördelas på bägge lådorna. Det vill säga, de skulle bägge krympas med 10 % av bredden på flexbehållaren.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;ZbQzqW&amp;quot; height=&amp;quot;550&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;[[flex]]&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Det rekommenderade sättet att ange värden för ovanstående egenskaper är att sätta dem med [[samlingsegenskap]]en &amp;lt;code&amp;gt;[[flex]]&amp;lt;/code&amp;gt;. Om något av de tre möjliga egenskaperna utelämnas, kommer de utelämnade egenskaperna att ges bättre defaultvärden än de &amp;quot;normala&amp;quot; defaultvärdena. Ett något konstigt beteende kan tyckas!&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- end well --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Samlingsegenskap]]en &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt; kan användas för att sätta en, två eller tre av ovanstående egenskaper samtidigt. Defaultvärdena för de olika egenskaperna nollställs till följande om inget annat anges:  &amp;lt;code&amp;gt;flex-grow: 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;flex-shrink: 1&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;flex-basis: 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hur egenskaperna sätts, beror på hur många och vilka värden som anges. Dessa varianter finns &lt;br /&gt;
(obs, som måttenhet kan även värdena &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; eller &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; anges):&lt;br /&gt;
=== Ett värde ===&lt;br /&gt;
; Måttenhet: Om värdet har en måttenhet, antas man ange &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;. Det vill säga grundstorleken på flexelementet. De två övriga egenskaperna får sina defaultvärden.&lt;br /&gt;
&lt;br /&gt;
; Andel:Om ett enhetslöst tal anges, tas detta som en andel för &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt;. De två övriga egenskaperna får sina defaultvärden.&lt;br /&gt;
&lt;br /&gt;
=== Två värden ===&lt;br /&gt;
; En måttenhet och en andel : Måttenheten anger &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;, medan andelen anger &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;flex-shrink&amp;lt;/code&amp;gt; får defaultvärdet.&lt;br /&gt;
&lt;br /&gt;
;Två andelar: Den första andelen kommer att tilldelas till &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt;, medan den andra andelen tilldelas till &amp;lt;code&amp;gt;flex-shrink&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tre värden ===&lt;br /&gt;
Den första andel som påträffas tilldelas till &amp;lt;code&amp;gt;flex-grow&amp;lt;/code&amp;gt;, medan den andra andelen tilldelas till &amp;lt;code&amp;gt;flex-shrink&amp;lt;/code&amp;gt;.  Måttenheten anger &amp;lt;code&amp;gt;flex-basis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Flexbox - styra layoutflödet längs korsaxeln]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Flexbox_-_grunder&amp;diff=5060</id>
		<title>Flexbox - grunder</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Flexbox_-_grunder&amp;diff=5060"/>
		<updated>2022-09-08T06:30:52Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Flexbox är ett modernare sätt att skapa layout på webbsidor. Vi kommer även att titta på andra moderna sätt på vilket man kan skapa layout, men flexbox är den enklaste metoden som ger bra resultat.&lt;br /&gt;
&lt;br /&gt;
Flexbox löser många problem och förenklar mycket. Problem som flexbox löser på ett excellent sätt är bland annat: kolumner som ska ha samma höjd, centrering av element (såväl horisontellt som vertikalt) samt att flexbox ger oss layouter som är långt mer robusta och som inte &amp;quot;trillar&amp;quot; isär. Om du hållit på med traditionell webbutveckling, så vet du att detta är problem som kan kräva en hel del extra kod. Om du är nybörjare, så tro mig, du kommer att tjäna in mycket tid och bespara dig massvis med huvudbry om du använder flexbox redan ifrån början.&lt;br /&gt;
&lt;br /&gt;
== Flexbox ==&lt;br /&gt;
Som man hör på namnet är flexbox till för att på ett flexibelt sätt hantera boxar, såväl deras position som deras storlek - vilket ju är likvärdigt med layout. Det är mycket enklare att få till en bra layout med denna teknik än om man använder sig av &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; eller liknande äldre metoder.&lt;br /&gt;
&lt;br /&gt;
Flexboxar är dynamiska  och webbläsaren sköter automatiskt det mesta som har att göra med placering av underelement. När man kör på olika enheter eller när man förändrar storlek på webbläsarfönstret så kommer flexbox att förändra layouten så att den passar den aktuella skärmlayouten.&lt;br /&gt;
&lt;br /&gt;
== Terminologi ==&lt;br /&gt;
Vi behöver fastställa betydelsen för ett antal begrepp som används för att beskriva hur flexbox fungerar.&lt;br /&gt;
=== Flexbehållare ===&lt;br /&gt;
Allt som ska hanteras av flexbox, placeras i en flexbehållare. Denna kommer att vara föräldraelementet som alla flexelement placeras i.&lt;br /&gt;
&lt;br /&gt;
Flexbehållare skapas genom att sätta deras &amp;lt;code&amp;gt;display&amp;lt;/code&amp;gt;-typ enligt följande; &amp;lt;code&amp;gt;display: flex;&amp;lt;/code&amp;gt;. Detta kommer att skapa ett blockelement vars innehåll lyder under flexboxs formateringsregler. &lt;br /&gt;
&lt;br /&gt;
Det finns även en variant  för att ange att själva flexbehållaren inte ska vara ett normalt blockelement, utan att den ska placeras i flödet. Denna variant skapas genom  genom att sätta CSS-egenskapen så här; &amp;lt;code&amp;gt;display: inline-flex;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Flexelement ===&lt;br /&gt;
Flexelement/flexinnehåll är de underelement som placeras inuti flexbehållaren.&lt;br /&gt;
&lt;br /&gt;
Det är främst block-element som påverkas av att ligga inuti  en flexbehållare. I vissa fall omvandlas dock &amp;quot;vanliga&amp;quot; element automatiskt till att fungera som block-element när de hamnar inuti en flexbehållare. Detta gäller t.ex. om du lägger &amp;quot;ren&amp;quot; text inuti en flexbehållare, då kommer texten att automatiskt placeras i ett &amp;quot;osynligt&amp;quot; flexelement. Du behöver med andra ord inte skapa alla flexelement själv, en del skapas åt dig.&lt;br /&gt;
&lt;br /&gt;
=== Flexaxel ===&lt;br /&gt;
Flexaxeln bestämmer i vilken riktning flexelementen ska placeras ut. Det går att sätta denna så att den antingen är rad eller kolumn - det vill säga horisontell eller vertikal. Riktningen på flexaxeln anges med egenskapen &amp;lt;code&amp;gt;flex-direction&amp;lt;/code&amp;gt;. Ett exempel på hur den används; &amp;lt;code&amp;gt;flex-direction: column;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Om inget annat anges, placeras flexelementen ut efter varandra på en och samma rad. Det vill säga, defaultinställningen är en horisontell flexaxel. Vanligtvis placeras ju blockelement under föregående element, så att ha &amp;quot;motsatsen&amp;quot; som defaultbeteende för flexboxar är förstås vettigt.&lt;br /&gt;
&lt;br /&gt;
Man kan även ange att man vill ha en vertikal flexaxel. Då läggs elementen ut under varandra i en kolumn. Detta påminner om det normala beteendet för blockelement. Dock så har det fördelar att lägga elementen i en flexbehållare. Bland annat kan man styra formateringen av elementen långt bättre.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;direction&amp;lt;/code&amp;gt;s inverkan ====&lt;br /&gt;
Om man har en horisontell flexaxel så kan den antingen starta på höger eller vänster sida. Detta styrs av värdet på den &amp;lt;code&amp;gt;[[direction]]&amp;lt;/code&amp;gt;-egenskap  som gäller för flexbehållaren. Flexelementen kommer att placeras ut i samma ordning som angetts med &amp;lt;code&amp;gt;direction&amp;lt;/code&amp;gt;.  Är den &amp;lt;code&amp;gt;[[ltr]]&amp;lt;/code&amp;gt;, dvs vänster till höger, vilket är default-riktningen så kommer även flexaxeln att gå ifrån vänster till höger. Om däremot det är &amp;lt;code&amp;gt;[[rtl]]&amp;lt;/code&amp;gt; som gäller, dvs höger till vänster, placeras även flexelementen ut ifrån höger till vänster.&lt;br /&gt;
&lt;br /&gt;
För &amp;quot;vanliga&amp;quot; västerländska språk, som ju är &amp;lt;code&amp;gt;[[ltr]]&amp;lt;/code&amp;gt;, börjar elementen att placeras ut längst till vänster. Därefter placeras varje nytt element på föregående elements högra sida. Vi bygger alltså upp flexraden ifrån vänster till höger. Det påminner alltså om det beteende som gällde när man gjorde &amp;lt;code&amp;gt;float: left&amp;lt;/code&amp;gt; För språk som läses ifrån höger till vänster, &amp;lt;code&amp;gt;[[rtl]]&amp;lt;/code&amp;gt;, gäller omvända riktningarna.&lt;br /&gt;
&lt;br /&gt;
Om vi designar en sida,  kan alltså dess utseende förändras beroende på vilket språk som kommer att användas för den. En sida på arabiska kommer att ha &amp;lt;code&amp;gt;direction&amp;lt;/code&amp;gt; satt till &amp;lt;code&amp;gt;rtl&amp;lt;/code&amp;gt;, medan en sida på svenska kommer att ha &amp;lt;code&amp;gt;ltr&amp;lt;/code&amp;gt;. Troligen vill vi att sidans layout ska förändras utifrån textens riktning. Vi skapar ju oftast sidolayout som är beroende på textlayouten ser ut.  Om textutsättningen &amp;quot;spegelvänds&amp;quot; vill vi säkerligen att sidolayouten ska förändras för att återspegla detta.&lt;br /&gt;
&lt;br /&gt;
==== Omvända flexaxlar ====&lt;br /&gt;
Det går även ange  att flexaxeln ska vara omvänd. I normalfallet så växer flexaxeln ifrån vänster till höger, men ibland vill vi ange att den ska göra tvärtom, dvs att den startar på höger sida och växer mot vänster. Nu kanske man tror att &amp;lt;code&amp;gt;[[ltr]]&amp;lt;/code&amp;gt; skulle vara en bra lösning på detta. Problemet är dock att även andra layoutmekanismer påverkas av detta, såsom textlayouten. Lösningen är att använda en omvänd flexaxel, detta anges som vanligt, men med ett efterföljande &amp;lt;code&amp;gt;-reverse&amp;lt;/code&amp;gt;. Ett exempel på detta är; &amp;lt;code&amp;gt;flex-direction: row-reverse;&amp;lt;/code&amp;gt;. När man sätter &amp;lt;code&amp;gt;flex-direction&amp;lt;/code&amp;gt; på detta vis, kommer raden att byggas upp ifrån motsatt sida mot vad den normalt skulle göra.&lt;br /&gt;
&lt;br /&gt;
En vertikal flexaxel börjar normalt i toppen och varje nytt element läggs under föregående. Det vill säga som en kolumn. Dock kan man även här sätta att flexaxeln ska vara omvänd. Då börjar flexaxeln längst ner och varje nytt flexelement placeras ovanför föregående.&lt;br /&gt;
&lt;br /&gt;
=== Korsaxel ===&lt;br /&gt;
Det finns även något som kallas för korsaxel. Det är en axel som är förskjuten 90 grader mot flexaxeln. Det vill säga, om flexaxeln är horisontell, så är korsaxeln vertikal och vice versa. Många layoutegenskaper som har med  flexbox att göra anger hur saker ska placeras längsmed korsaxeln.&lt;br /&gt;
&lt;br /&gt;
=== Samband mellan axlarna ===&lt;br /&gt;
Axlarna är det som styr hur element placeras ut i en flexbox. I bilden ser du hur axlarna skulle se ut om man hade en flexbox vars innehåll placeras ut på en rad (och om &amp;lt;code&amp;gt;ltr&amp;lt;/code&amp;gt; gäller).&lt;br /&gt;
&lt;br /&gt;
[[Fil:Flextermer.png]]&lt;br /&gt;
&lt;br /&gt;
== Demokod ==&lt;br /&gt;
För att kunna visa hur flexbox fungerar, behöver vi lite demokod som vi kan använda för att prova oss fram. Följande kod-exempel är en bra utgångspunkt...&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;WvqbWZ&amp;quot; height=&amp;quot;250&amp;quot; tab=&amp;quot;html,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Att skapa en flexbehållare ==&lt;br /&gt;
För att visa att vi vill använda flexbox och skapa en flexbehållare sätter vi ett elements &amp;lt;code&amp;gt;display&amp;lt;/code&amp;gt;-egenskap till antingen &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt; eller &amp;lt;code&amp;gt;inline-flex&amp;lt;/code&amp;gt;, t.ex. så här:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.flexlåda {&lt;br /&gt;
  display: flex;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elementet som har &amp;lt;code&amp;gt;flexlåda&amp;lt;/code&amp;gt;-klassen kommer nu att bli en flexbehållare och alla dess underelement kommer att bli flex-element.&lt;br /&gt;
&lt;br /&gt;
Om vi lägger till ovanstående rad till vår exempelkod blir det att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;OVePYW&amp;quot; height=&amp;quot;480&amp;quot; tab=&amp;quot;css,result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
Lägg märke till att lådorna nu samlas på en och samma rad. Vilket alltså är defaultbeteendet för flexboxar.&lt;br /&gt;
&lt;br /&gt;
== Övningar ==&lt;br /&gt;
Här finns [[grundövningar för flex]].&lt;br /&gt;
&lt;br /&gt;
Välj &amp;quot;Edit on CodePen&amp;quot;, för att kunna redigera och genomföra följande övning.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;amvvWd&amp;quot; height=&amp;quot;400&amp;quot; tab=&amp;quot;result&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
[[Flexbox - sätta riktning]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Webbutveckling]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5059</id>
		<title>Lär dig mer om JavaScript</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5059"/>
		<updated>2022-09-08T06:26:13Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Här följer ett antal aktiviteter som kommer att lära dig mer om hur man programmerar i JavaScript.&lt;br /&gt;
== Nybörjarmaterial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till JavaScript]]&lt;br /&gt;
# [[Grunderna i JavaScript-programmering]]&lt;br /&gt;
# [[Att skriva läsbar kod]]&lt;br /&gt;
# [[Olika typer av fel som kan uppstå]]&lt;br /&gt;
# [[Variabler]]&lt;br /&gt;
# [[Villkorssatser]]&lt;br /&gt;
# [[Att jobba med sanningsvärden]]&lt;br /&gt;
# [[Loopar och slingor]]&lt;br /&gt;
#[[Komplexa variabler]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avancerat matererial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till asynkron programmering]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fortsättning ==&lt;br /&gt;
När du gått igenom ovanstående sektioner kan du fortsätta till dessa sektioner för att lära dig mer om hur man programmerar och skapar webbapplikationer med JavaScript.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
[[Att_bygga_webbapplikationer_och_-tjänster|Att bygga webbapplikationer och -tjänster]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Föråldrade tekniker ==&lt;br /&gt;
&lt;br /&gt;
jQuery börjar bli lite föråldrat och används inte så mycket längre. Vi använde tidigare jQuery i exemplen på Webbling, men har gjort om alla exempel till [https://plainjs.com/ plainJS]. Vi har dock kvar en sektion som handlar om det. Den kommer inte att underhållas och uppdateras.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
[[Lär_dig_mer_om_jQuery|Lär dig mer om jQuery]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5058</id>
		<title>Lär dig mer om JavaScript</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5058"/>
		<updated>2022-09-08T06:25:29Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Här följer ett antal aktiviteter som kommer att lära dig mer om hur man programmerar i JavaScript.&lt;br /&gt;
== Nybörjarmaterial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till JavaScript]]&lt;br /&gt;
# [[Grunderna i JavaScript-programmering]]&lt;br /&gt;
# [[Att skriva läsbar kod]]&lt;br /&gt;
# [[Olika typer av fel som kan uppstå]]&lt;br /&gt;
# [[Variabler]]&lt;br /&gt;
# [[Villkorssatser]]&lt;br /&gt;
# [[Att jobba med sanningsvärden]]&lt;br /&gt;
# [[Loopar och slingor]]&lt;br /&gt;
#[[Komplexa variabler]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avancerat matererial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till asynkron programmering]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fortsättning ==&lt;br /&gt;
När du gått igenom ovanstående sektioner kan du fortsätta till dessa sektioner för att lära dig mer om hur man programmerar och skapar webbapplikationer med JavaScript.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
[[Att_bygga_webbapplikationer_och_-tjänster|Att bygga webbapplikationer och -tjänster]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Föråldrade tekniker ==&lt;br /&gt;
&lt;br /&gt;
jQuery börjar bli lite föråldrat och används inte så mycket längre. Vi använde tidigare jQuery i exemplen på Webbling, men har gjort om alla exempel till [https://plainjs.com/ plainJS]. Vi har dock kvar en sektion som handlar om det. Den kommer inte att underhållas och uppdateras.&lt;br /&gt;
[[Lär_dig_mer_om_jQuery|Lär dig mer om jQuery]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Elementens-grunder_%C3%B6vningar&amp;diff=5057</id>
		<title>Elementens-grunder övningar</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Elementens-grunder_%C3%B6vningar&amp;diff=5057"/>
		<updated>2022-08-31T19:47:47Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;quiz display=&amp;quot;simple&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{Element skapas med &amp;lt;code&amp;gt;element&amp;lt;/code&amp;gt;-taggen.&lt;br /&gt;
|type=&amp;quot;()&amp;quot;}&lt;br /&gt;
- Ja&lt;br /&gt;
+ Nej&lt;br /&gt;
&lt;br /&gt;
{Man kan nästla taggar av samma typ inuti varandra.&lt;br /&gt;
|type=&amp;quot;()&amp;quot;}&lt;br /&gt;
+ Ja&lt;br /&gt;
- Nej&lt;br /&gt;
&lt;br /&gt;
{Elementens utseende kan skilja sig ifrån webbläsare till webbläsare.&lt;br /&gt;
|type=&amp;quot;()&amp;quot;}&lt;br /&gt;
+ Sant&lt;br /&gt;
- Felaktigt&lt;br /&gt;
&lt;br /&gt;
{Med CSS kan man styra utseendet till 100 %&lt;br /&gt;
|type=&amp;quot;()&amp;quot;}&lt;br /&gt;
- Sant&lt;br /&gt;
+ Felaktigt&lt;br /&gt;
&lt;br /&gt;
{Indentering betyder att man skriver allt med stora bokstäver, så det syns bättre.&lt;br /&gt;
|type=&amp;quot;()&amp;quot;}&lt;br /&gt;
- Sant&lt;br /&gt;
+ Felaktigt&lt;br /&gt;
&lt;br /&gt;
{&amp;lt;code&amp;gt;em&amp;lt;/code&amp;gt; används för att det är något speciellt med elementinnehållet.&lt;br /&gt;
|type=&amp;quot;()&amp;quot;}&lt;br /&gt;
+ Sant&lt;br /&gt;
- Felaktigt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/quiz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tillbaka till [[Element-grunder]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Huvudsida&amp;diff=5056</id>
		<title>Huvudsida</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Huvudsida&amp;diff=5056"/>
		<updated>2021-10-23T12:02:13Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;well well-cocktail&amp;quot;&amp;gt;&lt;br /&gt;
== Välkommen till Webbling ==&lt;br /&gt;
&lt;br /&gt;
Webbling är en öppen lärresurs som är avsedd för dig som vill lära dig mer om   [[Introduktion till webbteknik|webbteknik]], [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]]. Här kan du lära dig alltifrån hur man skapar enkla webbsidor till avancerade webbapplikationer och webbtjänster. Materialet är främst tänk för dig som går på gymnasiet och läser någon av kurserna inom webbteknik, programmering eller gränssnitt. Förhoppningen är dock att denna resurs kan vara till hjälp för alla som vill veta mer om hur man går tillväga med [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-hearts&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Innehåll ==&lt;br /&gt;
Här finner du [[referensmaterial]], t.ex. [[HTML5-taggar]] och [[CSS-egenskapslista|CSS-egenskaper]] samt mycket [[studiematerial]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== Nyheter ==&lt;br /&gt;
Alla exempel som använde jQuery är nu omskrivna till plainJS.&lt;br /&gt;
&lt;br /&gt;
jQuery-sektionen är märkt som föråldrad och kommer inte att uppdateras mer.&lt;br /&gt;
&lt;br /&gt;
SPA-exemplen är uppdaterade så de fungerar som de ska.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-mango&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorer ==&lt;br /&gt;
[[Webbutveckling]]sdelen och [[Referensmaterial | referensmaterialet]] angående webbtekniker sponsrades av [http://www.internetfonden.se/ Internetfonden].&lt;br /&gt;
&lt;br /&gt;
Delarna om [[JavaScript]]-programmering, jQuery, Node.js och [[öppen data]] sponsrades av [http://vinnova.se/ Vinnova].&lt;br /&gt;
&lt;br /&gt;
Webbling har delvis tagits fram för att användas som studiematerial vid [http://soltorgsgymnasiet.se Soltorgsgymnasiet] i Borlänge.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-concrete-light&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rättigheter ==&lt;br /&gt;
Allt material på Webbling kan delas i enlighet med följande; &lt;br /&gt;
&lt;br /&gt;
[http://creativecommons.org/licenses/by-sa/4.0/ https://i.creativecommons.org/l/by-sa/4.0/88x31.png]&amp;lt;br&amp;gt;&lt;br /&gt;
Webbling av [mailto:pgj@gnulix.org Patrik Grip-Jansson] och [http://soltorgsgymnasiet.se Soltorgsgymnasiet] är licenserad under en [http://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Erkännande-DelaLika 4.0 Internationell licens]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Huvudsida&amp;diff=5055</id>
		<title>Huvudsida</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Huvudsida&amp;diff=5055"/>
		<updated>2021-10-23T12:01:48Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;well well-cocktail&amp;quot;&amp;gt;&lt;br /&gt;
== Välkommen till Webbling ==&lt;br /&gt;
&lt;br /&gt;
Webbling är en öppen lärresurs som är avsedd för dig som vill lära dig mer om   [[Introduktion till webbteknik|webbteknik]], [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]]. Här kan du lära dig alltifrån hur man skapar enkla webbsidor till avancerade webbapplikationer och webbtjänster. Materialet är främst tänk för dig som går på gymnasiet och läser någon av kurserna inom webbteknik, programmering eller gränssnitt. Förhoppningen är dock att denna resurs kan vara till hjälp för alla som vill veta mer om hur man går tillväga med [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-hearts&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Innehåll ==&lt;br /&gt;
Här finner du [[referensmaterial]], t.ex. [[HTML5-taggar]] och [[CSS-egenskapslista|CSS-egenskaper]] samt mycket [[studiematerial]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== Nyheter ==&lt;br /&gt;
Alla exempel som använd jQuery är nu omskrivna till plainJS.&lt;br /&gt;
&lt;br /&gt;
jQuery-sektionen är märkt som föråldrad och kommer inte att uppdateras mer.&lt;br /&gt;
&lt;br /&gt;
SPA-exemplen är uppdaterade så de fungerar som de ska.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-mango&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorer ==&lt;br /&gt;
[[Webbutveckling]]sdelen och [[Referensmaterial | referensmaterialet]] angående webbtekniker sponsrades av [http://www.internetfonden.se/ Internetfonden].&lt;br /&gt;
&lt;br /&gt;
Delarna om [[JavaScript]]-programmering, jQuery, Node.js och [[öppen data]] sponsrades av [http://vinnova.se/ Vinnova].&lt;br /&gt;
&lt;br /&gt;
Webbling har delvis tagits fram för att användas som studiematerial vid [http://soltorgsgymnasiet.se Soltorgsgymnasiet] i Borlänge.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-concrete-light&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rättigheter ==&lt;br /&gt;
Allt material på Webbling kan delas i enlighet med följande; &lt;br /&gt;
&lt;br /&gt;
[http://creativecommons.org/licenses/by-sa/4.0/ https://i.creativecommons.org/l/by-sa/4.0/88x31.png]&amp;lt;br&amp;gt;&lt;br /&gt;
Webbling av [mailto:pgj@gnulix.org Patrik Grip-Jansson] och [http://soltorgsgymnasiet.se Soltorgsgymnasiet] är licenserad under en [http://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Erkännande-DelaLika 4.0 Internationell licens]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Studiematerial&amp;diff=5054</id>
		<title>Studiematerial</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Studiematerial&amp;diff=5054"/>
		<updated>2021-10-23T12:00:47Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;well well-cocktail&amp;quot;&amp;gt;&lt;br /&gt;
I den här sektionen av Webbling finns ett antal aktiviter indelade i olika ämnesavsnitt. Dessa kommer förhoppningsvis att lära dig mycket om webbteknik, webbutveckling och programmering.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== [[Lär dig mer om webbutveckling]] ==&lt;br /&gt;
En introduktion till hur man skapar webbsidor och webbplatser.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== [[Webbutveckling TL;DR]] ==&lt;br /&gt;
En snabb introduktion/repetition av webbutveckling.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== [[Lär dig mer om JavaScript]] ==&lt;br /&gt;
En introduktion till hur man programmerar i språket JavaScript.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== [[Att bygga webbapplikationer och -tjänster]] ==&lt;br /&gt;
Här går vi igenom mer om hur man skapar webbapplikationer och -tjänster.  Detta är tänkt för de mer avancerade och du bör först gå igenom &amp;quot;[[Lär dig mer om JavaScript]]&amp;quot; innan du går in på denna sektion&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== [[Jag vill...]] ==&lt;br /&gt;
En FAQ med lösningar på vanliga problem och frågeställningar.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Huvudsida&amp;diff=5053</id>
		<title>Huvudsida</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Huvudsida&amp;diff=5053"/>
		<updated>2021-10-23T11:59:51Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;well well-cocktail&amp;quot;&amp;gt;&lt;br /&gt;
== Välkommen till Webbling ==&lt;br /&gt;
&lt;br /&gt;
Webbling är en öppen lärresurs som är avsedd för dig som vill lära dig mer om   [[Introduktion till webbteknik|webbteknik]], [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]]. Här kan du lära dig alltifrån hur man skapar enkla webbsidor till avancerade webbapplikationer och webbtjänster. Materialet är främst tänk för dig som går på gymnasiet och läser någon av kurserna inom webbteknik, programmering eller gränssnitt. Förhoppningen är dock att denna resurs kan vara till hjälp för alla som vill veta mer om hur man går tillväga med [[webbutveckling]] och [[Lär dig mer om JavaScript | programmering]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-hearts&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Innehåll ==&lt;br /&gt;
Här finner du [[referensmaterial]], t.ex. [[HTML5-taggar]] och [[CSS-egenskapslista|CSS-egenskaper]] samt mycket [[studiematerial]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
== Nyheter ==&lt;br /&gt;
Alla exempel som använd jQuery är nu omskrivna till plainJS.&lt;br /&gt;
&lt;br /&gt;
SPA-exemplen är uppdaterade så de fungerar som de ska.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-mango&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sponsorer ==&lt;br /&gt;
[[Webbutveckling]]sdelen och [[Referensmaterial | referensmaterialet]] angående webbtekniker sponsrades av [http://www.internetfonden.se/ Internetfonden].&lt;br /&gt;
&lt;br /&gt;
Delarna om [[JavaScript]]-programmering, jQuery, Node.js och [[öppen data]] sponsrades av [http://vinnova.se/ Vinnova].&lt;br /&gt;
&lt;br /&gt;
Webbling har delvis tagits fram för att användas som studiematerial vid [http://soltorgsgymnasiet.se Soltorgsgymnasiet] i Borlänge.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-concrete-light&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rättigheter ==&lt;br /&gt;
Allt material på Webbling kan delas i enlighet med följande; &lt;br /&gt;
&lt;br /&gt;
[http://creativecommons.org/licenses/by-sa/4.0/ https://i.creativecommons.org/l/by-sa/4.0/88x31.png]&amp;lt;br&amp;gt;&lt;br /&gt;
Webbling av [mailto:pgj@gnulix.org Patrik Grip-Jansson] och [http://soltorgsgymnasiet.se Soltorgsgymnasiet] är licenserad under en [http://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Erkännande-DelaLika 4.0 Internationell licens]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5052</id>
		<title>Ännu en SPA med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5052"/>
		<updated>2021-10-23T11:58:34Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska gå igenom hur man kan göra en variant på föregående SPA. Sveriges Radio har flera öppna API:er där man kan få tillgång till diverse data. Vi ska ta och titta närmare på deras API för trafikmeddelanden. Här kan man läsa ut information om de trafiksituationer som uppstår runt om i landet. Vi kan bland annat läsa ut är koordinater, titel och beskrivning. Sveriges Radios API:er kräver ingen [[API-nyckel]]. De supportar även [[CORS]] så vi kan hämta data direkt ifrån vår webbapplikation. Detta är alltså en utmärkt källa till exempeldata.&lt;br /&gt;
&lt;br /&gt;
För denna app ska vi ha ett något annorlunda upplägg. Kartan visar var det finns trafikmeddelanden och när användaren för musen över dessa så visar vi information om datapunkten i ett informationsfönster.&lt;br /&gt;
&lt;br /&gt;
== Vår applikation ==&lt;br /&gt;
Väldigt mycket påminner om vår föregående [[SPA]], så vi kommer bara att gå igenom skillnaderna.&lt;br /&gt;
&lt;br /&gt;
== HTML ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Den största skillnaden är att vi lägger till en extra &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där vi ska visa information om vald trafiksituation. Vi delar upp ytan för trafikinformationen i två delar; en för kartan och en för textinformationen. Dessa ska vi sedan snygga till med lite CSS.&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;css&amp;quot; height=&amp;quot;700&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en till en flexbox, så att informationen som finns inuti den kommer att radas upp på samma rad. Vi väljer att de ska placeras ut likformigt med &amp;lt;code&amp;gt;jusitfy-content: space-around;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;#info&amp;lt;/code&amp;gt; till samma storlek, så det blir att se proportionellt ut. &lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1200&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I JavaScriptet har vi gjort en hel del ändringar...&lt;br /&gt;
&lt;br /&gt;
=== Zoomnivå ===&lt;br /&gt;
Första zoomar ut kartan och centrerar den så vi ser det mesta av Sverige (i alla fall om det finns plats i vår webbläsare).&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Vi döper om vår funktion avsedd för att hämta data till &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt;. Även Sveriges Radios API är ett [[REST]]-API, så vi kan kalla på det med en &amp;quot;vanlig&amp;quot; URL. Den enda inparameter vi bryr oss om att skicka med är &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt;, då vi vill ha data i JSON-format.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; är i det närmaste helt omskriven. Den data vi får ifrån Sveriges Radio är inte i GeoJSON. Vi får därför göra en egen loop som går igenom datan och behandlar varje post. För omväxlingens skull använder vi en anonym funktion denna gång. &lt;br /&gt;
&lt;br /&gt;
Vi lägger först till en markör på den position som anges för trafikmeddelandet. Vi kopplar en popup till varje markör - när användaren klickar på markören kommer namnet på platsen att visas. Därefter binder vi några händelsehanterare till markören. Först en som kommer att triggas när användaren sätter muspekaren ovanför markören och sedan en som triggas när muspekaren avlägsnas från markören.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Till &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; skickar vi även med nuvarande trafikmeddelande. När funktionen triggas kommer &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; att vara satt till respektive trafikmeddelande. Vi kan nu läsa ut informationen om trafikmeddelandet och sätta respektive informationsfält till den data som vi vill visa upp.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; gör inte speciellt mycket mer än att den rensar informationsfälten.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi är klara med sektionen som handlar om applikationer som körs i webbläsaren. Nu ska vi gå vidare och lära oss om hur man skapar serverapplikationer....&lt;br /&gt;
&lt;br /&gt;
[[Node - En introduktion]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5051</id>
		<title>Ännu en SPA med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=%C3%84nnu_en_SPA_med_Leaflet&amp;diff=5051"/>
		<updated>2021-10-23T11:58:13Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska gå igenom hur man kan göra en variant på föregående SPA. Sveriges Radio har flera öppna API:er där man kan få tillgång till diverse data. Vi ska ta och titta närmare på deras API för trafikmeddelanden. Här kan man läsa ut information om de trafiksituationer som uppstår runt om i landet. Vi kan bland annat läsa ut är koordinater, titel och beskrivning. Sveriges Radios API:er kräver ingen [[API-nyckel]]. De supportar även [[CORS]] så vi kan hämta data direkt ifrån vår webbapplikation. Detta är alltså en utmärkt källa till exempeldata.&lt;br /&gt;
&lt;br /&gt;
För denna app ska vi ha ett något annorlunda upplägg. Kartan visar var det finns trafikmeddelanden och när användaren för musen över dessa så visar vi information om datapunkten i ett informationsfönster.&lt;br /&gt;
&lt;br /&gt;
== Vår applikation ==&lt;br /&gt;
Väldigt mycket påminner om vår föregående [[SPA]], så vi kommer bara att gå igenom skillnaderna.&lt;br /&gt;
&lt;br /&gt;
== HTML ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Den största skillnaden är att vi lägger till en extra &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där vi ska visa information om vald trafiksituation. Vi delar upp ytan för trafikinformationen i två delar; en för kartan och en för textinformationen. Dessa ska vi sedan snygga till med lite CSS.&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;css&amp;quot; height=&amp;quot;700&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en till en flexbox, så att informationen som finns inuti den kommer att radas upp på samma rad. Vi väljer att de ska placeras ut likformigt med &amp;lt;code&amp;gt;jusitfy-content: space-around;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Vi sätter &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;#info&amp;lt;/code&amp;gt; till samma storlek, så det blir att se proportionellt ut. &lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;bErYzM&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1200&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I JavaScriptet har vi gjort en hel del ändringar...&lt;br /&gt;
&lt;br /&gt;
=== Zoomnivå ===&lt;br /&gt;
Första zoomar ut kartan och centrerar den så vi ser det mesta av Sverige (i alla fall om det finns plats i vår webbläsare).&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Vi döper om vår funktion avsedd för att hämta data till &amp;lt;code&amp;gt;hämtaTrafikmeddelande&amp;lt;/code&amp;gt;. Även Sveriges Radios API är ett [[REST]]-API, så vi kan kalla på det med en &amp;quot;vanlig&amp;quot; URL. Den enda inparameter vi bryr oss om att skicka med är &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt;, då vi vill ha data i JSON-format.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; är i det närmaste helt omskriven. Den data vi får ifrån Sveriges Radio är inte i GeoJSON. Vi får därför göra en egen loop som går igenom datan och behandlar varje post. För omväxlingens skull använder vi en anonym funktion denna gång. &lt;br /&gt;
&lt;br /&gt;
Vi lägger först till en markör på den position som anges för trafikmeddelandet. Vi kopplar en popup till varje markör - när användaren klickar på markören kommer namnet på platsen att visas. Därefter binder vi några händelsehanterare till markören. Först en som kommer att triggas när användaren sätter muspekaren ovanför markören och sedan en som triggas när muspekaren avlägsnas från markören.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Till &amp;lt;code&amp;gt;MouseOver&amp;lt;/code&amp;gt; skickar vi även med nuvarande trafikmeddelande. När funktionen triggas kommer &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; att vara satt till respektive trafikmeddelande. Vi kan nu läsa ut informationen om trafikmeddelandet och sätta respektive informationsfält till den data som vi vill visa upp.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;MouseOut&amp;lt;/code&amp;gt; gör inte speciellt mycket mer än att den rensar informationsfälten.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi är klara med sektionen som handlar om applikationer som körs i webbläsaren. Nu ska vi gå vidare och lära oss om hur man skapar serverapplikationer....&lt;br /&gt;
&lt;br /&gt;
[[Node - En introduktion]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5050</id>
		<title>En exempelapplikation i Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5050"/>
		<updated>2021-10-23T11:42:55Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska nu titta på hur man kan skapa en liten applikation baserad på Leaflet. Vi kommer att hämta data från [http://data.karta.orebro.se/ Örebros projekt] som tillhandahåller Öppen data. Här finns en hel del trevlig information att tillgå. Vi ska titta på hur man kan läsa ut intresseplatser i Örebros kommun och visa upp dessa på en karta. Även om du inte kommer ifrån Örebro, så är detta en intressant uppsättning av data som passar utmärkt att använda i demosyfte.  En fördel med Örebros data är att man supportar [[CORS]] och att det därför går att hämta ned data från klientbaserade webbapplikationer.&lt;br /&gt;
&lt;br /&gt;
Vi ska bygga upp vår applikation i steg. Vi kommer att utföra sakerna ungefär i den ordning och med det upplägg som man skulle haft om man gjort detta på &amp;quot;riktigt&amp;quot;. Förhoppningsvis blir det lättare att hänga med då.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Vi kommer att använda Codepen-exempel, då dessa ser bra ut och är lätta att lägga in i Webbling. Dock så vill man förstås skriva lite annorlunda om man gör en &amp;quot;riktig&amp;quot; applikation. I slutet kommer vi att länka till den färdiga applikationen, så som den kan köras fristående.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== En grund att stå på  ==&lt;br /&gt;
Vi börjar med att skapa en grundstruktur för vår sida.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
Det viktigaste vi behöver göra i HTML:en är att  lägga till [[Leaflet]], då vi kommer att behöva denna för vår app. HTML:en kan då bli att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns nog inget som förtjänar att kommenteras i den lilla HTML-snutten, då det i stort sett påminner om våra tidigare exempel.&lt;br /&gt;
&lt;br /&gt;
I följande exempel kommer vi att minimera HTML-koden på Codepen, så all kod kommer inte att vara med i HTML-editorn. Allt i föregående exempel behövs dock om du ska skapa applikationen som en fristående webbsajt.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
Vi lägger även till basal CSS:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I CSS:en så startar vi med en minimal reset som gör att vi  får ungefär samma grundutseende i alla webbläsare. Vi tar bort alla marginaler, all utfyllnad och ser till att vi använder oss av den &amp;quot;vettiga&amp;quot; boxmodellen.&lt;br /&gt;
&lt;br /&gt;
Då det är tänkt att det mesta i appen ska vara centrerat, så sätter vi att titeln i vår &amp;lt;code&amp;gt;[[hx | h1]]&amp;lt;/code&amp;gt; ska vara centrerad.&lt;br /&gt;
&lt;br /&gt;
Det intressantaste vi gör i CSS är det som återfinns i &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt;. Vi sätter höjden till &amp;lt;code&amp;gt;75vh&amp;lt;/code&amp;gt;. Det vill säga cirka 75 % av skärmens höjd. Se &amp;quot;[[Måttenheter i CSS]]&amp;quot;, om du glömt hur dessa fungerar. Vi sätter samma proportioner även för bredden. Vi använder oss av &amp;lt;code&amp;gt;margin: 0 auto;&amp;lt;/code&amp;gt; för att centrera vår kart-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;. Slutligen sätter vi en kant runt om kartan.&lt;br /&gt;
&lt;br /&gt;
== Lägga till en karta på prov ==&lt;br /&gt;
För att se om kartan fungerar bra ska vi lägga till en testversion av kartan. Vi kör samma kod som i vårt tidigare exempel där vi visade en karta centrerad kring Soltorgsgymnasiet. Vi ändrar dock  koordinaterna så att kartan kommer att centreras kring Örebro.&lt;br /&gt;
&lt;br /&gt;
Koden blir att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;Qypaxd&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultatet ser ju helt acceptabelt ut och vi får automatisk den grundläggande navigerings-funktionalitet som man förväntar sig av en kartapplikation.&lt;br /&gt;
&lt;br /&gt;
== Första försök med att läsa in data ==&lt;br /&gt;
För att gå vidare behöver vi koppla data till vår karta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Eftersom många API:er har satt gränser för hur ofta man får läs in data ifrån dem, kan det vara en bra idé att jobba lite annorlunda på experimentstadiet. Man tar helt enkelt och hämtar hem en datamängd från källan och sparar denna lokalt. Under testandet så använder du sedan denna undansparade data istället för att hämta hem den gång på gång. Det duger ju gott med denna typ av lagrad data medan vi håller på att slå fast hur layout och liknande ska se ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Experimentdata ===&lt;br /&gt;
Vi hämtade ned lite experimentdata ifrån &amp;lt;code&amp;gt;https://karta.orebro.se/api/v1/layers/1?srs=EPSG:4326&amp;lt;/code&amp;gt;.  Därefter snyggade vi upp datan genom att köra den genom en [https://jsonformatter.curiousconcept.com/ JSON-formatterare]. Nu när vi ska börja att experimentera är det ju bra om vår data är så läsbar som möjligt. För koden spelar det ingen roll hur data är formaterad och det kommer inte att behövas göra några ändringar för detta.&lt;br /&gt;
&lt;br /&gt;
Vi kortade även ned datamängden så att enbart två kartpunkter är med. Det räcker för experimentsyfte och tar inte så mycket plats. Så här blev vår data att se ut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;type&amp;quot;:&amp;quot;FeatureCollection&amp;quot;,&lt;br /&gt;
   &amp;quot;features&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.253840371567572,&lt;br /&gt;
               59.277180434995095&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Alnängsbadet&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3089.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/1&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.74236626384993,&lt;br /&gt;
               59.1363775662748&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Dimbobaden&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3090.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/2&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denna data är i en specialversion av JSON som är till för just kartdata. Den kallas för [[GeoJSON]].&lt;br /&gt;
&lt;br /&gt;
Varje intressepunkt har två delar. Först kommer koordinaterna och sen information om intressepunkten. Vi kommer att bry oss i koordinaterna och &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; till att börja med.&lt;br /&gt;
&lt;br /&gt;
=== Leaflet och GeoJSON ===&lt;br /&gt;
Leaflet har inbyggt stöd för GeoJSON. Om vi använder oss av detta kommer vi att bespara oss själva en hel del arbete. Faktum är att Leaflet kan hantera vår datamängd i det närmaste helautomatiskt. Den kommer att plöja igenom datan och lägga ut den på kartan åt oss. Detta sker utan att vi behöver behandla datan eller skriva några loopar för att gå igenom den.&lt;br /&gt;
&lt;br /&gt;
Vi lägger datamängden i slutet av vår JavaScript-kod, så vi slipper att se den. Sen ska vi skapa lite kod som kan hantera vår [[GeoJSON]]-data. Så här kommer koden att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;LGWrjY&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;geoJson()&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den nya koden är alltså den där vi skapar ett &amp;lt;code&amp;gt;geoLayer&amp;lt;/code&amp;gt;. Detta kommer att bli ett lager som ligger ovanpå vår karta och som visar information som läses utifrån vår GeoJSON-data. Lagret skapas av metoden &amp;lt;code&amp;gt;L.geoJson()&amp;lt;/code&amp;gt;. Vi ska titta närmare på hur denna fungerar.&lt;br /&gt;
&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;-metoden antingen en enda post formaterad i GeoJSON eller en array med flera poster. I vårt fall har vi en array med GeoJSON-data, så vi skickar med den, dvs &amp;lt;code&amp;gt;geoData.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Som andra parameter skickar man med en lista som innehåller de stilparametrar som ska gälla för vår GeoJSON-data. Detta kan vara en lista med egenskaper som används för all data. Det kan även vara ett objekt som innehåller metoder som körs för att sätta specifik data för varje GeoJSON-objekt. I vårt fall har vi valt att skicka med metoder. Vi skulle även kunna lägga till stildata i objektet om vi ville det. Vi har valt att koppla en funktion till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt;. Denna funktion kommer att köras en gång för varje punkt som ingår i vår data. &lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den funktion vi skickar till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; tar två inparametrar. Den första är nuvarande geografiska data som behandlas. I vårt fall är det en intressepunkt. Den andra parametern anger vilket lager som denna &amp;quot;feature&amp;quot; ska läggas till i. I vårt fall binder vi en popup till varje datapunkt, popup-texten kommer att vara namnet på intressepunkten.&lt;br /&gt;
&lt;br /&gt;
Svårare än så är det inte att lägga in data som är formaterad i GeoJSON!&lt;br /&gt;
&lt;br /&gt;
== Att läsa in data från en datakälla ==&lt;br /&gt;
Nu när vår utritning fungerar är det dags att börja hämta data på &amp;quot;riktigt&amp;quot;. Det kommer vi att göra genom att använda oss av [[AJAX]]. Om du behöver uppfriska dina kunskaper i AJAX, titta på aktiviteten &amp;quot;[[jQuery och AJAX]]&amp;quot;.  Vi plockar bort vår testdata och lägger till en funktion som hämtar data. Så här blir det att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;qbrxBw&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1050&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det som är nytt är främst &amp;lt;code&amp;gt;hämtaIPLista&amp;lt;/code&amp;gt;. Denna kommer att läsa ut en lista som innehåller Örebros badplatser. När datan är hämtad kommer funktionen &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; att köras. Som inparameter får denna den data som lästs in. Denna data kan vi skicka in direkt i &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;, då den är precis lik den testdata som vi använde tidigare. Det är inget nytt i hur denna bit hanteras, koden är bara flyttad till en annan plats i programfilen.&lt;br /&gt;
&lt;br /&gt;
== Appen på riktigt ==&lt;br /&gt;
Om du vill se hur man skulle lagt upp appen på riktigt, det vill säga som fristående webbapplikation och inte som demo i Codepen, kan du gå till [http://exempel.webbling.se/Leaflet http://exempel.webbling.se/Leaflet].&lt;br /&gt;
&lt;br /&gt;
Skillnaderna är att vi delat upp app:en i tre filer. En för HTML, en för CSS och en för JavaScript. &lt;br /&gt;
&lt;br /&gt;
I HTML är skillnaden att det är med &amp;quot;grundstruktur&amp;quot; för sidan, sånt som inte behövs på Codepen. Det är även tillagt så att övriga app-delar laddas in. I CSS är inget ändrat.&lt;br /&gt;
&lt;br /&gt;
JavaScript-delen har hamnat i &amp;lt;code&amp;gt;app.js&amp;lt;/code&amp;gt;. Vår app-kod har inkapslats i en funktion. Denna funktion körs igång när allt är inladdat. Detta gör vi för att vara säkra på att alla metoder vi kommer att anropa är nedladdade och tillgängliga.&lt;br /&gt;
&lt;br /&gt;
== Avslutning ==&lt;br /&gt;
Nu har du en liten [[SPA]] som visar upp karta och data. Om du klickar på en intressepunkt i kartan bör du få upp en popup som talar om namnet på badplatsen . Återigen, det är inte alltför mycket kod som behövs för att hämta data dynamiskt och visa upp denna på en fullt användbar karta.&lt;br /&gt;
&lt;br /&gt;
Vi skulle lätt kunna ändra till att läsa in andra intressepunkter eller varför inte låta användaren välja vilka intressepunkter denne vill se? Det lämnar vi dock som en övning till läsare. Vi ska gå vidare och titta på hur man skapar applikationer som har en serverkomponent. Vi kommer att behöva detta för att kunna hämta vissa typer av data, t.ex. kräver många öppna data-källor att man har en [[API-nyckel]] för att kunna köra dem. Denna nyckel ska hållas hemlig, vilket är svårt eller omöjligt att göra om du kör en renodlad klientapp.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi ska gå igenom hur man skapar en till liten SPA.&lt;br /&gt;
&lt;br /&gt;
[[Ännu en SPA med Leaflet]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5049</id>
		<title>En exempelapplikation i Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5049"/>
		<updated>2021-10-23T11:15:06Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska nu titta på hur man kan skapa en liten applikation baserad på Leaflet. Vi kommer att hämta data från [http://data.karta.orebro.se/ Örebros projekt] som tillhandahåller Öppen data. Här finns en hel del trevlig information att tillgå. Vi ska titta på hur man kan läsa ut intresseplatser i Örebros kommun och visa upp dessa på en karta. Även om du inte kommer ifrån Örebro, så är detta en intressant uppsättning av data som passar utmärkt att använda i demosyfte.  En fördel med Örebros data är att man supportar [[CORS]] och att det därför går att hämta ned data från klientbaserade webbapplikationer.&lt;br /&gt;
&lt;br /&gt;
Vi ska bygga upp vår applikation i steg. Vi kommer att utföra sakerna ungefär i den ordning och med det upplägg som man skulle haft om man gjort detta på &amp;quot;riktigt&amp;quot;. Förhoppningsvis blir det lättare att hänga med då.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Vi kommer att använda Codepen-exempel, då dessa ser bra ut och är lätta att lägga in i Webbling. Dock så vill man förstås skriva lite annorlunda om man gör en &amp;quot;riktig&amp;quot; applikation. I slutet kommer vi att länka till den färdiga applikationen, så som den kan köras fristående.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== En grund att stå på  ==&lt;br /&gt;
Vi börjar med att skapa en grundstruktur för vår sida.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
Det viktigaste vi behöver göra i HTML:en är att  lägga till [[Leaflet]], då vi kommer att behöva denna för vår app. HTML:en kan då bli att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns nog inget som förtjänar att kommenteras i den lilla HTML-snutten, då det i stort sett påminner om våra tidigare exempel.&lt;br /&gt;
&lt;br /&gt;
I följande exempel kommer vi att minimera HTML-koden på Codepen, så all kod kommer inte att vara med i HTML-editorn. Allt i föregående exempel behövs dock om du ska skapa applikationen som en fristående webbsajt.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
Vi lägger även till basal CSS:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I CSS:en så startar vi med en minimal reset som gör att vi  får ungefär samma grundutseende i alla webbläsare. Vi tar bort alla marginaler, all utfyllnad och ser till att vi använder oss av den &amp;quot;vettiga&amp;quot; boxmodellen.&lt;br /&gt;
&lt;br /&gt;
Då det är tänkt att det mesta i appen ska vara centrerat, så sätter vi att titeln i vår &amp;lt;code&amp;gt;[[hx | h1]]&amp;lt;/code&amp;gt; ska vara centrerad.&lt;br /&gt;
&lt;br /&gt;
Det intressantaste vi gör i CSS är det som återfinns i &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt;. Vi sätter höjden till &amp;lt;code&amp;gt;75vh&amp;lt;/code&amp;gt;. Det vill säga cirka 75 % av skärmens höjd. Se &amp;quot;[[Måttenheter i CSS]]&amp;quot;, om du glömt hur dessa fungerar. Vi sätter samma proportioner även för bredden. Vi använder oss av &amp;lt;code&amp;gt;margin: 0 auto;&amp;lt;/code&amp;gt; för att centrera vår kart-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;. Slutligen sätter vi en kant runt om kartan.&lt;br /&gt;
&lt;br /&gt;
== Lägga till en karta på prov ==&lt;br /&gt;
För att se om kartan fungerar bra ska vi lägga till en testversion av kartan. Vi kör samma kod som i vårt tidigare exempel där vi visade en karta centrerad kring Soltorgsgymnasiet. Vi ändrar dock  koordinaterna så att kartan kommer att centreras kring Örebro.&lt;br /&gt;
&lt;br /&gt;
Koden blir att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;Qypaxd&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultatet ser ju helt acceptabelt ut och vi får automatisk den grundläggande navigerings-funktionalitet som man förväntar sig av en kartapplikation.&lt;br /&gt;
&lt;br /&gt;
== Första försök med att läsa in data ==&lt;br /&gt;
För att gå vidare behöver vi koppla data till vår karta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Eftersom många API:er har satt gränser för hur ofta man får läs in data ifrån dem, kan det vara en bra idé att jobba lite annorlunda på experimentstadiet. Man tar helt enkelt och hämtar hem en datamängd från källan och sparar denna lokalt. Under testandet så använder du sedan denna undansparade data istället för att hämta hem den gång på gång. Det duger ju gott med denna typ av lagrad data medan vi håller på att slå fast hur layout och liknande ska se ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Experimentdata ===&lt;br /&gt;
Vi hämtade ned lite experimentdata ifrån &amp;lt;code&amp;gt;http://data.karta.orebro.se/api/v1/layers/1?srs=EPSG:4326&amp;lt;/code&amp;gt;.  Därefter snyggade vi upp datan genom att köra den genom en [https://jsonformatter.curiousconcept.com/ JSON-formatterare]. Nu när vi ska börja att experimentera är det ju bra om vår data är så läsbar som möjligt. För koden spelar det ingen roll hur data är formaterad och det kommer inte att behövas göra några ändringar för detta.&lt;br /&gt;
&lt;br /&gt;
Vi kortade även ned datamängden så att enbart två kartpunkter är med. Det räcker för experimentsyfte och tar inte så mycket plats. Så här blev vår data att se ut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;type&amp;quot;:&amp;quot;FeatureCollection&amp;quot;,&lt;br /&gt;
   &amp;quot;features&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.253840371567572,&lt;br /&gt;
               59.277180434995095&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Alnängsbadet&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3089.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/1&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.74236626384993,&lt;br /&gt;
               59.1363775662748&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Dimbobaden&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3090.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/2&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denna data är i en specialversion av JSON som är till för just kartdata. Den kallas för [[GeoJSON]].&lt;br /&gt;
&lt;br /&gt;
Varje intressepunkt har två delar. Först kommer koordinaterna och sen information om intressepunkten. Vi kommer att bry oss i koordinaterna och &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; till att börja med.&lt;br /&gt;
&lt;br /&gt;
=== Leaflet och GeoJSON ===&lt;br /&gt;
Leaflet har inbyggt stöd för GeoJSON. Om vi använder oss av detta kommer vi att bespara oss själva en hel del arbete. Faktum är att Leaflet kan hantera vår datamängd i det närmaste helautomatiskt. Den kommer att plöja igenom datan och lägga ut den på kartan åt oss. Detta sker utan att vi behöver behandla datan eller skriva några loopar för att gå igenom den.&lt;br /&gt;
&lt;br /&gt;
Vi lägger datamängden i slutet av vår JavaScript-kod, så vi slipper att se den. Sen ska vi skapa lite kod som kan hantera vår [[GeoJSON]]-data. Så här kommer koden att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;LGWrjY&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;geoJson()&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den nya koden är alltså den där vi skapar ett &amp;lt;code&amp;gt;geoLayer&amp;lt;/code&amp;gt;. Detta kommer att bli ett lager som ligger ovanpå vår karta och som visar information som läses utifrån vår GeoJSON-data. Lagret skapas av metoden &amp;lt;code&amp;gt;L.geoJson()&amp;lt;/code&amp;gt;. Vi ska titta närmare på hur denna fungerar.&lt;br /&gt;
&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;-metoden antingen en enda post formaterad i GeoJSON eller en array med flera poster. I vårt fall har vi en array med GeoJSON-data, så vi skickar med den, dvs &amp;lt;code&amp;gt;geoData.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Som andra parameter skickar man med en lista som innehåller de stilparametrar som ska gälla för vår GeoJSON-data. Detta kan vara en lista med egenskaper som används för all data. Det kan även vara ett objekt som innehåller metoder som körs för att sätta specifik data för varje GeoJSON-objekt. I vårt fall har vi valt att skicka med metoder. Vi skulle även kunna lägga till stildata i objektet om vi ville det. Vi har valt att koppla en funktion till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt;. Denna funktion kommer att köras en gång för varje punkt som ingår i vår data. &lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den funktion vi skickar till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; tar två inparametrar. Den första är nuvarande geografiska data som behandlas. I vårt fall är det en intressepunkt. Den andra parametern anger vilket lager som denna &amp;quot;feature&amp;quot; ska läggas till i. I vårt fall binder vi en popup till varje datapunkt, popup-texten kommer att vara namnet på intressepunkten.&lt;br /&gt;
&lt;br /&gt;
Svårare än så är det inte att lägga in data som är formaterad i GeoJSON!&lt;br /&gt;
&lt;br /&gt;
== Att läsa in data från en datakälla ==&lt;br /&gt;
Nu när vår utritning fungerar är det dags att börja hämta data på &amp;quot;riktigt&amp;quot;. Det kommer vi att göra genom att använda oss av [[AJAX]]. Om du behöver uppfriska dina kunskaper i AJAX, titta på aktiviteten &amp;quot;[[jQuery och AJAX]]&amp;quot;.  Vi plockar bort vår testdata och lägger till en funktion som hämtar data. Så här blir det att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;qbrxBw&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1050&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det som är nytt är främst &amp;lt;code&amp;gt;hämtaIPLista&amp;lt;/code&amp;gt;. Denna kommer att läsa ut en lista som innehåller Örebros badplatser. När datan är hämtad kommer funktionen &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; att köras. Som inparameter får denna den data som lästs in. Denna data kan vi skicka in direkt i &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;, då den är precis lik den testdata som vi använde tidigare. Det är inget nytt i hur denna bit hanteras, koden är bara flyttad till en annan plats i programfilen.&lt;br /&gt;
&lt;br /&gt;
== Appen på riktigt ==&lt;br /&gt;
Om du vill se hur man skulle lagt upp appen på riktigt, det vill säga som fristående webbapplikation och inte som demo i Codepen, kan du gå till [http://exempel.webbling.se/Leaflet http://exempel.webbling.se/Leaflet].&lt;br /&gt;
&lt;br /&gt;
Skillnaderna är att vi delat upp app:en i tre filer. En för HTML, en för CSS och en för JavaScript. &lt;br /&gt;
&lt;br /&gt;
I HTML är skillnaden att det är med &amp;quot;grundstruktur&amp;quot; för sidan, sånt som inte behövs på Codepen. Det är även tillagt så att övriga app-delar laddas in. I CSS är inget ändrat.&lt;br /&gt;
&lt;br /&gt;
JavaScript-delen har hamnat i &amp;lt;code&amp;gt;app.js&amp;lt;/code&amp;gt;. Vår app-kod har inkapslats i en funktion. Denna funktion körs igång när allt är inladdat. Detta gör vi för att vara säkra på att alla metoder vi kommer att anropa är nedladdade och tillgängliga.&lt;br /&gt;
&lt;br /&gt;
== Avslutning ==&lt;br /&gt;
Nu har du en liten [[SPA]] som visar upp karta och data. Om du klickar på en intressepunkt i kartan bör du få upp en popup som talar om namnet på badplatsen . Återigen, det är inte alltför mycket kod som behövs för att hämta data dynamiskt och visa upp denna på en fullt användbar karta.&lt;br /&gt;
&lt;br /&gt;
Vi skulle lätt kunna ändra till att läsa in andra intressepunkter eller varför inte låta användaren välja vilka intressepunkter denne vill se? Det lämnar vi dock som en övning till läsare. Vi ska gå vidare och titta på hur man skapar applikationer som har en serverkomponent. Vi kommer att behöva detta för att kunna hämta vissa typer av data, t.ex. kräver många öppna data-källor att man har en [[API-nyckel]] för att kunna köra dem. Denna nyckel ska hållas hemlig, vilket är svårt eller omöjligt att göra om du kör en renodlad klientapp.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi ska gå igenom hur man skapar en till liten SPA.&lt;br /&gt;
&lt;br /&gt;
[[Ännu en SPA med Leaflet]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5048</id>
		<title>En exempelapplikation i Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5048"/>
		<updated>2021-10-23T11:14:03Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska nu titta på hur man kan skapa en liten applikation baserad på Leaflet. Vi kommer att hämta data från [http://data.karta.orebro.se/ Örebros projekt] som tillhandahåller Öppen data. Här finns en hel del trevlig information att tillgå. Vi ska titta på hur man kan läsa ut intresseplatser i Örebros kommun och visa upp dessa på en karta. Även om du inte kommer ifrån Örebro, så är detta en intressant uppsättning av data som passar utmärkt att använda i demosyfte.  En fördel med Örebros data är att man supportar [[CORS]] och att det därför går att hämta ned data från klientbaserade webbapplikationer.&lt;br /&gt;
&lt;br /&gt;
Vi ska bygga upp vår applikation i steg. Vi kommer att utföra sakerna ungefär i den ordning och med det upplägg som man skulle haft om man gjort detta på &amp;quot;riktigt&amp;quot;. Förhoppningsvis blir det lättare att hänga med då.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Vi kommer att använda Codepen-exempel, då dessa ser bra ut och är lätta att lägga in i Webbling. Dock så vill man förstås skriva lite annorlunda om man gör en &amp;quot;riktig&amp;quot; applikation. I slutet kommer vi att länka till den färdiga applikationen, så som den kan köras fristående.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== En grund att stå på  ==&lt;br /&gt;
Vi börjar med att skapa en grundstruktur för vår sida.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
Det viktigaste vi behöver göra i HTML:en är att  lägga till [[Leaflet]], då vi kommer att behöva denna för vår app. HTML:en kan då bli att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns nog inget som förtjänar att kommenteras i den lilla HTML-snutten, då det i stort sett påminner om våra tidigare exempel.&lt;br /&gt;
&lt;br /&gt;
I följande exempel kommer vi att minimera HTML-koden på Codepen, så all kod kommer inte att vara med i HTML-editorn. Allt i föregående exempel behövs dock om du ska skapa applikationen som en fristående webbsajt.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
Vi lägger även till basal CSS:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I CSS:en så startar vi med en minimal reset som gör att vi  får ungefär samma grundutseende i alla webbläsare. Vi tar bort alla marginaler, all utfyllnad och ser till att vi använder oss av den &amp;quot;vettiga&amp;quot; boxmodellen.&lt;br /&gt;
&lt;br /&gt;
Då det är tänkt att det mesta i appen ska vara centrerat, så sätter vi att titeln i vår &amp;lt;code&amp;gt;[[hx | h1]]&amp;lt;/code&amp;gt; ska vara centrerad.&lt;br /&gt;
&lt;br /&gt;
Det intressantaste vi gör i CSS är det som återfinns i &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt;. Vi sätter höjden till &amp;lt;code&amp;gt;75vh&amp;lt;/code&amp;gt;. Det vill säga cirka 75 % av den skärmens höjd. Se &amp;quot;[[Måttenheter i CSS]]&amp;quot;, om du glömt hur dessa fungerar. Vi sätter samma proportioner även för bredden. Vi använder oss av &amp;lt;code&amp;gt;margin: 0 auto;&amp;lt;/code&amp;gt; för att centrera vår kart-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;. Slutligen sätter vi en kant runt om kartan.&lt;br /&gt;
&lt;br /&gt;
== Lägga till en karta på prov ==&lt;br /&gt;
För att se om kartan fungerar bra ska vi lägga till en testversion av kartan. Vi kör samma kod som i vårt tidigare exempel där vi visade en karta centrerad kring Soltorgsgymnasiet. Vi ändrar dock  koordinaterna så att kartan kommer att centreras kring Örebro.&lt;br /&gt;
&lt;br /&gt;
Koden blir att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;Qypaxd&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultatet ser ju helt acceptabelt ut och vi får automatisk den grundläggande navigerings-funktionalitet som man förväntar sig av en kartapplikation.&lt;br /&gt;
&lt;br /&gt;
== Första försök med att läsa in data ==&lt;br /&gt;
För att gå vidare behöver vi koppla data till vår karta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Eftersom många API:er har satt gränser för hur ofta man får läs in data ifrån dem, kan det vara en bra idé att jobba lite annorlunda på experimentstadiet. Man tar helt enkelt och hämtar hem en datamängd från källan och sparar denna lokalt. Under testandet så använder du sedan denna undansparade data istället för att hämta hem den gång på gång. Det duger ju gott med denna typ av lagrad data medan vi håller på att slå fast hur layout och liknande ska se ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Experimentdata ===&lt;br /&gt;
Vi hämtade ned lite experimentdata ifrån &amp;lt;code&amp;gt;http://data.karta.orebro.se/api/v1/layers/1?srs=EPSG:4326&amp;lt;/code&amp;gt;.  Därefter snyggade vi upp datan genom att köra den genom en [https://jsonformatter.curiousconcept.com/ JSON-formatterare]. Nu när vi ska börja att experimentera är det ju bra om vår data är så läsbar som möjligt. För koden spelar det ingen roll hur data är formaterad och det kommer inte att behövas göra några ändringar för detta.&lt;br /&gt;
&lt;br /&gt;
Vi kortade även ned datamängden så att enbart två kartpunkter är med. Det räcker för experimentsyfte och tar inte så mycket plats. Så här blev vår data att se ut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;type&amp;quot;:&amp;quot;FeatureCollection&amp;quot;,&lt;br /&gt;
   &amp;quot;features&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.253840371567572,&lt;br /&gt;
               59.277180434995095&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Alnängsbadet&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3089.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/1&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.74236626384993,&lt;br /&gt;
               59.1363775662748&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Dimbobaden&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3090.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/2&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denna data är i en specialversion av JSON som är till för just kartdata. Den kallas för [[GeoJSON]].&lt;br /&gt;
&lt;br /&gt;
Varje intressepunkt har två delar. Först kommer koordinaterna och sen information om intressepunkten. Vi kommer att bry oss i koordinaterna och &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; till att börja med.&lt;br /&gt;
&lt;br /&gt;
=== Leaflet och GeoJSON ===&lt;br /&gt;
Leaflet har inbyggt stöd för GeoJSON. Om vi använder oss av detta kommer vi att bespara oss själva en hel del arbete. Faktum är att Leaflet kan hantera vår datamängd i det närmaste helautomatiskt. Den kommer att plöja igenom datan och lägga ut den på kartan åt oss. Detta sker utan att vi behöver behandla datan eller skriva några loopar för att gå igenom den.&lt;br /&gt;
&lt;br /&gt;
Vi lägger datamängden i slutet av vår JavaScript-kod, så vi slipper att se den. Sen ska vi skapa lite kod som kan hantera vår [[GeoJSON]]-data. Så här kommer koden att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;LGWrjY&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;geoJson()&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den nya koden är alltså den där vi skapar ett &amp;lt;code&amp;gt;geoLayer&amp;lt;/code&amp;gt;. Detta kommer att bli ett lager som ligger ovanpå vår karta och som visar information som läses utifrån vår GeoJSON-data. Lagret skapas av metoden &amp;lt;code&amp;gt;L.geoJson()&amp;lt;/code&amp;gt;. Vi ska titta närmare på hur denna fungerar.&lt;br /&gt;
&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;-metoden antingen en enda post formaterad i GeoJSON eller en array med flera poster. I vårt fall har vi en array med GeoJSON-data, så vi skickar med den, dvs &amp;lt;code&amp;gt;geoData.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Som andra parameter skickar man med en lista som innehåller de stilparametrar som ska gälla för vår GeoJSON-data. Detta kan vara en lista med egenskaper som används för all data. Det kan även vara ett objekt som innehåller metoder som körs för att sätta specifik data för varje GeoJSON-objekt. I vårt fall har vi valt att skicka med metoder. Vi skulle även kunna lägga till stildata i objektet om vi ville det. Vi har valt att koppla en funktion till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt;. Denna funktion kommer att köras en gång för varje punkt som ingår i vår data. &lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den funktion vi skickar till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; tar två inparametrar. Den första är nuvarande geografiska data som behandlas. I vårt fall är det en intressepunkt. Den andra parametern anger vilket lager som denna &amp;quot;feature&amp;quot; ska läggas till i. I vårt fall binder vi en popup till varje datapunkt, popup-texten kommer att vara namnet på intressepunkten.&lt;br /&gt;
&lt;br /&gt;
Svårare än så är det inte att lägga in data som är formaterad i GeoJSON!&lt;br /&gt;
&lt;br /&gt;
== Att läsa in data från en datakälla ==&lt;br /&gt;
Nu när vår utritning fungerar är det dags att börja hämta data på &amp;quot;riktigt&amp;quot;. Det kommer vi att göra genom att använda oss av [[AJAX]]. Om du behöver uppfriska dina kunskaper i AJAX, titta på aktiviteten &amp;quot;[[jQuery och AJAX]]&amp;quot;.  Vi plockar bort vår testdata och lägger till en funktion som hämtar data. Så här blir det att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;qbrxBw&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1050&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det som är nytt är främst &amp;lt;code&amp;gt;hämtaIPLista&amp;lt;/code&amp;gt;. Denna kommer att läsa ut en lista som innehåller Örebros badplatser. När datan är hämtad kommer funktionen &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; att köras. Som inparameter får denna den data som lästs in. Denna data kan vi skicka in direkt i &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;, då den är precis lik den testdata som vi använde tidigare. Det är inget nytt i hur denna bit hanteras, koden är bara flyttad till en annan plats i programfilen.&lt;br /&gt;
&lt;br /&gt;
== Appen på riktigt ==&lt;br /&gt;
Om du vill se hur man skulle lagt upp appen på riktigt, det vill säga som fristående webbapplikation och inte som demo i Codepen, kan du gå till [http://exempel.webbling.se/Leaflet http://exempel.webbling.se/Leaflet].&lt;br /&gt;
&lt;br /&gt;
Skillnaderna är att vi delat upp app:en i tre filer. En för HTML, en för CSS och en för JavaScript. &lt;br /&gt;
&lt;br /&gt;
I HTML är skillnaden att det är med &amp;quot;grundstruktur&amp;quot; för sidan, sånt som inte behövs på Codepen. Det är även tillagt så att övriga app-delar laddas in. I CSS är inget ändrat.&lt;br /&gt;
&lt;br /&gt;
JavaScript-delen har hamnat i &amp;lt;code&amp;gt;app.js&amp;lt;/code&amp;gt;. Vår app-kod har inkapslats i en funktion. Denna funktion körs igång när allt är inladdat. Detta gör vi för att vara säkra på att alla metoder vi kommer att anropa är nedladdade och tillgängliga.&lt;br /&gt;
&lt;br /&gt;
== Avslutning ==&lt;br /&gt;
Nu har du en liten [[SPA]] som visar upp karta och data. Om du klickar på en intressepunkt i kartan bör du få upp en popup som talar om namnet på badplatsen . Återigen, det är inte alltför mycket kod som behövs för att hämta data dynamiskt och visa upp denna på en fullt användbar karta.&lt;br /&gt;
&lt;br /&gt;
Vi skulle lätt kunna ändra till att läsa in andra intressepunkter eller varför inte låta användaren välja vilka intressepunkter denne vill se? Det lämnar vi dock som en övning till läsare. Vi ska gå vidare och titta på hur man skapar applikationer som har en serverkomponent. Vi kommer att behöva detta för att kunna hämta vissa typer av data, t.ex. kräver många öppna data-källor att man har en [[API-nyckel]] för att kunna köra dem. Denna nyckel ska hållas hemlig, vilket är svårt eller omöjligt att göra om du kör en renodlad klientapp.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi ska gå igenom hur man skapar en till liten SPA.&lt;br /&gt;
&lt;br /&gt;
[[Ännu en SPA med Leaflet]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5047</id>
		<title>Lär dig mer om JavaScript</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5047"/>
		<updated>2021-10-23T11:13:15Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Här följer ett antal aktiviteter som kommer att lära dig mer om hur man programmerar i JavaScript.&lt;br /&gt;
== Nybörjarmaterial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till JavaScript]]&lt;br /&gt;
# [[Grunderna i JavaScript-programmering]]&lt;br /&gt;
# [[Att skriva läsbar kod]]&lt;br /&gt;
# [[Olika typer av fel som kan uppstå]]&lt;br /&gt;
# [[Variabler]]&lt;br /&gt;
# [[Villkorssatser]]&lt;br /&gt;
# [[Att jobba med sanningsvärden]]&lt;br /&gt;
# [[Loopar och slingor]]&lt;br /&gt;
#[[Komplexa variabler]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avancerat matererial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till asynkron programmering]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fortsättning ==&lt;br /&gt;
När du gått igenom ovanstående sektioner kan du fortsätta till dessa sektioner för att lära dig mer om hur man programmerar och skapar webbapplikationer med JavaScript.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Att_bygga_webbapplikationer_och_-tjänster|Att bygga webbapplikationer och -tjänster]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jQuery börjar bli lite föråldrat och används inte så mycket längre. Vi har dock en sektion som handlar om det. Den kommer inte att underhållas och uppdateras.&lt;br /&gt;
# [[Lär_dig_mer_om_jQuery|Lär dig mer om jQuery]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5046</id>
		<title>Lär dig mer om JavaScript</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=L%C3%A4r_dig_mer_om_JavaScript&amp;diff=5046"/>
		<updated>2021-10-23T11:12:57Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Här följer ett antal aktiviteter som kommer att lära dig mer om hur man programmerar i JavaScript.&lt;br /&gt;
== Nybörjarmaterial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till JavaScript]]&lt;br /&gt;
# [[Grunderna i JavaScript-programmering]]&lt;br /&gt;
# [[Att skriva läsbar kod]]&lt;br /&gt;
# [[Olika typer av fel som kan uppstå]]&lt;br /&gt;
# [[Variabler]]&lt;br /&gt;
# [[Villkorssatser]]&lt;br /&gt;
# [[Att jobba med sanningsvärden]]&lt;br /&gt;
# [[Loopar och slingor]]&lt;br /&gt;
#[[Komplexa variabler]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Avancerat matererial ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Introduktion till asynkron programmering]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fortsättning ==&lt;br /&gt;
När du gått igenom ovanstående sektioner kan du fortsätta till dessa sektioner för att lära dig mer om hur man programmerar och skapar webbapplikationer med JavaScript.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
# [[Att_bygga_webbapplikationer_och_-tjänster|Att bygga webbapplikationer och -tjänster]]&lt;br /&gt;
&amp;lt;/well&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jQuery börjar bli lite föråldrat och används inte så mycket längre. Vi har dock en sektion som handlar om det. Den kommer inte att underhållas och uppdateras.&lt;br /&gt;
# [[Lär_dig_mer_om_jQuery|Lär dig mer om jQuery]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5045</id>
		<title>En exempelapplikation i Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5045"/>
		<updated>2021-10-23T11:07:11Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska nu titta på hur man kan skapa en liten applikation baserad på Leaflet. Vi kommer att hämta data från [http://data.karta.orebro.se/ Örebros projekt] som tillhandahåller Öppen data. Här finns en hel del trevlig information att tillgå. Vi ska titta på hur man kan läsa ut intresseplatser i Örebros kommun och visa upp dessa på en karta. Även om du inte kommer ifrån Örebro, så är detta en intressant uppsättning av data som passar utmärkt att använda i demosyfte.  En fördel med Örebros data är att man supportar [[CORS]] och att det därför går att hämta ned data från klientbaserade webbapplikationer.&lt;br /&gt;
&lt;br /&gt;
Vi ska bygga upp vår applikation i steg. Vi kommer att utföra sakerna ungefär i den ordning och med det upplägg som man skulle haft om man gjort detta på &amp;quot;riktigt&amp;quot;. Förhoppningsvis blir det lättare att hänga med då.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Vi kommer att använda Codepen-exempel, då dessa ser bra ut och är lätta att lägga in i Webbling. Dock så vill man förstås skriva lite annorlunda om man gör en &amp;quot;riktig&amp;quot; applikation. I slutet kommer vi att länka till den färdiga applikationen, så som den kan köras fristående.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== En grund att stå på  ==&lt;br /&gt;
Vi börjar med att skapa en grundstruktur för vår sida.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
Det viktigaste vi behöver göra i HTML:en är att  lägga till [[jQuery]] och [[Leaflet]], då vi kommer att behöva dessa för vår app. HTML:en kan då bli att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns nog inget som förtjänar att kommenteras i den lilla HTML-snutten, då det i stort sett påminner om våra tidigare exempel.&lt;br /&gt;
&lt;br /&gt;
I följande exempel kommer vi att minimera HTML-koden på Codepen, så all kod kommer inte att vara med i HTML-editorn. Allt i föregående exempel behövs dock om du ska skapa applikationen som en fristående webbsajt.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
Vi lägger även till basal CSS:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I CSS:en så startar vi med en minimal reset som gör att vi  får ungefär samma grundutseende i alla webbläsare. Vi tar bort alla marginaler, all utfyllnad och ser till att vi använder oss av den &amp;quot;vettiga&amp;quot; boxmodellen.&lt;br /&gt;
&lt;br /&gt;
Då det är tänkt att det mesta i appen ska vara centrerat, så sätter vi att titeln i vår &amp;lt;code&amp;gt;[[hx | h1]]&amp;lt;/code&amp;gt; ska vara centrerad.&lt;br /&gt;
&lt;br /&gt;
Det intressantaste vi gör i CSS är det som återfinns i &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt;. Vi sätter höjden till &amp;lt;code&amp;gt;75vh&amp;lt;/code&amp;gt;. Det vill säga cirka 75 % av den skärmens höjd. Se &amp;quot;[[Måttenheter i CSS]]&amp;quot;, om du glömt hur dessa fungerar. Vi sätter samma proportioner även för bredden. Vi använder oss av &amp;lt;code&amp;gt;margin: 0 auto;&amp;lt;/code&amp;gt; för att centrera vår kart-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;. Slutligen sätter vi en kant runt om kartan.&lt;br /&gt;
&lt;br /&gt;
== Lägga till en karta på prov ==&lt;br /&gt;
För att se om kartan fungerar bra ska vi lägga till en testversion av kartan. Vi kör samma kod som i vårt tidigare exempel där vi visade en karta centrerad kring Soltorgsgymnasiet. Vi ändrar dock  koordinaterna så att kartan kommer att centreras kring Örebro.&lt;br /&gt;
&lt;br /&gt;
Koden blir att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;Qypaxd&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultatet ser ju helt acceptabelt ut och vi får automatisk den grundläggande navigerings-funktionalitet som man förväntar sig av en kartapplikation.&lt;br /&gt;
&lt;br /&gt;
== Första försök med att läsa in data ==&lt;br /&gt;
För att gå vidare behöver vi koppla data till vår karta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Eftersom många API:er har satt gränser för hur ofta man får läs in data ifrån dem, kan det vara en bra idé att jobba lite annorlunda på experimentstadiet. Man tar helt enkelt och hämtar hem en datamängd från källan och sparar denna lokalt. Under testandet så använder du sedan denna undansparade data istället för att hämta hem den gång på gång. Det duger ju gott med denna typ av lagrad data medan vi håller på att slå fast hur layout och liknande ska se ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Experimentdata ===&lt;br /&gt;
Vi hämtade ned lite experimentdata ifrån &amp;lt;code&amp;gt;http://data.karta.orebro.se/api/v1/layers/1?srs=EPSG:4326&amp;lt;/code&amp;gt;.  Därefter snyggade vi upp datan genom att köra den genom en [https://jsonformatter.curiousconcept.com/ JSON-formatterare]. Nu när vi ska börja att experimentera är det ju bra om vår data är så läsbar som möjligt. För koden spelar det ingen roll hur data är formaterad och det kommer inte att behövas göra några ändringar för detta.&lt;br /&gt;
&lt;br /&gt;
Vi kortade även ned datamängden så att enbart två kartpunkter är med. Det räcker för experimentsyfte och tar inte så mycket plats. Så här blev vår data att se ut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;type&amp;quot;:&amp;quot;FeatureCollection&amp;quot;,&lt;br /&gt;
   &amp;quot;features&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.253840371567572,&lt;br /&gt;
               59.277180434995095&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Alnängsbadet&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3089.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/1&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.74236626384993,&lt;br /&gt;
               59.1363775662748&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Dimbobaden&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3090.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/2&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denna data är i en specialversion av JSON som är till för just kartdata. Den kallas för [[GeoJSON]].&lt;br /&gt;
&lt;br /&gt;
Varje intressepunkt har två delar. Först kommer koordinaterna och sen information om intressepunkten. Vi kommer att bry oss i koordinaterna och &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; till att börja med.&lt;br /&gt;
&lt;br /&gt;
=== Leaflet och GeoJSON ===&lt;br /&gt;
Leaflet har inbyggt stöd för GeoJSON. Om vi använder oss av detta kommer vi att bespara oss själva en hel del arbete. Faktum är att Leaflet kan hantera vår datamängd i det närmaste helautomatiskt. Den kommer att plöja igenom datan och lägga ut den på kartan åt oss. Detta sker utan att vi behöver behandla datan eller skriva några loopar för att gå igenom den.&lt;br /&gt;
&lt;br /&gt;
Vi lägger datamängden i slutet av vår JavaScript-kod, så vi slipper att se den. Sen ska vi skapa lite kod som kan hantera vår [[GeoJSON]]-data. Så här kommer koden att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;LGWrjY&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;geoJson()&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den nya koden är alltså den där vi skapar ett &amp;lt;code&amp;gt;geoLayer&amp;lt;/code&amp;gt;. Detta kommer att bli ett lager som ligger ovanpå vår karta och som visar information som läses utifrån vår GeoJSON-data. Lagret skapas av metoden &amp;lt;code&amp;gt;L.geoJson()&amp;lt;/code&amp;gt;. Vi ska titta närmare på hur denna fungerar.&lt;br /&gt;
&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;-metoden antingen en enda post formaterad i GeoJSON eller en array med flera poster. I vårt fall har vi en array med GeoJSON-data, så vi skickar med den, dvs &amp;lt;code&amp;gt;geoData.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Som andra parameter skickar man med en lista som innehåller de stilparametrar som ska gälla för vår GeoJSON-data. Detta kan vara en lista med egenskaper som används för all data. Det kan även vara ett objekt som innehåller metoder som körs för att sätta specifik data för varje GeoJSON-objekt. I vårt fall har vi valt att skicka med metoder. Vi skulle även kunna lägga till stildata i objektet om vi ville det. Vi har valt att koppla en funktion till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt;. Denna funktion kommer att köras en gång för varje punkt som ingår i vår data. &lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den funktion vi skickar till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; tar två inparametrar. Den första är nuvarande geografiska data som behandlas. I vårt fall är det en intressepunkt. Den andra parametern anger vilket lager som denna &amp;quot;feature&amp;quot; ska läggas till i. I vårt fall binder vi en popup till varje datapunkt, popup-texten kommer att vara namnet på intressepunkten.&lt;br /&gt;
&lt;br /&gt;
Svårare än så är det inte att lägga in data som är formaterad i GeoJSON!&lt;br /&gt;
&lt;br /&gt;
== Att läsa in data från en datakälla ==&lt;br /&gt;
Nu när vår utritning fungerar är det dags att börja hämta data på &amp;quot;riktigt&amp;quot;. Det kommer vi att göra genom att använda oss av [[AJAX]]. Om du behöver uppfriska dina kunskaper i AJAX, titta på aktiviteten &amp;quot;[[jQuery och AJAX]]&amp;quot;.  Vi plockar bort vår testdata och lägger till en funktion som hämtar data. Så här blir det att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;qbrxBw&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1050&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det som är nytt är främst &amp;lt;code&amp;gt;hämtaIPLista&amp;lt;/code&amp;gt;. Denna kommer att läsa ut en lista som innehåller Örebros badplatser. När datan är hämtad kommer funktionen &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; att köras. Som inparameter får denna den data som lästs in. Denna data kan vi skicka in direkt i &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;, då den är precis lik den testdata som vi använde tidigare. Det är inget nytt i hur denna bit hanteras, koden är bara flyttad till en annan plats i programfilen.&lt;br /&gt;
&lt;br /&gt;
== Appen på riktigt ==&lt;br /&gt;
Om du vill se hur man skulle lagt upp appen på riktigt, det vill säga som fristående webbapplikation och inte som demo i Codepen, kan du gå till [http://exempel.webbling.se/Leaflet http://exempel.webbling.se/Leaflet].&lt;br /&gt;
&lt;br /&gt;
Skillnaderna är att vi delat upp app:en i tre filer. En för HTML, en för CSS och en för JavaScript. &lt;br /&gt;
&lt;br /&gt;
I HTML är skillnaden att det är med &amp;quot;grundstruktur&amp;quot; för sidan, sånt som inte behövs på Codepen. Det är även tillagt så att övriga app-delar laddas in. I CSS är inget ändrat.&lt;br /&gt;
&lt;br /&gt;
JavaScript-delen har hamnat i &amp;lt;code&amp;gt;app.js&amp;lt;/code&amp;gt;. Vår app-kod har inkapslats i en funktion. Denna funktion körs igång när allt är inladdat. Detta gör vi för att vara säkra på att alla metoder vi kommer att anropa är nedladdade och tillgängliga.&lt;br /&gt;
&lt;br /&gt;
== Avslutning ==&lt;br /&gt;
Nu har du en liten [[SPA]] som visar upp karta och data. Om du klickar på en intressepunkt i kartan bör du få upp en popup som talar om namnet på badplatsen . Återigen, det är inte alltför mycket kod som behövs för att hämta data dynamiskt och visa upp denna på en fullt användbar karta.&lt;br /&gt;
&lt;br /&gt;
Vi skulle lätt kunna ändra till att läsa in andra intressepunkter eller varför inte låta användaren välja vilka intressepunkter denne vill se? Det lämnar vi dock som en övning till läsare. Vi ska gå vidare och titta på hur man skapar applikationer som har en serverkomponent. Vi kommer att behöva detta för att kunna hämta vissa typer av data, t.ex. kräver många öppna data-källor att man har en [[API-nyckel]] för att kunna köra dem. Denna nyckel ska hållas hemlig, vilket är svårt eller omöjligt att göra om du kör en renodlad klientapp.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi ska gå igenom hur man skapar en till liten SPA.&lt;br /&gt;
&lt;br /&gt;
[[Ännu en SPA med Leaflet]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5044</id>
		<title>Att komma igång med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5044"/>
		<updated>2021-10-23T10:53:50Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Leaflet är öppen källkod och utvecklas med hjälp av ett community. Det fungerar bra tillsammans med alla vanligt förekommande webbläsare, såväl på skrivbordet som på mobila enheter. Det finns många olika plugins till biblioteket som kan användas för att lägga till ytterligare funktionalitet. På det hela taget är det enkelt att jobba med Leaflet.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till Leaflet ==&lt;br /&gt;
Precis som var fallet med jQuery, går det att använda en [[CDN]] för att lägga till Leaflet i en sida. Vi kommer att använda den metoden, då den är enklast och mest flexibelt.  Tyvärr har inte huvud-CDN:en på https://cdn.leafletjs.com/ ett korrekt certifikat och det går därmed inte att köra HTTPS mot den. Det vill vi gärna göra, så därför har vi valt en annan CDN som tillhandahåller biblioteket via HTTPS.&lt;br /&gt;
&lt;br /&gt;
För att lägga till Leaflet behöver vi inkludera två filer - dels en CSS-fil, dels en JavaScript-fil. CSS-filen lägger vi till i vår sidas &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;. Följande kommer att ta ner nuvarande version av Leaflet. Kolla alltid deras webbsajt för att se om det kommit en nyare version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://unpkg.com/leaflet@1.7.1/dist/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detta är grundinställningar för den CSS som Leaflet behöver. Dessa CSS-regler kommer antagligen inte att störa den CSS som du själv lagt till sidan. Men du kan ju vara uppmärksam på om det händer något oväntat i din sida när du lägger till denna rad.&lt;br /&gt;
&lt;br /&gt;
Därefter lägger vi till själva JavaScript-biblioteket. Man lägger oftast till detta någonstans i slutet av sidan, t.ex. strax före &amp;lt;code&amp;gt;&amp;amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/leaflet@1.7.1/dist/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Med dessa två rader på plats kan vi skapa ett exempel.&lt;br /&gt;
&lt;br /&gt;
== Leaflet-exempel ==&lt;br /&gt;
Låt säga att vi skulle vilja se var Soltorgsgymnasiet i Borlänge ligger. Då kunde vi göra som i följande exempel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;adJmEj&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Som vanligt, kom ihåg att även titta på &amp;quot;Result&amp;quot;-fliken.)&lt;br /&gt;
&lt;br /&gt;
Låt oss gå igenom exempelet och se vad de olika delarna gör för något.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
I HTML-koden började vi med att lägga till CDN-hämtningarna som föreser oss med Leaflet. Förutom detta så har vi skapat en tom &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt; som fått ID:n &amp;lt;code&amp;gt;karta&amp;lt;/code&amp;gt;. Här kommer vi att visa upp vår karta.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
I CSS:en har vi inte gjort så mycket mer än att ge en storlek till den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; som ska innehålla kartan. Viktigast är höjden, bredden kommer att sättas till 100 % om vi inte anger något annat. Anger vi ingen höjd kommer vår karta inte att synas. Detta är på grund av att &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en är helt tom och därmed får sin höjd satt till &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
I JavaScript-delen har vi gjort lite mer. Vi tar och går igenom detta i mer detalj.&lt;br /&gt;
&lt;br /&gt;
==== Initiering av Leaflet ====&lt;br /&gt;
På den första raden skapar vi en karta och ställer vi in grunderna för den. Leaflet registreas som &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; när vi lägger till det. De flesta metoder som vi vill kalla på ligger alltså samlade i &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;-objektet (detta går att jämföra med hur jQuery registrerar sig i &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; skapar en ny kartregion Som inparameter tar den ID:t för den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där kartan ska visas. Därefter talar vi om vilka koordinater som vi är intresserade av genom att anropa metoden &amp;lt;code&amp;gt;setView&amp;lt;/code&amp;gt;. Som inparameterar tar denna en array med koordinaterna, först latitud och sen longitud. Vår karta kommer att centreras kring den angivna koordinaten. Den sista parametern anger vilken zoomfaktor som kartan ska visas upp med, desto högre tal desto längre inzoomade är vi.&lt;br /&gt;
&lt;br /&gt;
==== Inställningar för datakälla ====&lt;br /&gt;
Vi måste nu ange varifrån all kartdata ska hämtas. Vi kommer att använda oss av Open Street Map.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== HTTPS eller ej ====&lt;br /&gt;
Det är diskutabelt huruvida kartdatan verkligen kan vara integritetskränkande och behövs hålla hemlig, men vi kommer ändå att hämta materialet via HTTPS. Främst för att detta kommer att undvika att vi får de &amp;quot;mixed content&amp;quot;-varningar som uppstår när man blandar HTTP- och HTTPS-objekt i en och samma sida. Att inte kryptera kartdatat skulle vara marginellt snabbare, men det är nog ingenting man behöver bry sig i, speciellt inte på klientsidan. På servern kommer det självklart att bli något högre last när alla kartsegment måste krypteras innan de skickas ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Kart-tiles ====&lt;br /&gt;
Med &amp;lt;code&amp;gt;tileLayer&amp;lt;/code&amp;gt; anger vi dels att kartan vi ska hämta består av karttiles. Där tiles betyder mosaikbitar. Det vill säga, det är småbitar som bygger upp en större helhet och kartan kommer att laddas in som ett flertal mindre grafikfiler. Dessa komibineras och visas bredvid varandra och på så vis byggs den kompletta kartvyn upp. När vi skrollar runt i kartan så laddas enbart de nya tiles som behövs för att täcka den inskrollade arean. Dessa läggs intill redan befintliga tiles och gör vår kartvy komplett igen. Om vi skrollar tillbaka kommer de tiles som redan är nedladdade att användas. Zoomar vi in eller ut, måste förstås nya karttiles laddas in.&lt;br /&gt;
&lt;br /&gt;
Hanteringen av karttiles gör att vi minimerar hur mycket data som måste hämtas när användaren skrollar runt i kartan. Denna teknik för karthämtning på webben uppfanns av Google när de skapade sin karttjänst Google Maps. Så gott som alla webbaserade karttjänster använder sig av liknande metoder.&lt;br /&gt;
&lt;br /&gt;
==== Att ange datakälla ====&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;tileLayers&amp;lt;/code&amp;gt; en länk till den server som kommer att tillhandahålla den behövlig kartdata. Därefter följer ett objekt som innehåller de inställningar som ska gälla för källan. I vårt exempel anger vi varifrån data hämtas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Kom ihåg att ett av kraven som ställdes för att få utnyttja Open Street Map i en applikation var att man angav vilken källa data hämtades ifrån. Det är alltså viktigt att ha med denna information, speciellt i applikationer som vi ska &amp;quot;visa&amp;quot; upp för världen.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Koppla data till vy ====&lt;br /&gt;
När vi skapat ett objekt som kan tillhandahålla oss med kartdata måste vi även länka detta till vår kartvy. Detta gör vi med det chainade metodanropet &amp;lt;code&amp;gt;addTo&amp;lt;/code&amp;gt;. Som inparameter tar denna metod det objekt som vi fick tillbaka när vi körde &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;-metoden. Det vill säga det objekt som innehåller information om vår kartvy.&lt;br /&gt;
&lt;br /&gt;
== Vår första karta ==&lt;br /&gt;
Om du klickar på &amp;quot;Resultat&amp;quot; bör du nu se vår första karta! Förutom att kartan visas upp, så har man automatiskt fått med en del finesser. Man kan panorera genom att dra runt kartan. Man kan zooma, antingen med &amp;quot;+/-&amp;quot;-knapparna eller via musens skrollhjul. I det nedre hörnet finns information om vad som används för att skapa/visa kartan - dvs Open Street Map och Leaflet. Länken till Open Street Map är nödvändig för att uppfylla användningsvillkoren för Open Street Maps. Så kom alltid ihåg att ha något liknande med!&lt;br /&gt;
&lt;br /&gt;
== Kombination av våra geografiska exempel ==&lt;br /&gt;
Man skulle förstås kunna kombinera vårt nuvarande exempel med det som vi gjorde tidigare i &amp;quot;[[Att ta reda på var någon befinner sig]]&amp;quot;-aktiviteten. Ett sådant exempel skulle kunna tänkas se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;pgeWKx&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1300&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns väl inte mycket att tillägga angående vad koden gör. I stort sett är allt det samma som i våra tidigare exempel, förutom att istället för att visa upp koordinatvärdena så drar vi istället upp en karta som centreras kring den punkt där webbläsaren anger att vi befinner oss. &lt;br /&gt;
&lt;br /&gt;
Här kan det bli mer uppenbart om positionen är ett närmevärde. Prova gärna att köra exemplet både på din dator och på en mobil enhet som har GPS. Det borde märkas en väsentlig skillnad i precision på positionsangivelsen.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
I nästa aktivitet ska vi titta på hur man kan lägga ut diverse typer av extrainformation i kartor, vilket kan behövas om vi ska skapa appar som är baserade kring kartor och geografisk data.&lt;br /&gt;
&lt;br /&gt;
[[Att lägga till extra data med Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_skapa_interaktivitet_med_Leaflet&amp;diff=5043</id>
		<title>Att skapa interaktivitet med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_skapa_interaktivitet_med_Leaflet&amp;diff=5043"/>
		<updated>2021-10-23T10:51:16Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi får ju redan i grunden en del automatisk interaktivitet när vi använder oss av Leaflet. Användaren kan panorera och zooma runt i kartan. Vi ska nu titta på hur man kan lägga till mer saker som gör att användaren kan interagera med kartan.&lt;br /&gt;
&lt;br /&gt;
== Popups ==&lt;br /&gt;
Popups är ett bra sätt att visa upp extra information som gäller för intressepunkter på kartan. Det finns bra stöd i Leaflet för detta och det är mycket enkelt att koppla popups till objekt som lagts till på kartan. Popup triggas igång och visas när användaren klickar på det objekt till vilket popup:en är kopplad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Man kan bara ha en popup framme samtidigt. Om en popup redan är öppen och användaren klickar på en ny popup, så kommer den första popup:en att stängas ned. Om vi klickar en gång till på samma objekt ifrån vilket det öppnades en popup, så kommer den kopplade popup:en att stängas ned. Likaså försvinner popup:er även om vi klickar utanför det kopplade objektet, oavsett om en ny popup triggas igång eller ej. Självklart kan användaren även klicka på det lilla krysset i popup:en för att stänga denna.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exempel ===&lt;br /&gt;
Vi utgår ifrån det sista exemplet i förra aktiviteten. Där ritade vi ut en polygon kring Soltorgsgymnasiet. Vi ska nu göra så att en popup med information dyker upp när vi klickar på polygonen. Det gör vi så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;pgedqJ&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;650&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;bindPopup&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Vi behöver ha en instansvariabel som pekar på det kartobjekt som vi vill koppla vår popup till. I vårt exempel har vi  sparat undan vårt objekt i &amp;lt;code&amp;gt;polygon&amp;lt;/code&amp;gt;. I detta objekt finns en metod som heter &amp;lt;code&amp;gt;bindPopup&amp;lt;/code&amp;gt; med vilken vi kan koppla till popup-funktionalitet.&lt;br /&gt;
&lt;br /&gt;
I den enklaste varianten tar &amp;lt;code&amp;gt;bindPopup&amp;lt;/code&amp;gt; en sträng som input. Strängen innehåller det som ska visas när användaren klickar. Strängens innehåll kommer att tolkas som HTML-kod. Vi kan alltså använda så gott som alla HTML-taggar här och på så vis bygga upp en relativt snygg popup. Vi skulle även kunna skicka med ett redan existerande HTML-element och då skulle detta visas i popup:en.&lt;br /&gt;
&lt;br /&gt;
Vanligtvis utgår popup:ens position ifrån den punkt där användaren klickade. Det går även att ange på vilken latitud och longitud som popup:en ska hamna. Dessa anges då som sista parametrar till metoden, t.ex.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
polygon.bindPopup(&amp;quot;Hej&amp;quot;, &amp;lt;latitud&amp;gt;, &amp;lt;longitud&amp;gt;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denna variant kan vara bra att använda om du alltid vill att popup:en ska placeras på en likformig plats, oavsett vilken position som användaren klickar på. En orsak till att göra detta kan vara att man vill undvika att popup:en täcker viss information på kartan.&lt;br /&gt;
&lt;br /&gt;
== Händelser ==&lt;br /&gt;
Vi kan även koppla så att kod körs när diverse händelser inträffar. I stort sett fungerar detta som händelser vanligtvis gör när vi kodar mot webbläsaren. Händelsehanterare fungerar på liknande vis som i [[jQuery]]  och man använder en &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;-metod för att koppla ihop dem. Det finns flera olika händelsetyper. Några av dessa är unika för för vissa typer av kartobjekt, medan andra är universiella för alla typer av kartobjekt. Vi kan inte täcka alla varianter här, så kolla gärna på [http://leafletjs.com/reference.html Leflets dokumentation] för att i detalj se vilka händelser som är tillgängliga för de olika objekttyperna.&lt;br /&gt;
&lt;br /&gt;
==== Klickhändelser ====&lt;br /&gt;
Vi ska titta på hur man kan lägga till en händelse som triggas när användaren klickar på ett kartobjekt.&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;gPmoYE&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;875&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den viktigaste kodraden är den där vi kopplar händelsen till vår händelsehanterarande funktion, dvs &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;. Vi kan använda denna metod på de flesta typer av Leaflet-objekt. Precis som i fallet med [[jQuery]] tar metoden händelsetypen som första parameter. Den andra parametern är den funktion som vi vill ska triggas igång när händelsen inträffar. &lt;br /&gt;
&lt;br /&gt;
Vår funktion &amp;lt;code&amp;gt;klickade&amp;lt;/code&amp;gt; kommer alltså att köras när användaren klickar i vår polygon. I den kollar vi först vilken färg vår polygon har för tillfället. Vi kan komma åt alla utseende-inställningarna via &amp;lt;code&amp;gt;options&amp;lt;/code&amp;gt;. I vårt fall vill vi alltså ta fram färgen, vilken vi kommer åt med &amp;lt;code&amp;gt;options.color&amp;lt;/code&amp;gt;. Om denna är satt till gul, vilket den är från starten, ändrar vi den till röd. Metoden &amp;lt;code&amp;gt;setStyle&amp;lt;/code&amp;gt; möjliggör alltså att vi kan gå in och redigera ett objekts utseende efter det att det har skapats. Dess inparameter är ett objekt som innehåller alla de inställningar vi vill förändra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Lägg märke till att om du klickar flera gånger och råkar klicka för &amp;quot;fort&amp;quot;, kommer dina klick inte att tas som en klickhändelse. Istället ses det som ett dubbelklick. Då körs förstås inte vår händelse-hanterare.&lt;br /&gt;
&lt;br /&gt;
Så som exemplet ser ut nu, tar Leaflet ett dubbelklick som en zoom-gest.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
I nästa aktivitet ska vi gå igenom ett litet fylligare Leaflet-exempel.&lt;br /&gt;
&lt;br /&gt;
[[En exempelapplikation i Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5042</id>
		<title>Att komma igång med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5042"/>
		<updated>2021-10-23T10:36:24Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Leaflet är öppen källkod och utvecklas med hjälp av ett community. Det fungerar bra tillsammans med alla vanligt förekommande webbläsare, såväl på skrivbordet som på mobila enheter. Det finns många olika plugins till biblioteket som kan användas för att lägga till ytterligare funktionalitet. På det hela taget är det enkelt att jobba med Leaflet.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till Leaflet ==&lt;br /&gt;
Precis som var fallet med jQuery, går det att använda en [[CDN]] för att lägga till Leaflet i en sida. Vi kommer att använda den metoden, då den är enklast och mest flexibelt.  Tyvärr har inte huvud-CDN:en på https://cdn.leafletjs.com/ ett korrekt certifikat och det går därmed inte att köra HTTPS mot den. Det vill vi gärna göra, så därför har vi valt en annan CDN som tillhandahåller biblioteket via HTTPS.&lt;br /&gt;
&lt;br /&gt;
För att lägga till Leaflet behöver vi inkludera två filer - dels en CSS-fil, dels en JavaScript-fil. CSS-filen lägger vi till i vår sidas &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;. Följande kommer att ta ner nuvarande version av Leaflet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://unpkg.com/leaflet@1.7.1/dist/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detta är grundinställningar för den CSS som Leaflet behöver. Dessa CSS-regler kommer antagligen inte att störa den CSS som du själv lagt till sidan. Men du kan ju vara uppmärksam på om det händer något oväntat i din sida när du lägger till denna rad.&lt;br /&gt;
&lt;br /&gt;
Därefter lägger vi till själva JavaScript-biblioteket. Man lägger oftast till detta någonstans i slutet av sidan, t.ex. strax före &amp;lt;code&amp;gt;&amp;amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/leaflet@1.7.1/dist/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Med dessa två rader på plats kan vi skapa ett exempel.&lt;br /&gt;
&lt;br /&gt;
== Leaflet-exempel ==&lt;br /&gt;
Låt säga att vi skulle vilja se var Soltorgsgymnasiet i Borlänge ligger. Då kunde vi göra som i följande exempel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;adJmEj&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Som vanligt, kom ihåg att även titta på &amp;quot;Result&amp;quot;-fliken.)&lt;br /&gt;
&lt;br /&gt;
Låt oss gå igenom exempelet och se vad de olika delarna gör för något.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
I HTML-koden började vi med att lägga till CDN-hämtningarna som föreser oss med Leaflet. Förutom detta så har vi skapat en tom &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt; som fått ID:n &amp;lt;code&amp;gt;karta&amp;lt;/code&amp;gt;. Här kommer vi att visa upp vår karta.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
I CSS:en har vi inte gjort så mycket mer än att ge en storlek till den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; som ska innehålla kartan. Viktigast är höjden, bredden kommer att sättas till 100 % om vi inte anger något annat. Anger vi ingen höjd kommer vår karta inte att synas. Detta är på grund av att &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en är helt tom och därmed får sin höjd satt till &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
I JavaScript-delen har vi gjort lite mer. Vi tar och går igenom detta i mer detalj.&lt;br /&gt;
&lt;br /&gt;
==== Initiering av Leaflet ====&lt;br /&gt;
På den första raden skapar vi en karta och ställer vi in grunderna för den. Leaflet registreas som &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; när vi lägger till det. De flesta metoder som vi vill kalla på ligger alltså samlade i &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;-objektet (detta går att jämföra med hur jQuery registrerar sig i &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; skapar en ny kartregion Som inparameter tar den ID:t för den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där kartan ska visas. Därefter talar vi om vilka koordinater som vi är intresserade av genom att anropa metoden &amp;lt;code&amp;gt;setView&amp;lt;/code&amp;gt;. Som inparameterar tar denna en array med koordinaterna, först latitud och sen longitud. Vår karta kommer att centreras kring den angivna koordinaten. Den sista parametern anger vilken zoomfaktor som kartan ska visas upp med, desto högre tal desto längre inzoomade är vi.&lt;br /&gt;
&lt;br /&gt;
==== Inställningar för datakälla ====&lt;br /&gt;
Vi måste nu ange varifrån all kartdata ska hämtas. Vi kommer att använda oss av Open Street Map.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== HTTPS eller ej ====&lt;br /&gt;
Det är diskutabelt huruvida kartdatan verkligen kan vara integritetskränkande och behövs hålla hemlig, men vi kommer ändå att hämta materialet via HTTPS. Främst för att detta kommer att undvika att vi får de &amp;quot;mixed content&amp;quot;-varningar som uppstår när man blandar HTTP- och HTTPS-objekt i en och samma sida. Att inte kryptera kartdatat skulle vara marginellt snabbare, men det är nog ingenting man behöver bry sig i, speciellt inte på klientsidan. På servern kommer det självklart att bli något högre last när alla kartsegment måste krypteras innan de skickas ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Kart-tiles ====&lt;br /&gt;
Med &amp;lt;code&amp;gt;tileLayer&amp;lt;/code&amp;gt; anger vi dels att kartan vi ska hämta består av karttiles. Där tiles betyder mosaikbitar. Det vill säga, det är småbitar som bygger upp en större helhet och kartan kommer att laddas in som ett flertal mindre grafikfiler. Dessa komibineras och visas bredvid varandra och på så vis byggs den kompletta kartvyn upp. När vi skrollar runt i kartan så laddas enbart de nya tiles som behövs för att täcka den inskrollade arean. Dessa läggs intill redan befintliga tiles och gör vår kartvy komplett igen. Om vi skrollar tillbaka kommer de tiles som redan är nedladdade att användas. Zoomar vi in eller ut, måste förstås nya karttiles laddas in.&lt;br /&gt;
&lt;br /&gt;
Hanteringen av karttiles gör att vi minimerar hur mycket data som måste hämtas när användaren skrollar runt i kartan. Denna teknik för karthämtning på webben uppfanns av Google när de skapade sin karttjänst Google Maps. Så gott som alla webbaserade karttjänster använder sig av liknande metoder.&lt;br /&gt;
&lt;br /&gt;
==== Att ange datakälla ====&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;tileLayers&amp;lt;/code&amp;gt; en länk till den server som kommer att tillhandahålla den behövlig kartdata. Därefter följer ett objekt som innehåller de inställningar som ska gälla för källan. I vårt exempel anger vi varifrån data hämtas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Kom ihåg att ett av kraven som ställdes för att få utnyttja Open Street Map i en applikation var att man angav vilken källa data hämtades ifrån. Det är alltså viktigt att ha med denna information, speciellt i applikationer som vi ska &amp;quot;visa&amp;quot; upp för världen.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Koppla data till vy ====&lt;br /&gt;
När vi skapat ett objekt som kan tillhandahålla oss med kartdata måste vi även länka detta till vår kartvy. Detta gör vi med det chainade metodanropet &amp;lt;code&amp;gt;addTo&amp;lt;/code&amp;gt;. Som inparameter tar denna metod det objekt som vi fick tillbaka när vi körde &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;-metoden. Det vill säga det objekt som innehåller information om vår kartvy.&lt;br /&gt;
&lt;br /&gt;
== Vår första karta ==&lt;br /&gt;
Om du klickar på &amp;quot;Resultat&amp;quot; bör du nu se vår första karta! Förutom att kartan visas upp, så har man automatiskt fått med en del finesser. Man kan panorera genom att dra runt kartan. Man kan zooma, antingen med &amp;quot;+/-&amp;quot;-knapparna eller via musens skrollhjul. I det nedre hörnet finns information om vad som används för att skapa/visa kartan - dvs Open Street Map och Leaflet. Länken till Open Street Map är nödvändig för att uppfylla användningsvillkoren för Open Street Maps. Så kom alltid ihåg att ha något liknande med!&lt;br /&gt;
&lt;br /&gt;
== Kombination av våra geografiska exempel ==&lt;br /&gt;
Man skulle förstås kunna kombinera vårt nuvarande exempel med det som vi gjorde tidigare i &amp;quot;[[Att ta reda på var någon befinner sig]]&amp;quot;-aktiviteten. Ett sådant exempel skulle kunna tänkas se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;pgeWKx&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1300&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns väl inte mycket att tillägga angående vad koden gör. I stort sett är allt det samma som i våra tidigare exempel, förutom att istället för att visa upp koordinatvärdena så drar vi istället upp en karta som centreras kring den punkt där webbläsaren anger att vi befinner oss. &lt;br /&gt;
&lt;br /&gt;
Här kan det bli mer uppenbart om positionen är ett närmevärde. Prova gärna att köra exemplet både på din dator och på en mobil enhet som har GPS. Det borde märkas en väsentlig skillnad i precision på positionsangivelsen.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
I nästa aktivitet ska vi titta på hur man kan lägga ut diverse typer av extrainformation i kartor, vilket kan behövas om vi ska skapa appar som är baserade kring kartor och geografisk data.&lt;br /&gt;
&lt;br /&gt;
[[Att lägga till extra data med Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5041</id>
		<title>Att komma igång med Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_komma_ig%C3%A5ng_med_Leaflet&amp;diff=5041"/>
		<updated>2021-10-23T10:30:31Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Leaflet är öppen källkod och utvecklas med hjälp av ett community. Det fungerar bra tillsammans med alla vanligt förekommande webbläsare, såväl på skrivbordet som på mobila enheter. Det finns många olika plugins till biblioteket som kan användas för att lägga till ytterligare funktionalitet. På det hela taget är det enkelt att jobba med Leaflet.&lt;br /&gt;
&lt;br /&gt;
== Att lägga till Leaflet ==&lt;br /&gt;
Precis som var fallet med jQuery, går det att använda en [[CDN]] för att lägga till Leaflet i en sida. Vi kommer att använda den metoden, då den är enklast och mest flexibelt.  Tyvärr har inte huvud-CDN:en på https://cdn.leafletjs.com/ ett korrekt certifikat och det går därmed inte att köra HTTPS mot den. Det vill vi gärna göra, så därför har vi valt en annan CDN som tillhandahåller biblioteket via HTTPS.&lt;br /&gt;
&lt;br /&gt;
För att lägga till Leaflet behöver vi inkludera två filer - dels en CSS-fil, dels en JavaScript-fil. CSS-filen lägger vi till i vår sidas &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;. Följande kommer att ta ner nuvarande version av Leaflet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://unpkg.com/leaflet@1.7.1/dist/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detta är grundinställningar för den CSS som Leaflet behöver. Dessa CSS-regler kommer antagligen inte att störa den CSS som du själv lagt till sidan. Men du kan ju vara uppmärksam på om det händer något oväntat i din sida när du lägger till denna rad.&lt;br /&gt;
&lt;br /&gt;
Därefter lägger vi till själva JavaScript-biblioteket. Man lägger oftast till detta någonstans i slutet av sidan, t.ex. strax före &amp;lt;code&amp;gt;&amp;amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/leaflet@1.7.1/dist/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Med dessa två rader på plats kan vi skapa ett exempel.&lt;br /&gt;
&lt;br /&gt;
== Leaflet-exempel ==&lt;br /&gt;
Låt säga att vi skulle vilja se var Soltorgsgymnasiet i Borlänge ligger. Då kunde vi göra som i följande exempel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;adJmEj&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Som vanligt, kom ihåg att även titta på &amp;quot;Result&amp;quot;-fliken.)&lt;br /&gt;
&lt;br /&gt;
Låt oss gå igenom exempelet och se vad de olika delarna gör för något.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
I HTML-koden började vi med att lägga till CDN-hämtningarna som föreser oss med Leaflet. Förutom detta så har vi skapat en tom &amp;lt;code&amp;gt;[[div]]&amp;lt;/code&amp;gt; som fått ID:n &amp;lt;code&amp;gt;karta&amp;lt;/code&amp;gt;. Här kommer vi att visa upp vår karta.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
I CSS:en har vi inte gjort så mycket mer än att ge en storlek till den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; som ska innehålla kartan. Viktigast är höjden, bredden kommer att sättas till 100 % om vi inte anger något annat. Anger vi ingen höjd kommer vår karta inte att synas. Detta är på grund av att &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;:en är helt tom och därmed får sin höjd satt till &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
I JavaScript-delen har vi gjort lite mer. Vi tar och går igenom detta i mer detalj.&lt;br /&gt;
&lt;br /&gt;
==== Initiering av Leaflet ====&lt;br /&gt;
På den första raden skapar vi en karta och ställer vi in grunderna för den. Leaflet registreas som &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; när vi lägger till det. De flesta metoder som vi vill kalla på ligger alltså samlade i &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;-objektet (detta går att jämföra med hur jQuery registrerar sig i &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; skapar en ny kartregion Som inparameter tar den ID:t för den &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; där kartan ska visas. Därefter talar vi om vilka koordinater som vi är intresserade av genom att anropa metoden &amp;lt;code&amp;gt;setView&amp;lt;/code&amp;gt;. Som inparameterar tar denna en array med koordinaterna, först latitud och sen longitud. Vår karta kommer att centreras kring den angivna koordinaten. Den sista parametern anger vilken zoomfaktor som kartan ska visas upp med, desto högre tal desto längre inzoomade är vi.&lt;br /&gt;
&lt;br /&gt;
==== Inställningar för datakälla ====&lt;br /&gt;
Vi måste nu ange varifrån all kartdata ska hämtas. Vi kommer att använda oss av Open Street Map.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== HTTPS eller ej ====&lt;br /&gt;
Det är diskutabelt huruvida kartdatan verkligen kan vara integritetskränkande och behövs hålla hemlig, men vi kommer ändå att hämta materialet via HTTPS. Främst för att detta kommer att undvika att vi får de &amp;quot;mixed content&amp;quot;-varningar som uppstår när man blandar HTTP- och HTTPS-objekt i en och samma sida. Att inte kryptera kartdatat skulle vara marginellt snabbare, men det är nog ingenting man behöver bry sig i, speciellt inte på klientsidan. På servern kommer det självklart att bli något högre last när alla kartsegment måste krypteras innan de skickas ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Kart-tiles ====&lt;br /&gt;
Med &amp;lt;code&amp;gt;tileLayer&amp;lt;/code&amp;gt; anger vi dels att kartan vi ska hämta består av karttiles. Där tiles betyder mosaikbitar. Det vill säga, det är småbitar som bygger upp en större helhet och kartan kommer att laddas in som ett flertal mindre grafikfiler. Dessa komibineras och visas bredvid varandra och på så vis byggs den kompletta kartvyn upp. När vi skrollar runt i kartan så laddas enbart de nya tiles som behövs för att täcka den inskrollade arean. Dessa läggs intill redan befintliga tiles och gör vår kartvy komplett igen. Om vi skrollar tillbaka kommer de tiles som redan är nedladdade att användas. Zoomar vi in eller ut, måste förstås nya karttiles laddas in.&lt;br /&gt;
&lt;br /&gt;
Hanteringen av karttiles gör att vi minimerar hur mycket data som måste hämtas när användaren skrollar runt i kartan. Denna teknik för karthämtning på webben uppfanns av Google när de skapade sin karttjänst Google Maps. Så gott som alla webbaserade karttjänster använder sig av liknande metoder.&lt;br /&gt;
&lt;br /&gt;
==== Att ange datakälla ====&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;tileLayers&amp;lt;/code&amp;gt; en länk till den server som kommer att tillhandahålla den behövlig kartdata. Därefter följer ett objekt som innehåller de inställningar som ska gälla för källan. I vårt exempel anger vi varifrån data hämtas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Kom ihåg att ett av kraven som ställdes för att få utnyttja Open Street Map i en applikation var att man angav vilken källa data hämtades ifrån. Det är alltså viktigt att ha med denna information, speciellt i applikationer som vi ska &amp;quot;visa&amp;quot; upp för världen.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Koppla data till vy ====&lt;br /&gt;
När vi skapat ett objekt som kan tillhandahålla oss med kartdata måste vi även länka detta till vår kartvy. Detta gör vi med det chainade metodanropet &amp;lt;code&amp;gt;addTo&amp;lt;/code&amp;gt;. Som inparameter tar denna metod det objekt som vi fick tillbaka när vi körde &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;-metoden. Det vill säga det objekt som innehåller information om vår kartvy.&lt;br /&gt;
&lt;br /&gt;
== Vår första karta ==&lt;br /&gt;
Om du klickar på &amp;quot;Resultat&amp;quot; bör du nu se vår första karta! Förutom att kartan visas upp, så har man automatiskt fått med en del finesser. Man kan panorera genom att dra runt kartan. Man kan zooma, antingen med &amp;quot;+/-&amp;quot;-knapparna eller via musens skrollhjul. I det nedre hörnet finns information om vad som används för att skapa/visa kartan - dvs Open Street Map och Leaflet. Länken till Open Street Map är nödvändig för att uppfylla användningsvillkoren för Open Street Maps. Så kom alltid ihåg att ha något liknande med!&lt;br /&gt;
&lt;br /&gt;
== Kombination av våra geografiska exempel ==&lt;br /&gt;
Man skulle förstås kunna kombinera vårt nuvarande exempel med det som vi gjorde tidigare i &amp;quot;[[Att ta reda på var någon befinner sig]]&amp;quot;-aktiviteten. Ett sådant exempel skulle kunna tänkas se ut så här:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;pgeWKx&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1300&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns väl inte mycket att tillägga angående vad koden gör. I stort sett är allt det samma som i våra tidigare exempel, förutom att istället för att visa upp koordinatvärdena så drar vi istället upp en karta som centreras kring den punkt där webbläsaren anger att vi befinner oss. &lt;br /&gt;
&lt;br /&gt;
Här kan det bli mer uppenbart om positionen är ett närmevärde. Prova gärna att köra exemplet både på din dator och på en mobil enhet som har GPS. Det borde märkas en väsentlig skillnad i precision på positionsangivelsen.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
I nästa aktivitet ska vi titta på hur man kan lägga ut diverse typer av extrainformation i kartor, vilket kan behövas om vi ska skapa appar som är baserade kring kartor och geografisk data.&lt;br /&gt;
&lt;br /&gt;
[[Att lägga till extra data med Leaflet]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Att_ta_reda_p%C3%A5_var_n%C3%A5gon_befinner_sig&amp;diff=5040</id>
		<title>Att ta reda på var någon befinner sig</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Att_ta_reda_p%C3%A5_var_n%C3%A5gon_befinner_sig&amp;diff=5040"/>
		<updated>2021-10-23T10:28:46Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Innan vi tar oss an att visa upp saker på en karta, ska vi börja med att se hur man kan läsa ut var användaren befinner sig. I HTML5 finns ett geolokations-API som gör så man kan läsa ut positionsdata. Noggrannheten kan skilja sig lite åt, beroende på om applikationen körs på en enhet som har GPS eller ej.&lt;br /&gt;
== Begränsningar ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Eftersom det kan vara integritetskränkande att spåra människor, kommer webbläsaren att be om användarens godkännande innan den levererar positionskoordinater till en applikation. Tackar användaren nej, kommer funktionsanropet att misslyckas.  Det finns en speciell felkod som används när detta inträffar.&lt;br /&gt;
&lt;br /&gt;
De flesta webbläsare tillåter inte positionsspårning via [[HTTP]]. I dessa fall är denna funktionalitet enbart tillgänglig för script som hämtats via [[HTTPS]]. Försök att alltid använda dig av HTTPS för applikationer som behöver ta del av platsinformation. Överföringsmetoden kan alltså förorsaka att funktionsanrop till geolokations-API:et fallerar.&lt;br /&gt;
&lt;br /&gt;
När man använder platsinformation, kan det även spela roll var scriptet ligger. I de flesta fall tillåter inte webbläsarna att man anropar script som ligger på en annan domän. Exemplen här på Webbling går oftast inte att köra utan att följa länken till CodePen. Det beror på att webbläsarna inte tillåter att scriptet och webbsidan ligger på olika domänen. &lt;br /&gt;
&lt;br /&gt;
Det kan alltså vara en bra idé att ha kod som hanterar situationer där tillgång till positionsinformationen nekas. Överhuvudtaget ska man förstås &#039;&#039;alltid&#039;&#039; ha robust felhantering i sina applikationer.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exempel ==&lt;br /&gt;
För att komma igång, så kör vi ett exempel på en enkel platsförfrågan (det kan vara som så att du måste följa länken &amp;quot;Edit on CodePen&amp;quot; för att exemplet ska fungera fullt ut):&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;vLxLZw&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1050&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Genomgång av kodexemplet ===&lt;br /&gt;
==== Finns API:et? ====&lt;br /&gt;
Koden börjar med att det kolla om API:et är tillgängligt i användarens webbläsare. Om så inte är fallet så visar vi ett felmeddelande. Det kan alltid vara en bra idé att kolla så att de API:er vi tänker använda oss av är tillgängliga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Det finns många orsaker till att ett API skulle kunna saknas. Användaren kanske har en gammal webbläsare eller kanske kör denne en specialanpassad webbläsare – t.ex. någon typ av [[screenreader]]. Försök att hantera avsaknaden av API:er och eventuella fel så smidigt som möjligt. Om du fortfarande kan erbjuda användaren vettig information och viss funktionalitet, se till att göra det.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Begär positionsangivelse ====&lt;br /&gt;
Om API:et är tillgängligt så kallar vi på en av dess metoder; &amp;lt;code&amp;gt;geolocation.getCurrentPosition&amp;lt;/code&amp;gt;.  Om denna hittar positionen,  körs &amp;lt;code&amp;gt;VisaPosition&amp;lt;/code&amp;gt;. I annat fall har något gått fel och den kör istället &amp;lt;code&amp;gt;Felhanterare&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Det finns några till API-anrop som går att göra med &amp;lt;code&amp;gt;geolocation&amp;lt;/code&amp;gt;. Dessa används när man vill ha kontinuerlig uppdatering av användarens position. Vi återkommer till dem i slutet av aktiviteten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Det kan vara intressant att veta att &amp;lt;code&amp;gt;getCurrentPosition&amp;lt;/code&amp;gt; är en asynkron funktion. Vår kod kommer alltså att fortsätta ”direkt”, utan att vänta på ett resultat. På grund av detta skickar man med så kallade [[callback]]-funktioner. Dessa utförs när &amp;lt;code&amp;gt;getCurrentPosition&amp;lt;/code&amp;gt; har något att rapportera. Se [[Introduktion till asynkron programmering]] för mer information.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;VisaPosition&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Funktionen &amp;lt;code&amp;gt;VisaPosition&amp;lt;/code&amp;gt; hanterar avklarade positionsförfrågningar. Som inparameter får vi ett objekt som innehåller resultatet ifrån positionsförfrågningen.&lt;br /&gt;
&lt;br /&gt;
===== Positionsobjekt =====&lt;br /&gt;
Objektet innehåller följande data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variabelnamn&lt;br /&gt;
! Förklaring&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;latitude&amp;lt;/code&amp;gt;&lt;br /&gt;
|Latitud&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;longitude&amp;lt;/code&amp;gt;&lt;br /&gt;
|Longitud&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;altitude&amp;lt;/code&amp;gt;&lt;br /&gt;
|Höjd över havet eller &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;accuracy&amp;lt;/code&amp;gt;&lt;br /&gt;
|Mätningens noggranhet i meter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;altitudeAccuracy&amp;lt;/code&amp;gt;&lt;br /&gt;
|Höjdmätningens noggranhet i meter eller &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;heading&amp;lt;/code&amp;gt;&lt;br /&gt;
|Färdriktning&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt;&lt;br /&gt;
|Hastighet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Om höjden inte kan bestämmas så sätts både &amp;lt;code&amp;gt;altitude&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;altitudeAccuracy&amp;lt;/code&amp;gt; till &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;. Det samma gäller för &amp;lt;code&amp;gt;heading&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt;. Dessa värden är oftast bara tillgängliga om applikationen körs på en enhet som har en GPS-mottagare – som en telefon eller surfplatta.&lt;br /&gt;
&lt;br /&gt;
Om ovanstående data är tillgängliga så kan man alltså läsa ut i vilken riktning som användaren förflyttar sig med hjälp av &amp;lt;code&amp;gt;heading&amp;lt;/code&amp;gt;. Detta värde anges i antal grader motsols räknat från norr. Det innebär att &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; är rakt mot norr och &amp;lt;code&amp;gt;180&amp;lt;/code&amp;gt; är rakt söder ut. Om vi kan läsa ut &amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt; så är detta användarens hastighet mätt i m/s. Om enheten inte är i rörelse så är detta värde satt till &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;Felhantering&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Felhanteringen är rätt så enkel och basal. Det finns ett antal fördefinierade felkoder som vi jämför med och kollar om någon matchar det fel vi fick. Om ingen matchar körs &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
I en verklig app, hade vi antagligen gjort mycket mer om saker gått åt pipan. Men här räcker det med detta lilla.&lt;br /&gt;
&lt;br /&gt;
== Kontinuerlig uppdatering av positionen ==&lt;br /&gt;
Förutom &amp;lt;code&amp;gt;getCurrentPosition&amp;lt;/code&amp;gt; finns det ett par andra metoder att tillgå i &amp;lt;code&amp;gt;geolocation&amp;lt;/code&amp;gt;. Dessa används när man vill ha kontinuerliga uppdateringar av användarens position.&lt;br /&gt;
=== &amp;lt;code&amp;gt;watchPosition&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;watchPosition&amp;lt;/code&amp;gt; fungerar i stort sett som &amp;lt;code&amp;gt;getCurrentPosition&amp;lt;/code&amp;gt;, med den skillnaden att den fortsätter att uppdatera positionen kontinuerligt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
let id = geolocation.watchPosition( &amp;lt;lyckad&amp;gt;, &amp;lt;fel&amp;gt; );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Varje gång en position läses in körs callback-funktionerna. Om allt går väl och en position erhålles, körs funktionen &amp;lt;code&amp;gt;&#039;&#039;lyckad&#039;&#039;&amp;lt;/code&amp;gt;. Vid eventuellt fel så körs &amp;lt;code&amp;gt;&#039;&#039;fel&#039;&#039;&amp;lt;/code&amp;gt;. Båda funktionerna kan alltså anropas upprepade gånger.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; används för att kunna slå av positionskontrollen.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;clearWatch&amp;lt;/code&amp;gt; ===&lt;br /&gt;
När man inte längre vill att positionen ska uppdateras automatiskt slår man av den med &amp;lt;code&amp;gt;clearWatch&amp;lt;/code&amp;gt;. Denna används enligt följande mall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
geolocation.clearWatch( id );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detta slår av den positionskontroll som identifieras av &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Nu har vi lite kunskap om hur man kan hantera GPS-liknande funktionalitet i webbläsaren. Nu ska vi se om vi kan få ut dessa data på en karta. &lt;br /&gt;
&lt;br /&gt;
[[Att visa upp en karta]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=Screenreader&amp;diff=5039</id>
		<title>Screenreader</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=Screenreader&amp;diff=5039"/>
		<updated>2021-10-23T10:19:48Z</updated>

		<summary type="html">&lt;p&gt;PGJ: Skapade sidan med &amp;#039;En screenreader är en typ av webbläsare som främst används av synskadade. Den läser upp webbsidan, så att det går att surfa även om man inte kan se innehållet på sid...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En screenreader är en typ av webbläsare som främst används av synskadade. Den läser upp webbsidan, så att det går att surfa även om man inte kan se innehållet på sidan.&lt;br /&gt;
&lt;br /&gt;
Screenreaders läser inte upp hela sidan rakt av. Istället försöker den läsa de relevanta bitarna och låter därefter användaren bestämma vilka delar av sidan som ska läsas upp härnäst. Det gör det snabbare och effektivare att komma åt det innehåll som lockar.&lt;br /&gt;
&lt;br /&gt;
Det är viktigt att sidan har en korrekt struktur och att alla taggar används på ett korrekt semantiskt vis. Alla bilder ska ha &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt;-taggar så att inte viktig information går förlorad. Att göra sina sidor tillgängliga för alla är ett viktigt jobb. I olika typer av verksamhet, kommunala och statliga, krävs att sidorna ska vara tillgängliga.&lt;br /&gt;
&lt;br /&gt;
Installera gärna en screenreader på din dator så att du kan testa dina sidor med denna. Här är en vanligt förekommande screenreader du kan testa: [https://www.freedomscientific.com/products/software/jaws/ Jaws - Job Access With Speech]&lt;br /&gt;
&lt;br /&gt;
Här är några exempel på hur en screenreader används:&lt;br /&gt;
* [https://www.youtube.com/watch?v=dEbl5jvLKGQ Screen Reader Demo for Digital Accessibility]&lt;br /&gt;
* [https://www.youtube.com/watch?v=7Rs3YpsnfoILink Using a Screen Reader]&lt;br /&gt;
* [https://www.youtube.com/watch?v=q_ATY9gimOM Screen Reader Demo]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
	<entry>
		<id>https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5038</id>
		<title>En exempelapplikation i Leaflet</title>
		<link rel="alternate" type="text/html" href="https://webbling.se/index.php?title=En_exempelapplikation_i_Leaflet&amp;diff=5038"/>
		<updated>2021-10-23T09:59:18Z</updated>

		<summary type="html">&lt;p&gt;PGJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vi ska nu titta på hur man kan skapa en liten applikation baserad på Leaflet. Vi kommer att hämta data från [http://data.karta.orebro.se/ Örebros projekt] som tillhandahåller Öppen data. Här finns en hel del trevlig information att tillgå. Vi ska titta på hur man kan läsa ut intresseplatser i Örebros kommun och visa upp dessa på en karta. Även om du inte kommer ifrån Örebro, så är detta en intressant uppsättning av data som passar utmärkt att använda i demosyfte.  En fördel med Örebros data är att man supportar [[CORS]] och att det därför går att hämta ned data från klientbaserade webbapplikationer.&lt;br /&gt;
&lt;br /&gt;
Vi ska bygga upp vår applikation i steg. Vi kommer att utföra sakerna ungefär i den ordning och med det upplägg som man skulle haft om man gjort detta på &amp;quot;riktigt&amp;quot;. Förhoppningsvis blir det lättare att hänga med då.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-warning&amp;quot;&amp;gt;&lt;br /&gt;
Vi kommer att använda Codepen-exempel, då dessa ser bra ut och är lätta att lägga in i Webbling. Dock så vill man förstås skriva lite annorlunda om man gör en &amp;quot;riktig&amp;quot; applikation. I slutet kommer vi att länka till den färdiga applikationen, så som den kan köras fristående.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== En grund att stå på  ==&lt;br /&gt;
Vi börjar med att skapa en grundstruktur för vår sida.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
Det viktigaste vi behöver göra i HTML:en är att  lägga till [[jQuery]] och [[Leaflet]], då vi kommer att behöva dessa för vår app. HTML:en kan då bli att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;html&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det finns nog inget som förtjänar att kommenteras i den lilla HTML-snutten, då det i stort sett påminner om våra tidigare exempel.&lt;br /&gt;
&lt;br /&gt;
=== CSS ===&lt;br /&gt;
Vi lägger även till basal CSS:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;xZqpXz&amp;quot; tab=&amp;quot;css,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I CSS:en så startar vi med en minimal reset som gör att vi  får ungefär samma grundutseende i alla webbläsare. Vi tar bort alla marginaler, all utfyllnad och ser till att vi använder oss av den &amp;quot;vettiga&amp;quot; boxmodellen.&lt;br /&gt;
&lt;br /&gt;
Då det är tänkt att det mesta i appen ska vara centrerat, så sätter vi att titeln i vår &amp;lt;code&amp;gt;[[hx | h1]]&amp;lt;/code&amp;gt; ska vara centrerad.&lt;br /&gt;
&lt;br /&gt;
Det intressantaste vi gör i CSS är det som återfinns i &amp;lt;code&amp;gt;#karta&amp;lt;/code&amp;gt;. Vi sätter höjden till &amp;lt;code&amp;gt;75vh&amp;lt;/code&amp;gt;. Det vill säga cirka 75 % av den skärmens höjd. Se &amp;quot;[[Måttenheter i CSS]]&amp;quot;, om du glömt hur dessa fungerar. Vi sätter samma proportioner även för bredden. Vi använder oss av &amp;lt;code&amp;gt;margin: 0 auto;&amp;lt;/code&amp;gt; för att centrera vår kart-&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;. Slutligen sätter vi en kant runt om kartan.&lt;br /&gt;
&lt;br /&gt;
== Lägga till en karta på prov ==&lt;br /&gt;
För att se om kartan fungerar bra ska vi lägga till en testversion av kartan. Vi kör samma kod som i vårt tidigare exempel där vi visade en karta centrerad kring Soltorgsgymnasiet. Vi ändrar dock  koordinaterna så att kartan kommer att centreras kring Örebro.&lt;br /&gt;
&lt;br /&gt;
Koden blir att se ut så här:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;Qypaxd&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultatet ser ju helt acceptabelt ut och vi får automatisk den grundläggande navigerings-funktionalitet som man förväntar sig av en kartapplikation.&lt;br /&gt;
&lt;br /&gt;
== Första försök med att läsa in data ==&lt;br /&gt;
För att gå vidare behöver vi koppla data till vår karta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;well well-meadow&amp;quot;&amp;gt;&lt;br /&gt;
Eftersom många API:er har satt gränser för hur ofta man får läs in data ifrån dem, kan det vara en bra idé att jobba lite annorlunda på experimentstadiet. Man tar helt enkelt och hämtar hem en datamängd från källan och sparar denna lokalt. Under testandet så använder du sedan denna undansparade data istället för att hämta hem den gång på gång. Det duger ju gott med denna typ av lagrad data medan vi håller på att slå fast hur layout och liknande ska se ut.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Experimentdata ===&lt;br /&gt;
Vi hämtade ned lite experimentdata ifrån &amp;lt;code&amp;gt;http://data.karta.orebro.se/api/v1/layers/1?srs=EPSG:4326&amp;lt;/code&amp;gt;.  Därefter snyggade vi upp datan genom att köra den genom en [https://jsonformatter.curiousconcept.com/ JSON-formatterare]. Nu när vi ska börja att experimentera är det ju bra om vår data är så läsbar som möjligt. För koden spelar det ingen roll hur data är formaterad och det kommer inte att behövas göra några ändringar för detta.&lt;br /&gt;
&lt;br /&gt;
Vi kortade även ned datamängden så att enbart två kartpunkter är med. Det räcker för experimentsyfte och tar inte så mycket plats. Så här blev vår data att se ut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;type&amp;quot;:&amp;quot;FeatureCollection&amp;quot;,&lt;br /&gt;
   &amp;quot;features&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.253840371567572,&lt;br /&gt;
               59.277180434995095&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Alnängsbadet&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3089.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/1&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;type&amp;quot;:&amp;quot;Feature&amp;quot;,&lt;br /&gt;
         &amp;quot;geometry&amp;quot;:{&lt;br /&gt;
            &amp;quot;type&amp;quot;:&amp;quot;Point&amp;quot;,&lt;br /&gt;
            &amp;quot;coordinates&amp;quot;:[&lt;br /&gt;
               15.74236626384993,&lt;br /&gt;
               59.1363775662748&lt;br /&gt;
            ]&lt;br /&gt;
         },&lt;br /&gt;
         &amp;quot;properties&amp;quot;:{&lt;br /&gt;
            &amp;quot;title&amp;quot;:&amp;quot;Dimbobaden&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;:&amp;quot;http://www.orebro.se/3090.html&amp;quot;,&lt;br /&gt;
            &amp;quot;rel&amp;quot;:&amp;quot;http://karta2.orebro.se/api/v1/information/2&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denna data är i en specialversion av JSON som är till för just kartdata. Den kallas för [[GeoJSON]].&lt;br /&gt;
&lt;br /&gt;
Varje intressepunkt har två delar. Först kommer koordinaterna och sen information om intressepunkten. Vi kommer att bry oss i koordinaterna och &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; till att börja med.&lt;br /&gt;
&lt;br /&gt;
=== Leaflet och GeoJSON ===&lt;br /&gt;
Leaflet har inbyggt stöd för GeoJSON. Om vi använder oss av detta kommer vi att bespara oss själva en hel del arbete. Faktum är att Leaflet kan hantera vår datamängd i det närmaste helautomatiskt. Den kommer att plöja igenom datan och lägga ut den på kartan åt oss. Detta sker utan att vi behöver behandla datan eller skriva några loopar för att gå igenom den.&lt;br /&gt;
&lt;br /&gt;
Vi lägger datamängden i slutet av vår JavaScript-kod, så vi slipper att se den. Sen ska vi skapa lite kod som kan hantera vår [[GeoJSON]]-data. Så här kommer koden att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;LGWrjY&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1500&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;geoJson()&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den nya koden är alltså den där vi skapar ett &amp;lt;code&amp;gt;geoLayer&amp;lt;/code&amp;gt;. Detta kommer att bli ett lager som ligger ovanpå vår karta och som visar information som läses utifrån vår GeoJSON-data. Lagret skapas av metoden &amp;lt;code&amp;gt;L.geoJson()&amp;lt;/code&amp;gt;. Vi ska titta närmare på hur denna fungerar.&lt;br /&gt;
&lt;br /&gt;
Som första inparameter tar &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;-metoden antingen en enda post formaterad i GeoJSON eller en array med flera poster. I vårt fall har vi en array med GeoJSON-data, så vi skickar med den, dvs &amp;lt;code&amp;gt;geoData.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Som andra parameter skickar man med en lista som innehåller de stilparametrar som ska gälla för vår GeoJSON-data. Detta kan vara en lista med egenskaper som används för all data. Det kan även vara ett objekt som innehåller metoder som körs för att sätta specifik data för varje GeoJSON-objekt. I vårt fall har vi valt att skicka med metoder. Vi skulle även kunna lägga till stildata i objektet om vi ville det. Vi har valt att koppla en funktion till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt;. Denna funktion kommer att köras en gång för varje punkt som ingår i vår data. &lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; ====&lt;br /&gt;
Den funktion vi skickar till &amp;lt;code&amp;gt;onEachFeature&amp;lt;/code&amp;gt; tar två inparametrar. Den första är nuvarande geografiska data som behandlas. I vårt fall är det en intressepunkt. Den andra parametern anger vilket lager som denna &amp;quot;feature&amp;quot; ska läggas till i. I vårt fall binder vi en popup till varje datapunkt, popup-texten kommer att vara namnet på intressepunkten.&lt;br /&gt;
&lt;br /&gt;
Svårare än så är det inte att lägga in data som är formaterad i GeoJSON!&lt;br /&gt;
&lt;br /&gt;
== Att läsa in data från en datakälla ==&lt;br /&gt;
Nu när vår utritning fungerar är det dags att börja hämta data på &amp;quot;riktigt&amp;quot;. Det kommer vi att göra genom att använda oss av [[AJAX]]. Om du behöver uppfriska dina kunskaper i AJAX, titta på aktiviteten &amp;quot;[[jQuery och AJAX]]&amp;quot;.  Vi plockar bort vår testdata och lägger till en funktion som hämtar data. Så här blir det att se ut:&lt;br /&gt;
&amp;lt;codepen pen=&amp;quot;qbrxBw&amp;quot; tab=&amp;quot;js,result&amp;quot; height=&amp;quot;1050&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/codepen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det som är nytt är främst &amp;lt;code&amp;gt;hämtaIPLista&amp;lt;/code&amp;gt;. Denna kommer att läsa ut en lista som innehåller Örebros badplatser. När datan är hämtad kommer funktionen &amp;lt;code&amp;gt;AjaxKlar&amp;lt;/code&amp;gt; att köras. Som inparameter får denna den data som lästs in. Denna data kan vi skicka in direkt i &amp;lt;code&amp;gt;geoJson&amp;lt;/code&amp;gt;, då den är precis lik den testdata som vi använde tidigare. Det är inget nytt i hur denna bit hanteras, koden är bara flyttad till en annan plats i programfilen.&lt;br /&gt;
&lt;br /&gt;
== Appen på riktigt ==&lt;br /&gt;
Om du vill se hur man skulle lagt upp appen på riktigt, det vill säga som fristående webbapplikation och inte som demo i Codepen, kan du gå till [http://exempel.webbling.se/Leaflet http://exempel.webbling.se/Leaflet].&lt;br /&gt;
&lt;br /&gt;
Skillnaderna är att vi delat upp app:en i tre filer. En för HTML, en för CSS och en för JavaScript. &lt;br /&gt;
&lt;br /&gt;
I HTML är skillnaden att det är med &amp;quot;grundstruktur&amp;quot; för sidan, sånt som inte behövs på Codepen. Det är även tillagt så att övriga app-delar laddas in. I CSS är inget ändrat.&lt;br /&gt;
&lt;br /&gt;
JavaScript-delen har hamnat i &amp;lt;code&amp;gt;app.js&amp;lt;/code&amp;gt;. Vår app-kod har inkapslats i en funktion. Denna funktion körs igång när allt är inladdat. Detta gör vi för att vara säkra på att alla metoder vi kommer att anropa är nedladdade och tillgängliga.&lt;br /&gt;
&lt;br /&gt;
== Avslutning ==&lt;br /&gt;
Nu har du en liten [[SPA]] som visar upp karta och data. Om du klickar på en intressepunkt i kartan bör du få upp en popup som talar om namnet på badplatsen . Återigen, det är inte alltför mycket kod som behövs för att hämta data dynamiskt och visa upp denna på en fullt användbar karta.&lt;br /&gt;
&lt;br /&gt;
Vi skulle lätt kunna ändra till att läsa in andra intressepunkter eller varför inte låta användaren välja vilka intressepunkter denne vill se? Det lämnar vi dock som en övning till läsare. Vi ska gå vidare och titta på hur man skapar applikationer som har en serverkomponent. Vi kommer att behöva detta för att kunna hämta vissa typer av data, t.ex. kräver många öppna data-källor att man har en [[API-nyckel]] för att kunna köra dem. Denna nyckel ska hållas hemlig, vilket är svårt eller omöjligt att göra om du kör en renodlad klientapp.&lt;br /&gt;
&lt;br /&gt;
== Nästa aktivitet ==&lt;br /&gt;
Vi ska gå igenom hur man skapar en till liten SPA.&lt;br /&gt;
&lt;br /&gt;
[[Ännu en SPA med Leaflet]]&lt;br /&gt;
&lt;br /&gt;
[[Category: jQuery]]&lt;br /&gt;
[[Category: JavaScript]]&lt;/div&gt;</summary>
		<author><name>PGJ</name></author>
	</entry>
</feed>