<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>

<title>Magiske piksler</title>
<link>https://www.magiskepiksler.com</link>
<description>Magiske piksler feed</description>
<atom:link href="https://www.magiskepiksler.com/rss.xml" rel="self" type="application/rss+xml" />




<item>
     <title>Veien til detaljrike og responsive bilder som laster raskt</title>
     <link>https://www.magiskepiksler.com/innlegg/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html</link>
     <guid>https://www.magiskepiksler.com/innlegg/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html</guid>
     <description><![CDATA[<p>La oss si at vi har et fotografi som inngår i en artikkel som publiseres på nett. Da er det er viktig at fotografiet ser eksemplarisk ut, uavhengig av hvilken enhet brukerne benytter til å lese artikkelen.</p>
<p>I denne artikkelen går jeg gjennom hvilken HTML- og CSS-kode du må skrive for å oppnå både <em>detaljrike</em> og <em>responsive bilder</em>, som i tillegg <em>laster raskt</em>. Artikkelen er delt inn i følgende steg: </p>
<ul>
<li><a href="#legg-inn-bildet">Legg inn bildet</a>, og unngå at layouten hopper når bildet lastes.</li>
<li><a href="#gj%C3%B8r-bildet-responsivt">Gjør bildet responsivt</a>, så det tilpasses ulike skjermstørrelser.</li>
<li><a href="#legg-til-en-versjon-med-h%C3%B8y-oppl%C3%B8sning">Legg til en versjon med høy oppløsning</a>, så bildet ser ekstra skarpt ut på gode skjermer.</li>
<li><a href="#lever-ulike-bilder-til-ulike-oppl%C3%B8sninger">Lever ulike bilder til ulike oppløsninger</a>, for å frem detaljene selv på små skjermer.</li>
<li><a href="#reduser-bildets-filst%C3%B8rrelse">Reduser bildets filstørrelse</a>, så det laster raskt.</li>
<li><a href="#v%C3%A6r-trygg-p%C3%A5-nettleserst%C3%B8tte">Vær trygg på nettleserstøtte</a>, for å unngå ubehagelige overraskelser.</li>
</ul>
<p>Du kan også hoppe rett til <a href="#oppsummering">oppsummeringen</a>, for å få en kortfattet oversikt.</p>
<p>Det er laget en egen <a href="/eksempler/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html" target="_blank" rel="noopener">side med eksempler</a> som du kan følge mens du leser artikkelen.</p>
<hr>
<h2 id="legg-inn-bildet">Legg inn bildet</h2>
<p>I denne artikkelen vil vi bruke et fotografi tatt av <a href="https://unsplash.com/@timromanov">Timur Romanov</a>, hentet fra <a href="https://unsplash.com/">Unsplash</a>.</p>
<figure>

<img src="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/horse_540.jpg" srcset="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/horse_1080.jpg 2x" alt="Et bilde av en hest som spiser gress" width="540" height="360">
<figcaption>Dette bildet vil vi bruke som et eksempel gjennom hele artikkelen.</figcaption>

</figure>


<p>Første steg er å sette inn bildet ved å bruke <a href="https://developer.mozilla.org/en-us/docs/Web/HTML/Element/img"><code>&lt;img&gt;</code></a>-elementet. For å gjøre eksempelet enklere, sier vi at dette bildet er dekorativt, og setter den alternative teksten til en tom streng.</p>
<p>Siden vi kommer til å jobbe med det samme bildet i flere størrelser, legger jeg til bildebredden i piksler (1080) som en del av filnavnet.</p>
<pre><code>&lt;img src=&quot;horse_1080.jpg&quot; alt=&quot;&quot;&gt;
</code></pre>
<p><a href="/eksempler/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html#eksempel-1" class="blocklink" target="_blank" rel="noopener">Eksempel 1</a></p>
<p>Kodesnutten ovenfor er enkel, og antageligvis velkjent, men den har en svakhet. Når bildet lastes ned, vil du oppleve at <a href="https://web.dev/optimize-cls/">nettsidens layout hopper</a>.</p>
<figure>

<img src="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/layout-hopp.svg" width="240" height="240" alt="En animasjon som visualiserer at nettsidens layout hopper når bildet lastes.">

<figcaption>Layouten hopper når bildet lastes.</figcaption>

</figure>


<p>Nettleseren kjenner til bildets dimensjoner først <em>etter at det er lastet ned</em>. og vil frem til da ikke kunne reservere plass til det. </p>
<p>For å unngå dette, kan du angi bildets dimensjoner ved å legge til attributtene <code>width</code> og <code>height</code>. Da vet nettleseren på forhånd hvor stort bildet er, og reserverer nødvendig plass.</p>
<pre><code>&lt;img src=&quot;horse_1080.jpg&quot; width=&quot;1080&quot; height=&quot;720&quot; alt=&quot;&quot;&gt;
</code></pre>
<p><a href="/eksempler/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html#eksempel-2" class="blocklink" class="blocklink" target="_blank" rel="noopener">Eksempel 2</a></p>
<hr>
<h2 id="gjør-bildet-responsivt">Gjør bildet responsivt</h2>
<p>Akkurat nå har bildet en fast bredde. Vi ønsker at bildet skal være responsivt, og krympe dersom nettleserbredden er <em>smalere</em> enn den opprinnelige bildestørrelsen. </p>
<p>Vi løser dette ved å legge til CSS-deklarasjonen <code>max-width: 100%;</code>, som forteller at bildet ikke skal ta opp mer horisontal plass enn det som til enhver tid er tilgjengelig.</p>
<p>Vi må også legge til <code>height: auto;</code>, for at bildet skal bevare sine proporsjoner når bredden reduseres. Dette gjør vi for å <em>overstyre</em> den høyden vi satte i sted ved hjelp av <code>height</code>-attributtet. </p>
<pre><code>img {
  max-width: 100%; 
  height: auto;
}
</code></pre>
<p>Denne kodesnutten med CSS sørger for at bildet blir responsivt, men introduserer samtidig det problemet vi hadde tidligere: Layouten hopper når bildet lastes, fordi <code>height: auto;</code> overstyrer <code>height=&quot;720&quot;</code> når nettleserbredden er smalere enn bildets opprinnelige bredde. </p>
<p class="p-info">
Les artikkelen <a href="https://www.smashingmagazine.com/2020/03/setting-height-width-images-important-again/">Setting Height And Width On Images Is Important Again</a> for å få en mer utfyllende forklaring på hva som skjer her. 
</p>


<p>For å unngå at layouten hopper i disse tilfellene, kan vi benytte den <a href="https://web.dev/aspect-ratio/">relativt ferske</a> CSS-egenskapen <a href="https://developer.mozilla.org/en-us/docs/Web/CSS/aspect-ratio"><code>aspect-ratio</code></a> for å angi <em>størrelsesforholdet</em> mellom bildets bredde og høyde. Da klarer nettleseren å beregne hvor stor vertikal plass bildet kommer til å oppta, selv før bildefilen er lastet.  </p>
<pre><code>img {
  max-width: 100%; 
  height: auto;
  aspect-ratio: 3 / 2; 
}
</code></pre>
<p><a href="/eksempler/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html#eksempel-3" class="blocklink" target="_blank" rel="noopener">Eksempel 3</a></p>
<p class="p-info">
<a href="https://developer.mozilla.org/en-US/docs/Web/Media/images/aspect_ratio_mapping">Moderne nettlesere kalkulerer aspect-ratio automatisk</a>, dersom attributtene height og width er satt.
</p>



<hr>
<h2 id="legg-til-en-versjon-med-høy-oppløsning">Legg til en versjon med høy oppløsning</h2>
<p>CSS-pikselen (<code>px</code>) er en <a href="https://www.w3.org/TR/css-values-3/#absolute-lengths">absolutt enhet</a> som er forankret i en fysisk størrelse. Om du leser en skjerm på en armlengdes avstand, er <code>1px</code> definert til å være omtrent 0,26 millimeter (1/96 tomme).</p>
<p>Høyoppløselige skjermer består av fysiske piksler som er vesentlig mindre enn dette. En mobiltelefon har gjerne en oppløsning bestående av <code>1440x2560</code> fysiske piksler, som tilsvarer <code>360x640</code> CSS-piksler. Skjermen viser altså 16 (<code>4x4</code>) piksler for hver CSS-piksel du forholder deg til i nettleseren. </p>
<p class="p-info">
  Les mer om <a href="https://hacks.mozilla.org/2013/09/css-length-explained/">CSS-piksler, pikseltetthet og fysiske størrelser</a>.
</p>

<figure>

<img src="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/retina.jpg" width="540" height="360" alt="Illustrasjon som visualiserer forskjellen mellom ordinære og høyoppløselige bilder.">

<figcaption>Bildet til høyre ser vesentlig skapere ut enn det til venstre.</figcaption>

</figure>

<p>Vi ønsker å utnytte hver eneste fysiske skjermpiksel til høyoppløselige skjermer, slik at bildene fremstår som <em>ekstra skarpe</em>. </p>
<p>HTML-attributten <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/srcset"><code>srcset</code></a>, som legges til <code>&lt;img&gt;</code>-elementet, lar deg angi <em>alternative bildefiler</em>. Du angir adressen til en bildefil og et (frivillig) kriterium som gir et hint om når denne bildefilen skal brukes. Det er mulig å angi flere bildefiler i samme <code>srcset</code>-attributt, separert av komma.</p>
<p>I vårt tilfelle legger vi til <code>srcset=&quot;horse_2160.jpg 2x&quot;</code>, som forteller at <code>horse_2160.jpg</code> har dobbel så høy pikseltetthet som det opprinnelige bildet. Nettleseren vil da automatisk velge å benytte den bildefilen som samsvarer best med skjermens fysiske oppløsning.</p>
<pre><code>&lt;img src=&quot;horse_1080.jpg&quot; srcset=&quot;horse_2160.jpg 2x&quot; 
  width=&quot;1080&quot; height=&quot;720&quot; alt=&quot;&quot;&gt;
</code></pre>
<p><a href="/eksempler/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html#eksempel-4" class="blocklink" target="_blank" rel="noopener">Eksempel 4</a></p>
<p class="p-info">
  Det er støtte for andre kriterier enn pikseltetthet (x) i srcset. Bredde (w) kan også brukes, gjerne i tospann med <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/sizes">sizes-attributtet</a>.
</p>



<hr>
<h2 id="lever-ulike-bilder-til-ulike-oppløsninger">Lever ulike bilder til ulike oppløsninger</h2>
<p>Vi har tidligere valgt at bildet skal være responsivt og tilpasses etter nettleserbredden. Dette fører naturlig nok til at bildet blir temmelig lite på små skjermer. </p>
<figure>

<img src="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/horse_270.jpg" srcset="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/horse_540.jpg 2x" alt="En liten versjon av bildet av en hest som spiser gress" width="270" height="180">
<figcaption>Når bildet forminskes, forminskes også hesten.</figcaption>

</figure>

<p>Bildet blir faktisk så lite at hovedmotivet vårt, <em>hesten</em>, forsvinner litt. I dette tilfellet kan det passe bedre å kun vise et utsnitt av det opprinnelige motivet, slik at vi ser mer hest, og mindre skog og eng.</p>
<figure>

<img src="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/horse_small_270.jpg" srcset="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/horse_small_540.jpg 2x" alt="Et zoomet inn bilde av en hest som spiser gress" width="270" height="180">
<figcaption>Dersom vi endrer utsnittet, blir hesten tydeligere.</figcaption>

</figure>

<p>Dette kan vi oppnå ved innføre to HTML-elementer:</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source"><code>&lt;source&gt;</code></a> for å angi alternative bildefiler.</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture"><code>&lt;picture&gt;</code></a> for å gruppere <code>&lt;img&gt;</code>- og <code>&lt;source&gt;</code>-elementer som hører sammen. </li>
</ul>
<p>Ved første øyekast, minner dette litt om å bruke <code>&lt;img&gt;</code> kombinert med <code>srcset</code>. Grunnen til at vi heller bruker <code>&lt;picture&gt;</code> og <code>&lt;source&gt;</code>, er at <code>&lt;source&gt;</code>-elementet har støtte for <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries">media queries</a>, slik at vi kan levere ulike bilder til ulike oppløsninger.</p>
<p>Bruk <code>srcset</code> for å angi én eller flere bildefiler, og <code>media</code> for å legge til et media query. I eksempelet nedenfor vil <code>horse_small.jpg</code> brukes dersom nettleserbredden er <code>540px</code> eller mindre. Hvis dette kriteriet ikke er sant, vil standardvalget <code>horse.jpg</code> brukes.</p>
<pre><code>&lt;picture&gt;
  &lt;source srcset=&quot;horse_small_540.jpg, horse_small_1080.jpg 2x&quot; 
    media=&quot;(max-width: 540px)&quot;&gt;
  &lt;img src=&quot;horse_1080.jpg&quot; srcset=&quot;horse_2160.jpg 2x&quot; 
    width=&quot;1080&quot; height=&quot;720&quot; alt=&quot;&quot;&gt;
&lt;/picture&gt;
</code></pre>
<p><a href="/eksempler/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html#eksempel-5" class="blocklink" target="_blank" rel="noopener">Eksempel 5</a></p>
<p> Det er et krav om at <code>&lt;picture&gt;</code> skal inneholde <em>nøyaktig ett</em>  <code>&lt;img&gt;</code>-element. Vær også oppmerksom på at attributtene <code>width</code>, <code>height</code>, <code>alt</code> og <code>src</code> kun skal angis på <code>&lt;img&gt;</code>-elementet, og ikke på noen av <code>&lt;source&gt;</code>-elementene.</p>
<hr>
<h2 id="reduser-bildets-filstørrelse">Reduser bildets filstørrelse</h2>
<p>Ytelse er en sentral del av brukeropplevelsen. Vi vil at det skal gå <em>kortest mulig tid</em> fra en nettside åpnes, til den er ferdiglastet og klar for interaksjon fra brukeren. Dette er i utgangspunktet et primitivt regnestykke: Hver kilobyte som må lastes ned, behandles og tegnes av nettleseren, påvirker ytelsen negativt. </p>
<p>Bilder utgjør en vesentlig del av <em>nettsiders tyngde</em>, og vi bør gjøre det vi kan for å redusere filstørrelsen på dem. I følge HTTP Archive sin <a href="https://httparchive.org/reports/page-weight">rapport om nettsidetyngde</a>, veier en gjennomsnittlig nettside <code>2038,4 kB</code>, der <code>948,1 kB</code> av dem er bilder.</p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#jpeg">JPEG</a> er det mest brukte filformatet for å vise fotografier på web. En høykvalitets JPEG-fil tar mye diskplass, men heldigvis kan du vanligvis redusere kvaliteten flere hakk, uten at det går utover brukeropplevelsen. </p>
<p>Under skrivingen av denne artikkelen brukte jeg webapplikasjonen <a href="https://squoosh.app/">Squoosh</a> til redusere filstørrelsen til alle bilder. Fotografiet som er inkludert i <a href="#legg-inn-bildet">første kapittel</a> hadde i utgangspunktet en filstørrelse på <code>1 300 kB</code>. Etter å ha brukt Squoosh, uten å justere standardinnstillingene, ble filstørrelsen redusert med <strong>89 %</strong> til <code>148 kB</code>. </p>
<figure>

<img src="/img/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt/squoosh-logo.svg"  alt="" width="80" height="80">
<figcaption>Komprimer bilder med <a href="https://squoosh.app/">Squoosh</a>.</figcaption>

</figure>

<p>Filstørrelsen kan reduseres ytterligere, om vi bruker filformater med mer effektive komprimeringsalgoritmer. <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#webp_image">WebP</a> og <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#avif_image">AVIF</a> er de mest aktuelle alternativene til JPEG for bruk i fotografier. </p>
<p>Jake Archibald har gjort en grundig sammenligning av <a href="https://jakearchibald.com/2020/avif-has-landed/">bildekvalitet og filstørrelse for JPEG, WebP og AVIF</a> . Som en tommelfingerregel kan vi si at en AVIF-fil er <em>halvparten så stor</em> som en JPEG-fil med tilsvarende bildekvalitet. Størrelsen på en WebP-fil ligger omtrent midt mellom AVIF og JPEG. </p>
<p>Ved å bruke <code>&lt;picture&gt;</code> og <code>&lt;source&gt;</code> kan vi levere alternative bildeformater til nettleserne som støtter dem, ved å bruke et <code>type</code>-attributt. Dersom vi vil tilby bilder på AVIF-format i tillegg til JPEG-format, legger vi til ekstra <code>&lt;source&gt;</code>-elementer med <code>type=&quot;image/avif&quot;</code>, i tillegg til de attributtene vi lærte om tidligere.</p>
<p>Vi har også et annet triks på lur, &laquo;<a href="https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading">lazy loading</a>&raquo;, som vil si at et bilde ikke lastes ned før det er nødvendig. Dette gjøres ved å legge til et <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-loading"><code>loading</code></a>-attributt med verdien <code>&quot;lazy&quot;</code> på <code>&lt;img&gt;</code>-elementet.</p>
<pre><code>&lt;picture&gt;
  &lt;source srcset=&quot;horse_small_540.avif, horse_small_1080.avif 2x&quot; 
    type=&quot;image/avif&quot; media=&quot;(max-width: 540px)&quot;&gt;
  &lt;source srcset=&quot;horse_1080.avif, horse_2160.avif 2x&quot; 
    type=&quot;image/avif&quot;&gt;
  &lt;source srcset=&quot;horse_small_540.jpg, horse_small_1080.jpg 2x&quot; 
    media=&quot;(max-width: 540px)&quot;&gt;
  &lt;img src=&quot;horse_1080.jpg&quot; srcset=&quot;horse_2160.jpg 2x&quot; 
    width=&quot;1080&quot; height=&quot;720&quot; loading=&quot;lazy&quot; alt=&quot;&quot;&gt;
&lt;/picture&gt;
</code></pre>
<p><a href="/eksempler/veien_til_detaljrike_og_responsive_bilder_som_laster_raskt.html#eksempel-6" class="blocklink" target="_blank" rel="noopener">Eksempel 6</a></p>
<hr>
<h2 id="vær-trygg-på-nettleserstøtte">Vær trygg på nettleserstøtte</h2>
<p>Flere av de teknikkene som brukes i denne artikkelen er relativt nye. Bildeformatet AVIF ble for eksempel implementert i Google Chrome i august 2020, mens støtte for <code>aspect-ratio</code> kom først i januar 2021.</p>
<p>Det du imidlertid kan være trygg på, er at det vil vises et bilde av en hest i alle grafiske nettlesere. Kodeeksempelet vi har bygd opp stein for stein så langt, følger prinsippet &laquo;<a href="https://www.smashingmagazine.com/2009/04/progressive-enhancement-what-it-is-and-how-to-use-it/">progressive enhancement</a>&raquo;. Vi gir alle brukere en god opplevelse i bunn, og tilbyr noe ekstra til de nettlesere som har støtte for det.</p>
<p>Dersom du bruker en eldre nettleser uten AVIF-støtte, vil du for eksempel få servert en JPEG-fil. Dette bildet tar litt lenger tid å laste ned, men brukeropplevelsen er fortsatt god.</p>
<p>Nedenfor følger en liste med lenker til nettstedet <a href="https://caniuse.com/">caniuse.com</a>, hvor du kan se hvor god nettleserstøtte det er for de teknikkene som er brukt i denne artikkelen: </p>
<ul>
<li><a href="https://caniuse.com/mdn-css_properties_aspect-ratio">CSS property: aspect-ratio</a></li>
<li><a href="https://caniuse.com/mdn-html_elements_img_aspect_ratio_computed_from_attributes">Aspect ratio computed from width and height attributes</a></li>
<li><a href="https://caniuse.com/picture">Picture element</a></li>
<li><a href="https://caniuse.com/loading-lazy-attr">Lazy loading via attribute for images &amp; iframes</a></li>
<li><a href="https://caniuse.com/avif">AVIF image format</a></li>
<li><a href="https://caniuse.com/webp">WebP image format</a></li>
</ul>
<hr>
<h2 id="oppsummering">Oppsummering</h2>
<p>Om dere ønsker et detaljrikt og responsivt bilde som laster raskt, kan dere følge denne oppskriften:</p>
<ul>
<li>Legg inn bildet ved hjelp av  <code>&lt;img src=&quot;...&quot; alt=&quot;...&quot;&gt;</code>. </li>
<li>Legg til attributtene <code>width</code> og <code>height</code>, så nettleseren vet nøyaktig hvor mye plass som skal reserveres. </li>
<li>Legg til CSS-deklarasjonene <code>max-width: 100%;</code> og <code>height: auto;</code>, for å gjøre bildet responsivt.</li>
<li>Legg til CSS-egenskapen <code>aspect-ratio</code>, så nettleseren på forhånd vet bildets høyde når det skaleres.</li>
<li>Bruk <code>srcset</code>-attrbutten til å levere høyoppløselige varianter av bildet til høyoppløselige skjermer.</li>
<li>Bruk <code>&lt;picture&gt;</code> og <code>&lt;source&gt;</code> til å levere ulike bilder, avhengig av brukerens skjermstørrelse.</li>
<li>Reduser bildets filstørrelse ved å bruke <a href="https://squoosh.app/">Squoosh</a>.</li>
<li>Bruk <code>&lt;source&gt;</code> med et <code>media</code>-attributt for å tilby bildeformater med enda lavere filstørrelser.</li>
<li>Legg til <code>loading=&quot;lazy&quot;</code> så bildet ikke lastes før det er nødvendig.</li>
</ul>
<p><a href="#top">&uarr; Hopp til starten av artikkelen</a></p>]]></description>
</item>

<item>
     <title>En praktisk guide til mer tilgjengelige nettsider</title>
     <link>https://www.magiskepiksler.com/innlegg/en_praktisk_guide_til_mer_tilgjengelige_nettsider.html</link>
     <guid>https://www.magiskepiksler.com/innlegg/en_praktisk_guide_til_mer_tilgjengelige_nettsider.html</guid>
     <description><![CDATA[<p>Universell utforming er viktig og gir store gevinster. Dette er godt beskrevet hos <a href="https://www.uutilsynet.no/veiledning/kvifor-universell-utforming-av-ikt/240">Tilsynet for universell utforming og IKT</a>, så denne artikkelen fokuserer heller på å være en praktisk guide til hvordan dette kan oppnås.</p>
<p>Informasjonsnettsteder og enkle webapplikasjoner er i utgangspunktet tilgjengelige for alle, så lenge du skriver semantisk HTML. Det er riktignok mye som kan gå galt, men samtidig kan mange alvorlige feil avdekkes ved å utføre en enkel kodeinspeksjon i nettleseren. </p>
<p>Artikkelen inneholder eksempler på feil som er lett å oppdage og lett å rette opp, og er gruppert i følgende tema:</p>
<ul>
<li><a href="#tekstst%C3%B8rrelse">Tekststørrelse</a></li>
<li><a href="#alternativ-tekst-for-bilder">Alternativ tekst for bilder</a></li>
<li><a href="#lenker-og-knapper">Lenker og knapper</a></li>
<li><a href="#label-og-input">Label og input</a></li>
</ul>
<p>Hvis du har dårlig tid, kan du hoppe rett til <a href="#oppsummering">oppsummeringen</a>.</p>
<hr>
<h2 id="tekststørrelse">Tekststørrelse</h2>
<p>I nettlesere finnes det egne innstillinger for tilgjengelighet, som blant annet gjør det mulig å oppskalere tekststørrelsen til nettsteder. Dette er en essensiell innstilling for de brukerne som synes at tekst med ordinær størrelse er vanskelig å lese. </p>
<figure>

<img src="/img/tekstskalering.svg" alt="Tekstskalering: 120 %" width="360" height="288">
<figcaption>Eksempel på en tilgjengelighetsinnstilling i Google Chrome for Android.</figcaption>

</figure>


<p>I CSS kan størrelser angis med <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length">absolutte eller relative enheter</a>. En absolutt enhet er relatert til en fysisk størrelse, mens verdier angitt med relative enheter er relaterte til andre bestemte størrelser. </p>
<p>Et element med den relative størrelsen <code>font-size: 150%;</code> skal for eksempel ha 50 prosent større tekst i forhold til elementet det står innenfor. </p>
<p>Om du angir nettsidens tekststørrelse med en relativ enhet (<code>html { font-size: 150% }</code>), vil størrelsen være relatert til nettleserens standardstørrelse, og dermed også ta hensyn til brukerens innstillinger for tilgjengelighet.</p>
<p>Siden en absolutt enhet er relatert til en fysisk størrelse, vil den ikke skalere i henhold til brukerens innstillinger nevnt ovenfor. <code>16px</code> forblir <code>16px</code>, selv om brukeren ønsker at teksten skal skalere 125 % til 20px. </p>
<p>Bruk derfor relative enheter ved angivelse av <code>font-size</code>. Både <code>em</code>, <code>rem</code> og <code>%</code> er trygge valg.</p>
<p>Andre dimensjoner er ofte proporsjonale til tekststørrelsen, og bør derfor angis med en enheten som er relatert til tekststørrelsen. Noen eksempler</p>
<ul>
<li>Et avsnitt bør ha en maksbredde (<code>max-width</code>) som begrenser antall ord på hver linje, for å forhindre at teksten blir vanskelig å lese. </li>
<li>Et avsnitt er lettest å lese når den samtidig har en linjehøyde (<code>line-height</code>) som harmonerer med tekststørrelsen.</li>
<li>Den vertikale avstanden (<code>margin</code>)  mellom to avsnitt er gjerne den samme som avsnittenes linjehøyde, for å bidra til at designet får en <a href="https://zellwk.com/blog/why-vertical-rhythms/">vertikal rytme</a>. </li>
</ul>
<p>Bruk relative enheter til de aller fleste dimensjoner, inkludert <a href="https://zellwk.com/blog/media-query-units/">media queries</a>.</p>
<h3 id="dårlig-praksis-font-size-angis-med-en-absolutt-enhet">Dårlig praksis: <code>font-size</code> angis med en absolutt enhet</h3>
<pre><code>p {
  font-size: 16px;  /* absolutt enhet */
}
</code></pre>
<p>I dette tilfellet vil det ikke tas hensyn til brukerens innstillinger for tilgjengelighet.  </p>
<h3 id="dårlig-praksis-absolutte-og-relative-enheter-brukes-om-hverandre">Dårlig praksis: Absolutte og relative enheter brukes om hverandre</h3>
<pre><code>body {
  font-size: 16px;  /* absolutt enhet */
}

p {
  font-size: 1em;  /* relativ enhet */
}
</code></pre>
<p>Avsnittets tekststørrelse er angitt med en relativ enhet, men er avhengig av tekststørrelsen til <code>body</code>, som igjen er angitt med en absolutt enhet. Heller ikke her vil tekststørrelsen skalere.</p>
<h3 id="god-praksis-font-size-med-en-relativ-enhet">God praksis: <code>font-size</code> med en relativ enhet</h3>
<pre><code>p {
  font-size: 1rem;  /* relativ enhet */
}
</code></pre>
<h3 id="god-praksis-relative-enheter-brukes-til-både-font-size-og-andre-dimensjoner">God praksis: Relative enheter brukes til både <code>font-size</code> og andre dimensjoner</h3>
<pre><code>p {
  font-size: 1rem; 
  line-height: 1.5rem;
  margin-bottom: 1.5rem;
  max-width: 45rem;
}

@media (min-width: 48em) {
  html {
    font-size: 120%;
  }
}
</code></pre>
<p>Her er alle dimensjoner angitt med relative enheter, noe som gjør at hele designet skalerer godt.</p>
<hr>
<h2 id="alternativ-tekst-for-bilder">Alternativ tekst for bilder</h2>
<p>For å sette ting på spissen, så kan bilder på nettsider deles inn i to kategorier:</p>
<ul>
<li>Bilder som er dekorative, og gjør et nettsted mer visuelt attraktivt. Dette gjelder blant annet ikoner som supplerer en tekst, bakgrunnsmønster og kantlinjer. </li>
<li>Bilder som bærer informasjon eller har en funksjon, og er en viktig del av nettsidens innhold. Dette gjelder blant annet figurer, logoer og annen grafikk med tekst. </li>
</ul>
<p>Her omtales kun bilder som legges inn ved hjelp av <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img"><code>&lt;img&gt;</code></a>-elementet, og ikke <a href="https://developer.mozilla.org/en-US/docs/Web/SVG">SVG</a> eller <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/background-image">bakgrunnsbilder</a>.</p>
<p>Det er ikke alle brukere som har mulighet til å oppfatte grafikk og illustrasjoner. Blinde og svaksynte bruker ofte en skjermleser, som tolker informasjonen et nettsted består av, og presenterer innholdet på en leselist eller ved syntetisk tale. </p>
<figure>

<img src="/img/w3c_icon.svg" width="210" height="142" alt="W3C">
<figcaption>Logoen til World Wide Web Consortium inneholder teksten &laquo;W3C&raquo;.</figcaption>

</figure>

<p>Alle bilder skal ha <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/alt"><code>alt</code></a>-attributtet, med en alternativ tekst som vises dersom bildet ikke er tilgjengelig.</p>
<p>Dekorative bilder skal ha en tom tekststreng (<code>alt=&quot;&quot;</code>) som alternativ tekst. Dette er et hint til skjermlesere om at bildet kan ignoreres. Dersom et bilde mangler <code>alt</code>-attributtet, vil skjermlesere i stedet kommunisere &laquo;her er det et bilde uten alternativ tekst&raquo;, noe som bare oppleves som støy for brukerne.</p>
<p>Andre bilder skal ha en alternativ tekst som fungerer som en erstatning for bildet, uten at nettsidens betydning blir endret. For å finne en passende tekst, kan det være nyttig å tenke over følgende: </p>
<blockquote>
<p>Hvordan ville jeg ha lest opp nettsidens innhold til en venn over telefonen, uten å nevne at det finnes et bilde på siden?</p>
</blockquote>
<p>Det er en kunst å lage gode alternative tekster, og det nøyaktig samme bildet kan ha to ulike alternative tekster om det står i to forskjellige kontekster. WebAIM har en utmerket <a href="https://webaim.org/techniques/alttext/">gjennomgang av alternative tekster</a>, med mer detaljerte eksempler og råd.</p>
<figure>

<img src="/img/stockphoto.jpg" srcset="/img/stockphoto_2x.jpg 2x" alt="" width="400" height="264">
<figcaption>Denne generiske illustrasjonen tilfører ikke verdi til artikkelen, og fortjener ingen alternativ tekst.</figcaption>

</figure>




<h3 id="dårlig-praksis-alt-attributtet-mangler">Dårlig praksis: <code>alt</code>-attributtet mangler</h3>
<pre><code>&lt;img src=&quot;w3c-logo.png&quot;&gt;
</code></pre>
<p>Brukere av skjermlesere vil ikke være istand til å oppfatte innholdet dette bildet er ment å representere.</p>
<h3 id="dårlig-praksis-den-alternative-teksten-inneholder-overflødige-ord">Dårlig praksis: Den alternative teksten inneholder overflødige ord</h3>
<pre><code>&lt;img src=&quot;w3c-logo.png&quot; alt=&quot;W3C logo&quot;&gt;
</code></pre>
<p>Dersom det er en logo med teksten &laquo;W3C&raquo;, er det tilstrekkelig å ha &laquo;W3C&raquo; som alternativ tekst. Det er ikke nødvendig å presisere at det er en logo.</p>
<h3 id="dårlig-praksis-et-dekorativt-bilde-har-overflødig-alternativ-tekst">Dårlig praksis: Et dekorativt bilde har overflødig alternativ tekst</h3>
<pre><code>&lt;a href=&quot;/next&quot;&gt;
  Neste side &lt;img src=&quot;arrow.svg&quot; alt=&quot;Bilde av pil til høyre&quot;&gt;
&lt;/a&gt;
</code></pre>
<p>Ikonet er et rent dekorativt supplement til teksten, og en beskrivelse av ikonet oppleves derfor som støy.</p>
<h3 id="god-praksis-det-tekstlige-innholdet-i-et-bilde-gjengis-presist">God praksis: Det tekstlige innholdet i et bilde gjengis presist</h3>
<pre><code>&lt;img src=&quot;w3c-logo.png&quot; alt=&quot;W3C&quot;&gt;
</code></pre>
<h3 id="god-praksis-et-dekorativt-bilde-har-tom-alternativ-tekst">God praksis: Et dekorativt bilde har tom alternativ tekst</h3>
<pre><code>&lt;a href=&quot;/next&quot;&gt;
  Neste side &lt;img src=&quot;arrow.svg&quot; alt=&quot;&quot;&gt;
&lt;/a&gt;
</code></pre>
<hr>
<h2 id="lenker-og-knapper">Lenker og knapper</h2>
<p>I nettsider og webapplikasjoner med mye interaktivitet, kan det være krevende å skille mellom bruk av lenker og knapper. Du kommer langt ved å følge disse retningslinjene:</p>
<ul>
<li>Bruk lenker (<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a"><code>&lt;a&gt;</code></a>) for å navigere til en ny <a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL">URL</a>.</li>
<li>Bruk knapper (<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button"><code>&lt;button&gt;</code></a>) til alt annet.</li>
</ul>
<p>Retningslinjene ovenfor leder derimot til en ny problemstilling: Når er det ønskelig å navigere til en ny URL? Det kan være hjelpsomt å stille seg spørsmålene nedenfor: </p>
<ul>
<li>Gir det mening å høyreklikke på elementet, og velge &laquo;Åpne i ny fane&raquo;? </li>
<li>Gir det mening å bokmerke den nye visningen?</li>
<li>Gir det mening å bruke tilbake-knappen i nettleseren for å navigere til forrige visning?</li>
</ul>
<p>Hvis du svarer &laquo;ja&raquo; på ett eller flere av spørsmålene, er det en sterk indikasjon på at du bør bruke en lenke.</p>
<figure>

<img src="/img/lenke-knapp.svg" alt="Visning av en lenke og en knapp med standardutseende" width="296" height="56">
<figcaption>Lenker og knapper har ulik funksjon, og bør også se ulike ut.</figcaption>

</figure>


<p>En knapp har et standardutseende som er avhengig av hvilken nettleser som benyttes, og det kreves derfor litt CSS-håndverk for å få en knapp til å se ut nøyaktig slik som du vil ha den. På grunn av dette, er det ikke uvanlig å se at andre elementer enn <code>&lt;button&gt;</code> i praksis brukes som knapper. Et <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div"><code>&lt;div&gt;</code></a>-element er vesentlig lettere å style, og kan gjøres interaktivt ved å legge til en <a href="https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onclick"><code>onclick</code>-event</a>.</p>
<p>En <code>&lt;div&gt;</code> med <code>onclick</code>-event er imidlertid ikke en fullgod erstatning for <code>&lt;button&gt;</code>, på grunn av følgende:</p>
<ul>
<li>En <code>&lt;button&gt;</code> kan nås når brukeren navigerer på et nettsted ved å bruke tastaturet.</li>
<li>En <code>&lt;button&gt;</code> kan aktiveres ved å trykke på &laquo;space&raquo;-tasten.</li>
<li>En <code>&lt;button&gt;</code> markeres med en egen stil når elementet har fokus</li>
<li>En <code>&lt;button&gt;</code> har en implisitt semantikk som forteller at det er en knapp.</li>
</ul>
<p>Alle de tre egenskapene ovenfor må være på plass for at nettsiden skal være tilgjengelig. Dersom det benyttes andre HTML-elementer enn <code>&lt;button&gt;</code>, må denne oppførselen derfor gjenskapes med supplerende kode.</p>
<p>Sørg også for at knapper og lenker inneholder korte og presise tekster, så det er tydelig for brukeren hva en knapp gjør, og hvor en lenke leder.</p>
<h3 id="dårlig-praksis-knapp-består-av-andre-elementer-enn-button">Dårlig praksis: Knapp består av andre elementer enn <code>&lt;button&gt;</code></h3>
<pre><code>&lt;div onClick=&quot;() =&gt; slettBruker();&quot;&gt;Slett bruker&lt;/div&gt;
</code></pre>
<p>I dette tilfellet er <code>&lt;div&gt;</code> benyttet i stedet for <code>&lt;button&gt;</code>, og elementet har derfor ingen semantikk, det er ikke tilgjengelig via tastaturet, og det mangler en fokusstil.</p>
<p>Vær oppmerksom på at <code>onclick</code> og andre eventer som regel angis i separate javascript-filer, og er derfor ikke like enkle å avdekke via en kodeinspeksjon.</p>
<h3 id="dårlig-praksis-lenke-med-lite-beskrivende-innhold">Dårlig praksis: Lenke med lite beskrivende innhold</h3>
<pre><code>Klikk &lt;a href=&quot;https://www.w3.org/&quot;&gt;her&lt;/a&gt; for å lære mer om HTML
</code></pre>
<p>Teksten &laquo;her&raquo; er lite beskrivende for hvor lenken ender.</p>
<h3 id="god-praksis-knapp-er-implementert-med-button">God praksis: Knapp er implementert med <code>&lt;button&gt;</code></h3>
<pre><code>&lt;button type=&quot;button&quot;&gt;Slett bruker&lt;/button&gt;
</code></pre>
<h3 id="god-praksis-lenke-med-en-god-lenketekst">God praksis: Lenke med en god lenketekst</h3>
<pre><code>&lt;a href=&quot;https://www.w3.org/&quot;&gt;Besøk W3C&lt;/a&gt; for å lære mer om HTML
</code></pre>
<hr>
<h2 id="label-og-input">Label og input</h2>
<p>Alle interaktive kontroller i et skjema, som <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a>, <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select"><code>&lt;select&gt;</code></a> og <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea"><code>&lt;textarea&gt;</code></a>, skal ha en tilhørende tekst som opplyser brukeren om hvilke data som skal legges inn. </p>
<p>Det er ikke tilstrekkelig at teksten er visuelt i nærheten av kontrollen. Teksten må også være koblet til kontrollen programmatisk, for at blant annet skjermleser-brukere skal kunne oppfatte at de hører sammen. Dette gjøres ved hjelp av elementet <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label"><code>&lt;label&gt;</code></a>.</p>
<figure>

<img src="/img/etternavn-label-input.svg" alt="En tekstlie labelen Etternavn står rett ovenfor et input-felt " width="256" height="64">
<figcaption>Eksempel på en label ved siden av input-felt.</figcaption>

</figure>


<p>Et <code>&lt;label&gt;</code>-element kan enten plasseres rundt en kontroll, eller referere til en kontrolls <code>id</code> ved å bruke <code>for</code>-attributtet. De to metodene er likeverdige.</p>
<p>Attributtet <code>placeholder</code> angir om det skal vises en tekst inne i en kontroll mens kontrollen ikke har noen verdi. Dette er ikke et alternativ til å bruke <code>&lt;label&gt;</code>. <code>placeholder</code>-attributtet kan faktisk by på så store utfordringer for brukere at det <a href="https://www.nngroup.com/articles/form-design-placeholders/">alltid bør unngås</a>.</p>
<figure>

<img src="/img/etternavn-placeholder-input.svg" alt="Et input-felt har Etternavn som placeholder" width="256" height="32">
<figcaption>Eksempel på et input-felt med en placeholder. Når du begynner å skrive noe, forsvinner den.</figcaption>

</figure>



<h3 id="dårlig-praksis-label-mangler">Dårlig praksis: <code>&lt;label&gt;</code> mangler</h3>
<pre><code>&lt;p&gt;
  Etternavn 
  &lt;input type=&quot;text&quot;&gt;
&lt;/p&gt;
</code></pre>
<p>&laquo;Etternavn&raquo; vises ved siden av input-feltet, men det er ingen programmatisk kobling mellom dem. </p>
<h3 id="dårlig-praksis-placeholder-brukes-i-stedet-for-label">Dårlig praksis: <code>placeholder</code> brukes i stedet for <code>&lt;label&gt;</code></h3>
<pre><code>&lt;p&gt;
  &lt;input type=&quot;text&quot; placeholder=&quot;Etternavn&quot;&gt;
&lt;/p&gt;
</code></pre>
<p>&laquo;Etternavn&raquo; er angitt ved hjelp av placeholder-attributtet, noe som ikke veier opp for at <code>&lt;label&gt;</code> mangler.</p>
<h3 id="god-praksis-label-plasseres-rundt-input-og-tekst">God praksis: <code>&lt;label&gt;</code> plasseres rundt <code>&lt;input&gt;</code> og tekst</h3>
<pre><code>&lt;p&gt;
  &lt;label&gt;
    Etternavn 
    &lt;input type=&quot;text&quot;&gt;
  &lt;/label&gt;
&lt;/p&gt;
</code></pre>
<p><code>&lt;label&gt;</code>-elementet plasseres rundt &laquo;Etternavn&raquo; og <code>&lt;input&gt;</code> for å assosiere dem til hverandre. </p>
<h3 id="god-praksis-label-refererer-til-et-input-element">God praksis: <code>&lt;label&gt;</code> refererer til et <code>&lt;input</code>-element</h3>
<pre><code>&lt;p&gt;
  &lt;label for=&quot;etternavn&quot;&gt;Etternavn&lt;/label&gt;
  &lt;input type=&quot;text&quot; id=&quot;etternavn&quot;&gt;
&lt;/p&gt;
</code></pre>
<p>Innholdet i <code>&lt;label&gt;</code> assosieres til input-feltet ved å bruke <code>for</code>-attributtet.</p>
<hr>
<h2 id="oppsummering">Oppsummering</h2>
<ul>
<li>Angi tekststørrelse og andre dimensjoner med relative enheter som <code>em</code>, <code>rem</code> og <code>%</code>.</li>
<li>Legg til <code>alt</code>-attributter på alle bilder (<code>&lt;img&gt;</code>), og sørg for at bilder som ikke er dekorative har en god alternativ tekst.</li>
<li>Bruk lenker <code>&lt;a&gt;</code> for å navigere til en ny URL, og knapper <code>&lt;button&gt;</code> til alt annet.</li>
<li>Bruk <code>&lt;label&gt;</code>-elementer for å beskrive hver kontroll (<code>&lt;input&gt;</code>, <code>&lt;select&gt;</code>, <code>&lt;textarea&gt;</code>) i et skjema.</li>
</ul>
<p><a href="#top">&uarr; Hopp til starten av artikkelen</a></p>]]></description>
</item>

<item>
     <title>Arbeidsflyt med Git</title>
     <link>https://www.magiskepiksler.com/innlegg/arbeidsflyt_med_git.html</link>
     <guid>https://www.magiskepiksler.com/innlegg/arbeidsflyt_med_git.html</guid>
     <description><![CDATA[<p>Dette nettstedet er tenkt å være min egen lille sandkasse. Her skal være lav terskel for å skrive nytt innhold, og det må samtidig være raskt og enkelt å rulle ut endringer og publisere nye innlegg. Nedenfor følger en kort beskrivelse over hvordan jeg har oppnådd dette ved aktiv bruk av Git og Github.</p>
<h2 id="behov-og-prinsipper">Behov og prinsipper</h2>
<p>Siden det skal være lav terskel for å skrive nytt innhold, må siste versjon av alt innhold være tilgjengelig fra alle enheter, til enhver tid. Det betyr i praksis at alle endringer commites og pushes til Git.</p>
<p>Jeg vil gjerne jobbe med flere ideer til fremtidige innlegg samtidig, uten at dette medfører ekstra bokholderi. Alle upubliserte innlegg er derfor samlet i en felles Git-branch, og jeg forholder meg til ulike to brancher:</p>
<ul>
<li>En master-branch med produksjonsklart innhold som publiseres til magiskepiksler.com.</li>
<li>En dev-branch med ideer og utkast som er tilgjengelig på et subdomene.</li>
</ul>
<p>Endringer i design og tidligere publiserte innlegg gjøres direkte på master-branchen.</p>
<h2 id="arbeid-med-utkast-til-innlegg">Arbeid med utkast til innlegg</h2>
<p>Jeg starter med å bytte til dev-branchen.</p>
<pre><code>git checkout dev
</code></pre>
<p>Eventuelle endringer i design eller innhold hentes fra master-branchen, og merges inn.</p>
<pre><code>git merge master -m &quot;master -&gt; dev&quot;
</code></pre>
<p>Jeg oppretter et nytt innlegg, og starter å skrive.</p>
<pre><code>touch src/innlegg/arbeidsflyt_med_git.md
</code></pre>
<p>Om jeg ikke fullfører innlegget på en gang, commiter jeg endringene, og pusher til Github.</p>
<pre><code>git commit -am &quot;Arbeidsflyt med Git, førsteutkast&quot;
git push
</code></pre>
<p>På dev-branchen redigerer jeg utelukkende filer som ikke finnes på master-branchen. Da slipper jeg konflikter ved merging.</p>
<h2 id="publisere-nytt-innlegg">Publisere nytt innlegg</h2>
<p>Når et innlegg er klar for publisering, bytter jeg til master-branchen.</p>
<pre><code>git checkout master
</code></pre>
<p>Jeg velger deretter hvilken fil som skal publiseres, <a href="https://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/">ved å hente en spesifikk fil fra dev-branchen</a>.</p>
<pre><code>git checkout dev src/innlegg/arbeidsflyt_med_git.md
</code></pre>
<p>Jeg commiter og pusher, og etter noen få minutter er innlegget tilgjengelig på magiskepiksler.com</p>
<pre><code>git commit -am &quot;Arbeidsflyt med Git, publisert&quot;
git push
</code></pre>]]></description>
</item>

<item>
     <title>5 most annoying website features I face as a blind person every single day</title>
     <link>https://www.magiskepiksler.com/ellers/five_most_annoying_website_features_I_face_as_a_blind_person_every_single_day.html</link>
     <guid>https://www.magiskepiksler.com/ellers/five_most_annoying_website_features_I_face_as_a_blind_person_every_single_day.html</guid>
     <description><![CDATA[<p>En skjermleser-bruker gir oss en nyttig påminnelse om hva som må hensyntas for at en en nettside skal være tilgjengelig og brukervennlig:</p>
<ul>
<li>Ha en <em>god</em> tekstlig label på alle lenker og knapper.</li>
<li>La alle bilder som bærer informasjon få en alterantiv tekst.</li>
<li>Bruk riktige overskriftsnivåer, slik at dokumentets informasjonshierarki blir korrekt.</li>
<li>Lag tilgjengelige skjema med labels og tilgjengelige feilmeldinger.</li>
<li>Ikke start lyd og video automatisk.</li>
</ul>]]></description>
</item>

<item>
     <title>Intuition vs. data</title>
     <link>https://www.magiskepiksler.com/ellers/intuition_vs_data.html</link>
     <guid>https://www.magiskepiksler.com/ellers/intuition_vs_data.html</guid>
     <description><![CDATA[<p><a href="https://matthewstrom.com/">Matthew Ström</a> har skrevet en artikkel om noe jeg av og til har følt på selv: </p>
<blockquote>
<p><em>Designvalg må underbygges av data for å tas på alvor</em>.</p>
</blockquote>
<p>Når vi designer en løsning gjør vi en rekke valg, der flere av dem gjøres på bakgrunn av vår egen <em>intuisjon</em>. Dette er ikke magi &ndash; det er vår egen underbevissthet som kjenner igjen lignende situasjoner fra våre tidligere erfaringer.</p>
<p>Det er positivt å kunne underbygge et designvalg med data, men husk at innsamlingen av data ikke nødvendigvis er kostnadsfri. </p>
<p>Stol på din egen intuisjon når datainnsamlingen er dyr, og samtidig ikke gjør deg vesentlig tryggere på at du gjør gode valg.</p>]]></description>
</item>

<item>
     <title>Sentrering av tekst og elementer, 15 år etter</title>
     <link>https://www.magiskepiksler.com/innlegg/sentrering_av_tekst_og_elementer_15_aar_etter.html</link>
     <guid>https://www.magiskepiksler.com/innlegg/sentrering_av_tekst_og_elementer_15_aar_etter.html</guid>
     <description><![CDATA[<p>På starten av 2000-tallet var «Hvordan midtstiller jeg x» et <a href="https://www.diskusjon.no/search/?&amp;q=midtstilling&amp;type=forums_topic&amp;nodes=532&amp;search_and_or=or&amp;updated_after=1041379200&amp;updated_before=1075593600&amp;sortby=newest">gjentagende spørsmål</a> på forumet som i dag heter diskusjon.no. Det var tilsynelatende mange ulike løsninger, som bare tidvis fungerte etter hensikten. Jeg skrev derfor artikkelen <a href="https://web.archive.org/web/20041019145806/http://decalibration.net/artikler/sentrering/">sentrering av tekst og elementer</a> som forklarte hvordan dette burde løses. Hvor gyldig er artikkelens innhold i dag?</p>
<h2 id="løsning-ved-hjelp-av-css-i-2004">Løsning ved hjelp av CSS i 2004</h2>
<p>I den opprinnelige artikkelen står følgende:</p>
<ul>
<li>Bruk <code>text-align: center;</code> for å midtstille tekst og inline-elementer.</li>
<li>Bruk <code>margin: 0 auto;</code> for å midtstille blokkelementer.</li>
</ul>
<p>Dette må sies å være gyldige og anbefalte metoder også i dag, 15 år etterpå. CSS-standarden har imidlertid blitt utvidet siden den gang, og fått nye layout-verktøy. Det gir ofte mening å bruke flexbox eller grid til å styre både horisontal og vertikal justering, for eksempel ved hjelp av <code>justify-content: center;</code>.</p>
<p>Etter innføringen av flexbox og grid har det dessuten blitt mer rett frem å midtstille elementer vertikalt.  </p>
<h2 id="andre-observasjoner">Andre observasjoner</h2>
<p>Livet til en frontendutvikler er mye bedre i dag, enn for 15 år siden.</p>
<ul>
<li>HTML 5 har bare én doctype.</li>
<li>Dagens nettlesere har god CSS-støtte, og oppdateres automatisk.</li>
<li>IE5, IE6 og quirkmodus er forlengst historie.</li>
</ul>]]></description>
</item>

<item>
     <title>Why Highly Efficient Leaders Fail</title>
     <link>https://www.magiskepiksler.com/ellers/why_highly_efficient_leaders_fail.html</link>
     <guid>https://www.magiskepiksler.com/ellers/why_highly_efficient_leaders_fail.html</guid>
     <description><![CDATA[<p>Såkalte <em>svært effektive</em> ledere har en tendens til fokusere mer på hva teamet til enhver tid leverer, fremfor å vise omsorg for de menneskene som teamet faktsk består av. Aktiviteter som er ment å bygge relasjoner og inspirere teamet, sees ofte på som en <em>ren utgift</em> som svekker teamets leveranseevne. </p>
<p>På lengre sikt medfører dette fokuset et <em>dårlig arbeidsmiljø</em>, med sykmeldinger og oppsigelser på grunn av burnout. </p>
<p><em>Virkelig gode ledere</em> klarer å opprettholde en sunn balanse mellom fokus på leveranser og omsorg for menneskene.</p>
<p>Hvis du mistenker at du selv har et for stort fokus på kortsiktige leveranser, kan du gjøre følgende for å komme på rett spor: </p>
<ul>
<li>Ta initiativ og søk tilbakemeldinger.</li>
<li>Gjennomfør 1-til-1-samtaler for å bygge personlige relasjoner.</li>
<li>Vær selvbevisst og reflekter over dine egne handlinger.</li>
<li>Motbevis dine egne fordommer og antagelser.</li>
<li>Vis selvbeherskelse, i stedet for å reagere spontant.</li>
</ul>]]></description>
</item>

<item>
     <title>Sentrering av tekst og elementer</title>
     <link>https://www.magiskepiksler.com/innlegg/sentrering_av_tekst_og_elementer.html</link>
     <guid>https://www.magiskepiksler.com/innlegg/sentrering_av_tekst_og_elementer.html</guid>
     <description><![CDATA[<p>Denne artikkelen ble opprinnelig skrevet i 2004. Det har skjedd en rivende utvikling innenfor standardisering og nettlesere siden den gang, så innholdet nedenfor er ikke like relevant i dag. Artikkelen gjøres likevel tilgjengelig her av historiske og nostalgiske årsaker. Det er gjort noen få justeringer i ettertid, for å øke lesbarheten.</p>
<h2 id="bakgrunn">Bakgrunn</h2>
<p>Elementet <code>center</code> er <a href="http://www.w3.org/TR/html401/conform.html#deprecated">utdatert</a>, og har for lenge siden blitt erstattet med nyere begrep. Et utdatert element støttes fremdeles i nettleserne, men bare for bakoverkompatibilitet. Sjansene er store for at slike element senere <a href="http://www.w3.org/TR/html401/conform.html#didx-obsolete">utgår</a>, uten noen form for definisjon i spesifikasjonene eller nettleserstøtte. I denne artikkelen vil de nyere metodene for sentrering bli gjennomgått. </p>
<p>En måte som ofte er brukt, er tilsettelse av <code>align=&quot;center&quot;</code> i <code>p</code> eller i andre element som inneholder tekst eller bilder. Dette er også en delvis utdatert metode, som har blitt erstattet av  CSS-egenskapen <code>text-align</code>.</p>
<p>Men, her er det også noen unntak ute og går. Det finnes nemlig flere versjoner av HTML, såkalte <a href="http://www.w3.org/TR/REC-html40/struct/global.html#h-7.2">DOCTYPE-deklarasjoner</a>, som forteller hvordan nettleseren skal tolke dokumentet. «Strict» er den doctypen som anbefales av <a href="http://www.w3c.org/">W3C</a>, og inneholder færre HTML-attributer enn «Transitional». Noen opplever Strict som en strengere og vanskeligere doctype enn Transitional, siden det er nødvendig å bruke CSS på steder man tidligere skrev attributer rett inn i HTML-taggene. Dette bør dog ikke by på noen problemer, hvis man er innstilt på å få en ryddig kode med all CSS adskilt i et eget dokument. <code>align</code> er blant attributtene som valideres i Transitional, men ikke i Strict.</p>
<h2 id="sentrering-av-tekst">Sentrering av tekst</h2>
<p>For å sentrere tekst, bilder eller annet <a href="https://www.w3.org/TR/CSS2/visuren.html#inline-boxes">inline</a>-innhold, legges <code>text-align: center;</code> til det elementet som innholdet står innenfor. I eksemplet nedenfor vil tekst innenfor et avsnitt bli sentrert.</p>
<pre><code>p {
  text-align: center;
}
</code></pre>
<pre><code>&lt;p&gt;
  Denne teksten står midt inne i avsnittet.&lt;br&gt;
  Det gjør også denne!
&lt;/p&gt;
</code></pre>
<h2 id="sentrering-av-blokker">Sentrering av blokker</h2>
<p>Siden <code>text-align</code> bare gjelder for inline-innhold, brukes det en annen metode for å få <a href="https://www.w3.org/TR/CSS2/visuren.html#block-boxes">blokkelement</a> stående midt på siden. Blokkelement tar vanligvis opp all tilgjengelig plass i bredden, så det må angis <code>width</code> for å få noe resultat. For å få elementet til å ha lik margin til høyre og venstre side, bruker vi CSS-egenskapen <code>margin</code> med verdien <code>auto</code>.</p>
<pre><code>p {
  width: 300px;
  margin: 0 auto;
}
</code></pre>
<pre><code>&lt;p&gt;
  Denne teksten står inne i en boks som står midt på siden.&lt;br&gt;
  Og er venstrejustert inne i boksen!
&lt;/p&gt;
</code></pre>
<p>Når det er oppgitt 2 verdier etter <code>margin</code>, gjelder den første verdien for de <em>begge</em> vertikale sidene, og den andre verdien for de <em>begge</em> horisontale.</p>
<p>Denne metoden kan brukes til å sentrere et bilde også, ved å angi at bildet skal oppføre seg som et blokkelement ved hjelp av CSS-egenskapen <code>display</code>.</p>
<pre><code>img {
  display: block;
  margin: 0 auto;
}
</code></pre>
<pre><code>&lt;img src=&quot;...&quot; alt=&quot;...&quot;&gt;
</code></pre>
<p>Flere har problemer med å få denne metoden til å funke i Internet Explorer 6, på grunn av en feil DOCTYPE-deklarasjon. For at den skal aktiveres i Internet Explorer, må den plasseres helt øverst i dokumentet, uten tegn eller mellomrom over seg. For noen DOCTYPE-deklarasjoner kreves det i tillegg en URI, for at nettleseren ikke skal gå i «quirk-mode». En oversikt over <a href="https://web.archive.org/web/20050205052504/http://www.hut.fi/u/hsivonen/doctype.html">hvordan DOCTYPE-deklarasjonene skal se ut</a> er alltid nyttig å ha.</p>
<h2 id="nettleserstøtte">Nettleserstøtte</h2>
<p>Internet Explorer 5 for Windows klarer ikke svare på denne metoden, og boksen/bildet vil ikke bli sentrert likevel. En svakhet til nettleseren, men ikke til metoden.</p>
<p>Det finnes en omvei, som kan tas for å få den til å virke i eldre nettlesere også. <code>text-align: center;</code> vil nemlig i tillegg til å sentrere tekst, også sentrere blokkelement i den gjeldende nettleseren; men her er det også en bakdel. Alle element innenfor elementet med den angitte verdien, arver den samme egenskapen og vil sentrere tekst som vi i utgangspunktet ikke vil ha sentrert. Dette fører til at det må legges til <code>text-align: left;</code> i de elementene vi <em>ikke</em> vil ha sentrert tekst.</p>
<pre><code>body {
  text-align: center;
}

p {
  width: 300px;
  margin: 0 auto;
  text-align: left;
}
</code></pre>
<pre><code>&lt;p&gt;
  Denne teksten står inne i en boks som står midt på siden.&lt;br&gt;
  Og er venstrejustert inne i boksen!
&lt;/p&gt;
</code></pre>
<h2 id="relaterte-dokumenter--kilder">Relaterte dokumenter &amp; kilder</h2>
<ul>
<li><a href="http://www.alistapart.com/articles/doctype/">A List Apart: Fix Your Site With the Right DOCTYPE!</a></li>
<li><a href="http://www.w3.org/Style/Examples/007/center.html">W3C:  Centering things</a></li>
<li><a href="http://dorward.me.uk/www/centre/">Methods for centring elements using Cascading Style Sheets</a></li>
</ul>]]></description>
</item>

</channel>
</rss>