Lektion 3 — HTML II og CSS
Christian Budtz — chbu@dtu.dk
1 / 37
F fuld skærm · B sort · O overblik
Christian Budtz — chbu@dtu.dk
id, class, div — og span vs div vs p<form>, <input>, <label>, <button> — nytPauser lægges ind undervejs.
Efter lektionen skal du kunne:
id, class og divstyles.csswidth, farve, margin (inkl. auto) og padding<form>, <label>, <input> og <button>Fra forberedelsen:
id — unikt på siden. Ét element.class — kan sidde på mange elementer.<label for="kode">Adgangskode</label>
<input id="kode" type="password">
<div class="kort">…</div>
id til at pege på ét felt (label, senere JavaScript).
class til CSS — samme udseende flere steder.
<div> er en kasse uden egen betydning. Den grupperer, så I kan style.
<div class="kort">
<h1>Log ind</h1>
<p>…</p>
</div>
Ikke et afsnit (<p>). Ikke en overskrift. Bare en ramme.
I Øvelse 1: wrap login-siden i et div med en class.
Tre måder at «pakke» indhold — forskellig betydning:
| Element | Type | Betydning | Note |
|---|---|---|---|
<p> |
blok | Et afsnit — tekst med mening | Ekstra linje før og efter |
<div> |
blok | Kasse uden mening — gruppering/layout | Linebreak før og efter |
<span> |
inline | Stykke i en linje — style et ord | Ingen linebreak |
<p>
Log ind med dit
<span class="highlight">studie-id</span>.
</p>
<div class="kort">
<p>…</p>
</div>
<p> til tekstafsnit.<div> når I skal samle flere elementer (fx et kort).<span> når I kun vil farve eller fremhæve noget inde i teksten.<div> og <span> er «tomme» — vælg dem når I ikke har et mere præcist tag.
Når tegnet selv er HTML-syntaks, kan browseren ikke se forskel på indhold og kode:
| Tegn | Skrives |
|---|---|
< |
< |
> |
> |
& |
& |
| hårdt mellemrum | |
I skriver almindelig tekst i felter og overskrifter — ikke tegn, der er HTML. Derfor møder I dem sjældent. Vid at de findes - slå dem op efter behov.
HTML beskriver hvad. CSS beskriver hvordan det ser ud. I har mødt deklarativt sprog før: SQL.
<h1 style="color: blue;">Overskrift</h1>
<style> i <head><link rel="stylesheet" href="styles.css">
I Cafe Menu flyttede I CSS ud i en fil. Det er standarden til D1.
selector {
egenskab: værdi;
}
h1 er type. .menu er class. #login er id.
h1 {
text-align: center;
}
.menu {
width: 80%;
}
#login {
margin: auto;
}
| Selector | Matcher | Note |
|---|---|---|
h1 |
alle <h1> |
type (html element) |
.menu |
class="menu" |
class |
#login |
id="login" |
id |
id er unik, class kan genbruges.
Mere specifik regel vinder:
h1) — svagest.knap)#send) — stærkest af de trep { color: blue; }
.fremhaev { color: red; } /* vinder over p */
#advarsel { color: black; } /* vinder over .fremhaev */
!important er en nødbremse — ikke en metode. Hvis du har brug for den er det ved at gå galt.
Inde fra og ud:
indhold → padding → border → margin
margin: auto — centrerer (vandret), når der er en widthKig i DevTools: Computed.
| Enhed | Type | Brug |
|---|---|---|
px |
absolut | kanter, skarpe mål |
rem |
relativ | tekst og luft — standard nu |
% |
relativ | andel af det omgivende element |
vh / vw |
relativ (viewport height/width) | andel af vinduet |
em er relativ til elementets font. rem er relativ til roden — lettere at styre.
px er den absolutte. %, rem, vh/vw er relative.
| Værdi | Relativt til |
|---|---|
static |
normalt flow (default) |
relative |
dér hvor elementet ellers ville være |
absolute |
nærmeste positionerede forælder |
fixed |
viewport — bliver på skærmen |
sticky |
scroller med, indtil den sætter sig fast |
position: fixed — bliver på samme sted i vinduet, også når man scroller.
Float til layout: spring over. Side om side kommer I til senere (flexbox).
.kort {
color: #333;
background-color: #f4f4f4;
border: 1px solid #ccc;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
padding: 1.5rem;
max-width: 24rem;
}
Det er det, I skal bruge på login-siden.
:hover er en pseudoklasse — den matcher et element i en bestemt tilstand (musen over).
button:hover {
background-color: #222;
}
Samme familie: :focus, :active. Skrives med én kolon (:), ikke to (:: — det er pseudo-elementer som ::before).
Højreklik → Inspicér → fanen Styles.
Når siden ser rigtig ud, men I ikke ved hvorfor: kig her.
Gå til /quiz og indtast koden fra tavlen.
Lektion 3: HTML og CSS — id/class/div, CSS-regler, stylesheet, selectors og margin.
Lektion 1: <h1>, <p>, <img>, <a>, lister, login.html med et felt og en knap.
I dag nyt: feltet og knappen ind i en rigtig formular.
<form>
<label for="brugernavn">Brugernavn</label>
<input id="brugernavn" type="text" required>
<button type="submit">Log ind</button>
</form>
<form>Ramme om felter, der hører sammen.
<form action="#" method="get">
…
</form>
action — hvor browseren vil sende henmethod — get eller postTil D1 mockup: I submitter ikke til en server. Brug action="#" — eller udelad action.
HTTP hører til senere (Lektion 11 og 13).
<input><input type="text" id="brugernavn" required>
<input type="password" id="kode" required>
<input type="email" id="mail" placeholder="navn@dtu.dk">
text — brugernavnpassword — adgangskode (prikker)email — browseren tjekker formatrequired — feltet skal udfyldes. placeholder — hint i det tomme felt.
Der findes flere (checkbox, radio, date, file, …). Til login er text og password nok.
<label>Klik på teksten — feltet får fokus. Det kræver at for matcher id:
<label for="kode">Adgangskode</label>
<input id="kode" type="password" required>
Uden label er feltet sværere at ramme — og sværere at bruge med skærmlæser.
id til label. class til CSS. name først, når noget sendes til en server.
<button><button type="submit">Log ind</button>
<button type="reset">Nulstil</button>
<button type="button">Luk</button>
submit — standard inde i en <form>reset — tømmer felternebutton — gør ingenting af sig selv (JavaScript senere)Foretræk <button> frem for <input type="submit">.
<link rel="stylesheet" href="styles.css">
…
<form action="#">
<label for="brugernavn">Brugernavn</label>
<input id="brugernavn" type="text" required>
<label for="kode">Adgangskode</label>
<input id="kode" type="password" required>
<button type="submit">Log ind</button>
</form>
lang="da", charset og viewport som i Lektion 1.
Byt navnet ud med jeres projekt. Den fulde fil står i øvelsesarket.
Gå til /quiz og indtast koden fra tavlen.
Lektion 3: Formularer — <form>, <label>/for, input-typer, action, button.
Man lærer bedst CSS og formularer ved at prøve selv.
Detaljerne — tjekliste og ekstra tid — står i øvelsesarket.
Freestyle i VS Code. Samme mappe som Lektion 1.
<form> med <label>, brugernavn, adgangskode og knapstyles.css med <link>Ikke mere Cafe Menu — det var forberedelsen.
I grupper: style forsiden, og skitsér 1–2 skærme mere med HTML + CSS.
Det er stadig D1-mockup — klikbart, ingen backend.