Autor Zpráva
mata
Profil *
Tak tedy mám nasledující problém:

obalový DIV dané šířky
levý sloupec neznámé šířky (je v něm obrázek) | pravý sloupec neznámé šířky (tak aby doplnil šířku obalového DIVU)
konec obalového DIVu

oba sloupce mají nastavený float:left, díky čemuž pravý sloupec neukončí obtékání hned na konci obrázku ale je i nadále odsazen

problém je, že ve FF a Opeře při dlouhém textu skočí pravý sloupec pod levý

poradíte někdo? díky


CSS:

#content {
width: 600px;
}

#image {
float: left;
padding-right: 20px;
}

#text {
float: left;
}


HTML:

<div id="content">
<div id="image">
<img src="" />
</div>
<div id="text">
textový sloupec
</div>
</div>


peta
Profil *
nemas nastavene clear
nemas nastavene margin
nemas uvedene sirky floatovaneh bloku

Muzes zacit znova s lepsi literaturou o floatovani. Dekujeme, nashledanou. :)

http://www.volny.cz/peter.mlich/www.htm#www60
zkus 3 sloupce, ale tam je polovina prikladu take spatne napsana
Plaváček
Profil
Obávám se, že chceš něco, co udělat nejde. Velmi pěkně vysvětlený princip plovoucích prvků najdeš zde http://www.pixy.cz/pixylophone/2003_12_archiv.html#1071056082
mata
Profil *
2 peta:
na co clear? čistit obtékání bych musel až za contentem

margin - a jaký ho nastavit když neznám šířku levého sloupce (ta se určí až podle vloženého obrázku do DIVu image - tenhle zdroják je pro šablonu a obrázek může být pokaždé jiný).

šířka floatovaného bloku - tu právě neznám tudíž ji nemůžu uvést...

a jelikož neznám rozměry tak bude mít asi pravdu Plaváček ... kterému děkuji za článek

nakonec jsem to vyřešil tabulkou, přestože to není úplně sémanticky správné, neb do tabulky nevkládám tabulková data :-( ale někdy účel světí prostředky
peta
Profil *
mata
- Floatovat bez sirky se da take, protoze se bere aktualni jako inline, ale neni to uplne spravne
- Sirku obrazku predem znas a kdyby sis poradne precet kapitolu obrazky, tak se dozvis, ze ji musis do obrazku zadavat z mnoha duvodu.
- Mno, a pak taby mame schazenici vlastnosti margin, clear,inline-block, position:relative k tomu nema smysl nic psat, najdi si nekde solidni clanek o floatovani ne ty na jakpsatweb. Treba na intervalu nebo googlem. Ja tim rozhodne cas ztracet nehodlam jako 20x pred tebou.
habendorf
Profil
A co je tedy účelem? Pokud je text delší než obrázek, má být stále odsazen?

... pravý sloupec neukončí obtékání hned na konci obrázku ale je i nadále odsazen
... při dlouhém textu skočí pravý sloupec pod levý

Já z těchto dvou vět cítím jakýsi rozpor (?).

Jinak řešitelné by to samozřejmě bylo i bez tabulek.
mata
Profil *
Ale já tu šířku obrázku nemůžu zadat do CSS - ano do html se vloží - tam jí vygeneruje PHP, ale do CSS ne!

margin, clear,inline-block, position:relative - absolutně nechápu na co by v tom příkladu byly -

margin - ano možná tak odsadit pravý blok, ale nelezl pod levý, ale nevím o kolik neboť předem neznám šířku obrázku
clear - viz výše, dle mě není potřeba
inline-block - nechápu k čemu
position:relative - ?? tak to taky nevím k čemu

kdybys třeba naznačil tak se od něčeho odpíchnu, ale jen vychrlit hesla a neporadit - to je pak těžké
mata
Profil *
2 habendorf:
snad to lépe vyplyne z obrázku:

habendorf
Profil
mata: Jo, zadání už mi je jasné.

Řešení: Levý div je zbytečný, tam může být pouze img, ten bude float:left. U pravého divu zruš float a nastav mu levý margin. To je celé. Teď asi namítneš, že nevíš jaký nastavit margin, když neznáš šířku obrázku. Ale uvědom si, že prohlížeč šířku toho obrázku už zná, tak toho využij. Kdybys nevěděl, ještě se ozvi.
Plaváček
Profil
Bez klientského skriptování se to ale neobejde, prostě čisté CSS řešení uvedeného problému, pokud vím, neexistuje.
habendorf
Profil
Plaváček má samozřejmě pravdu. Jen jsem chtěl říct, že řešitelné je to i bez tabulek, ale je to spíš teoretická záležitost. K vidění je to zde: http://habendorf.plavacek.net/pokusy/odsazeni/

Samozřejmě že závislost na klientském skriptování činí toto řešení v reálném světě prakticky nepoužitelným.

Ovšem: Ale já tu šířku obrázku nemůžu zadat do CSS - ano do html se vloží - tam jí vygeneruje PHP, ale do CSS ne!
Toto není pravda, klidně phpkem vygeneruj pár řádků css. Bude to bez tabulek, nezávislé na klientských skriptech a bude to běhat jak fík.
habendorf
Profil
Tak mi to nedalo a ještě jsem v tom šťoural.

Řešení bez skriptů a tabulek, pouze v čistém css EXISTUJE! Funkční v IE, FF i Opeře.
mata
Profil *
Řešení bez skriptů a tabulek, pouze v čistém css EXISTUJE! Funkční v IE, FF i Opeře

a bylo by možné ho blíže popsat? Byl bych vám za to velmi vděčný. Na výše uvedené adrese je příklad využívající skriptování.
Ještě jen upřesním zadání - v levém DIVu může být pod obrázkem i krátký popisek, proto nelze float nastavit jen obrázku.

Každopádně díky - rozhodně jste mi pomohl víc než peta.

PS:
Vkládat phpkem se mi šířky nechce, neboť se jedná o šablonu pro smarty a musel bych uhánět programátora, aby mi pro smarty udělal proměnné atd.
habendorf
Profil
mata: Já bych rozhodně řešení přes php nezavrhoval. Je to velmi jednoduché - zjistíš si šířku obrázku a pak jen v kódu stránky napíšeš pro pravý div toto:
<div class="right" style="margin-left:<?php echo $sirkaObrazku + případná mezera; ?>px">cokoliv</div>
Tak bych to udělal já.

Protože mě ale problém zaujal (čistě z cvičných důvodů) svou zdánlivou neřešitelností, nedalo mi to a vyřešil jsem to. Rád bych ale dal příležitost ke cvičení i ostatním, takže zde vyhlašuji soutěž . Proto zde zatím nechci uveřejnit řešení. Dej sem svou adresu, pošlu ti to mailem
Toto téma je uzamčeno. Odpověď nelze zaslat.

0