Autor Zpráva
Yuhů
Profil
Dokážete prosím někdo logicky vysvětlit, jak Firefox a Opera počítají pozici prvku s classem hlavicka a logo (na stránce je to text Tunisko.rovnou.cz) na stránce
http://tunisko.rovnou.cz
?
Ta stránka ještě není hotová, zatím si tam jenom tak hraju, ale tohle mě fakt zarazilo. Absolutní pozice hlavičky zde totiž závisí na marginu sousedního a nižšího (!!!) objektu. Něco mi říká, že se tady počítá slévání marginů, ale moc tomu nerozumím. Prosím o radu a případně rozbor situace.
Drag
Profil
v absolutním pozicování se margin musí dávat vždy od krajů stránky používej relativní pozicování je to sice trochu těší umístit ale lepší v relativnim pozicování se margin počítá od předchozího prvku
Plaváček
Profil
Okraje absolutně pozicovaných prvků se neslučují. Absolutně pozicovaný prvek je vyjmut z toku dokumentu a neovlivňuje nijak jiné bloky a stejně tak by jiné bloky neměly ovlivňovat absolutně umístěný blok. Fakt ale je, že tento problém vykreslování ve Firefoxu a Opeře už jsem zažil. V tvém případě je na vině definovaný margin-top: 130px pro blok .obal2. Dle mého soudu se v tomto případě chová správně IE a margin bloku .obal2 ignoruje. Asi nejjednodušší řešení je takováto úprava CSS:

.obal2 {margin: 0 170px 70px 70px;padding-top:130px;}

Ukázka

Mimochodem - absolutně pozicovaným prvkům je lepší nastavovat pevné rozměry (alespoň šířku), jinak se mohou chovat dost nevyzpytatelně.
Yuhů
Profil
Děkuju, Plaváčku. Měl jsem podezření, že se Opera a Firefox chovají v tomto případě chybně, ale zarazilo, že se chovají chybně oba podobně. Tak jsem si myslel, jestli za to nemůže Explorer.

Možná to je úkol pro Pixyho.
Oswald
Profil
Podle mě se chová chybně IE.

Div .hlavicka je pozicován absolutně, je tedy vyjmut z toku dokumentu a nijak ho neovlivňuje. V tu chvíli nic nebrání tomu, aby se horní okraje divů .obal1 a .obal2 sloučily. Výsledek tedy je stejný, jako kdyby měl .obal2 horní okraj 130px a vzhledem k tomu, že má zároveň position relative, tak vzniká to posunutí o 130px. Toto si lze ověřit přidáním pravidla:

.obal1 {padding-top: 1px}

což zabrání onomu sloučení okrajů mezi obaly.


Update:
Teď jsem to prozkoumal pořádně a všiml si, že .hlavička je v kódu úplně někde jinde, než jsem myslel (čekal jsem jí na začátku :-), takže to, co jsem napsal, nedává moc smysl. Přesto si myslím, že to sloučení je ve FF a Opeře v pořádku.
Plaváček
Profil
Sloučení ano. Ale není v pořádku, že margin úplně jiného bloku ovlivňuje absolutně pozicovaný element, který je umístěn v bloku jiném, relativně pozicovaném a ze kterého tedy přebírá souřadnicový systém pro své umístění.
Oswald
Profil
"Ale není v pořádku, že margin úplně jiného bloku ovlivňuje absolutně pozicovaný element, který je umístěn v bloku jiném, relativně pozicovaném a ze kterého tedy přebírá souřadnicový systém pro své umístění"

Pokusím se to vysvětlit:
On ten blok (.obal2) svým marginem neovlivňuje přímo ten absolutně pozicovaný element (.hlavicka). Ovlivňuje svého rodiče (.obal1) -- přidá mu horní margin a posune ho tím dolů. A protože ten rodič (.obal1) je zároveň rodičem toho abs. poz. elementu (.hlavicka) a má positon:relative, tak se jeho posunutím změní i souřadnicový systém pro ten abs. poz. element (.hlavicka).

A ještě zjednodušené HTML:

<body>
<div class="obal1">
<div class="obal2"></div>
<div class="hlavicka"></div>
</div>
</body>
habendorf
Profil
Takže můj názor: v úvahách je třeba zcela ignorovat div.hlavicka. Tento abs. pozicovaný div obsahuje jen další abs. pozicovaný prvek a to je jako by neobsahoval nic. Div.hlavicka má tedy nulovou šířku i výšku a jakoby tam nebyl (lze ověřit borderem nebo úplným odstraněním - nic se nezmění).

Problémem je horní margin obalu2, který se počítá od konce obsahu nadřazeného elementu. Jenže nadřazený element obal1 žádný obsah nemá. Důkazem budiž, že

<div class="obal1">
<div class="obal2">

stačí upravit na

<div class="obal1">&nbsp;
<div class="obal2">

a vše je v naprostém pořádku. Pokud by mezera vadila, stačí .obal1 {font-size:0; line-height: 0;} a pro .obal2 zas nastavit požadované hodnoty.

Jinak ta konstrukce

<div class="hlavicka">
<p class="logo">
<a href="http://tunisko.rovnou.cz">Tunisko.rovnou.cz</a>
</p>
</div>

včetně použitého stylu je IMHO velmi nešťastná, osobně bych to napsal jen jako

<a href="http://tunisko.rovnou.cz">Tunisko.rovnou.cz</a>

a použil display:block; plus další potřebné vlastnosti.

Toť můj názor na věc.
Oswald
Profil
habendorf
Ono stačí přidat divu .obal1 horní padding nebo border a tím k tomu sloučení (a posunu výchozích souřadnic pro .hlavicku) nedojde.
habendorf
Profil
Oswald: O .hlavicku vůbec nejde, ta je mimo hru. Nastav si pro ni border, ať ji vidíš, a koukni na to. Co se týče DOMu, tak sice .logo je uvnitř .hlavicky, ale co se týče layoutu, tak nikoliv.
Oswald
Profil
habendorf

Teď moc nerozmím, co se mi snažíš sdělit :-). Ten předchozí příspěvek jsme napsal pouze jako reakci na tohle:

<div class="obal1">
<div class="obal2">

stačí upravit na

<div class="obal1">&nbsp;
<div class="obal2">
habendorf
Profil
Oswald: No napsal jsi
Ono stačí přidat divu .obal1 horní padding nebo border a tím k tomu sloučení (a posunu výchozích souřadnic pro .hlavicku) nedojde.

Tak jen říkám, že o.hlavicku tu vůbec nejde.
Oswald
Profil
Vím, že ti o hlavičku nejde, proto jsem zmínku o ní dal do závorek :). V té větě není nijak důležitá. Předtím jsem se ale snažil Plaváčkovi popsat vztah mezi tím sloučením marginů a právě tou hlavičkou, proto jsem ji tam zmínil.
Wjenceslaw
Profil
Můžete mi prosím někdo vysvětlit proč mi tak šíleně blbne levé menu v Exploreru?
http://milersky.xf.cz/czech/zacatek.php
a styly jsou na
http://milersky.xf.cz/files/styles.css
Díky!
Wjenceslaw
Profil
Už jsem si to vyřešil pomoci
{
_margin-left: 45px;
}
pro IE :)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0