Dinamikus betűméret választó
Honlapunk készítésekor - ha szempont, hogy mindenki számára elérhető tartalmat nyújtson -, egyik fontos dolog, hogy gondolnunk kell a gyengénlátókra is. Ebben a cikkben ennek egyik következményét, az oldalon található szövegek betűméretének állítását lehetővé tevő megoldást mutatok be, mellyel lehetővé tehetjük, hogy a felhasználóink kiválaszthassák, mekkora betűkkel szeretnék olvasni szövegeinket. Ezt Javascripttel, sütikkel és egy kis CSS-sel fogjuk megvalósítani, úgy, hogy a böngésző emlékezzen a kiválasztott méretre, csak egyszer kelljen beállítani.
A betű átméretezés lényege, hogy egy kis Javascript kódrészlettel az oldal CSS-ének egy részét felülbíráljuk. Ezekhez alternatív CSS-eket fogunk használni, melyekben a betűnagyságok különböznek csak. Célként két extra dolgot tűzünk ki: egyrészt hogy a kiválasztott méret megjegyzésre kerüljön, másrészt hogy kompatibilis legyen a Firefox (Firebird) alternatív stílusválasztóival.
A megvalósításhoz csak kliens oldali eszközt, vagyis Javascriptet használunk, a tároláshoz pedig sütiket fogunk felhasználni.Ennek a dokumentumnak lesz egy Ez egy teljesen átlagos dokumentumnak tekinthető, az egyetlen fontos dolog benne talán az, hogy a betűméreteket relatívan, az
Íme a kívánt módosítás után azA hozzáadott stíluslapok két dologban különböznek az eredeti változattól: egyrészt kettő
A három CSS a következő lesz (rendreEzekben a CSS-ekben csak a betűméretekre vonatkozó információk kaptak helyet. Mivel a betűméret öröklődik (ezért használtunk relatív betűméretet!), ezért elég volt a body elemre megadni a nagyságot, a többi elem (esetünkben a h1 és p) ettől fog függni, külön a méretük megadása felesleges. Ha ez a CSS-ünk kialakítása miatt nem lenne elég, bátran adjuk meg az összes az oldalon található elem betűméretét külön, felülbírálva ezzel az eredetiket.A A lefutásához az A választó megjelenítéséhez szükséges stílust definiálnunk, így ki kell bővítenünk a A három CSS-t pedig az alábbi kódokkal kell kibővíteni (rendre Ennek hatására az aktuális CSS-t jelképező "A" betű mindig vastagon, és kék színnel fog megjelenni.Ez az eljárás a dokumentum összes link elemén végigmegy, és ha
Ennek hatására a választási lehetőség élni fog, már csak két feladat maradt, az egyik a kiválasztott érték mentése, a másik pedig értelemszerűen a visszatöltése.
A sütik írásáért a következő script részlet a felelős, melyet aA süti domainje az aktuális domain lesz, lejárni nem mostanában: 2028. februárjában fog. A feladat még az aktuális állapot kiolvasása, ezt is a Végül az És persze a Persze nem elég csak a mentést megvalósítani, a visszaállítás is fontos. Ehhez a Illetve még mindig itt, fel kell venni a
■ A betű átméretezés lényege, hogy egy kis Javascript kódrészlettel az oldal CSS-ének egy részét felülbíráljuk. Ezekhez alternatív CSS-eket fogunk használni, melyekben a betűnagyságok különböznek csak. Célként két extra dolgot tűzünk ki: egyrészt hogy a kiválasztott méret megjegyzésre kerüljön, másrészt hogy kompatibilis legyen a Firefox (Firebird) alternatív stílusválasztóival.
A megvalósításhoz csak kliens oldali eszközt, vagyis Javascriptet használunk, a tároláshoz pedig sütiket fogunk felhasználni.
Példaoldal
Először is vegyünk egy példaoldalt, amiből kiindulhatunk, és kiegészíthetjük majd a betűátméretezés lehetőségével. Ezt a programot hívjuk egyszerűenindex.html
-nek:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="hu" lang="hu">
<head>
<title>Betűátméretezés példaoldal</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<link rel="stylesheet" type="text/css" href="common.css" />
</head>
<body>
<h1>Hello Világ!</h1>
<p>Ez a dokumentum példaként szolgál a betűkészlet átméretezéshez.</p>
<p>A benne levő betűket átméretezhetővé fogjuk tenni.</p>
</body>
</html>
common.css
-e is, amelyből ki fogunk tudni indulni:
body {
background: #eeeeee;
color: #800000;
margin: 0;
padding: 25px;
}
h1 {
font-family: Helvetica, Arial, sans-serif;
font-size: 1.4em;
background: inherit;
color: #000040;
padding: 5px 0;
margin: 5px 0;
border-bottom: 3px double #000000;
}
p {
font-family: Helvetica, Arial, sans-serif;
font-size: 1em;
background: inherit;
color: #000000;
padding: 0;
margin: 5px 20px;
}
em
megadási lehetőséggel adtuk meg.Extra stíluslapok definiálása
Az oldalon több dolgot kell majd megváltoztatnunk. Első körben definiáljunk három extra stíluslapot, és ezekben a stíluslapokban adjunk meg különböző méreteket az oldal szövegeinek. Ennek kapcsán a Firefox-ban már meg is fog jelenni a kis stílusválasztó ikon.Íme a kívánt módosítás után az
index.html
-ünk:
[...]
<link rel="stylesheet" type="text/css" href="common.css" />
<link rel="alternate stylesheet" type="text/css" title="small" href="small.css" />
<link rel="stylesheet" type="text/css" title="normal" href="normal.css" />
<link rel="alternate stylesheet" type="text/css" title="large" href="large.css" />
[...]
rel
tulajdonságának az értéke alternate stylesheet
, mely az alternatív stíluslapok jelölésére szolgáló módszer, míg mindhárom esetén egy title
tulajdonságot is megadtunk, ami a nevét fogja jelölni a stíluslapnak. Ezek tartalmának csak Firefox (és más, magába a böngészőbe épített választási lehetőséget nyújtó kliens) esetén van jelentősége, megléte viszont annak meghatározására szolgál, hogy mely tartalmak között tudunk kapcsolgatni.A három CSS a következő lesz (rendre
small.css
, normal.css
, large.css
):
body {
font-size: 14px;
}
body {
font-size: 16px;
}
body {
font-size: 24px;
}
Választási lehetőség biztosítása
A választási lehetőséget Javascript segítségével fogjuk megjeleníteni, így csak akkor fog ténylegesen látszani, ha valóban használható is. Ehhez a következő sort kell felvenni acommon.css
meghívása elé:
<script type="text/javascript" language="javascript" src="fontsize.js"></script>
fontsize.js
tartalma egyelőre a választási lehetőség megjelenítése lesz:
function fontresizeStart() {
fontresizeShow();
}
function fontresizeShow() {
var div = document.createElement("div");
div.id = "fontresize";
var aSmall = document.createElement("a");
var aNormal = document.createElement("a");
var aLarge = document.createElement("a");
aSmall.onclick = function() { StyleActivate('small'); return(false); };
aSmall.href = "#";
aSmall.className = "small";
aSmall.appendChild(document.createTextNode('A'));
aNormal.onclick = function() { StyleActivate('normal'); return(false); };
aNormal.href = "#";
aNormal.className = "normal";
aNormal.appendChild(document.createTextNode('A'));
aLarge.onclick = function() { StyleActivate('large'); return(false); };
aLarge.href = "#";
aLarge.className = "large";
aLarge.appendChild(document.createTextNode('A'));
div.appendChild( aSmall );
div.appendChild( aNormal );
div.appendChild( aLarge );
document.body.appendChild( div );
}
onload
eseményhez kell rendelnünk a fontresizeStart()
függvény meghívását:
<body onload="fontresizeStart();">
common.css
-t, illetve a betűméret állító CSS-eket. Az előbbibe az alábbi definíciókat kell felvenni:
#fontresize {
right: 0;
top: 0;
position: absolute;
background: #000000;
color: #ffffff;
width: 90px;
height: 30px;
}
#fontresize a {
display: block;
color: #ffffff;
text-decoration: none;
float: left;
width: 30px;
line-height: 30px;
text-align: center;
}
#fontresize a.small {
font-size: 14px;
}
#fontresize a.normal {
font-size: 16px;
}
#fontresize a.large {
font-size: 24px;
}
small.css
, normal.css
, large.css
):
#fontresize a.small {
color: #8080ff;
font-weight: bold;
}
#fontresize a.normal {
color: #8080ff;
font-weight: bold;
}
#fontresize a.large {
color: #8080ff;
font-weight: bold;
}
Választási lehetőség megvalósítása
Ha már ilyen jól előkészítettük, itt az ideje a választás megvalósításának is. Ehhez egy új eljárást veszünk fel afontsize.js
-be:
function StyleActivate( value ) {
if (value == '') { return; }
var i, lnk;
for( i = 0; (lnk = document.getElementsByTagName("link")[i]); i++ ) {
if ( lnk.getAttribute('rel').indexOf('style') != -1 && lnk.getAttribute('title') ) {
lnk.disabled = true;
if ( lnk.getAttribute('title') == value ) {
lnk.disabled = false;
}
}
}
}
title
tulajdonsággal rendelkező stíluslapról van szó, akkor letiltja, kivéve ha a neve megyezik a paraméterben kapott értékkel.Ennek hatására a választási lehetőség élni fog, már csak két feladat maradt, az egyik a kiválasztott érték mentése, a másik pedig értelemszerűen a visszatöltése.
Mentés és visszaállítás
A mentést sütik segítségével oldjuk meg. Az oldalról történő távozáskor, azonunload
esemény hatására az aktuális állapotot elmentjük egy sütibe. Ennek a megoldásnak az az előnye, hogy az alternatív stílusválasztókat (Firefox) is támogatja (ellenkező esetben a változtatáskor is menthetnénk az új értéket).A sütik írásáért a következő script részlet a felelős, melyet a
fontsize.js
fájlhoz adhatunk hozzá:
function CookieSet(name,value) {
document.cookie=name + "=" + escape(value) +
";expires=Thu Feb 10 2028 12:00:00 GMT+0100;path=/;domain=" + document.domain;
}
fontsize.js
-hez fűzzük hozzá:
function StyleActual( prefix ) {
var i, lnk;
for( i = 0; (lnk = document.getElementsByTagName("link")[i]); i++ ) {
if ( lnk.getAttribute('rel').indexOf('style') != -1 &&
lnk.getAttribute('title') &&
!lnk.disabled ) {
return lnk.getAttribute('title');
}
}
return null;
}
onunload
esemény végrehajtásakor kell a kiolvasást, és a mentést elvégeznünk, ezért a body
elemünk a következőre módosul:
<body onload="fontresizeStart();" onunload="fontresizeEnd();">
fontresize.js
-t is módosítani kell:
function fontresizeEnd() {
CookieSet( 'preferences_fontsize', StyleActual() );
}
fontresizeStart()
-ot kell módosítani a fontsize.js
-ben:
function fontresizeStart() {
fontresizeShow();
StyleActivate( CookieGet('preferences_fontsize') );
}
CookieGet()
eljárást is:
function CookieGet( name ) {
var name = name + "=";
var cs = document.cookie.split(';');
for (var i=0; i<cs.length; i++) {
var c = cs[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
}
return null;
}
Egy másik megoldás a visszaállításra
Lehetőségünk van egy másik megoldásra is a visszaállításhoz, ennek kivitelezése házi feladat lesz, de íme a lényege: azonload
esemény helyett már a fejlécben, script
elemek között a süti értékétől függően úgy írjuk ki az alternatív stíluslapokat, hogy azok értéke megfelelő legyen.
Szia! Csak egy aprosag, az
Csak egy aprosag, az innerHTML ha jol tudom nem szabvanyos, ezert celszerubb helyette a createTextNode hasznalata:
div.appendChild(document.createTextNode('szoveg'));
Felho
Jogos
Jogos, javítottam!
-boogie-
ezt meglehetne valahogy csin
Meg lehet.
-boogie-
kicsit bővebben? :) valahog
valahogy úgy kellene, hogy a /includes-be a javascriptet
és valami block féleségbe a lehetőségeket?
Fogalmam sincs
-boogie-
Példa
Error hegyek...
--
Szeretettel: Károly György Tamás
kgyt##kukac##kgyt.hu - http://kgyt.hu
Még nem...
Amúgy a cél inkább a lehetőség és a hogyan bemutatása volt, nem a konkrét megvalósítás. Ha lesz egy kis időm, megnézem, de ha valaki kijavítgatná, megköszönném. Bár elvileg mennie kellene.
-boogie-
IE alatt
-boogie-
----
Off: hozzászólás témája
időről időre fölmerül, most megint, hogy a hozzászólások témája nem önös érdekből van, hanem az kerül be az RSS-be például. Ennek megfelelően nem tudtam most sem én sem más RSS használó nem tudta hova tenni a hozzászólást. Légyszi figyeljünk erre.
J
nincs , de!
"function StyleActivate( value ) { if (value == '') { return; ) var i, lnk; "
a return mögött egy sima zárójel van, pedig kapcsos kéne, emiatt nem müködött a kód!
a hiba meglelve! Köszönet a kiváló leírásért!
Köszi, hogy szóltál,