Template specifikus CSS és JS fájlok behívása az oldalba
Hogyan kell beállítani a template specifikus css és js fájlok listáját, és azokat hogyan kell behívni.
2021.12.08 — Posted by Webb & Flow
Ennek a dokumentumnak nem tárgya, hogy milyen módszertan szerint kell a css, illetve js fájlokat szétbontani, egy már szétbontott kódbázisból indulunk ki.
A beállítások előfeltétele, hogy a Reszponzív töréspontok be legyenek állítva a portál beállításaiban.
CSS fájlok beállítása és behívása a template-ben
A legjobb, ha a CSS fájlok valamilyen logikai csoport (például komponens), és azon belül méret szerint vannak szétvágva, azonban arra is van megoldás, ha csak csoport szinten vannak szétvágva, és egy-egy fájl az összes mérethez szükséges kódot tartalmazza.
Méret szerint szétvágott CSS fájlok
Amennyiben a CSS fájlok méret szerint (is) vannak szétvágva, minden mérethez külön-külön be kell állítani, hogy melyik csoport melyik méretű fájlját kell betölteni.
Ezt az adott template szerkesztő felületén a Breakpoint Specific Options fülön tehetjük meg.
Miután be vannak állítva és ki vannak publikálva a fájlok, behívhatjuk azokat az oldalba. Ehhez a template-be kell elhelyezni a megfelelő helyen a megfelelő kódokat. Általában CSS kódokat érdemes a ≶head>-be, a js kódokat pedig a <body> végére rakni, de ettől el lehet térni.
Összes CSS fájl behívása <link>-ként, HTML kóddal
Ehhez a rendszer biztosít egy template változót {TEMPLATESTYLESSI}
néven. Ez egy, a következőhöz hasonló kódot helyez el az oldalba:
<!--#include virtual="/ssi/template/tmpl_6280034784378880.css.html" -->
Ami mivel egy SSI fájl behívás, valójában egy ehhez hasonló kódot fog végül az oldal kiszolgálásakor adni a böngészőnek:
<link href="/design/template/tmpl_6280034784378880_10_xs.css?v=1638978905" rel="stylesheet" media="(max-width:575px)">
<link href="/design/template/tmpl_6280034784378880_20_sm.css?v=1638978905" rel="stylesheet" media="(min-width:576px) and (max-width:767px)">
<link href="/design/template/tmpl_6280034784378880_30_md.css?v=1638978905" rel="stylesheet" media="(min-width:768px) and (max-width:991px)">
<link href="/design/template/tmpl_6280034784378880_40_lg.css?v=1638978905" rel="stylesheet" media="(min-width:992px) and (max-width:1199px)">
<link href="/design/template/tmpl_6280034784378880_50_xl.css?v=1638978905" rel="stylesheet" media="(min-width:1200px)">
Összes CSS fájl behívása <link>-ként, HTML kóddal, SSI nélkül
Mivel az előző megoldás csak akkor működik, ha a weblapot kiszolgáló szerveren engedélyezve van az SSI (a Webb & Flow Cloud Storage esetén engedélyezve van), így SSI nélkül közvetlenül azt a kódot kell elhelyeznünk az oldalba, amit az SSI adott volna. Ehhez a következő kódot használhatjuk:
<link href="/{CONFIGCSSPATH}/template/tmpl_{TEMPLATEID}_10_xs.css?v={NOWDATE}T{NOWTIME}" rel="stylesheet" media="(max-width:575px)">
<link href="/{CONFIGCSSPATH}/template/tmpl_{TEMPLATEID}_20_sm.css?v={NOWDATE}T{NOWTIME}" rel="stylesheet" media="(min-width:576px) and (max-width:767px)">
<link href="/{CONFIGCSSPATH}/template/tmpl_{TEMPLATEID}_30_md.css?v={NOWDATE}T{NOWTIME}" rel="stylesheet" media="(min-width:768px) and (max-width:991px)">
<link href="/{CONFIGCSSPATH}/template/tmpl_{TEMPLATEID}_40_lg.css?v={NOWDATE}T{NOWTIME}" rel="stylesheet" media="(min-width:992px) and (max-width:1199px)">
<link href="/{CONFIGCSSPATH}/template/tmpl_{TEMPLATEID}_50_xl.css?v={NOWDATE}T{NOWTIME}" rel="stylesheet" media="(min-width:1200px)">
Itt a méretek neveit (10_xs, 20_sm, stb), illetve a megadott szélességeket (575px, 767px, stb) a portálban, vagy az egyedileg a template-ben megadott töréspont beállítások szerint kell kitölteni.
Összes CSS fájl behívása <link>-ként, JS kóddal
A fenti megoldások hátránya, hogy a böngésző az összes fájlt letölti, és utána dönti el a megadott méretek alapján, hogy melyiket használja, így például mobilon feleslegesen betölti az összes többi mérethez tartozó fájlt is.
Ezt ki lehet kerülni egyedi javascript kód írásával, amit elhelyezhetünk a <head>, vagy a <body> végén:
<script>
var href = '/{CONFIGCSSPATH}/template/tmpl_' + '{TEMPLATEID}' + '_';
if (screen.width < 576) {
href = href.concat('10_xs');
} else if (screen.width < 768) {
href = href.concat('20_sm');
} else if (screen.width < 992) {
href = href.concat('30_md');
} else if (screen.width < 1200) {
href = href.concat('40_lg');
} else {
href = href.concat('50_xl');
}
if (href.length) {
if (typeof(cssVersion) == 'undefined') {
cssVersion = '{NOWDATE}T{NOWTIME}';
}
href = href.concat('.css?v=').concat(cssVersion);
var link = document.createElement('LINK');
link.href = href;
link.rel = 'stylesheet';
document.head.append(link);
}
</script>
Amennyiben az elsődleges mérethez tartozó css-t behívjuk critical css-ként (lásd később), akkor az ahhoz tartozó méretnél a href változó értéke lehet üres, ezt a példa kód lekezeli, és csak valid fájlt tölt be:
href = '';
A HTML kódos behíváshoz hasonlóan a töréspont neveket és az azokhoz tartozó szélességeket a töréspont beállítások szerint kell megadni.
Ez a kód csak egyszer fut le, amennyiben le szeretnénk kezelni a betöltés utáni ablak átméretezést, a window resize eseményére kell feliratkozni, és egy ehhez hasonló kódot futtatni, azonban ekkor figyelni kell, hogy ha egy fájlt már egyszer behívtunk, akkor ne hozzon létre hozzá egy újabb <link> tag-et a javascript, mert ekkor újra és újra betölti a böngésző ugyanazt a fájlt.
CSS fájlok beépítése az oldalba inline css-ként
Amennyiben nem fájlként szeretnénk behívni a kódokat, hanem közvetlenül a HTML kódba szeretnénk beépíteni, megtehetjük a megfelelő mérethez tartozó SSI fájl behívásával:
<style>
<!--#include virtual="/{CONFIGCSSPATH}/template/tmpl_{TEMPLATEID}_10_xs.css.html" -->
</style>
Ezzel a megoldással bármelyik, akár az összes css fájl tartalmát beépíthetjük az oldalba, feltéve, hogy a kiszolgáló szerveren engedélyezve van az SSI.
Fontos, hogy egy <style> tag-en belül hívjuk be a fájlokat, mivel azok csak a css kódot tartalmazzák annak ellenére, hogy .html kiterjesztésűek. Gyakorlatilag a /{CONFIGCSSPATH}/template/tmpl_{TEMPLATEID}_10xs.css és /{CONFIGCSSPATH}/template/tmpl{TEMPLATEID}_10_xs.css.html fájlok tartalma azonos.
Critical CSS
A Critical CSS-t azért érdemes megadni, hogy amíg nem töltődnek le a megfelelő CSS fájlok, addig se essen szét a hajtás feletti része az oldalnak.
Amennyiben behívjuk az elsődleges méret SSI fájlját, az a problémák jelentős részét megoldja, ehhez a rendszer biztosít egy változót:
<style>
{TEMPLATESTYLEPRIMARYSSI}
</style>
Az elsődleges méret attól függ, hogy mi a beállított breakpoint direction. mobil -> desktop esetén a legkisebb méret desktop -> mobile esetén a legnagyobb méret
Ez a változó az előző példában bemutatott SSI include-ot helyezi el az oldalban.
Fontos, hogy ez a kód mindenképpen a méret specifikus behívások előtt szerepeljen a forráskódban.
Ezután ha szükséges, a további szükséges Critical CSS-t egy szabadon választott generátorral le kell generálni, és elhelyezni közvetlenül ez után:
<style>
{TEMPLATESTYLEPRIMARYSSI}
</style>
<style>
/* további critical css kódok */
</style>
{TEMPLATESTYLESSI}
Nem méret szerint szétvágott CSS fájlok
Amennyiben a css fájlok csak csoportosítva vannak, de azokon belül nincsenek méret szerint szétvágva, akkor elég az elsődleges mérethez beállítani a listát (vagy a legkisebb, vagy a legnagyobb), és az ahhoz tartozó .css vagy .html fájlt behívni a fent leírt módszerek valamelyikével.
JS fájlok beállítása és behívása a template-ben
Ezt az adott template szerkesztő felületén a Breakpoint Specific Options fülön tehetjük meg.
Miután be vannak állítva és ki vannak publikálva a fájlok, behívhatjuk azokat az oldalba.
JS fájl behívása külső fájlként
Ehhez a {TEMPLATEJSSSI} változót kell elhelyezni oda, ahova a js kódot szeretnénk elhelyezni. Ez tipikusan a <head> vagy a <body> vége.
Ez a változó a következőhöz hasonló kódot helyezi el az oldalban:
<!--#include virtual="/ssi/template/tmpl_6280034784378880.js.html" -->
Ami mivel egy SSI fájl behívás, valójában egy ehhez hasonló kódot fog végül az oldal kiszolgálásakor adni a böngészőnek:
<script src="/design/template/tmpl_6280034784378880.js?v=1638978905"></script>
JS fájl behívása <script>-ként, HTML kóddal, SSI nélkül
Mivel az előző megoldás csak akkor működik, ha a weblapot kiszolgáló szerveren engedélyezve van az SSI (a Webb & Flow Cloud Storage esetén engedélyezve van), így SSI nélkül közvetlenül azt a kódot kell elhelyeznünk az oldalba, amit az SSI adott volna. Ehhez a következő kódot használhatjuk:
<script src="/{CONFIGJAVASCRIPTPATH}/template/tmpl_{TEMPLATEID}.js?v={NOWDATE}T{NOWTIME}"></script>
JS fájl beépítése az oldalba inline script-ként
Amennyiben nem fájlként szeretnénk behívni a kódot, hanem közvetlenül a HTML kódba szeretnénk beépíteni, megtehetjük a template-hez tartozó SSI fájl behívásával:
<script>
<!--#include virtual="/{CONFIGJAVASCRIPTPATH}/template/tmpl_{TEMPLATEID}.js.html" -->
</script>
Ezzel a megoldással bármelyik, akár az összes css fájl tartalmát beépíthetjük az oldalba, feltéve, hogy a kiszolgáló szerveren engedélyezve van az SSI.
Fontos, hogy egy <script> tag-en belül hívjuk be a fájlokat, mivel azok csak a js kódot tartalmazzák annak ellenére, hogy .html kiterjesztésűek. Gyakorlatilag a /{CONFIGJAVASCRIPTPATH}/template/tmpl{TEMPLATEID}.js és /{CONFIGJAVASCRIPTPATH}/template/tmpl{TEMPLATEID}.js.html fájlok tartalma azonos.