Monthly Archive for 2008. július.

MySQL Light: Drizzle

Amikor a MySQL SQL kompatibilitása kezd elég jó lenni, nem gondolná az ember, hogy eszébe jut valakinek rontania azon. Pedig eszébe jutott, bár a cél jóval inkább a forráskód egyszerűsítése, és egy az eredetinél sokkal jobban skálázható adatbázismotor lesz, mint a butítás.

A Drizzle a MySQL kódbázisára épülő, könnyített változat, melynek fejlesztéséhez úgy tűnik, hogy többen is kapcsolódnak – ráadásul a MySQL tulaj Sun berkeiből. A csonkítás – többek között – érintette a nézeteket, triggereket, tárolt eljárásokat, a lekérdezések gyorsítótárazását és a jogosultság kezelést is, tehát rendesen folyt vér is a művelet közben. Ezek a funkciók azért lettek beáldozva, hogy egy olyan “kicsi”, karbantartható forráskód szülessen, mellyel aztán meg lehessen célozni cloud computing környezetben futó alkalmazásokat.

A funkciók többségének eltávolítását egyébként teljesen korrektnek tartom abból a szempontból, hogy egész jól meg lehet lenni ezek nélkül a funkciók nélkül – a MySQL története is ezt bizonyítja, ezeknek a funkcióknak egy része nem volt jelen, a MySQL viszont töretlenül fejlődött. Ha tényleg sikerül kialakítani egy az eredetinél jobban skálázható szervert, akkor elég sokat nyerhetünk a dologgal.

Addig is viszont ideje lenne hivatalosan (nem release candidate-ként) is megjelennie végre a MySQL 5.1-nek.

iGlue.hu: egy magyar startup

Az iGlue-val üzleti kapcsolatban is állok, de nem ezért gondolom hogy egy ígéretes magyar vállalkozásról van szó (hanem éppen fordítva). Először arról, hogy mi is ez a projekt, majd hogy miért gondolom ígéretes lehetőségnek.

Az iGlue a szemantikus webet próbálja meg a gyakorlatba átültetni felépítve egy adatbázist a publikusan elérhető információk segítségével (pl. Wikipédia), és ezt (majd) különböző módokon elérhetővé tenni. Az egyik ilyen interfész (az “IceCube”) egy olyan weblapokba, blogokba beépíthető megoldás lesz, mely az adott oldal szövegét “annotálja”, vagyis megkeresi benne azokat a szavakat, kifejezéseket (főként tulajdonnevek), melyekről az iGlue adatbázisában elérhető információ, majd ezt egy ügyes dives popupban helyben megjeleníti. A már elérhető demóban (Firefox vagy Safari alatt kipróbálható) egy New York Times cikken keresztül lehet megnézni ennek a működését. A cikkben szereplő Kennedy névre kattintva például különböző eseményeket, helyszíneket, fotókat, videókat nézhetünk meg, de Dallasról mint helyszínről, vagy a cikk szerzőjéről is tudhatunk meg információkat. Ezek össze-vissza linkelve vannak, így az információk között elkalandozhatunk a minket érdeklő irányokba.

A szolgáltatás azonban nem csak erről fog szólni, wikipédia szerűen, de rendezett (és nem szabadszavas) módon a honlapján a felhasználók szerkeszthetik, bővíthetik majd a tartalmakat, és be van tervezve egy API is mind az információk kinyerésére, mind pedig információk hozzáadására.

Az iGlue mögött egy jó ötlet és egy befektető is van, és talán nem árulok el nagy titkot ha elmondom, több cég már most komolyan érdeklődik a technológia iránt. Ez már önmagában reményre ad okot, ha sikerül pár nagyobb tartalomszolgáltatóval megállapodni a kiegészítő információk megjelenítéséről, az hosszútávra megalapozhatja a cég működését. Én azt látom, hogy egy jó csapattal (álláslehetőség!) vágott neki a cég az internet meghódításának, és ha jól csinálják, akkor egy nemzetközileg is ismert és elismert szolgáltatás lehet a dologból. A Netvibes munkájába nem sokkal azután kapcsolódtam be, mint ahogy most az iGlue áll, és azt látom, hogy induló startupként talán az iGlue-nak még jobbak is az esélyei hosszútávon. Persze ezt majd az idő dönti el. :)

Webadmin rövidhírek #5

A webadmin rövidhírek sorozat keretében ezúttal is MySQL fókusz, memcached kiegészítéssel, PostgreSQL-ből is használható adatbázis proxy-val.

Mire jó a view?

A MySQL nem túl régóta használható lehetősége a view támogatás. Az eddigi munkáim során valahogy sohasem hiányzott a lehetőség, hirtelen még olyan esetet sem tudok felidézni, hogy kellett volna, de kliens oldalon megoldottam. A view-k pedig többféle érdekes dologra is használhatóak, ezeket sorolja fel a belinkelt cikk is: adat tisztításra, “döntéshozatalra”, bonyolult táblák egyszerűsítésére, adattartalmak “szebbé tételére”, stb.

Memcached Wiki

A memcached jó dolog. A belinkelt róla szóló wiki is, különös tekintettel a FAQ részekre, ahol elég jó kérdés-válasz párokat gyűjtöttek össze.

MySQL pager

Az talán senkinek nem újdonság, hogy ha a MySQL konzolban a pontosvessző helyett \G-t írunk a lekérdezés végére (így simán, két karakterrel), akkor másfajta megjelenítésben nézegethetjük a lekérdezés eredményét (ez akkor jó, ha az oszlopos nézet használhatatlan, mert sok az oszlop). Ami számomra újdonság volt, hogy az adatbázis válaszok megjelenítőjét “pager”-nek hívják, és hogy írhatunk sajátot is.

MySQL WITH ROLLUP

Egy érdekes lehetőséget biztosít a MySQL a GROUP BY használatakor, főként mikor több oszlop szerint is csoportosítunk. Én valami olyan hasznos alkalmazását tudom elképzelni, hogy több oszlop szerint csoportosítás után még HAVING segítségével leszűkítjük a kört úgy, hogy csak pár sor maradjon, olyanok, melyeket amúgy nehéz lenne összehozni egy lekérdezésben, de célszerű együtt megjeleníteni. Másik érdekes alkalmazási terület az, amikor a szerveren olyan alkalmazásunk fut ami korlátozottan engedi csak az SQL lekérdezések eredményeinek manipulációját (pl. egy lekérdezést egy az egyben képes csak megjeleníteni, és nem engedi összeadni a sorokat), így kénytelenek vagyunk mindent SQL-ből megoldani.

URL kódolás és dekódolás MySQL-ben

Ha egy SQL lekérdezés során szeretnénk egy kész URL-t előállítani, akkor jöhet jól ez az UDF, avagy User Defined Function MySQL kiegészítés, amivel a PHP-ben megszokott urldecode/urlencode függvényeket használhatjuk SQL lekérdezéseken belül is.

Myosotis Connector (MySQL & PostgreSQL)

Többször emlegettem már a különböző proxy lehetőségeket, ezekkel legfőképpen az a baj, hogy kimutatható módon lassítják az adatbázis műveleteket. A Myosotis Connector nevű proxy ezzel szemben azt ígéri, hogy gyors – a saját tesztjeik alapján gyorsabb, mint a MySQL Proxy és az uni/cluster megoldások.

A Yahoo! megnyitja a keresőmotorját

A Yahoo! tovább lép a keresők versenyében (jók a lépései), most azzal, hogy gyakorlatilag bárki számára lehetővé teszi, hogy keresőt építsen a Yahoo! Search adatbázisára. A SearchMonkey-t bemutató bejegyzésemben írtam le egy mondatot, miszerint “Ami igazán Google gyilkos lenne, ha a Yahoo engedné a találati lista manipulációját is – mivel ez a Google szent tehene.” – ez jelzi talán azt, hogy milyen fontosnak gondolom ezt a lépést (is).

A címben talán nincs is eléggé kihangsúlyozva, hogy mi az, amit tett most a Yahoo!: nem csak egy API-t adott a keresőmotorjához, mint amilyen a Google keresőmotorjához is van, hanem egyrészt nincs semmilyen módon darabra limitálva a használat(!), másrészt pedig azt csinálunk a találati eredményekkel, amit akarunk: elvehetünk, hozzáadhatunk, módosíthatunk, stb. A program rövidítése BOSS, avagy Build your Own Search Engine – már ezzel is konkurens keresők építésére szólít fel a cég. Egyetlen limit van, miszerint a jövőben kötelező lesz (lehet) Yahoo reklámok kihelyezése a találati listák mellé, de gyakorlatilag ezzel is részben ad a Yahoo!, mint megköt.

Azon már korábban is fanyalogtam, hogy a Yahoo! találati listája nem az igazi magyar keresésekre, de itt tán pont ez a lényeg is, miszerint ha nem tetszik, át is rendezhetjük. A Yahoo! azt nyerheti ezze a lépéssel, hogy a motorja szélesebb körben használt lesz, és persze a kereső iparágnak is egy elég hasznos lépésről van szó – nagyobb lehet a verseny, felkavarhatja az állóvizet a lépés, és nem kevésbé kapott egy eszközt is a piac. Egy olyat, amit a Google nem fog odaadni.

A Yahoo! mostani lépései engem a Google pár évvel ezelőtti helyzetére és szolgáltatás bevezetésére emlékeztetnek. Akkor minden hétre jutott két Google hír, aminek az egyike jellemzően valamilyen szolgáltatás bejelentése volt. Ha ezt folytatni tudja a Yahoo!, és valahogy megoldják hogy a Microsoft ne vásárolja fel őket (hiszen például ezt a mostani lépést sem tudnám egyszerűen elképzelni a Microsofttól), akkor növekedhet a piacuk, és ez jót tehet a cégnek.

Ami a BOSS konkrétumait illeti, egy XML alapú API-ról van szó, melyhez regisztrálnunk kell magunkat. Jelenleg a web, a kép és a hír keresők érhetőek el, illetve a “helyesírás ellenőrző”, ami keresőkifejezéseket tud javasolni (elgépelések esetén). A találati eredmények információgazdagságát illetően mondjuk úgy, hogy nem vagyok elragadtatva – kb. csak a cím, kivonat, url és dátum az, amit kapunk. Érdekes lenne, ha mindazokat az infókat is átadná a Yahoo!, amit a SearchMonkey-hoz használ! Meglátjuk hogy a jövőben kapunk-e majd valami ilyesmit, de a jelenlegi megoldás is jópár mashup lehetőségét kínálja.

A hírről közben Endre is írt: Yahoo: építs saját keresőt! címmel, és persze a nagy blogok is beszámoltak róla: RWW, GigaOM, TechCrunch, ProgrammableWeb.

Az Opera tankönyve

A Google Doctype-ról írtam már korábban, az Opera most egy hasonló lépésre szánta el magát ami a szándékot illeti. A forma itt nem wiki, hanem egy “könyvszerű” tananyag, Opera Web Standards Curriculum néven.

Kiváló összeállításról van szó, mely főleg az alapokat mutatja be, de azokat pont úgy, ahogy – szerintem – kell. Az internet/web kialakulásától, működésétől, a szabványok reális megközelítésétől kezdve design és HTML bemutatók jönnek, majd egy kis “egyéb” adalék. Az egyes írások ráadásul szabad licencelésűek, azaz semmi akadálya a lefordításuknak. Valaki jelentkező esetleg? Jól mutatnának a webbuilder.hu hasábjain – ott sajnos egyelőre nem túl olvasmányos, néhol pongyola írások vannak (de így is minden tiszteletem az ottani szerzőknek!).

Kötelező olvasmány kezdőknek!

Yahoo! – fel vagy le?

A Yahoo! elég durva pofont kapott a Microsofttól, és most éppen csendesen szenved. Több vezető, a céget meghatározó személyiség is távozott a cégtől, kérdés, hogy túl fogja-e tudni élni, vagy rövidesen összeomlik? Bár én drukkolnék a cégnek, de ma már az összeomlás tűnik a legvalószínűbb megoldásnak. Ami fura módon még jót is tehet a piacnak.

Részemről tanácstalan vagyok a helyzetet illetően. A Microsoft ajánlattétele után úgy gondoltam, hogy a Yahoo! emelt fővel jött ki a csatából, és ami azt illeti, ezt a tőzsde is alátámasztotta, a Microsoft visszalépése után a tőzsde egy nagy esés után folyamatos emelkedést mutatott. A helyzet azonban nem rendeződött, egyrészt a részvényesek (konkrétan Carl Icahn) mint az várható volt, beszóltak, másrészt pedig a cégtől egyre-másra kezdtek el nagy nevek távozni. Ez utóbbi egyébként nem feltétlenül a Microsoft ajánlattétele, és a kialakult helyzet miatt következett be, szerintem inkább amiatt mert a Yahoo! vezetésében már jóideje morcos hangulat uralkodhatott (vagy pedig előre látták, hogy ez túl nagy pofon volt a cégnek?). Most ott tartunk, hogy egyre hangosabbak a pletykák, hogy a cégvezető Jerry Yangnak, a korábbi tárgyalások vezetőjének, a cég első emberének (és alapítójának) távozása után a Microsoft újra tárgyalásokba kezdene. Nagyon kicsi az esély, hogy ne így lenne majd (bár egy Time Warner – Yahoo! dealről is szó van).

Amit igazából még mindig nem értek, hogy a Microsoft miért lépte meg ezt a lépést, és gyakorlatilag miért verte szét a Yahoo!-t? Valóban komolyan gondolta a cég felvásárlását, és beolvasztását? Nem tudom elhinni, egyszerűen inkompatibilis a két cég filozófiája. A piac megszerzése volt a cél? Lehet, de inkább a Google malmára hajtja ezzel is a vizet.

Mindenesetre most az látszik, hogy a Yahoo!-t esetlegesen valóban felvásárló Microsoft egy üres lufit fog kapni, a nagy nevek, de még a viszonylag “szürke”, jó programozók is gyorsan elhúznak majd a cégtől. Scoble szerint ezzel nem kicsit feldobva a függetlenek táborát, és új lendületet adva a “webkettes” piacnak. A jó sztorihoz illően ketyeg az óra: a jelenlegi vezetésnek 1 hónapja van hogy csináljon valamit, különben az augusztus elsejei Yahoo! közgyűlésen Icahn nyerni fog.

Ami engem igazából érdekel, hogy mi lesz a Yahoo! eredményeivel? Számos innovatív dolgot tettek le az asztalra, ezek vajon elsorvadnak, vagy be fog tudni valaki állni mögéjük? Én abban reménykedem, hogy a távozó yahoosok közül páran felkarolják majd ezeket a törekvéseket, és tovább tudják majd vinni ezt az irányt, mert kár lenne veszni hagyni.

Infinite scroll, a végtelen történet

Az “infinite scroll”, avagy a végtelennek tűnő oldalhosszúságot imitáló scroll megoldás ma már nem számít újdonságnak, a “Miner Reader” néven futó projektem kapcsán most én is elkezdtem implementálni egy ilyet. A lényeg az, hogy nagyon nagy adatmennyiségből valójában mindig csak éppen annyit teszink ki a böngészőben az olvasónak amennyit érdemes,  és ahogy halad lefele az ember az oldalon, további részeket húzunk be a szerverről AJAX kérésekkel, szinte észrevétlenül. A konkrét megvalósítás sokféle lehet, most egy fapados következik.

Végtelen Görgetés

A most bemutatandó script részletek még korántsem mondhatóak tökéletesnek, egyelőre csak gyors és látványos eredményt szerettem volna elérni, a finomhangolás (ami a nagyobb feladat lesz), még hátra van. Az alapokat a korábbi Google Reader szerű navigáció írásomból vettem, az adattartalom viszont most nem a Webakadémia blogbejegyzéseiből áll, hanem egy a szerver oldalról dinamikusan töltött tartalomból.

A cél és az eszköz

A cél az, hogy az oldalon történő J-K billentyűkkel történő mozgás során ha az oldal aljához közeledünk, akkor további elemeket töltsünk be. A J-K navigációt már jQuery-vel csináltam, így a feladat többi része is ezzel a könyvtárral készült. A JavaScript megírásán kívül szükségünk lesz még az adatokat szolgáltató szerver oldali scriptre is, a profi megvalósítást nem árt átgondolni, én egy adatbázis lekérdezés + LIMIT x, 10 kódra építettem az enyémet.

A tartalomszolgáltató

Egyszerű megoldásként azt választottam, hogy nem adatként, hanem kész HTML-ként küldöm a szerver felől a tartalmat a böngésző felé, így a kliens oldal egyszerűsödik egy kicsit, de a szerver oldal sem lesz agyonbonyolítva. A következő sematikus kód adja a szerver oldal lényegét:

$from = (int)$_GET['from'];
$data = mysql_query("select * from table limit ?,10", $from);
while($entry = mysql_fetch_array($data)) {
    echo "<div class=\"entry\">";
    echo "<div class=\"title\">".htmlspecialchars($entry['title'])."</div>";
    echo "<div class=\"content\">".htmlspecialchars($entry['content'])."</div>";
    echo "</div>";
}

A lényege a kódnak, hogy a from GET paraméter értéke szerint módosítja az SQL lekérdezés LIMIT-jét, és ez alapján tesz ki 10 elemet.

A kliens oldal

A kliens oldal sem egy túl bonyolult script, itt az oldal aljához közeledésének érzékelését a J-K navigációhoz kötöttem (hiba: a sima scroll tehát nem működik), és ha már csak három elem van hátra, akkor tölti be a következő 10 elemet. A betöltést egy load nevű függvény végzi el, egy “globális” változóban van nyilvántartva, hogy mennyi elem van éppen betöltve (és hogy honnan kell tölteni a következő tízet).

var num = 0;
function load() {
    var div = document.createElement("div");
    div.id = "content-"+num;
    div.innerHTML = "<div class=\"entry\">Loading...</div>";
    document.getElementById("content").appendChild(div);
    jQuery("#content-"+num).load("data.php?from="+num);
    num += 10;
}
 
jQuery(document).ready(function() {
    load();
    jQuery(document).keypress(function(e){if(e.target.tagName=='HTML'||e.target.tagName=='BODY'){
        if (!e.altKey && !e.ctrlKey && (e.which==106 || e.which==107)) { // J and K
            var titles = jQuery('.entry');
            var c = jQuery(document).scrollTop();
            var i = 0; while (i < titles.length && jQuery(titles[i]).offset().top - 10 <= c) { i++; }
            if (e.which == 107) { i-=2; }
            if (i >= 0 && i < titles.length) {
                titles.removeClass('actual');
                jQuery.scrollTo(jQuery(titles[i]).offset().top-10, 500, {easing:'swing'});
                titles[i].className += ' actual';
                if (i >= num-3) { load(); }
            }
        }
        if (!e.altKey && !e.ctrlKey && e.which==108) { // L
            load();
        }
    }});
});

A kódból a load() függvény, és annak meghívása a lényeges az “(i >= num-3)” feltételt tartalmazó sorból. A móka kedvéért még betettem egy L betűre lefutó függvényhívást is.

Hibák

A funkció “tökéletes” kivitelezését illetően persze vannak még bőven hiányosságok.

Azt már fentebb is említettem, hogy ha sima görgetéssel mozgunk az oldal aljára, akkor nem fog több tartalom betöltődni. Ezt egy másodpercenként többször lefutó kis függvénnyel oldhatjuk meg, ami az oldal éppen aktuális scroll pozícióját lekérdezi (lásd a fenti kódban a “c” változót), s amennyiben az oldal aljától 2-3 bekezdésnyi távolságra érünk, meghívja a load() függvény.

További probléma, hogy nincsen lekezelve az, hogy ha időközben friss tartalom kerül az adatbázisba – ilyenkor ismétlődések lehetnek az újonnan betöltött és a korábban már megérkezett tartalmakat illetően. Ezt többféleképpen is ki lehet kerülni, a megoldás főként az alkalmazástól függ, amit készítünk. Megoldás lehet például, hogy az oldal betöltődésekor egyből leküldünk 1000 id-t, és a betöltő script nem pozíció, hanem id alapján kéri le az elemeket. Egy másik, hogy szintén nem pozíciót, hanem a legutolsó id-t küldjük el a szerver oldal felé, amiből az meg tudja állapítani, hogy mely elem jön ezután a sorban.

Tovább

Attól függően, hogy mi a végső cél, elég sokmindent ki lehet hozni a fenti scriptekből, és persze bármelyik kliens oldali kódkönyvtárra könnyen lehet építkezni (a használt függvények jellemzően mindegyikhez megvannak), nem csak a jQuery-re. A fenti kódrészletek (értelemszerűen) szabadon felhasználhatóak.

A jövő stílusa

A CSS 2 kapcsán sajnos be kellett látnia a W3C-nek, hogy az egyes böngésző gyártóknak (anno) akadtak nehézségeik (motivációs hiányosságaik) a kivitelezéssel, ezért jelent meg a visszabutított CSS 2.1 változat. A fejlesztés azonban nem állt le, csak ügyesebb lett: nem egy nagy CSS 3 szabványt találtak ki, hanem moduláris jellegűt, ahol az egyes modulok megjelenése független egymástól, és a modulok függetlenül is implementálhatóak a böngészőkben. A CSS 3 fejlesztése folyik, de nem csak a W3C-től jelennek meg ezügyben újdonságok.

CSS vs. Vissza a jövőbe

A régi böngészőkben nem működik témát így az elején zárjuk is le: nem az a lényeg hogy a régi böngészők nem támogatnak valamit, hanem hogy az újak egyre szélesebb körben lehetővé teszik az újdonságok használatát. És a böngészők ma már nem csak a webről szólnak, például a Webkitben implementált újdonságokat kiválóan lehet használni iPhone-on, Adobe Air-ben, Apple Dashboardon, a Firefox-ban megjelenőket a böngésző kiterjesztésekben, és úgy általában az egyes böngészőket lehet limitálni egy intranetes/vállalati környezetben, kihasználva a modern lehetőségeket.

Friss hír a CSS változók bevezetése a WebKit böngészőkben, mely lehetővé teszi többször használt értékek változóként történő létrehozását, és használatát. A funkció hiánya korábban is felmerült már, és a vadabbnál-vadabb ötletekhez képest a megvalósítás ezúttal szerintem elég jól sikerült:

@variables {
  titleFont:bold 18px "Verdana, Arial";
  titleBG: #FF0000;
}
 
div.title {
  font: var(titleFont);
  background: var(titleBG);
}

Míg a Firefox 3 egetrengető CSS újdonságokkal nem jött ki (de sok apró fontosat megvalósított), addig a következő verziói érdekesebbek lesznek ebből a szempontból is. A Firefox 4-re (kb. másfél év múlva) ígérik a fejlesztők a CSS változókat ebben a böngészőben is, de a számított értékek támogatása, és a Webkit által már szintén implementált animációk és átmenetek is ekkor fognak megjelenni. A Firefox 3.1, melynek megjelenése közelebbi időpontban várható, támogatni fogja az összes CSS 3 kiválasztót, a text-shadow-t, a @media query-ket, a letölthető web betűkészleteket (@font-face), a font-stretch és word-wrap tulajdonságokat.

Az Opera 9.5 is az élen jár a CSS 3 implementációban, hiszen már megvalósította az FF3.1-re csak beígért összes CSS 3 kiválasztót, a text-shadow-t, a @media query-ket és még jópár dolgot, amivel részben elmaradásban volt (overflow-x, overflow-y, opacity), bővebben lásd a böngésző újdonságainak listái között.

Ami az Internet Explorer 8-at illeti, a fentiekhez képest jelentős lemaradásban van. Bár a CSS 2.1 támogatásban jelentős előrelépést fog hozni a tervek szerint támogatva a teljes szabványt, a CSS 3 kiválasztó támogatást, és a fentebb emlegetett újdonságokat még meg sem ígérték a fejlesztők (gondolom IE9-re már biztosan megérkeznek). Ezzel együtt persze ha már azt elérjük hogy a CSS 2.1 minden széleskörben használt böngészőben támogatva lesz, már annak is örülni fogunk.

A jövő stílusa, pontosabban a stíluslapok jövője a jelenlegi böngésző fejlesztési ütemben már talán nincs is olyan messze, ami látszik hogy az innovációban jelenleg az Apple/Webkit vezet, az Opera szintén egész jó, a Firefox pedig komótosan, egy népszerű böngészőhöz illő tempóban hajtja végre az ötéves tervet. A cél nem az, hogy rengeteg újdonságunk legyen, hanem hogy a már szabványnak mondható megoldások stabilizálódjanak, és erre is jó kilátások vannak.

Hogyan működik a CSS float?

Ritkán látni olyan leírást, mely a CSS float tulajdonsága kapcsán nem csak azt mondja el, hogy eredetileg mire szánták, illetve hogy hogyan működik, de azt is részletesen, ábrákkal és példakódokkal bemutatja, hogy mire és hogyan használható, milyen problémák léphetnek fel, s ezekre mi a megoldás. Az All About Floats című írás ezt a feladatot elég jól teljesíti. Tudtad, hogy a “float” gumimatracot is jelent?

Lebegő Homer

A képekkel elég gazdagon (és jól) illusztrált írás bemutatja, hogy a float tulajdonság segítségével lehet egész oldalrészek, és kisebb elemek megjelenését is módosítani, és felsorolja a lehetséges problémákat, mint a csak floatolt elemeket tartalmazó elem “összecsuklása”, a clear és az új sor kapcsolata, a túl hosszú tartalmak miatt széteső oldal. És persze részletes választ és megoldási módokat is kínál.

A float kapcsán azért még érdemes megemlíteni a Floatutorial című összefoglalót, mely konkrét példák megvalósításán keresztül járja be ezt a kérdéskört, a Smashing Magazine CSS Float Theory írását linkekkel gazdagon illusztrálva, és magát a W3C “szabványt” is persze.