Tutorial: Dropdown meny med javascript, HTML og CSS
NÄ skal jeg vise hvordan man kan kode en dropdown meny ved hjelp av CSS og javascript (og selvfÞlgelig HTML). Det er en slags rullgardin meny, som har en hovedknapp. NÄr man trykker pÄ knappen, dukker det opp flere knapper/linker under.
Jeg har fulgt denne tutorialen, men kommer til Ă„ forklare mer hvordan de ulike kodene fungerer med hverandre:Â https://www.w3schools.com/howto/howto_js_dropdown.asp
FĂžrst gĂ„r jeg gjennom HTML-kodingen som skal vĂŠre pĂ„ plass. Dette er kodene vi bruker:Â
<div class="dropdown"> Â Â
<button onclick="myFunction()" class="dropbtn">Tittel</button> Â Â
<div id="myDropdown" class="dropdown-content"> Â Â Â
<a href="#">Home</a> Â Â Â
<a href="#">About</a> Â Â Â
<a href="#">Works</a> Â Â
</div>
</div>Â
Den fĂžrste <div>-beholderen er der for Ă„ ramme inn menyen. Den har en klasse som vi bruker til Ă„ style beholderen i CSS-kodene.
<Button>-definerer at det er en knapp som kan klikkes pÄ. Onclick="myFunction()" refererer til funksjonen som er definert i javascripten. Her igjen er det en klasse som bestemmer hvordan knappen skal se ut. Tittel er rett og slett det som stÄr pÄ knappen. Vi bestemmer at dette er alt innholdet i knappen ved Ä skrive </button>. <button> er altsÄ kommandoen, mens resten som er innenfor de to fÞrste klammene refererer til andre atributter.
Etter dette kommer det en ny <div>-beholder. Denne har bĂ„de en ID og en klasse. Begge disse refererer til atributter, der utseende og/eller funksjonen til innholdet blir bestemt av CSS- og/eller javascript-koder. Forskjellen er at en ID kun kan gjelde Ă©n beholder, mens en klasse kan brukes flere ganger.Â
"MyDropdown" refererer til en funksjon som er bestemt med javascript. "dropdown-content" refererer til CSS-koder i stilsettet. Innholdet i denne div-beholderen er linker i menyen. #-en erstattes av en URL man vil brukeren skal refereres til. Vi avslutter beholderen ved Ă„ skrive </div>.
**Til slutt **avslutter vi hele beholderen med </div>. Det er viktig Ä holde styr pÄ nÄr en <div>-beholder begynner og slutter, sÊrlig fordi de ofte inneholder andre <div>-beholdere. Dersom man ikke avslutter der man skal, vil attributtene til den <div>-beholderen fortsette Ä gjelde for innholdet utenfor. Derfor er det lurt Ä skrive inn bÄde <div> og </div> med en gang, og heller jobbe innenfor de to hele tiden.
NĂ„ skal vi se pĂ„ hvordan vi kan bestemme utseende til menyen ved Ă„ skrive inn CSS-koder. Dette er kodene vi bruker:Â
/* Dropdown knapp */
.dropbtn {
  background-color: #099;
width: 150px;
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
  cursor: pointer;
}
/* Dropdown knappen nÄr man holder musepekeren over knappen/fokuserer */
.dropbtn:hover, .dropbtn:focus {
  background-color: #399;
}
/* <div>-beholderen som inneholder menyen */
.dropdown {
  position: relative;
  display: inline-block;
}
/* Innholdet i menyen som er skjult med mindre man holder musepekeren over */
.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 100%;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
font-family: Arial, Helvetica, sans-serif;
}
/* Linkene i menyen */
.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}
/* Fargen pÄ linkene i menyen endres nÄr du holder musepekeren over */
.dropdown-content a:hover {background-color: #f1f1f1}
/* Vis dropdown menyen (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */
.show {display:block;}
 Det som er innenfor /* og */ er hjelpekommentarer, og vil ikke ha noe Ä si pÄ hvordan menyen vil se ut.
.dropbtn er en klasse. Dette definerest av punktumet fÞr navnet. Dette er klassen som brukes til Ä bestemme hvordan menyknappen skal se ut. Det meste i denne klassen er ganske selvforklarende, sÄ jeg skal ikke gÄ gjennom alle attributtene. Color-referer til fargen til fonten. Padding er hvor mye luft innholdet skal ha rundt seg, og cursor bestemmer rett og slett hvordan musepekeren skal se ut nÄr du kommer borti knappen. Her er det en pointer, som er den lille, hvite hÄnda som peker. Det kan hjelpe brukeren til Ä skjÞnne at det er noe man kan klikke pÄ.
Â
.dropbtn:hover, .dropbtn:focus bestemmer hvordan knappen skal se ut nÄr man fÞrer musepekeren over eller nÄr man fokuserer pÄ den. Ved Ä putte et komma mellom for eksempel to klasser, eller en klasse med ulike tilstander (:hover og :focus), kan vi gi de likt utseende. Her er det bestemt at knappen skal fÄ en litt annen farge nÄr man holder musepekeren over eller fokuserer.
.dropdown er klassen til selve <div>-beholderen som inneholder hele menyen. Position bestemmer hvordan beholderen skal forholde seg til andre elementer. Fordi den er relative, vil den forholde seg til det punktet den hadde vÊrt dersom vi ikke hadde lagt inn left, right, top eller bottom-verdier. Display sier noe om et element synes og om hvordan den synes. Inline-block bestemmer at beholderen ikke skal ha et linjeskift, men at man fortsatt kan bestemme bÄde hÞyden og bredden til elementet. Et vanlig inline-element ville brukt sÄ lite plass som mulig, mens et block-element ville brukt sÄ stor plass som mulig.
.dropdown-content bestemmer hvordan innholdet i menyen skal se ut. Display: none; bestemmer at beholderen ikke synes. Dette kan vi endre med Javascript. Position: absolute; bestemmer at innholdet skal forholde seg til andre elementer. Her er det dropdown-knappen. Min-width: 100% betyr at innholdet har en bredde som er 100% av det knappen er, altsÄ like bred. Box-shadow bestemmer rett og slett at elementet skal ha en skygge. Z-index bestemmer hvilken rekkefÞlge elementer skal vÊre i dersom de overlapper hverandre.
 .dropdown-content a bestemmer utseende til linkene i menyen. .dropdown-content a:hover bestemmer utseende til linkene nÄr man fÞrer musepekeren over.
 .show {display:block;} bruker vi i javascripten. Vi legger denne til .dropdown-content nÄr brukeren klikker pÄ menyknappen, og det gjÞr at linkene under knappen dukker opp.
NÄr vi trykker pÄ knappen nÄ, skjer det ingenting. Dette skal vi endre ved Ä bruke javascript. Javascript legger til ulike funksjoner, som gjÞr at noen elementer reagerer om vi for eksempel trykker pÄ et annet. Dette er kodene vi bruker:
Â
/* NÄr leseren trykker pÄ knappen, veksles ved med Ä vise og skjule menyen */
function myFunction() {
  document.getElementById("myDropdown").classList.toggle("show");
}
// Menyen lukkes om leseren trykker utenfor
window.onclick = function(event) {
 if (!event.target.matches('.dropbtn')) {
  var dropdowns = document.getElementsByClassName("dropdown-content");
  var i;
  for (i = 0; i < dropdowns.length; i++) {
   var openDropdown = dropdowns[i];
   if (openDropdown.classList.contains('show')) {
    openDropdown.classList.remove('show');
   }
  }
 }
}
  Igjen er det mellom /* og */, og det etter // kommentarer som ikke har noen virkning pÄ selve kodingen.
Den fÞrste funksjonen gjÞr at menyen vises nÄr brukeren trykker pÄ menyknappen. Her refererer vi til .show-klassen. Funksjonen heter myFunction, og det var den vi refererte til tidligere i HTML-kodene. I tillegg ser vi at ID-en myDropdown ogsÄ dukker opp, som vi ogsÄ brukte i HTML-kodene.
Â
Til slutt det en kommando som sier at menyen lukkes nÄr brukeren klikker utenfor menyen. Vi legger ogsÄ inn en kode som gjÞr at javascripten gjenkjenner nÄr brukeren har trykket pÄ menyknappen slik at menyen er Äpen.
NĂ„ er menyen ferdig, og ser slik ut:
See the Pen test by Noah Skullestad (@NoahLiem) on CodePen.