Három hasábos oldalszerkezet (div)
Dinamikusan generálom az XHTML kimenetet. Lehetőség van modulonként ki/be kapcsolgatni a jobb/bal oldali hasábokat, ezért a középső hasábom nem lehet fix, hogy kompenzálni tudja az egyik vagy akár mindkét oldal hely foglalását. Nem találtam megoldást arra, hogyan lehetne ezt megoldani táblázatok nélkül. Ebben kérnék egy kis segítséget.Tehát a fenti példa alapján, arra lenne szükségem, hogy a középső div mindig 100% legyen (akár egy fix kereten belül is, ami mindhárom hasábot magában foglalja). Nyílván volt már ilyen kérdés, de sajnos nem találtam a megfelelő keresőszavakat, hogy rátaláljak a topicra...
■
<div style="width: 150px; float: left; border-color: #000000; border-style: solid; border-width: 1px;">Bal</div>
<div style="width: 100%; float: left; border-color: #000000; border-style: solid; border-width: 1px;">Közép</div>
<div style="width: 150px; float: left; border-color: #000000; border-style: solid; border-width: 1px;">Jobb</div>
google
Egy megoldás
Ez xhtml-lel:
Mr.Tiny [http://tiny.uw.hu]
<Nincs cím>
Js vs. php?
Mr.Tiny
<Nincs cím>
<Nincs cím>
Egyébként ne mondd nekem, hogy van olyan dolog, amit nem lehet divekkel megcsinálni, de táblázattal igen, mert ez így ebben a formában nem igaz.
<Nincs cím>
Azt nem mondtam, hogy van olyan, amit táblázattal lehet és CSS-el nem (bár mintha valahol annó olvasta volna erre is példát). Azt viszont mondom, hogy van, amit táblázattal nagyságrendekkel egyszerűbb, példának kapásból itt van a jelen probléma.
<Nincs cím>
A megoldás (hangsúlyozom) pofonegyszerű. Van A,B,C hasábod, ebből mondjuk neked a "B" hasábban van a tartalmad. Az elrendezések tehát valami ilyesmik lehetnek:
+--A--|----B----|--C--+
+-------B-------|--C--+
+--A--|-------B-------+
+----------B----------+
Ehhez elméletileg kell 1 alap CSS fájl, ami azoknak az elemeknek a tulajdonságait tartalmazza, amik minden esetben megjelennek. Ezen túl kell minden egyes állapothoz egy külön CSS, amibe csak ezeknek a hasáboknak a megjelenítését rögzíted. Aztán PHP-ben eldöntöd, hogy az adott oszlopban van-e valami, avagy nincs és ennek megfelelőlen csatolod a link tag használatával a megfelelő css leírást, plusz az alap css-t. Az oszlopok szélességét ezen megoldás esetén teljes nyugalommal megadhatod pixelpontosan is, hiszen mindig a körülményeknek megfelelő CSS lesz csatolva.
Nem is kell külön fájl
Egy CSS-ben is megoldható a dolog, ha pl a befoglalo elemnek (ha van ilyen) vagy akár a body tagnek megadjuk a megfelelo osztályt. Ekkor az osszes lehetoseg szerepelhet egyetlen fajlban. Pl a kozepso oszlopra vonatkozo szabalyok:
Más
Hát lehet, hogy nem lehet megoldani. Nem tudom. De azt igen, hogy ha te egy normális dizájn-t csinálsz, akkor az is idomulni fog a felbontáshoz, és meg lehet csinálni úgy. Éppen ezért jön ki, hogy ami táblázattal egyszerű, s divvel nem azt is meg lehet csinálni de csak úgy, ha a dizájn szemléleteden is változtatsz. Mert ugye már annak is része a css. Így tehát vagy %-kal csinálsz mindent vagy optimalizálsz 800*600-ra vagy használsz js-t :)
Mr.Tiny[http://tiny.uw.hu]
<Nincs cím>
Vagy pedig maradok a jól bevált táblázatoknál, és nincs a világon semmi probléma :) Sajnos nagyon így fest a dolog...
Jah
Amúgy melyik lapról van szó?
Mr.Tiny [http://tiny.uw.hu]
Margó trükk
A dolog nem nehéz, csak olyan megoldás nincs (nem jut eszembe) ami eseten a 3 kulonbozo HTML-hez 1 CSS eleg lenne. Mivel a HTML-eket PHP generalja es igy a szerver oldalon eldol, hogy mit kell kikuldeni, ezert nem nagy hatrany, ha esetleg a CSS-t is ennek megfeleloen kuldi ki a szerver (pontosabban annak csak egy részet).
A feladat: 3 oszlop, 2 szelso fix szelessegu, kozepso pedig minden maradek helyet betolt.
A bal oldali es a kozepso oszlop egymas melle rakasa nem okozhat senkinek problémat: baloldali oszlop float:left, a kozepso oszlopnak pedig ugyanolyan szelessegu bal margot megadni, mint amilyen szeles a bal oldali oszlop. Ennyi.
Ennyi lenne, ha nem lenne IE. Neki van egy kedves 3px-es hibája. Erre kell egy kis javítás.
IE 3px Gap
Ha ez megvan, johet a masik oldal. Itt az lesz a trukk, hogy a kozepso oldalnak NEGATIV margot adunk, a jobb oldali oszlopot pedig - hiába van jobb oldalon - balra fogjuk floatolni. A negativ margo es a jobb oszlop szelessege megyegyezik. Ebben a pillanatban a jobb oldali oszlop rajta van a kozepson. Hogy kitoljuk alola, a kozepso oszlopnak a jobb oldali paddingjat hasznaljuk fel. Nyilvanvaloan a padding erteke minimum annyi legyen mint a jobb oldali oszlop szelessege.
Ez cool :)
Mr.Tiny [http://tiny.uw.hu]
<Nincs cím>
Másodszor: Ha lusta volnék tanulni, nem nyitottam volna ezt a topicot.
Személyeskedést és a saját véleményünket table vs div témában ezzel szerintem félre is tehetjük, és koncentrálhatunk az adott kérdésre. Illetve csak koncentrálhatnánk, ha nem lennének egyéb elfoglaltságaim. A topic nyitásakor még azt gondoltam, hogy biztosan van valami tök egyszerű módja a probléma megoldásának, amire nem gondoltam még. De látom, hogy nincs, és nincs most időm összerakni, amit leírtál. Mindenesetre köszönöm, igaz nem olyan sima ügy, mint gondoltam, de azért ki fogom próbálni a gyakorlatban, és meglátom mi sül ki belőle. Hogy a topic megfelelően le is legyen zárva, majd postolom a végleges verzió kódját.
Üdv, és köszönöm mindenki segítségét.
CSS-t tanulni = újra tanulni
Nem akarlak meggyozni itt es most a CSS-rol, csak annyit javaslok, hogyha CSS-sel akarsz megoldani dolgokat es meg akarod tanulni, akkor ne azzal kerdezz, hogy en ezt 2 perc alatt megoldom tablazatokkal, te tudsz-e mutatni olyat amivel masfel?
CSS-t tanulni 3 reszbol all. Egyreszt meg kell erteni a szabvanynak az alap logikajat, masodszor meg kell ismerkedni a bongeszok (es itt 90%-ban az IE) hibairol es masfajta ertelmezeserol, harmadreszt meg kell tanulni az evek soran sok okos ember altal kitalalt technikakat. Mig a tablazatoknal egy egyszeru beracsozott feluletben kell gondolkodni 2D-ben, addig CSS-sel az egymasba agyazott elemek altal alkotott egymas felett levo teglalap alakzatokban, es az egymas utan jovo elemek egymas utain, melletti teglalap alakzataiban, amik hol osszefugnek egymassal, hol meg nem. Tablazatnal annyit kell tudni, hogy cellpadding=0 cellspacing=0 meg minden nem fix meretu cella legyen 100% aztan kesz. A CSS joval bonyolultabb.
ez szep
--
ashnur(unok loginolni..vajon mennyire vagyok lusta ? :P )