Przeglądarka Zdjęć (JS + CSS + HTML)
sprawdzianik1.pages.dev
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Przeglądarka zdjęć</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="gora">
<button onclick="pokaz(index - 1)"><</button>
<img id="duze" src="https://picsum.photos/id/1018/800/600" alt="Duże zdjęcie">
<button onclick="pokaz(index + 1)">></button>
</div>
<hr>
<div id="dol">
<img class="mini aktywna" src="https://picsum.photos/id/1018/800/600" alt="1" onclick="pokaz(0)">
<img class="mini" src="https://picsum.photos/id/1015/800/600" alt="2" onclick="pokaz(1)">
<img class="mini" src="https://picsum.photos/id/1019/800/600" alt="3" onclick="pokaz(2)">
<img class="mini" src="https://picsum.photos/id/1025/800/600" alt="4" onclick="pokaz(3)">
</div>
<script src="script.js"></script>
</body>
</html>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: sans-serif;
padding-top: 40px;
display: flex;
flex-direction: column;
align-items: center;
}
#gora {
display: flex;
align-items: center;
gap: 20px;
}
#duze {
width: 600px;
height: 400px;
object-fit: cover;
}
button {
font-size: 30px;
padding: 10px 15px;
cursor: pointer;
}
hr {
width: 100%;
margin: 20px 0;
border: 1px solid #ccc;
}
#dol {
display: flex;
gap: 15px;
}
#dol img {
width: 120px;
height: 80px;
object-fit: cover;
cursor: pointer;
}
.aktywna {
outline: 3px solid blue;
}
var zdjecia = [
'https://picsum.photos/id/1018/800/600',
'https://picsum.photos/id/1015/800/600',
'https://picsum.photos/id/1019/800/600',
'https://picsum.photos/id/1025/800/600'
];
var index = 0;
function pokaz(i) {
index = i;
if (index < 0) index = zdjecia.length - 1;
if (index >= zdjecia.length) index = 0;
document.getElementById('duze').src = zdjecia[index];
document.querySelector('.aktywna').classList.remove('aktywna');
document.querySelectorAll('.mini')[index].classList.add('aktywna');
}
Gotowe odpowiedzi na pytania nauczyciela:
- Dlaczego <hr> potrzebuje width: 100%? Ponieważ
body to flexbox z align-items: center, który domyślnie zwija puste elementy blokowe do 0px szerokości.
- Czym różni się outline od border?
outline nie zajmuje miejsca w modelu pudełkowym – dodanie go po kliknięciu miniatury nie przesuwa i nie drga sąsiednich elementów.
- Co robi object-fit: cover? Sprawia, że zdjęcie zachowuje swoje proporcje i nie jest nienaturalnie rozciągane ani spłaszczane w sztywnej ramce (600x400 px).
- Jak działa zapętlenie galerii? Jeśli
index < 0, ustawiamy zdjecia.length - 1 (ostatnie). Jeśli index >= zdjecia.length, ustawiamy 0 (pierwsze).