Autor Zpráva
sten
Profil *
Mám malý problém s vnořeným div, který má vlastnost "float: left". Použitý html kód vypadá následovně:

<div class="vnejsi">
<div class="vnitrni">
ahoj
</div>
<div class="vnitrni">
nojo
</div>
</div>

A v externím css souboru mám toto:

.vnejsi
{
border: 3px solid SteelBlue;
}

.vnitrni
{
border: 2px dashed SteelBlue;
float: left;
}

Normálně by prohlížeč měl zobrazit jeden vnější div s pevným rámečkem a uvnitř dva vnitřní div vedle sebe s čárkovaným rámečkem. Opera však jamile narazí po vnějším div na vnitřní div, ukončí vnější a pod ním vykreslí vnitřní :(
Nechápu to, IE6 to zvládá, takhle kvůli kompatibilitě na všech prohlížečích musím místo vnějšího div použít tabulku.
habendorf
Profil
Vnitřní má float, tekže ti tam chybí cleaner.
igamenir
Profil
Opera však jamile narazí po vnějším div na vnitřní div, ukončí vnější a pod ním vykreslí vnitřní
Tak to není. Opera nezapočítává do výšky floatované prvky, a bez nich je vnější div prázdný, takže nemá co vykreslit - měla by jenom vykreslit čáru, protože div má nulovou výšku.
Řešení už uvedl habendorf.
sten
Profil *
Díky moc, nikdy by mě to nenapadlo.
esemeska
Profil
to jsem netušil, takže by se každému floatovanému prvku měl nastavovat clear?
sten
Profil *
esemeska:
Ne! Vyřešil jsem to takhle:

<div class="main">

<div class="head">...</div>

<div class="menu">...</div>

<div class="text">...</div>

<div class="cleaner"></div>

</div>

Kde v externím css:

body
{
background-color: AliceBlue;
font: normal 11px Tahoma, Helvetica;
color: Navy;
}

.main /* hlavní oddíl */
{
width: 700px;
background-color: LightSkyBlue;
padding: 0px;
border: 2px solid SteelBlue;
margin: auto;
margin-top: 30px;
}

.head /* místo pro banner */
{
border-bottom: 1px dashed SteelBlue;
height: 75px;
overflow: hidden;
padding-left: 5px;
}

.menu /* nevysouvací vertikální menu vlevo s odkazy */
{
float: left;
width: 60px;
text-align: center;
font-weight: bold;
padding-top: 20px;
}

.text /* zde je veškerý text */
{
float: left;
width: 579px;
min-height: 100px;
_height: 100px;
border-left: 1px dashed SteelBlue;
padding: 30px;
}

.cleaner
{
clear: left;
}

Pokud chybí cleaner, vnější div "main" všechny kromě div "head" obteče, protože ti ostatní mají nastavené obtékání. Pokud za nimi cleaner je, vnější div "main" už je nemůže obtéct, protože cleaner má nastaveno být až za "float:left" a tak je div "main" nemůže obtéct. Nevysvětlil jsem to zrovna nejlíp, sám nevím jestli si to myslím dobře :o) ale kdyžtak zkus googlovat.
seifrob
Profil *
Nojo, ale co když někdo v divu "Text" použije prvek s clear:both??? Právě se s tím mořím. Zdá se, že clearer nerespektuje rodičovství a clearuje i za hranice toho opouzdrřujícího divu. Víte někdo, co s tím??
Toto téma je uzamčeno. Odpověď nelze zaslat.

0