Grundlæggende indhold,
1. semester
mandag
mandag
kort gennemgang
recap af tema 2 + 4
mandag
Overskrift
h1 {
color: blue;
}
h1 {
color: red;
}
I browseren
Hvilken regel gælder?
Overskrift
h1 {
color: blue;
}
h1 {
color: red;
}
I browseren
Hvilken regel gælder?
Vinder, fordi den bliver læst sidst
Heading 2
#my-heading {
color: blue;
}
.heading {
color: red;
}
I browseren
Hvilken regel gælder?
<h2 class="heading" id="my-heading">Heading 2</h2>
#my-heading {
color: blue;
}
.heading {
color: red;
}
I browseren
Hvilken regel gælder?
Vinder, fordi ID er mere specifik end CLASS
Heading 2
p {
color: blue;
}
#context {
color: red;
}
I browseren
Hvilken regel gælder?
Paragraf
<div id="context">
<p>Paragraf</p>
</div>
p {
color: blue;
}
#context {
color: red;
}
I browseren
Hvilken regel gælder?
Vinder, fordi den er mere specifik
Paragraf
<div id="context">
<p>Paragraf</p>
</div>
Brug et min. på at sammensætte den rigtige rækkefølge...
#main-header {
background: red;
}
header {
background: blue;
}
header.header {
background: green;
}
body #site > #main-header.header {
background: purple;
}
header[class="header"] {
background: yellow;
}
#main-header[class="header"] {
background: yellow;
}
Brug et min. på at sammensætte den rigtige rækkefølge...
#main-header {
background: red;
}
header {
background: blue;
}
header.header {
background: green;
}
body #site > #main-header.header {
background: purple;
}
header[class="header"] {
background: yellow;
}
#main-header[class="header"] {
background: yellow;
}
Brug et min. på at sammensætte den rigtige rækkefølge...
#main-header {
background: red;
}
header {
background: blue;
}
header.header {
background: green;
}
body #site > #main-header.header {
background: purple;
}
header[class="header"] {
background: yellow;
}
#main-header[class="header"] {
background: yellow;
}
Brug et min. på at sammensætte den rigtige rækkefølge...
#main-header {
background: red;
}
header {
background: blue;
}
header.header {
background: green;
}
body #site > #main-header.header {
background: purple;
}
header[class="header"] {
background: yellow;
}
#main-header[class="header"] {
background: yellow;
}
Brug et min. på at sammensætte den rigtige rækkefølge...
#main-header {
background: red;
}
header {
background: blue;
}
header.header {
background: green;
}
body #site > #main-header.header {
background: purple;
}
header[class="header"] {
background: yellow;
}
#main-header[class="header"] {
background: yellow;
}
Brug et min. på at sammensætte den rigtige rækkefølge...
#main-header {
background: red;
}
header {
background: blue;
}
header.header {
background: green;
}
body #site > #main-header.header {
background: purple;
}
header[class="header"] {
background: yellow;
}
#main-header[class="header"] {
background: yellow;
}
.red {
color: red;
}
.blue {
color: blue;
}
I browseren
Paragraf 1
<!DOCTYPE html>
<html lang="da">
<head>...</head>
<body>
<p class="blue red">Paragraf 1</p>
<p class="red blue">Paragraf 2</p>
</body>
</html>
Paragraf 2
Hvad er resultatet?
<p class="blue red">Paragraf 1</p>
<p class="red blue">Paragraf 2</p>
.red {
color: red;
}
.blue {
color: blue;
}
I browseren
<!DOCTYPE html>
<html lang="da">
<head>...</head>
<body>
<p class="blue red">Paragraf 1</p>
<p class="red blue">Paragraf 2</p>
</body>
</html>
<p class="blue red">Paragraf 1</p>
<p class="red blue">Paragraf 2</p>
Paragraf 1
Paragraf 2
Hvad er resultatet?
.red {
color: red;
}
.blue {
color: blue;
}
I browseren
<!DOCTYPE html>
<html lang="da">
<head>...</head>
<body>
<p class="blue red">Paragraf 1</p>
<p class="red blue">Paragraf 2</p>
</body>
</html>
<p class="blue red">Paragraf 1</p>
<p class="red blue">Paragraf 2</p>
Paragraf 1
Paragraf 2
Hvad er resultatet?
versionskontrolsystem
Holder styr på alle de ændringer, der er foretaget i arbejdsfilerne (HTML, CSS, JS).
versionskontrolsystem
Holder styr på alle de ændringer, der er foretaget i arbejdsfilerne (HTML, CSS, JS).
versionskontrolsystem
Holder styr på alle de ændringer, der er foretaget i arbejdsfilerne (HTML, CSS, JS).
Det giver flere udviklere mulighed for at dele og arbejde sammen på det samme sæt filer, uden at komme i konflikt med hinandens arbejde.
versionskontrolsystem
Holder styr på alle de ændringer, der er foretaget i arbejdsfilerne (HTML, CSS, JS).
Det giver flere udviklere mulighed for at dele og arbejde sammen på det samme sæt filer, uden at komme i konflikt med hinandens arbejde.
Det holder ikke kun styr på, hvilke filer der blev ændret, men det holder også styr på
hvilke ændringer blev der foretaget
hvem foretog disse ændringer
hvornår ændringerne skete
versionskontrolsystem
Holder styr på alle de ændringer, der er foretaget i arbejdsfilerne (HTML, CSS, JS).
Det giver flere udviklere mulighed for at dele og arbejde sammen på det samme sæt filer, uden at komme i konflikt med hinandens arbejde.
Det holder ikke kun styr på, hvilke filer der blev ændret, men det holder også styr på
En avanceret fortrydknap
git config --global user.name "Your Name"
git config --global user.email "youremail@yourdomain.com"
Tema 4
querySelector
function()
addEventListener
classList
querySelector()
function()
addEventListener()
classList
)
querySelector(
function()
addEventListener()
classList
)
<h1>Overskrift</h1>
h1
querySelector(
function()
addEventListener()
classList
)
<h1>Overskrift</h1>
h1
querySelector(
function()
addEventListener()
classList
)
<h1>Overskrift</h1>
h1
" "
CSS selector
querySelector(
function()
addEventListener()
classList
)
<h1>Overskrift</h1>
h1
" "
document.
Kig efter h1 i HTML-dokumentet
querySelector(
function()
addEventListener()
classList
)
h1
" "
document.
const heading =
querySelector(
function()
addEventListener()
classList
)
h1
" "
document.
const heading =
querySelector(
function()
addEventListener()
classList
)
h1
" "
document.
const heading =
heading.
querySelector(
function()
addEventListener()
classList
)
h1
" "
document.
const heading =
heading.
.add
("min-klasse")
.remove
querySelector(
function()
addEventListener()
classList
)
h1
" "
document.
const heading =
heading.
.add
("min-klasse")
.remove
.toggle
querySelector(
function() {
addEventListener()
classList
)
h1
" "
document.
const heading =
heading.
("min-klasse")
.remove
.toggle
querySelector(
function() {
addEventListener()
classList
)
h1
" "
document.
const heading =
heading.
("min-klasse")
.remove
.toggle
}
querySelector(
function() {
addEventListener(
classList
)
h1
" "
document.
const heading =
heading.
("min-klasse")
.remove
.toggle
}
querySelector(
)
button
" "
document.
const btn =
)
querySelector(
function() {
addEventListener(
classList
)
h1
" "
document.
const heading =
heading.
("min-klasse")
.remove
.toggle
}
querySelector(
)
button
" "
document.
const btn =
)
querySelector(
function() {
addEventListener(
classList
)
h1
" "
document.
const heading =
heading.
("min-klasse")
.remove
.toggle
}
querySelector(
)
button
" "
document.
const btn =
btn.
)
querySelector(
function klikket () {
addEventListener(
classList
)
h1
" "
document.
const heading =
heading.
("min-klasse")
.remove
.toggle
}
querySelector(
)
button
" "
document.
const btn =
btn.
)
"click", klikket
querySelector(
function()
addEventListener()
classList
)
h1
" "
document.
const btn = document.querySelector("button");
const heading = document.querySelector("h1");
function klikket() {
heading.classList.toggle("min-klasse")
}
btn.addEventListener("click", klikket)
h1 {
font-size: 3rem;
}
.min-klasse {
background: red;
}
background
padding + background
<article>
<h2>Lorem ipsum...</h2>
</article>
<article>
<h2>
position: absolute;
The element is removed from the normal document flow, and no space is created for the element in the page layout. It is positioned relative to its closest positioned ancestor, if any; otherwise, it is placed relative to the initial containing block. Its final position is determined by the values of top, right, bottom, and left.
position: absolute;
position: absolute;
position: absolute;
I browseren
Block eller inline
<h1>Heading</h1>
I browseren
Block eller inline
Paragraf
Paragraf
<h1>Heading</h1>
<p>Paragraf</p>
<p>Paragraf</p>
I browseren
Position absolute 🤷♂️
Paragraf
Paragraf
<h1>Heading</h1>
<p>Paragraf</p>
<p>Paragraf</p>
I browseren
Position absolute 🤷♂️
Paragraf
Paragraf
<h1>Heading</h1>
<p>Paragraf</p>
<p>Paragraf</p>
top: 67px;
top: 112px;
I browseren
Block eller inline
Paragraf
Paragraf
block elementer
(ny linje)
De fleste elementer er block-elementer
I browseren
Block eller inline
Paragraf med span, em og strong
<h1>Heading</h1>
<p>Paragraf med <span>span</span>, <em>em</em> og <strong>strong</strong></p>
<span>, <em>, <strong>, <br>, <img> og <a> er alle inline-elementer
Bør man aldrig bruge
position: absolute;?
Bør man aldrig bruge
position: absolute;?
Bør man aldrig bruge
position: absolute;?
Grid-øvelser
1
2
3
4
5
1
2
3
4
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
1
2
3
4
.container {
display: grid;
grid-template-rows: 100px 100px 100px;
grid-template-columns: 260px 180px 120px 180px;
}
260px
180px
120px
180px
100px
100px
100px
1
2
3
4
5
6
7
8
1
2
3
4
5
1
2
3
4
.container {
display: grid;
grid-template-rows: 100px 100px 100px;
grid-template-columns: 260px 180px 120px 180px;
}
.child-3,
.child-5,
.child-7 {
grid-column: span 2;
}
.child-4 {
grid-row: span 2;
}
260px
180px
120px
180px
100px
100px
100px
1
2
3
4
5
6
7
8
1
2
3
4
5
1
2
3
4
.container {
display: grid;
grid-template-rows: 100px 100px 100px;
grid-template-columns: 260px 180px 120px 180px;
}
.child-3,
.child-5,
.child-7 {
grid-column: span 2;
}
.child-4 {
grid-row: span 2;
}
260px
180px
120px
180px
100px
100px
100px
1
2
3
4
5
6
7
8
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 20px;
}
I browseren
1
2
3
4
5
6
7
8
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 20px;
}
I browseren
1
2
3
4
5
6
7
8
.container {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 20px;
}
I browseren
1
2
3
4
5
6
7
8
.container {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 20px;
max-width: 800px;
margin-inline: auto;
}
I browseren
800px (maksimum bredde)
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 20px;
}
.container
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 20px;
}
.container
.container {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
}
.container
layoutdiagram
A better user experience
HTML forms
Frontend elective, 3rd SEM
1
2
3
.container {
display: block;
}
I browseren
A better user experience
HTML forms
Frontend elective, 3rd SEM
1
2
3
.container {
display: flex;
}
I browseren
flex-kontekst
A better user experience
HTML forms
Frontend elective, 3rd SEM
1
2
3
.container {
display: flex;
}
I browseren
plads i overskud
A better user experience
HTML forms
Frontend elective, 3rd SEM
1
2
3
.container {
display: flex;
justify-content: center;
}
I browseren
A better user experience
HTML forms
Frontend elective, 3rd SEM
1
2
3
.container {
display: flex;
justify-content: center;
gap: 10px;
}
I browseren
A better user experience
HTML forms
Frontend elective, 3rd SEM
1
2
3
.container {
display: flex;
justify-content: space-between;
gap: 10px;
}
I browseren
Hvilke andre properties?
?
?
.box {
border: 2px solid #7f7f7f;
width: 150px;
height: 100px;
}
Tekst 1
Tekst 2
<div class="box">
<p>Tekst 1</p>
</div>
<p>Tekst 2</p>
.box {
border: 2px solid #7f7f7f;
width: 150px;
height: 100px;
padding: 20px;
}
Tekst 1
Tekst 2
.box {
border: 2px solid #7f7f7f;
width: 150px;
height: 100px;
padding: 20px;
margin: 20px;
}
Tekst 1
Tekst 2
.box {
border: 2px solid #7f7f7f;
width: 150px;
height: 100px;
padding: 20px;
margin: 20px;
}
Tekst 1
Tekst 2
mellem child-elementer
rundt om elementer
inde i elementer
ledig plads
Padding
Margin
Border
Content
Content
Padding
Margin
Border
Tekst, width, height
div {
width: 160px;
height: 80px;
padding: 20px;
border: 8px solid red;
background: yellow;
}
.content-box {
box-sizing: content-box;
}
.border-box {
box-sizing: border-box;
}
80 + 16 + 40 = 136px
80 + 16 + 40 = 80px
* {
box-sizing: border-box;
}
* {
box-sizing: border-box;
margin: 0;
}
img {
vertical-align: middle;
width: 100%;
height: auto;
}
display: block;
eller
Et selvstændigt indholdselement
<article>
<h1>Mit blogindlæg</h1>
<p>Dette er mit blogindlæg</p>
</article>
eksempler
En navigation
<nav>
<ul>
<li><a href="about.html">Om mig</a></li>
<li><a href="contact.html">Kontakt</a></li>
</ul>
</nav>
eksempler
En adresse
<address>
<a href="mailto:davi@kea.dk">davi@kea.dk</a>
<a href="tel:+4520202020">20 20 20 20</a>
</address>
eksempler
<header>
<article>
<nav>
<aside>
<main>
<section>
<footer>
<h1>...<h6>
<figure>
<figcaption>
<mark>
<address>
<details>
<summary>
<time>
<p>
<div>
<span>
<b>
<i>
<div>
It is used to group content so it can be easily styled using the class attribute
<span>
inline-element
Browseren forstår ikke betydningen af indholdet, men du kan lettere se, hvad formålet er, hvis elementet er opmærket med et passende klasse-navn.
block-element
Overvej følgende markup
Det første eksempel har ingen semantisk værdi, da det ikke fortæller noget om formålet, struktur eller hierarki. Visuelt ligner det en overskrift, men browseren anser det ikke for at være betydningsfuldt.
<span style="font-size: 32px;">
Er dette en hovedoverskrift?
</span>
<h1>Dette er en hovedoverskrift</h1>
Sematisk markup betyder altså, at HTML tags er baseret på meningen og strukturen af indholdet og ikke på, hvordan det ser ud i browseren
SEO
Du fortæller effektivt søgemaskiner, hvad din side handler om, og hvorfor folk, der søger efter disse søgeord, ville være interesseret i dit indhold
Tilgængelighed
Eksempelvis skærmlæsere, som kan give folk, der bruger dem mere præcise oplysninger om arkitekturen af dit website med henblik på lettere at kunne navigere i indholdet.
Vedligeholdelse
Semantisk opmærkning gør det nemmere at læse og forstå opbygningen af et website, da HTML-elementerne siger noget om udviklerens intention med indholdet