1/2 - Portfolio oldal (HTML, CSS, Javascript)

Hozz létre egy saját portfolió oldalt


Az előző gyakorlatban csináltunk egy saját weboldalt és host-oltuk (elérhetővé tettük) lokális hálózaton. Most létrehozunk egy portfolió weboldalt saját magunknak HTML, Javascript és CSS segítségével.

1., Egészítsük ki a html kódunkat

  • Induljunk ki az előző gyakorlat végéből. Innen letöltheted a kódot
    • https://github.com/czimerk/web-part1
    • Írd be az "npm i" parancsot a terminal-ba, hogy telepítse a package-eket 
    • Írd be az "npm start" parancsot, hogy megnyíljon a chrome localhost:8080 címen
  • Ahhoz, hogy létrehozzunk egy ilyen oldalt meg kell ismerkednünk néhány új HTML elemmel. 
  • <div> - létrehoz egy szekciót
  • <a> - létrehoz egy hivatkozást, href egy ún. attribútum, ahol megadhatod, milyen címre mutasson a link (pl esetünkben majd egy másik html oldalra)
  • Adjuk hozzá a következő html kódot az index.html fájlhoz és mentsük el.
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Portfolio</title>
</head>

<body>
    <div>
        <h1>Home</h1>
    </div>
    <div>
        <div>
            <a href="index.html">Home</a>
            <a href="aboutme.html">About me</a>
            <a href="works.html">My works</a>
        </div>
        <div>
            Home page content
        </div>
    </div>
</body>

</html>
  • Hozzunk létre további két oldalt egy aboutme.html-t, és egy works.html-t és cseréljük ki a vastaggal szedett sorokat a megfelelőre (About me, About me content...)
  • Mentsük el az összes dokumentumot és F5-tel frissítsük az oldalt.
  • A főoldalt látjuk. És el tudunk navigálni az About me-re vagy a My works-re (Rólam, Munkáim, ha magyar oldalt szeretnél)
  • A böngésző címsor is ennek alapján változik (pl localhost:8080/aboutme.html) 



Biztosan észrevetted, hogy sok kódot másoltunk. Ez nem csak, hogy nem szép, de még praktikátlan is. Mondjuk ha hozzá akarunk adni egy új oldalt, akkor 3 oldalba kell beleszerkeszteni? Írjunk egy kis Javascript kódot, hogy segítsünk ezen.

2., Adjuk hozzá egy kis Javascriptet

A Javascript nyelvet eredetileg azért hozták létre, hogy dinamikus tartalmakat adjanak hozzá az oldalakhoz, HTML elemeket manipuláljanak, gombnyomásra reagáljanak, eltárolják átmeneti számítások eredményeit kliens oldalon. A legtöbb böngésző támogatja (persze az újabb JS verziókat már nem biztos, hogy egyes böngészők támogatják e.g. Internet Explorer). Mi pedig arra szeretnénk használni, hogy a navigációs linkeket dinamikusan hozzuk létre. Ehhez

  1. Be kell hivatkoznunk egy main.js fájlt a HTML dokumentumunkban
  2. El kell kérnünk a böngészőtől egy hivatkozást arra a  <div> elemre, ahol felsoroljuk a hivatkozásokat
  3. Létre kell hoznunk a linkeket az oldalakra, és hozzá kell adnunk a navigációs <div> gyerekeihez.
1., Javascript-et <script> tag-gel adhatsz hozzá az oldalhoz. Adjuk hozzá a
 <script src="main.js"></script>
kódot a </body> tag fölé. Aztán hozzuk létre és nyissuk meg a main.js fájlt. Írjuk bele, hogy
alert('Hello javascript!');
Ha most ráfrissítesz az oldalra, egy felugró ablakot látsz a "Hello javascript" szöveggel. Na ezt a sort most törölhetjük is. (Ez gyakori ebben a szakmában, hozzádunk kódokat, törlünk kódokat, rájövünk, hogy nem kellett volna törölni...)

2., A HTML dokumentumban egy elemre document.getElementById(...)-vel tudsz hivatkozni, Itt a ... helyére egy szöveges paramétert kell írni - az elem azonosítóját (id). Az id is egy HTML attribútum (olyan mint korábban a href a <a> elemre), tehát ezt az attribútumot meg kell adni a div-re ami majd tartalmazza a navigációs linkjeinket. Cseréljük le ezt

<div>
            <a href="index.html">Home</a>
            <a href="aboutme.html">About me</a>
            <a href="works.html">My works</a>
</div>

erre
<div id="navigation-bar"></div>
 A javascript fájlba pedig írjuk be
var navigationBar = document.getElementById("navigation-bar");
3. A linkek létrehozása és hozzáadása pedig így történik
var aboutLink= document.createElement("a"); //create the element <a></a>
aboutLink.setAttribute("href", "aboutme.html"); //set href to "aboutme.html"
aboutLink.innerHTML = "About me"; //set text of navigation link
navigationBar.appendChild(aboutLink); //add link to navigation bar
Megjegyzés: Ez így még mindig sok ismétlés csak most már javascriptben (Home, My works etc). de JS-ben létre tudunk hozni függvényeket, ahol paraméterekre cseréljük le a változó részeket. Ezzel a main.js tartalma a következőre változik.
var navigationBar = document.getElementById("navigation-bar");
addNavLink(navigationBar, "index.html", "Home");
addNavLink(navigationBar, "aboutme.html", "About me");
addNavLink(navigationBar, "works.html", "My works");

function addNavLink(navBarElement, page, label){
    var link = document.createElement("a");
    link.setAttribute("href", page);
    link.innerHTML = label;
    navBarElement.appendChild(link);
}
Ha most létre akarunk hozni egy új oldalt és hozzáadni a navigációhoz, az már csak ennyi kódba kerül. (például, ha az oldal neve tutorials.html)
addNavLink(navigationBar, "tutorials.html", "Tutorials");

Fontos: A main.js fájlt be kell hivatkozni az aboutme.html-be és a works.html-be is különben itt nem jelenik meg a navigációs sáv.

Ha most frissíted az oldalt Ctrl + F5 -tel (talán oldalanként is szükséges nyomni egyet a cache-elés miatt), akkor a navigációnak működnie kell, és minden oldal a saját tartalmát jeleníti meg.



3., Adjuk hozzá a stílus lapot (CSS)

Tehát működik a navigáció, tartalmat is tudunk hozzáadni, de ez az oldal még nem jutna a web dizájner verseny döntőjébe. A navigáció összefolyik, ráadásul a címsor és az oldal tartalom között van. Hogyan tudnánk legalább az elrendezésen javítani?

Hozzunk létre egy main.css fájlt a public mappába, az alábbi kóddal.
body{
    color: #ddd;
    background-color: #1b1a1a;
}
Adjuk hozzá ezt a sort a <title> tag alá minden html fájlban (index, aboutme, works), ezzel hivatkozzuk be a css-t.

<link rel="stylesheet" href="main.css">
Frissítsük az oldalt és máris egy szemkímélő sötét oldal tárul elénk. Ideális, ha épp éjszakai vezetés közben akarjuk nézegetni a saját portfóliónkat.



Megtörténhet, hogy valami ilyesmi lesz az eredmény, ahol ugye az a gond, hogy a sötétség nem terjeszkedik ki a teljes oldalra.

Ezt az alábbi kód tudja megoldani
body{
    color: #ddd;
    background-color: #1b1a1a;
    display: flex;
    flex-flow: column;
    height: -webkit-fill-available;

}

Ez az összes gyermek elemet sorbarendezi fentről lefelé oszlopszerűen úgy, hogy a <body> a teljes magasságot elfoglalja. A flex egy css funkció, ami segítségével igazán könnyedén készíthetsz olyan UI-t ami minden eszközön jól néz ki. Az általunk használt funkciókat ismertetem a flex-ről, de a teljes dokumentációt itt találod.

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

A weboldalunk így fog kinézni, felül lesz egy címsor, balra a navigációs sáv, jobbra pedig a tartalom.


A body-ban már beállítottuk, hogy az elemek fentről lefelé kövessék egymást. Most már csak azt kell megadni, hogy a h1 elem fix magasságú legyen. Ez 42px lesz, a maradék magasságot pedig a navigáció és a tartalom (left-pane, content) fogja kitölteni.

A CSS-ben a legtöbbször az alábbiak szerint hivatkozunk html elemekre

  • név alapján - e.g. body above will impact display of all body elements on the page
  • class(osztály) név alapján - lásd alább class="page-content" osztályt adunk meg a <div> elem class attribútumnak, és a CSS-ben .page-content ként hivatkozunk rá
  • id alapján - hasonló mint az osztály, de az attribútum id="navigation-bar" a hivatkozás pedig #navigation-bar{} a CSS-ben.
A CSS-ről itt tudhatsz meg mindent

https://www.w3schools.com/css/default.asp

A page-content-et class szerint hivatkozzuk, ezért adjuk hozzá a class attribútumot a <div>-hez a <h1> sor alatt

 <div class="page-content">
        <div id="navigation-bar" class="left-pane">
        </div>
        <div class="content">
            Home page content
        </div>
</div>

A main.css-be pedig ez kerül

body {
  margin: 0px;
  color: #ddd;
  background-color: #1b1a1a;
  display: flex;
  flex-flow: column;
  height: -webkit-fill-available;
  border: 1px solid black;
}

h1 {
  text-align: center;
  flex: 0 0 42px;
}

.page-content {
  flex: 1;
  display: flex;
  flex-flow: row;
}

.left-pane {
  display: flex;
  flex-flow: column;
  flex: 0 0 100px;
  padding: 10px;
}

.content {
  flex: 1;
  padding: 10px;
}


A fentiekhez némi magyarázat
  • flex: 0 0 42px - azt jelenti, hogy a h1 elem nem tud nőni, zsugorodni, 42px lesz magasságban, mivel a body oszlopszerű elrendezést biztosít
  • flex: 1 - azt jelenti, hogy az elem arányosan 1 egységnyi részt tölt ki, de mivel az egyetlen másik elem fix méretű ezért az egész maradék oldalt elfoglalja a page-content
  • flex-flow: row; - Ez megváltoztatja az elemek elrendezését úgy, hogy azok már egy sorban követik egymást. Mivel az első elem (left-pane) fix méretű, a maradék (page-content) ki fogja tölteni a többi helyet az egész sorban.

4., Tippek és trükkök

  • A böngésző cache-elést ki tudod kapcsolni Chrome-ban F12, network tab -> disable cache
  • Ha F12-t nyomsz az Elements fülön az egérrel böngészni tudod meddig terjednek az egyes elemek az oldalon, ha fölé viszed az egeret.

Futtasd az npm i parancsot letöltés után a terminálból majd npm start

Kérlek, ha van pár perced segítsd a blog működését azzal, hogy névtelen visszajelzést adsz


Nincsenek megjegyzések:

Megjegyzés küldése