Kafli 5: Töflur, listar, og form

Töflur, listar, og form koma oft fyrir þegar við erum að smíða vefi. Töflur til að vinna með töfluleg gögn, listar til að hópa saman efni, og form til að taka við upplýsingum frá fólki.

5.1 Töflur

Að vinna með töfluleg gögn krefst aðeins flóknari uppsetningar en á öðrum gögnum í HTML. Töflur eru skilgreindar með töflumódeli í staðli: skilgreina þarf töflu, dálka, raði, gagnareiti (e. cell), og hugsanlega fót eða samantekt. Mælst er til að hafa lýsingu á töflum til að auðvelda lestur gagnanna.

5.1.1 <th> og <td>

<th> skilgreinir gagnareit sem er fyrirsögn, annaðhvort í röð (þá í byjun <tr>) eða dálks (þá í röð af fyrirsögnum innan <thead>).

Við getum skilgreint eftirfarandi attribute:

Til að tilgreina hvað fyrirsögn á við, notum við scope attribute:

<td> skilgreinir gagnasellu (e. data cell) í töflu. Getum skilgreint colspan, rowspan, og headers; eins og fyrir <th>.

5.1.2 Dæmi um töflu

<table>
  <caption>Reikningur fyrir kaupum.</caption>
  <thead>
    <tr>
      <th scope="col">Nr.</th>
      <th scope="col">Vara</th>
      <th scope="col">Lýsing</th>
      <th scope="col">Verð</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th></th>
      <th scope="rowgroup" colspan="3">Símar</th>
    </tr>
    <tr>
      <td>1</td>
      <th scope="row">Takkasími</th>
      <td>Sími með tökkum</td>
      <td>10.000 kr.-</td>
    </tr>
    <tr>
      <td>2</td>
      <th scope="row">Tæknisími</th>
      <td>Sími með tækni</td>
      <td>50.000 kr.-</td>
    </tr>
    <tr>
      <th></th>
      <th scope="rowgroup" colspan="3">Tölvur</th>
    </tr>
    <tr>
      <td>3</td>
      <th scope="row">Tölva</th>
      <td>Fullkomin í vefforritun</td>
      <td>100.000 kr.-</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td></td>
      <td colspan="2"><strong>Samtals</strong></td>
      <td><strong>160.000 kr.-</strong></td>
    </tr>
  </tfoot>
</table>
Dæmi

Birting á dæmi í vafra.

Skjáskot frá höfundi.

5.2 Listar

Nokkur flæði og greinileg element skilgreina lista af efni.

5.2.1 Raðaðir og óraðaðir listar

<ol> skilgreinir raðaðan lista (e. ordered list) af efni. Ef reversed attribute er skilgreint á listanum eru atriði í lækkandi röð, annars í hækkandi röð. Til að tilgreina annað byrjunargildi en 1 getum við skilgreint heiltölugildi í value attributeinu.

Til að breyta birtingu á merki getum við notað CSS, eða sett type attribute:

<ul> skilgreinir óraðaðan (e. unordered list) lista af efni. Litið er svo á að breyting á röð barna skipti engu máli fyrir merkingu listans.

Til að merkja atriði í <ol> eða <ul> listum notum við <li> elementið. Ef það er innan <ol> lista og þarf að skilgreina númer sitt notum við value attribute með heiltölugildi.

Oft er <ul> ásamt <nav> notað til þess að skilgreina valmynd, það oft að <menu> elementið var skilgreint til að gera nákvæmlega það.

5.2.2 <dl>

Fyrir nafngildis (e. name value) lista notum við <dl> (description list). Við skilgreinum eitt eða fleiri nöfn með <dt> (term) og fylgjum því á eftir með einu eða fleiri gildum <dd> (definition). Þetta getum við notað til að merkja t.d. skilgreiningar, spurningar & svör, eða atriðaskrá.

5.2.3 Dæmi um lista

<!doctype html>
<html lang="is">
  <head>
    <meta charset="utf-8" />
    <title>Lista dæmi</title>
  </head>
  <body>
    <nav>
      <menu>
        <li><a href="/">Forsíða</a></li>
        <li><a href="/about">Um</a></li>
      </menu>
    </nav>
    <ol type="I">
      <li>Læra vefforritun</li>
      <li>???</li>
      <li value="99">Gróði!</li>
    </ol>
    <ol start="3" reversed>
      <li>Three</li>
      <li>Two</li>
      <li>One</li>
      <li>Live!</li>
    </ol>
    <dl>
      <dt>HTML</dt>
      <dd>HyperText Markup Language</dd>
      <dd>Búið til af Tim Berners-Lee</dd>
      <dt>CSS</dt>
      <dd>Cascading Style Sheets</dd>
    </dl>
  </body>
</html>
Dæmi

Birting á dæmi í vafra.

Skjáskot frá höfundi.

5.3 Form 

Þegar við viljum fá upplýsingar frá notanda notum við yfirleitt form. Þau leyfa okkur að skilgreina mismunandi tegundir af leiðum til að skrá gögn ásamt aðferðum til að sannreyna þau að einhverju leyti áður en þau eru send.

<form> skilgreinir safn af elementum sem safna gögnum sem hægt er að vinna með, og senda á bakenda til úrvinnslu. Á það er hægt að setja attribute:

5.3.1 enctype

Hvernig nafn-gildis pör eru kóðuð þegar um method="post" er notað, skilgreinum við með enctype:

5.3.2 Að taka við gögnum frá notanda

Til að taka við gögnum notum við <input> elementið sem er gagna element eða reitur sem leyfir notanda að slá inn eða eiga við gögn, hefur þó nokkur attribute, t.d.:

type attribute skilgreinir hvernig reiturinn er birtur, í flestum tilfellum bætir eða breytir vafri hvaða innsláttur er í boði út frá þessu attribute.

Ef við viljum taka við mörgum línum af texta notum við <textarea>. cols skilgreinir fjölda stafa per línu, rows fjölda lína sem skal sýna. Öll börn innan <textarea> birtast sem breytanlegur texti, þar með talið allt HTML.

5.3.3 Fellilistar

Til þess að útbúa fellilista (e. drop-down list) notum við <select>. Hvert gildi sem hægt er að velja er skilgreint í <option> elementi sem er barn <select>, texti þess er birt notanda en ef value attribute er skilgreint er það gildi sent fyrir það gildi. Ef hægt á að vera að velja fleiri en eitt atriði úr listanum er multiple attribute notað. Til að hópa saman gildum getum við sett <option> element innan <optgroup>, það getur haft label attribute fyrir sýnilegt heiti.

Ef við viljum endurnýta lista af gildum eða útbúa lista af tillögum af innslátti fyrir fólk, getum við notað <datalist> elementið. Við skilgreinum id attribute fyrir það og inni í því skilgreinum við möguleika með <option> eins og fyrir <select>. Síðan vísum við í listann með list attribute sem inniheldur id gildið.

5.3.4 Merking reita

Til að merkja reiti notum við <label> sem merkir texta eða heiti við <input>, <select>, <textarea> eða aðra reiti. Ef <label> element inniheldur viðeigandi element er nóg að velja/smella á heitið til að færa fókus í innsetningu. Ef element eru aðskilin notum við for attribute á <label> þar sem gildið er id á <input>, <textarea> eða <select> elementi. Við ættum alltaf að skilgreina <label> þegar við vinnum með form til að auka aðgengi þeirra.

5.3.5 <fieldset>

Fyrir flóknari form getum við notað <fieldset> til að hópa hluta forms saman, t.d. fyrir persónuupplýsingar. Fyrir hvert <fieldset> getum við skilgreint fyrirsögn með <legend>, vafrar hafa sjálfgefna birtingu á því hvernig þetta er birt en við getum breytt því með CSS.

Oftast höfum við a.m.k. einn takka í formunum okkar, takka sem sendir gögnin áfram, til þess notum við <button>. Einnig er hægt að skilgreina type="reset" til að útbúa takka sem endurstillir form, færir alla reiti í upphafsstöðu.

5.3.6 Unnið með gögn

Þegar við tökum við gögnum í gegnum form er yfirleitt unnið með þá áfram, annað hvort í JavaScript eða á bakenda á vefþjóni. Almennt þegar við vinnum með gögn sem notendur geta sent inn viljum við treysta engu. Margar af þeim öryggisholum og málum sem koma upp í vefforritun má rekja til gagna sem koma inn í gegnum form. Þó svo að hægt sé að nota required, type="number", eða pattern attribute; þá er auðvelt að komast framhjá þessu, t.d. með því að nota „devtools“ í vafra til að breyta HTML áður en gögn eru send.

Þetta ber að hafa alltaf í huga þegar unnið er með gögn. Gögn sem koma frá framenda eru í eðli sínu ótraust og gætu innihaldið óæskileg gildi sem gætu valdið óskunda. Því verður alltaf að sannreyna þau þar.

5.3.7 Dæmi um form

<!doctype html>
<html lang="is">
  <head>
    <meta charset="utf-8" />
    <title>Form dæmi</title>
  </head>
  <body>
    <form action="https://www.google.com/search" method="get">
      <label>
        Leitarorð:
        <input type="search" name="q">
      </label>
      <button>Leita með Google</button>
     </form>
     <form action="/skraning" method="post">
      <fieldset>
        <legend>Persónuupplýsingar</legend>
        <label>
          Nafn:
          <input type="text" id="name" required>
        </label>
        <label>
          Sími:
          <input type="text" id="phone"  placeholder="000-0000">
        </label>
        <div>
          <label for="comment">Athugasemdir:</label>
          <textarea name="comment" id="comment"></textarea>
        </div>
      </fieldset>
      <fieldset>
        <legend>Upplýsingar</legend>
        <label>
          <input name="delivery" type="radio" value="mail">
          Senda í bréfpósti
        </label>
        <label>
          <input name="delivery" type="radio" value="email" checked>
          Senda í tölvupósti
        </label>
        <div>
          <label>
            <input name="register" type="checkbox">
            Skrá á póstlista
          </label>
        </div>
      </fieldset>
      <fieldset>
        <legend>Spurningar</legend>
        <div>
          <label for="color">Uppáhaldslitur</label>
          <select id="color" name="color">
            <option value="green">Grænn</option>
            <option value="red">Rauður</option>
          </select>
        </div>
        <div>
          <label for="language">Uppáhaldsmál</label>
          <input id="language" type="text" list="languages">
        </div>
      </fieldset>
      <button type="reset">Byrja upp á nýtt</button>
      <button>Senda</button>
      <datalist id="languages">
        <option value="css">CSS</option>
        <option value="english">Enska</option>
        <option value="html">HTML</option>
        <option value="icelandic">Íslenska</option>
        <option value="english">Japanska</option>
        <option value="javascript">JavaScript</option>
      </datalist>
    </form>
  </body>
</html>
Dæmi

Birting á dæmi í vafra. Val um uppáhalds lit býður upp á nákvæmlega tvö gildi: Grænn eða Rauður. Uppáhaldsmál er hinsvegar texta reitur sem mun bjóða upp að velja úr lista, t.d. ef byrjað er að skrifa j, koma upp möguleikar á að velja Japanska eða JavaScript.

Skjáskot frá höfundi.