PODSTAWY

HTML, CSS & JS

Paweł Klockiewicz

Prawa do korzystania z materiałów posiada Software Development Academy

Kim jestem?

 

  • Inżynier informatyk o specjalności "aplikacje webowe"
     
  • Magister o specjalności "UX Design"
     
  • 6-letnie doświadczenie komercyjnie
     
  • Wszechświat, człowiek, filozofia, kino, seriale, memy

Niezbędnik

Co jest potrzebne do zajęć?

Edytor programistyczny

Visual Studio Code

Przeglądarka oparta o Chromium

HTML

1

Co to HTML?

Język HTML służy do tworzenia internetowych dokumentów, którego znaczniki zostają przeobrażone z tekstowego opisu zawartego w pliku przez przeglądarkę na postać graficzną.

 

Elementy języka HTML składają się zazwyczaj z dwóch znaczników: otwierającego i zamykającego. Znacznik zaś to fragment tekstu zamknięty wewnątrz znaków nawiasów ostrokątnych ("<" i ">").

Tagi HTML

<p>

</p>

Tag otwierający

Tag zamykający

Treść pomiędzy tagami...

Atrybuty tagów HTML

<p lang="pl">Paragraf po polsku</p>

nazwa atrybutu

wartość atrybutu

Struktura strony w HTML

<!DOCTYPE html>      deklaracja dokumentu HTML

<html>                          definiuje dokument HTML

<head>                         zawiera informacje dla przeglądarki i wyszukiwarek

<meta charset="...">  określa kodowanie znaków dokumentu

<title>                            element wyświetlany przez przeglądarkę na karcie

<body>                          zawartość renderowana przez przeglądarkę

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Tytuł strony</title>
    </head>
    <body>
        <h1>Treść strony</h1>
        <p>Wszystko pomiędzy znacznikiem "body" jest renderowane przez przeglądarkę.</p>
    </body>
</html>

HTML a Przeglądarka

<title>

<body>

Ćwiczenie 1.1

  1. Otwórz edytor Visual Studio Code.
  2. Utwórz nowy plik.
  3. Wklej kod ze slajdu o strukturze kodu HTML.
  4. Zapisz plik jako index.html.
  5. Otwórz plik.

Ćwiczenie 1.2

  1. Wybierz kolejno Widok > Programista > Narzędzia dla programistów.
  2. Przyjrzyj się narzędziu oraz jego zakładkom.
  3. Sprawdź czy możesz edytować kod HTML otwartej strony.

Podsumowanie 1.1

  • Strony HTML to tekstowe dokumenty.
  • HTML korzysta z tagów.
  • Tagi często nazywane są elementami.
  • Nie wszystkie tagi zawierają tag domknięcia
  • Tagi otwierające mogą zawierać atrybuty.
  • Atrybuty tagu składają się z nazwy i wartości.

TEKST

// nagłówki

<h1>Nagłówek główny</h1>
<h2>Nagłówek II poziomu</h2>
<h3>Nagłówek III poziomu</h3>
<h4>Nagłówek IV poziomu</h4>
<h5>Nagłówek V poziomu</h5>
<h6>Nagłówek VI poziomu</h6>

Istnieje 6 poziomów nagłówków. Poziomy te odzwierciedlają ich ważność oraz wielkość.

 

<h1> jest używany jako nagłówek główny, <h2> jako podtytuł.

Ćwiczenie 1.3

  1. Dodaj do <body> wszystkie 6 nagłówków i sprawdź jaką domyślną wielkość nada im przeglądarka.

TEKST

// paragrafy

<p>
    Paragraf (akapit) składa się z jednego lub więcej zdań. Początek paragrafu jest oznaczony nową linią.
</p>
<p>
    Tekst czyta się łatwiej, kiedy jest podzielony na paragrafy. Paragrafy stosuje się najczęściej pod nagłówkiem.
</p>

Paragraf (akapit) składa się z jednego lub więcej zdań.


Przeglądarka domyślnie utworzy paragraf w nowej linii oraz doda odstęp pomiędzy kolejnymi akapitami.

TEKST

// wyróżniki

<b>Ten tekst jest pogrubiony</b>

<br>

<i>Ten tekst jest pochylony</i>

<hr>

<u>Ten tekst jest podkreślony</u>

<p>Równoważność masy i energii wyrażamy wzorem E = MC<sup>2</sup></p>

<p>CO<sub>2</sub> - najważniejszy gaz cieplarniany</p>

<b>  pogrubienie           <i>  kursywa           <u>  podkreślenie

<sup indeks górny           <sub>  indeks dolny

Ćwiczenie 1.4

  1. Sprawdź rolę <br> oraz <hr> w kodzie z poprzedniego slajdu.
  2. Spróbuj dodać do paragrafu pomiędzy wyrazami kilka(naście) spacji.
  3. Sprawdź funkcję tagów <em> oraz <strong>.

TEKST

// <i> vs <em>

Z punktu widzenia zwyczajnego odbiorcy tekstu na stronie, nie zauważy on różnicy pomiędzy <i> a <em> oraz <b> a <strong>.

 

Różnica jest jednak spora. Przeglądarki domyślnie renderują te tagi w ten sam sposób, lecz tylko <em> i <strong> mają znaczenie semantyczne, tj. dodają dokumentowi HTML dodatkowego znaczenia.

TEKST

// tagi semantyczne

Istnieje więcej tagów tekstowych, które nie mają wpływać na strukturę strony, ale wzbogacić o dodatkowe informacje. Nazywamy je znacznikami semantycznymi.

 

Zdarza się jednak, że przeglądarki nadają im inny styl wyświetlania, lecz nie jest to ich główny cel. Ich zadaniem jest dokładniejsze opisanie zawartości strony.

Ćwiczenie 1.5

  1. Przetestuj działanie poniższych znaczników. Sprawdź czy są różnie wyświetlane w zależności od przeglądarki oraz odgadnij ich znaczenie.

    <blockquote>, <q>, <abbr>, <cite>, <dfn>, <address>, <ins>, <del>, <s

LISTY

// numerowane

Listę numerowaną tworzymy znacznikiem <ol>. Każdy element listy musi być umiejscowiony w tagu <li>.

<h1>Przepis na kanapki z awokado:</h1>

<ol>
    <li>Jajka ugotować na twardo</li>
    <li>Chleb opiec w tosterze</li>
    <li>Awokado przekroić wzdłuż na 4 części</li>
    <li>Dodać jajka, opcjonalnie plasterki ogórka</li>
    <li>Doprawić solą i pieprzem</li>
</ol>

ol  ordered list          li   list item

LISTY

// nienumerowane

Listę nienumerowaną tworzymy znacznikiem <ul>. Każdy element listy musi być umiejscowiony w tagu <li>.

<h1>Składniki kanapek z awokado:</h1>

<ul>
    <li>2 jajka</li>
    <li>4 kromki chleba</li>
    <li>1 dojrzałe awokado</li>
    <li>1 ogórek</li>
    <li>sól i pieprz</li>
</ul>

ul  unordered list          li   list item

LISTY

// definicje

Listę definicji tworzymy znacznikiem <dl>. Definiowane wyrażenie umieszczamy w <dt>, a jej wyjaśnienie w <dd>.

<dl>  
    <dt>HTML</dt>  
    <dd>to język znaczników.</dd>  

    <dt>Java</dt>  
    <dd>to obiektowy język programowania.</dd>  

    <dt>JavaScript</dt>  
    <dd>to skryptowy język programowania.</dd>  

    <dt>SQL</dt>  
    <dd>to strukturalny język zapytań.</dd>   
</dl>

dl  definition list          dt   definition term          dd   definition description

Ćwiczenie 1.6

  1. Wypróbuj przedstawione sposoby tworzenia list.
  2. Spróbuj stworzyć 3-poziomową listę:
    • I poziom
      • II poziom
        • III poziom

LINKI

<a href="https://sdacademy.pl/">SDA</a>

adres, na który prowadzi hiperłącze

tekst, w który użytkownik klika

// budowa

LINKI

<a href="mailto:user@domena.pl">Napisz do mnie</a>

specjalny przedrostek

// maile

LINKI

<a href="https://sdacademy.pl/" target="_blank">SDA</a>

dodatkowy atrybut

// nowa karta

OBRAZKI

<img src="img/logo.png" alt="Logo firmy SDA" title="Software Development Academy">

adres obrazu

// budowa

dodatkowa informacja

opis obrazu

OBRAZKI

// skąd je brać?

Google Images nie jest rozwiązaniem, gdyż wiele ze zbiorów tej wyszukiwarki jest chroniona prawem autorskim. Rozwiązaniem są darmowe zdjęcia stockowe.

WYSZUKIWARKA DARMOWYCH ZDJĘĆ

RYCINA

<figure>
    <img src="/img/animals/elephant.jpg" alt="Słoń podczas zachodu słońca">
    <figcaption>Słoń podczas zachodu słońca</figcaption>
</figure>

Znacznik, w którym umieszcza się obrazy, diagramy, wykresy, a nawet wycinki kodu źródłowego.

 

Zazwyczaj razem z ryciną występuje jej opis w tagu <figcaption>, choć nie jest on wymagany.

Słoń podczas zachodu słońca

ŚCIEŻKI

// adresy do zasobów

https://sdacademy.pl/images/icons/java.png

ŚCIEŻKA ABSOLUTNA:

images/icons/java.png

ŚCIEŻKA RELATYWNA:

Ćwiczenie 1.7

  1. Wypróbuj przedstawione sposoby tworzenia linków.
  2. Sprawdź w Internecie, czy do linku z mailem da się dodać domyślny tytuł, treść oraz więcej niż jednego odbiorcę.
  3. Dodaj rycinkę kanapki z awokado.
  4. Podlinkuj 2 obrazki:
    - ze ścieżką relatywną,
    - ze ścieżką absolutną.

Podsumowanie 1.2

  • Wiele znaczników HTML przekazuje semantyczne informacje.
  • Istnieją 3 typy list: numerowana, nienumerowana oraz definicji.
  • Listy mogą zawierać wiele poziomów.
  • Elementy <a> korzystają z atrybutu href.
  • Atrybut src w tagu <img> zawiera ścieżkę do pliku.
  • Obrazy powinny zawierać atrybut alt z opisem.

TABELE

// colspan

<table>
    <thead>
        <tr>
            <th colspan="2">Nagłówek tabeli</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Zawartość tabeli</td>
            <td>z dwiema kolumnami</td>
        </tr>
    </tbody>
</table>

Nagłówek tabeli

Zawartość tabeli

z dwiema kolumnami

TABELE

// rowspan

<table>
    <tr>
        <th>Imię i nazwisko:</th>
        <td>Paweł Klockiewicz</td>
    </tr>
    <tr>
        <th rowspan="2">Telefony:</th>
        <td>55577854</td>
    </tr>
    <tr>
        <td>55577855</td>
    </tr>
</table>

Imię i nazwisko:

Telefony:

55577854

Paweł Klockiewicz

55577855

TABELE

// znaczniki

  • <table> – element budujący tabelę
  • <tr> – wiersz tabeli
  • <td> – komórka tabeli
  • <th> – komórka tabeli o funkcji nagłówka
  • <thead> – zawiera wiersz z nagłówkami
  • <tbody> – zawiera zwykłe komórki tabeli
  • <tfoot> – zawiera ostatni wiersz, np. z podsumowaniem

Ćwiczenie 1.8

  1. Odwzoruj następującą tabelę:

Wskazówka: aby uzyskać obramowanie, do znacznika <table> dodaj atrybut border="1".

FORMULARZE

// struktura

<form>

</form>

<label>

<input type="submit">

<input type="text">

<input type="email">

<input type="url">

<textarea>

FORMULARZE

// tag form

<form action="/register.php" method="POST">

metoda przesyłania danych

GET lub POST

adres, na który zostaną przesłane dane z formularza

FORMULARZE

// atrybuty pól

<input type="text" required>

pole wymagane

typ pola

<input type="text" disabled>

pole wyłączone

FORMULARZE

// atrybuty pól

<input type="text" value="Domyślna wartość">

wartość pola

<input type="text" name="login" placeholder="Wpisz login">

krótka podpowiedź

nazwa pola

FORMULARZE

// atrybuty pól

<input type="checkbox" checked>

domyślnie zaznaczone

<option value="yes" selected>Tak</option>

domyślnie wybrana opcja

Ćwiczenie 1.9

  1. Odwzoruj następujący formularz:

Podsumowanie 1.3

  • Element <table> służy do tworzenia tabel.
  • Tabel powinniśmy używać do przedstawiania danych.
  • Kolumny oraz wiersze tabeli można ze sobą łączyć.
  • Dobrą praktyką jest wprowadzanie podziału wierszy tabeli, np. na nagłówek oraz stopkę.
  • Do gromadzenia danych od użytkowników wykorzystuje się formularze <form>.
  • Każde pole powinno mieć swoją nazwę, dzięki czemu można przesłać jego wartość do serwera.

GRUPOWANIE

// div

<div id="header">
    <img src="images/logo.gif" alt="Moje logo">
    <ul>
        <li><a href="index.html">Strona Główna</a></li>
        <li><a href="about.html">O mnie</a></li>
        <li><a href="works.html">Prace</a></li>
        <li><a href="contact.html">Kontakt</a></li>
    </ul>
</div>

Znacznik <div> pozwala grupować wiele elementów do jednego o typie blokowym.

 

Typ blokowy to taki, który zaczyna się od nowej linii i domyślnie zajmuje 100% dostępnej szerokości.

GRUPOWANIE

// span

<p>
    Aenean rutrum fringilla. <span class="red">In quis luctus augue.</span> Donec ut posuere purus, nec mollis odio. Nunc sodales, massa sed fermentum fermentum, libero lorem convallis dolor, et pretium ex urna sed odio.
</p>

Znacznik <span> pozwala grupować tekst, dla którego nie ma innego odpowiedniego tagu, który odróżniałby go od otaczającego tekstu.

 

Najczęstszym powodem, dla którego się go używa, jest to, że można kontrolować wygląd jego zawartości za pomocą CSS.

KOMENTARZE

<!-- Początek komponentu przekazu marketingowego -->
<div class="jumbotron">
    <h1>Navbar example</h1>
    <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>
    <p>
        <a class="btn btn-lg btn-primary" href="../../components/#navbar" role="button">View navbar docs »</a>
    </p>
</div>
<!-- Koniec komponentu przekazu marketingowego -->

Ponieważ w elemencie <div> może znajdować się kilka kolejnych "divów", pomocne może być dodanie komentarza, który nie jest renderowany przez przeglądarkę.

SEMANTYCZNA STRUKTURA

<header>

<nav>

<section>

<article>

<aside>

<footer>

– nagłówek

– nawigacja

– sekcja

– artykuł

– poboczna sekcja

– stopka

Ćwiczenie 1.10

  1. Utwórz semantyczny kod HTML swojej strony domowej z wykorzystaniem poznanych znaczników.

Podsumowanie 1.4

  • Znacznik <div> to element blokowy służący do grupowania innych elementów (w tym divów).
  • Znacznik <span> to element liniowy służący do stylowania tekstu.
  • Dobrą praktyką jest stosowanie komentarzy oraz semantycznych znaczników HTML.

CSS

2

Co to CSS?

CSS, czyli kaskadowe arkusze stylów, to język, który daje zaawansowane możliwości formatowania tagów HTML. 

 

W arkuszach stylów znaczniki HTML używane są jako selektory, których właściwości mogą określić układ znacznika oraz wszelkie inne cechy związane z typografią oraz jego wyglądem.

 

Dziś CSS jest na tyle rozbudowany, że pozwala ominąć programy graficzne, które niegdyś były potrzebne do większości efektownych zabiegów wizualnych. 

Zrozumieć CSS

Kluczem do zrozumienia działania CSS jest wyobrażenie sobie, że wokół każdego elementu HTML znajduje się niewidzialne pole.

Działanie CSS

CSS działa poprzez powiązanie reguł z elementami HTML. Reguły te określają sposób wyświetlania zawartości określonych elementów. Reguła CSS zawiera dwie części: selektor i deklarację.

p {

     font-size: 16px;

}

właściwość

wartość

Używanie CSS

Reguły CSS można zaimplementować bezpośrednio do elementu HTML poprzez atrybut style.

<span style="color: red;">Tekst</span>

// liniowo

Używanie CSS

Drugim sposobem jest umieszczenie reguł CSS pomiędzy <style> a </style> w dokumencie strony.

// wewnętrznie

<!DOCTYPE html>
<html>
    <head>
        <title>Wewnętrzny styl CSS</title>
        <style>
            body {
                font-family: Arial;
                background-color: rgb(0, 0, 0);
            }
            h1 {
                color: rgb(255, 255, 255);
            }
        </style>
    </head>
    <body>
        <h1>Lorem ipsum</h1>
        <p>
            Nullam auctor nunc lorem, et bibendum nulla scelerisque sit amet. Pellentesque semper placerat sapien.
        </p>
    </body>
</html>

Używanie CSS

Ostatnim i najlepszym sposobem na użycie CSS jest jego zalinkowanie do dokumentu.

// zewnętrznie

body {
    font-family: Arial;
    background-color: rgb(0, 0, 0);
}
h1 {
    color: rgb(255, 255, 255);
}
<!DOCTYPE html>
<html>
    <head>
        <title>Wewnętrzny styl CSS</title>
        <link rel="stylesheet" href="styles.css">
    </head>
    <body>
        <h1>Lorem ipsum</h1>
        <p>
            Nullam auctor nunc lorem, et bibendum nulla scelerisque sit amet. Pellentesque semper placerat sapien.
        </p>
    </body>
</html>

index.html

styles.css

<link rel="stylesheet" href="styles.css">

Selektory

SELEKTOR ZNACZENIE PRZYKŁAD
* Zaznacza wszystkie elementy * {}
element Zaznacza dane nazwy elementów h1, h2, h3 {}
.class Zaznacza element, którego atrybut klasy ma nazwę zgodną z nazwą podaną po symbolu kropki .menu {}

p.quote {}
#id Zaznacza element, którego atrybut ID ma nazwę zgodną z nazwą podaną po symbolu kratki #header {}
element element
 
Zaznacza element będący potomkiem innego elementu (nie tylko bezpośrednim) div a {}
​element > element Zaznacza element, który jest bezpośrednim dzieckiem innego li > a {}
element element Zaznacza element, który występuje zaraz za poprzednim div + p {}
element ~ element Zaznacza każdy element, który znajduje się po poprzednim ul ~ p

Ćwiczenie 2.1

  1. Wejdź na flukeout.github.io i spróbuj przejść wszystkie poziomy.

Kolejność kaskadowania

Który styl zostanie użyty dla danego elementu w przypadku załadowania większej ilości arkuszy?

 

Wszystkie style "kaskadują" do nowego, wirtualnego stylu, według następującej kolejności:

1. Styl przeglądarki

2. Styl zewnętrzny

3. Styl wewnętrzny

4. Styl liniowy

Ćwiczenie 2.2

  1. Otwórz ten link i wykonaj wszystkie ćwiczenia od sekcji CSS How To... do CSS Align.

Flexbox

Przed wprowadzeniem Flexboxa, istniały cztery typy układu:

  • Blokowy, dla sekcji (display: block)
  • Liniowy, dla tekstu (display: inline)
  • Tabelkowy, dla danych (display: table)
  • Pozycjonujący (position: absolute | fixed | relative | static)


Flexbox ułatwia projektowanie elastycznej, responsywnej struktury układu bez użycia elementów pływających (float) i pozycjonowania.

Ćwiczenie 2.3

  1. Otwórz ten link i obroń się przed najazdem wroga wykorzystując flexbox do rozstawienia wieżyczek.

Ćwiczenie 2.4

  1. Korzystając z wcześniej utworzonej semantycznej struktury HTML, dodaj takie deklaracje CSS do swojej strony domowej, aby ułożenie jej elementów przypominało wzór z tego slajdu.
     
  2. Układ to nie wszystko. Poczuj się przez chwilę jak designer i nadaj swojej stronie niepowtarzalnego wyglądu, posługując się zdobytą wiedzą oraz wizualnym przewodnikiem po właściwościach CSS:

JavaScript

3

Co to JavaScript?

JavaScript to przede wszystkim język przeglądarek internetowych. To również język pozwalający tworzyć różnorodne aplikacje po stronie klienta i po stronie serwera, ale również aplikacje typu desktop, aplikacje mobilne i skrypty konsoli poleceń.

 

Biegłość w posługiwaniu się językiem JavaScript to dziś obowiązek każdego programisty stron WWW.

Zastosowania JavaScript

  • Przeglądarki WWW (frontend)
    • Jedna z 3 podstawowych technologii do tworzenia zawartości stron WWW (obok HTML i CSS)
    • Dynamiczne generowanie zawartości po stronie przeglądarki
  • Rozwiązania serwerowe dla aplikacji WWW (backend)
    • Node.js
  • Bazy danych NoSQL
    • JSON jako format danych, JavaScript do zapytań i przetwarzania danych (MongoDB, CouchDB)
  • Inne zastosowania jako wbudowany język skryptowy
    • Rozszerzenia przeglądarek, Adobe Acrobat i Reader, Open Office

JavaScript a Java

  • „Java is to JavaScript as Car is to Carpet”
     
  • Składnia obu języków wywodzi się ze składni języka C
     
  • Typowanie w JavaScript jest dynamiczne, a w Javie statyczne
     
  • JavaScript nazywało się pierwotnie LiveScript
     
  • JavaScript został tak nazwany przez Netscape, aby zmylić nieświadomych, że ma coś wspólnego z Javą. Cóż... Udało się

DOM

DOM to skrót od Document Object Model, czyli obiektowy model dokumentu.

BOM

BOM to skrót od Browser Object Model, czyli obiektowy model przeglądarki.

 

To zbiór metod i właściwości związanych z przeglądarką internetową, na przykład dostępny rozmiar okna.

window

document

frames

history

location

navigator

screen

ECMAScript

To rdzeń języka JavaScript, czyli to, co pozostanie po usunięciu DOM i BOM. Innymi słowy, to część definiująca składnię, pętle, funkcje, obiekty itd.

 

JavaScript powstał w firmie Netscape, który później został ustandaryzowany przez stowarzyszenie Ecma International.

 

Dziś od strony technicznej JavaScript oznacza tak naprawdę implementację języka ECMAScript.

JavaScript

Gdy ludzie mówią o JavaScript, mogą myśleć o wielu zagadnieniach. Innymi słowy:

 

JavaScript = ECMAScript + DOM + BOM

Ćwiczenie 3.1

  1. Uruchom konsolę w narzędziach dewelopera
    (Windows / Linux: Ctrl + Shift + J; Mac OS: Cmd + Opt + J)
  2. Wprowadź 2 + 2 i wciśnij enter.
  3. Wprowadź alert("Hello World!") i wciśnij enter.
  4. Wprowadź "hey" + "ho" i wciśnij enter.
  5. Wprowadź następujące linie kodu:
let myValue = 32 * 32;
alert(myValue);
myValue = 10;
alert(myValue);

Osadzanie JavaScript

Fragmenty JavaScript można osadzać w dokumentach

HTML za pomocą znacznika <script>.

 

Podobnie jak w przypadku CSS, JS można osadzić liniowo, wewnętrznie oraz zewnętrznie.

<!doctype html>
<html>
<head>
  <title>Przykład osadzania JS</title>
</head>

<body> 
  <script>
    let myMessage = "Hello world!";
    console.log(myMessage);
  </script>

  <p>
    Oto przycisk, który uruchamia JavaScript kiedy zostanie kliknięty:
    <button onclick="alert(myMessage);">Kliknij mnie</button>
  </p>
  
  <script src="assets/js/scripts.js"></script>
</body>
</html>

Ćwiczenie 3.2

  1. Skopiuj kod z poprzedniego slajdu.
  2. Sprawdź za co odpowiada console.log().
  3. Czy konsola podpowiada użyte zmienne?

Podsumowanie 3.1

  1. JavaScript = ECMAScript + DOM + BOM.
  2. DOM  Document Object Model.
  3. BOM – Browser Object Model.
  4. ECMAScript – definiuje składnię JavaScript.
  5. Konsola narzędzi dewelopera obsługuje kod JS i umożliwia jego debugowanie, np. poprzez wyświetlenie wartości zmiennej przy pomocy console.log().
  6. Kod JS można osadzić w dokumencie HTML liniowo, wewnętrznie oraz zewnętrznie.

Typy danych

Liczba (number)

// typy proste

let myNumber = 10;
let myNumber = 2.5;
let myNumber = -3;

Łańcuch znaków (string)

let myString = `Mam ${myNumber} lat!`;
let myString = 'Mam ' + myNumber + ' lat!';
let myString = "Ile masz lat?";

Wartości logiczne (boolean)

let active = false;
let active = true;

Typy danych

Tablice

// struktury

// danych

let myArray = ["string", 2, -3, {}]
myArray[2] = 3;	// Zmiana z "-3" na "3"
console.log(myArray); // Wypisanie zawartości tablicy
console.log(myArray.length); // Wypisanie długości tablicy

Obiekty (typ referencyjny)

let emptyObject = {};
let personObject = {
    firstName: "Jan",
    lastName: "Nowak"
}
personObject.age = 25; // dodanie nowej właściwości do obiektu "personObject"
personObject["salary"] = 14000; // dodanie nowej właściwości w inny sposób

Tablice

Dodawanie elementów: push(item)

// manipulowanie

var myArray = []; // Pusta tablica
myArray.push(1); // Dodanie elementu "1"
myArray.push(2); // Dodanie elementu "2"
myArray.push(3); // Dodanie elementu "3"
console.log(myArray); // Wypisze [1, 2, 3]

Usuwanie elementów: pop()

var myArray = [1, 2, 3]; 
console.log(myArray.pop()); // Usunie ostatni element tablicy i wypisze "3"
console.log(myArray); // Wypisze [1 , 2]

Usuwanie zakresu elementów: splice(start, deleteCount)

var myArray = [0,1,2,3,4,5,6,7,8,9];
var splice = myArray.splice(3,5);

console.log(splice); // Wypisze elementy usunięte, tj. [3, 4, 5, 6, 7]
console.log(myArray); // Wypisze pozostałe elementy tablicy [0, 1, 2, 8, 9]

Operatory

Arytmetyczne: +, -, *, /, %, ++, --

let a = 1;
let b = 2;
let c = a + b;

Konkatenacja łańcuchów znaków: +, +=

let firstName = "Jan"
let lastName = "Nowak";
console.log(firstName + " " + lastName);

Przypisania: =, +=, -=, /=, *=, %=

Porównania: ==, !=, ===, !==, >, >=, <, <=

Logiczne: &&, ||, !

Operatory

3-znakowe operatory, oprócz wartości, uwzględniają również typ porównywanych danych.

// == vs. ===

Operator Opis
== Zwraca true jeżeli operandy są równe po wykonaniu niezbędnych konwersji typu.
=== Zwraca true jeżeli operandy są równe i tego samego typu.
!= Zwraca true jeżeli operandy są różne po wykonaniu niezbędnych konwersji typu.
!== Zwraca true jeżeli operandy nie są równe i/lub nie są tego samego typu.

Zmienne i stałe

Zmienne nie posiadają typu (typ jest związany z wartością, a nie zmienną).

Deklaracja zmiennej: var, let

var foo = "Zasięg funkcji";
let foo = "Zasięg bloku kodu";

Deklaracja stałej: const

const quaz = "Tej wartości nie powinno się modyfikować";
const pi = 3.14;

Warunki

if:

if (confirm("Czy Ty to Jan?"))
{
    console.log("Witaj, Janie!");
} else {
    console.log("A zatem kto?");
}

switch:

let rank = "Dowódca";
switch(rank)
{
    case "Szeregowy":
    case "Sierżant":
        console.log("Nie masz odpowiednich uprawnień.");
        break;
    case "Dowódca":
        console.log("Witaj, dowódco! W czy mogę dziś pomóc?");
        break;
    case "Kapitan":
        console.log("Witaj, kapitanie! Zrobię wszystko!");
        break;
    default:
        console.log("Nie znam takiej rangi...");
        break;
}
var a = 1;
var b = 2;

if (a < b) {
    console.log("a jest mniejsze od b");
}

Pętle

While sprawdza, czy wyrażenie ma wartość true i działa tak długo, jak długo jest prawdziwe.

 

Instrukcja break pozwala zatrzymać wykonywanie pętli. Natomiast continue pomija resztę pętli i przeskakuje z powrotem na początek pętli.

let i = 99;

while (i > 0)
{
    console.log(i + " butelek piwa na stole.");
    i -= 1;
}

// while

Pętle

Instrukcja for w JavaScript ma taką samą składnię jak w Javie i C. Składa się z trzech części:

  • inicjalizacji – inicjuje wartość iteratora (i = 0);
  • warunku – wykonuje się dopóki warunek jest spełniony (i < 3);
  • inkrementacji – zwiększa lub zmniejsza iterator (i += 1)
var myArray = ["A", "B", "C"];

// .length - zwraca długość tablicy (l. elementów)
for (let i = 0; i < myArray.length; i++)
{
    console.log("Pozycją w tablicy o kluczu " + i + " jest " + myArray[i]);
}

// for

Pętle

Instrukcja for...in iteruje po właściwościach (kluczach) obiektu (uwaga: tablice też są obiektami).

var myArray = ["A", "B", "C"];

for (let i in myArray)
{
    console.log("Pozycją w tablicy o kluczu " + i + " jest " + myArray[i]);
}

// for...in

let myObject = {a: 1, b: 2, c: 3};

for (let key in myObject)
{
    console.log("Właściwość " + key + " posiada wartość " + myObject[key]);
}

Pętle

Instrukcja for...of iteruje po właściwościach (kluczach) obiektów iterowalnych (tablice).

var myArray = ["A", "B", "C"];

for (let item of myArray)
{
    console.log(`Kolejny element tablicy: ${item}.`);
}

// for...of

let myObject = {a: 1, b: 2, c: 3};

for (let key of myObject)
{
    console.log(key); // ❌ Error: myObject is not iterable!
}

Pętle

// for...in vs. for...of

for...in for...of
Obiekty Tak Nie
Tablice Można Tak
Stringi Można Tak

Funkcje

  • Blok kodu, który wykonuje się gdy zostanie wywołany.
  • Funkcja może być utworzona jako anonimowa.
  • Funkcja może przyjmować parametry.
    • Zadeklarowane parametry bez wartości są undefined.
  • Funkcja może zwracać wartość.
    • Służy do tego opcjonalna instrukcja return.
  • Funkcję można przypisać do zmiennej lub składowej obiektu.
  • Funkcję można przekazać jako argument funkcji.
  • Funkcja może zwracać funkcję jako wynik.

// definicja

Funkcje

function hello(name) {
    return 'Witaj, ' + name + '!';
}

console.log(hello('Zenonie'));

// budowa

var hello = function(name) {
    return 'Witaj, ' + name + '!';
}

console.log(hello('Heleno'));
var myArray = ["A", "B", "C"];

myArray.forEach((element, index) => {
    console.log('[' + index + '] jest ' + element);
});

Anonimowa funkcja przypisana do zmiennej:

Anonimowa funkcja strzałkowa wykonywana dla każdego elementu tablicy:

Zasięg zmiennych

{
  var foo = 26;
  let bar = 27;
  console.log(foo); // ✅ Zwraca "26"
  console.log(bar); // ✅ Zwraca "27"
}

function test() {
  var baz = 28;
}

console.log(foo); // ✅ Zwraca "26"
console.log(bar); // ❌ ReferenceError: bar is not defined
console.log(baz); // ❌ ReferenceError: baz is not defined

var posiada zasięg funkcji, a let zasięg bloku kodu:

Blok jest kawałkiem kodu ograniczonym przez { }. Wszystko w klamrowych nawisach jest blokiem. Zatem zmienna let zadeklarowana w bloku jest dostępna tylko w obrębie tego bloku. 

 

Zasięg zmiennej var jest globalny, gdy jest deklarowana poza funkcją. Oznacza to, że każda zmienna, która jest zadeklarowana z var poza blokiem funkcji, jest dostępna do wykorzystania w obiekcie window (window.varVariable).

Podsumowanie 3.2

  1. Typy danych: number, string, boolean, array, object
  2. Operatory: +, -, *, /, %, ++, --, =, ==, !=, ===, !==, >, <, !
  3. 3-znakowe operatory, oprócz wartości, uwzględniają również typ porównywanych danych.
  4. Zmienna var posiada zasięg funkcji, let zasięg bloku kodu, a const jest stałą.
  5. Warunki: if, else, else if, switch
  6. Pętle: while, for, for...in (obiekty), for...of (tablice)
  7. Funkcja to blok kodu, który wykonuje się, gdy zostanie wywołany.
  8. Funkcja może być przypisana do zmiennej lub składowej obiektu, a może być też anonimowa.

Ćwiczenie 3.3

  1. Zaimplementuj funkcję zwracającą kwadrat liczby podanej jako parametr.
  2. Utwórz tablicę zawierającą kilka liczb i oblicz kwadraty wszystkich liczb z tablicy poniższymi sposobami:
    • Pęta for
    • Pętla for...of
    • Pętla for...in
    • Metoda forEach
  3. Zmodyfikuj wariant z metodą forEach zastępując zwykłą funkcję funkcją strzałkową.

Ćwiczenie 3.4

  1. Utwórz obiekt reprezentujący samochód, zawierający atrybuty brand, price i power oraz metodę increasePower (z jednym parametrem do przekazania wartości, o którą ma być zwiększona moc)
     
  2. Wypisz utworzony obiekt na konsoli korzystając z console.log()
     
  3. Zwiększ moc samochodu za pomocą wywołania odpowiedniej metody obiektu.
     
  4. Ponownie wypisz utworzony obiekt na konsoli.

Ćwiczenie 3.5

  1. Zapoznaj się z artykułami [1], [2] oraz [3].

  2. Zaimplementuj funkcję zwracającą sumę liczb podanych jako parametry. Funkcja powinna akceptować dowolną liczbę parametrów.

  3. Zmodyfikuj funkcję tak, aby przy sumowaniu pomijała parametry niebędące liczbami i niedające się skonwertować do liczb. W przypadku gdy żaden z parametrów nie będzie liczbą lub funkcja będzie wywołana bez parametrów, jej wynikiem powinien być NaN.

Wyskakujące okienka

alert("Hi");

confirm("Hey!");

prompt("Hello!");

Istnieją trzy rodzaje wyskakujących okienek w JavaScript:

  • alert
  • confirm
  • prompt

Alert nie zwraca niczego. Gdy pojawi się okno alertu, użytkownik będzie musiał kliknąć OK, aby kontynuować.

Confirm zwróci true, jeśli wybrano OK, i false, jeśli zostanie wybrane Anuluj.

Prompt zwróci to, co zostało wpisane w polu tekstowym.

Ćwiczenie 3.6

  1. Przetestuj wyskakujące okienka z poprzedniego slajdu.
     
  2. Napisz funkcję, która:
    • akceptuje 2 argumenty z okien prompt: wiek oraz liczbę kaw dziennie;
    • oblicza liczbę pozostałych kubków kaw do wieku 100 lat;
    • zwraca wiadomość w postaci alertu „Będziesz potrzebować X kubków kawy zanim osiągniesz wiek 100 lat”.

DOM

Document Object Model to interfejs, który pozwala skryptom i programom na dynamiczny dostęp do struktury i stylu dokumentu HTML​. Umożliwia to modyfikację i aktualizację jego zawartości.

 

W DOM wszystkie elementy HTML są zdefiniowane jako obiekty.

 

Wszystkie operacje na DOM zaczynają się od obiektu document. To główny „punkt wejścia” do DOM. Z niego możemy uzyskać dostęp do dowolnego elementu.

// interfejs

DOM

Główne elementy DOM są dostępne bezpośrednio jako właściwości obiektu document:

// główne elementy

document.body

<DIV>

document.documentElement

<HTML>

<BODY>

parentElement

nextElementSibling

previousElementSibling

children

firstElementChild

lastElementChild

DOM

// relacje elementów

<html>

  <head>
    <title>Relacje w DOM</title>
  </head>

  <body>
    <h1>Lekcja DOM</h1>
    <p>Hello world!</p>
  </body>

</html>
  • Najwyższy węzeł (element) nazywany jest korzeniem lub węzłem głównym (root)
  • Każdy węzeł ma dokładnie jednego rodzica, z wyjątkiem węzła najwyższego
  • Węzeł może mieć wiele dzieci
  • Rodzeństwo to węzły posiadające tego samego rodzica

Z powyższego kodu można wyczytać:

  • <html> jest korzeniem (węzłem głównym)
  • <html> nie ma rodzica
  • <html> jest rodzicem dla <head> i <body>
  • <head> jest pierwszym dzieckiem <html>
  • <body> jest ostatnim dzieckiem <html>
  • <head> posiada jedno dziecko <title>
  • <body> posiada dwoje dzieci: <h1>, <p>
  • <h1> oraz <p> są rodzeństwem

Podsumowanie 3.3

  1. Wszystkie operacje na DOM zaczynają się od obiektu document.
  2. document.body - <body>.
  3. previousElementSiblings / nextElementSiblings - przejście do rodzeństwa elementu.
  4. firstElementChild / lastElementChild - przejście do potomka rodzica.
  5. children - tablica potomków elementu.
<html>
  <head>...</head><body>...</body>
</html>
// Rodzicem <body> jest <html>
alert(document.body.parentElement === document.documentElement); // true

// Po <head> występuje <body>
alert(document.head.nextElementSibling); // HTMLBodyElement

// Przed <body> występuje <head>
alert(document.body.previousElementSibling); // HTMLHeadElement

Ćwiczenie 3.7

1. Uruchom poniższy kod i sprawdź rezultat:

<html>
<body>
  <div>To</div>

  <ul>
    <li>Jest</li>
  </ul>

  <div>Test</div>

  <script>
    for (let elem of document.body.children) {
      alert(elem);
    }
  </script>
</body>
</html>

2. Spójrz na poniższy dokument HTML:

<html>
<body>
  <div>Użytkownicy:</div>
  <ul>
    <li>Zdzisiu</li>
    <li>Halinka</li>
  </ul>
</body>
</html>

Jak dostać się do <div>, <ul> oraz drugiego <li>?

DOM

document.getElementById("id")

Zwraca element HTML o określonym atrybucie id.

// przeszukiwanie

document.getElementsByClassName("class")

Zwraca tablicę elementów HTML o określonej nazwie atrybutu class.

document.querySelector("selector")

Zwraca pierwszy element HTML, który pasuje do podanego selektora CSS.

document.querySelectorAll("selector")

Zwraca tablicę elementów HTML, który pasują do podanego selektora CSS.

DOM

// przeszukiwanie

Szuka wg... Dostępna dla...
querySelector selektora CSS wszystkich elementów
querySelectorAll selektora CSS wszystkich elementów
getElementById atrybutu
getElementsByName atrybutu
getElementsByTagName nazwy znacznika wszystkich elementów
getElementsByClassName atrybutu wszystkich elementów

document

document

id

name

class

Zdecydowanie najczęściej używane są metody querySelector i querySelectorAll, ale getElementBy* może być sporadycznie pomocny lub znaleziony w starych skryptach.

Ćwiczenie 3.8

1. Jak znaleźć w powyższym kodzie...?

  • Tabelę z id="age-table"
    • Wszystkie elementy label wewnątrz tabeli
    • Pierwszy element td tabeli (ze słowem „Wiek”)
  • Formularz z name="search"
    • Pierwsze pole input w tym formularzu
    • Ostatnie pole input w tym formularzu
<!DOCTYPE HTML>
<html>
<body>
  <form name="search">
    <label>Przeszukaj stronę:
      <input type="text" name="search">
    </label>
    <input type="submit" value="Szukaj!">
  </form>

  <hr>

  <form name="search-person">
    Szukaj gości:
    <table id="age-table">
      <tr>
        <td>Wiek:</td>
        <td id="age-list">
          <label>
            <input type="radio" name="age" value="young">poniżej 18</label>
          <label>
            <input type="radio" name="age" value="mature">18-50</label>
          <label>
            <input type="radio" name="age" value="senior">więcej niż 50</label>
        </td>
      </tr>

      <tr>
        <td>Dodatkowo:</td>
        <td>
          <input type="text" name="info[0]">
          <input type="text" name="info[1]">
          <input type="text" name="info[2]">
        </td>
      </tr>

    </table>

    <input type="submit" value="Szukaj!">
  </form>
</body>
</html>

DOM

// zawartość elementów

document.getElementById("about").innerHTML

Zwraca zawartość pomiędzy wybranym znacznikiem otwarcia a zamknięcia.

document.getElementById("about").innerHTML = "Hej!"

Zmienia zawartość pomiędzy wybranym znacznikiem otwarcia a zamknięcia.

<html>
  <body>

    <p id="hello">Hello World!</p>

    <script>
      document.getElementById("hello").innerHTML = "Witaj świecie!";
    </script>

  </body>
</html>

Przykład kodu, który wybiera paragraf i modyfikuje jego zawartość:

DOM

// tworzenie elementów

const div = document.createElement("div")

Tworzy nowy element HTML.

div.remove()

Usuwa zaznaczony element HTML.

const div = document.createElement("div"); // Stworzenie pustego "diva"

div.innerText = "Tekst w divie"; // Dodanie tekstu
div.setAttribute("title", "To jest tekst w dymku"); // Dodanie atrybutu
div.classList.add("about"); // Dodanie klasy
div.style.setProperty("background-color", "green"); // Dodanie stylu CSS

document.body.appendChild(div); // Umieszczenie "diva" wewnątrz "body"

Przykład kodu, który tworzy nowy element <div> wewnątrz <body>:

Ćwiczenie 3.9

1. Zacznij od poniższego kodu HTML i zapisz go jako about-me.html:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>O mnie</title>
</head>
<body>
  <h1>O mnie</h1>
  
  <ul>
    <li>Imię: <span id="name"></span>
    <li>Wiek:  <span id="age"></span>
    <li>Miasto rodzinne: <span id="hometown"></span>
  </ul>
  
</body>
</html>

1. Dodaj znacznik <script> na dole dokumentu.

2. Zmień font w <body> na „Arial”.

3. Zastąp każdy <span> własnymi informacjami (imię, wiek, miasto).

4. Iteruj przez każde <li> i dodaj klasę „list-item”. Następnie dodaj znacznik <style>, który ustawia regułę CSS dla „list-item” i np. zmienia kolor tekstu.

5. Utwórz nowy element <img> i ustaw jego atrybut src na zdjęcie jakiejś persony. Dołącz ten element do strony.

Ćwiczenie 3.10

1. Utwórz dokument HTML z nagłówkiem <h1> „Moja lista książek”.

2. Utwórz plik „scripts.js” i zalinkuj do niego w <head>. W nim umieszczaj cały swój kod JS.

3. Skopiuj poniższą tablicę książek do „scripts.js”:

let books = [
  {
   title: 'Kamienie na szaniec',
   author: 'Aleksander Kamiński',
   alreadyRead: false
  },
  {
   title: 'Zbrodnia i kara',
   author: 'Fiodor Dostojewski',
   alreadyRead: true
  }
];

4. Iteruj po tablicy z książkami. Dla każdej książki utwórz element <li> wewnątrz listy <ul> z tytułem książki i autorem, a następnie dołącz go do strony.

5. Dodaj właściwość do każdej książki z adresem URL okładki książki i dodaj element <img> dla każdej książki na stronie.

6. Zmień styl elementu książki w zależności od tego, czy jest przeczytana czy nie.

Materiały

4

Książka o HTML i CSS

Darmowy ebook w formie PDF dla początkujących adeptów HTML oraz CSS.

Znaki specjalne w HTML

Walidator poprawności HTML

Generator Lorem Ipsum

Generator losowych obrazów

Lista selektorów CSS + przykłady

Wizualny przewodnik po Flexbox

JavaScript Cheatsheet

Problem z wyświetlaniem? Kliknij tutaj, aby otworzyć cheatsheet w nowym oknie.

Gra edukacyjna - WarriorJS

JSFiddle - Edytor Online

Podstawy HTML, CSS & JS

By Paweł Klockiewicz

Podstawy HTML, CSS & JS

Prawa do korzystania z materiałów posiada Software Development Academy.

  • 936