Célunk, hogy három fix szélességű oszlopból álló weboldalt készítsünk, ahol a tartalmat CSS stíluslapokkal formázzuk. A webtartalom megformázásához "sima" float-olást fogunk majd használni, de mindenekelőtt vessünk egy pillantást a következő ábrára, amely megmutatja, hogy a HTML oldalunkon mely DIV elemek lesznek majd használatosak.

float:left és float:right, úsztatás egyszerűen

úsztatás egyszerűen módszer layout képe
úsztatás egyszerűen módszer layout képe

Mint láthatjuk a #container elem tartalmazza az összes többi DIV elemet, amelyet majd el akarunk rendezni. Először töltsd le a HTML kódot, hogy máris nekiláthassunk az oldal elrendezésének. Letöltés: pure_float.htmlHa színekkel különböztetjük meg az oldal elemeit, akkor szerintem jobban nyomon követhetjük a formázás menetét.

#container {
	background:#EAEDF1;
}
#header {
	background:#F7FBF6;
}
#sidebar_left {
	background:#F0F3EA;
}
#sidebar_right {
	background:#F0F2EC;
}
#content {
	background:#FFFFFF;
}
#footer {
	background:#F1F7F4;
	color:#999999;
}

Ezután "pofásítsuk" oldalunkat néhány egyszerű smink-szerűséggel:

p, h1, h2, h3, h5 {
	margin:0;
	padding:10px;
}

#header h1, #footer h5 {
	text-align:center;
}

#sidebar_left ul {
	list-style:none;
}

És most jön a lényeg: az oldal elrendezése. Elsőként a #container elemnek adjunk szélességet, majd vigyük a lap közepére.

#container {
	width:700px;
	margin:0 auto;
}

Ezután "vesszük" az oldalsávokat és azoknak is szélesség-méretet adunk, majd float-oljuk a megfelelő irányokba.

#sidebar_left {
	width:150px;
	float:left;
}
#sidebar_right {
	width:150px;
	float:right;
}

Végezetül a középső tartalommező bal és jobb szélét is beigazítjuk.

#content {
	margin:0 150px;
}

Vessünk még egy pillantást a CSS fájlunkra (pure_float_style.css), és ha úgy találjuk, hogy megfelelően kapcsolódik a kezdeti HTML dokumentumhoz, akkor minden OK. Az eredmény megtekintéséhez katt ide: mintaoldal kicsit több tartalommal (pure_float_with_more_content.html)

Továbbra is úsztatás egyszerűen, de célként a tartalom az oldalsávokhoz képest hamarabb töltődjön be. Megoldás: a negatív margók használata!

Mire is gondolok? Arra, hogy a fenti példa esetében konkrétan az oldalsávok hamarabb betöltődnek, mint a tartalom. Nem szeretném túl filozofálni a kérdést, de azt gondolom, hogy az oldal legfontosabb része az maga a tartalom. Ezért logikus, ha azt szeretnénk, hogy a tartalom előbb töltődjön be, mint például az oldalsávok. Hogyan rendezhetjük el az oldalunkat CSS-el akkor, ha a tartalom, azaz a #container "jön" előbb és majd csak utána következnek az oldalsávok DIV elemei? Mielőtt letöltenénk a következő megoldás kódjait, nézzük meg az itt következő képen, hogy vajon ugyanazok a DIV elemek szerepelnek-e, mint az előző példában.

úsztatás egyszerűen módszer layout képe
úsztatás egyszerűen módszer layout képe

Megállapíthatjuk, hogy most a #wrapper elem tartalmazza a #content elemet. De az igazi különbséget nézzük meg a HTML kódban (negative_margin.html), de töltsük le mellé a CSS fájlt is (negative_margin_style.css). Mint láthatjuk a most letöltött HTML kódban a tartalom "megelőzi" az oldalsávokat. Terjedelmesebb tartalomnál lehet fontos, hogy ez töltődjön be a böngészőbe előbb, mint az oldalsáv; de lássuk, hogyan tudjuk oldalunk részeit CSS-el elrendezni. A "layouts"- szal kommentezett részt nézzük, mert minden más megegyezik az előzővel. Elsőként adjunk szélességet a #container elemnek, majd vigyük középre a már ismert módon. Ezután float-oljuk a #wrapper elemet balra, majd ennek is adjunk szélességet.

#wrapper {
	float:left;
	width:100%;
}

Most "vegyük" a tartalmat és állítsuk be a szélességét.

#content {
	margin:0 150px;
}

És most következnek a negatív margók használata.

#sidebar_left {
	float:left;
	width:150px;
	margin-left:-700px;
}
#sidebar_right {
	float:left;
	width:150px;
	margin-left:-150px;
}

Majd zárjuk le a float-olást, ill. az úsztatást a #footer elem segítségével.

#footer {
	clear:left;
	width:100%;
}

Ennyi. A kész eredményt megtekintheted itt több tartalommal: mintaoldal több tartalommal (és a hozzá tartozó css fájl is letölthető) A két HTML oldalt, amit a fenti két példában készítettünk összehasonlítottam FireFox-ban, IE6-ban, Opera-ban és a Netscape böngészőjében és az eredmény az, hogy küllemre megegyeznek, viszont a negatív margók esetében a tartalom hamarabb betöltődik a böngészőbe, mint az oldalsávok. Ez pedig sok esetben egyszerűen hasznos dolog. Jó gyakorlást és sok hasznos CSS megoldást. Letöltheted az összes mintaoldalt egy ZIP fájlba csomagolva (8kb) - csslayoutnegativemargin.zip

Harder

Harder

Profil

Korábbi hozzászólások (7)

A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.

  1. zoleytaylor

    á, belezavarodtam. azt akarom megoldani, hogy 100%-os szélességű legyen a lap, és a két oldalán legyen mondjuk egy-egy 128px-es sáv... nem sikerül :@

  2. zoleytaylor

    oké, megvan :D -100%-ot (minuszszázszázalékot) is lehet használni :D

    megj.: néhány elírás van a leírásban. pl: "most a #wrapper elem tartalmazza a #container elemet" (valójában a #content-et tartalmazza...) de érthető és hasznos. kösz :)

  3. Harderszerzőblog.harder.hu

    Nincsmit, az említett részt módosítottam, köszi. :)

  4. zoleytaylor

    megoldottam még tisztábban, ezért megosztom a nagyközönséggel. szituáció tehát: teljes szélességű legyen a lap... vegyük csak a három egymásmelletti oszlopot, a szélsők legyenek 64px-esek (valami szép cakkos vagy valamilyen hátteret ha beleteszünk, tökéletes kerete lesz a lapnak), a középső pedig az oldal száz százaléka minusz a két szélső... na de ezt hogyan tudjuk megoldani? hát így: sorrendben írjuk a diveket, bal, közép, jobb (szerintem fölösleges ezt megbontani), majd a következő értékeket kapják:

    div.bal{ float: left; margin: 0px -64px 0px 0px; width: 64px; }
    div.kozep{ float: left; margin: 0px 64px 0px 64px; width: auto; }
    div.jobb{ float: left; margin: 0px 0px 0px -64px; width: 64px; }

    szerintem így jobban átlátható, hogy melyik érték mi miatt van minuszolva...

  5. Liktor Gáborhonlap-design.hu

    Ez az előző megoldás szimpatikus!
    Azoknak akik szeretnék a footert az egész alatt látni teljes hosszban, de nem tudják melyik lesz a hosszabb: a content vagy a két oldalsáv valamelyike:

    © Copyright 2007

    Persze a br miatt még finomitani kell a footer és a h5 helyzetén, hogy ne tolja ki a footert.
    Egyébként firefox és ie7 alatt müködik, ie6-ot most sajna tudtam megnézni, kiváncsi lennék.

  6. Liktor Gáborhonlap-design.hu

    Az entitásokat az előbb elfelejtettem levenni, szóval a kód újra:

    © Copyright 2007

  7. Falcone

    Köszi, most pont ezzel foglalkozok.

    Azt nem tudod véletlenül, hogy hogyan lehez egy divnek forrást adni? Mármint a div tartalma egy másik helyről töltődjön be...

Van hozzáfűznivalód? Írj nekem közvetlenül.

Kapcsolat