Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 2x wiekszy margines pod IE
Forum PHP.pl > Forum > Po stronie przeglądarki > CSS
yavaho
Dlaczego IE ustawia te obiekty od krawedzi okna z marginesem 2x wiekszym niz jest w stylach okreslony?
  1. <div style="float:left; margin: 0px 0px 0px 100px;">L</div>
  2. <div style="float:right; margin: 0px 100px 0px 0px;">R</div>
Potrzebuje ulozyc pare elementow blokowych po prawej lub po lewej, ustawic marginesy i oblac je tekstem.
revyag
Jeśli nie nadasz elementom szerokości, to będziesz miał problem jak wypełnisz divy textem.
Z tym wiążą się też marginesy. Ja bym to zrobił tak:
Kod
<style type="text/css">
div#cont {
    width:100%;
}
div#left {
    width:50%;float:left;background-color:red
}
div#left p {
    margin:0 0 0 100px;background-color:yellow
}

div#right {
   float:right; width:50%;background-color:green
}
div#right p {
    margin:0 100px 0 0;background-color:blue
}
</style>

  1. <div id="cont">
  2. <div id="left">
  3. <p>
  4. Lorem ipsum, dolor sit amet Lorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  5. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  6. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  7. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  8. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  9. </p>
  10. </div>
  11. <div id="right">
  12. <p>
  13. Lorem ipsum, dolor sit amet Lorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  14. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  15. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  16. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  17. Lorem ipsum, dolor sit ametLorem ipsum, dolor sit ametLorem ipsum, dolor sit amet
  18. </p>
  19. </div>
  20. </div>

Kolorki dałem żeby zobrazować całą sytuację smile.gif
yavaho
Potrzebuje dokladnie taki efekt jak ponizej. Z tym ze w tej chwili zamiast DIV zastosowalem SPAN i jakos to wyszlo. Te elementy blokowe beda dynamicznie generowane przez php, wiec nie wiem ile ich bedzie w jednym rzedzie. Ale bede mial mozliwosc ustalenia ich rozmiarow. I dlatego chce zastosowac DIV. W dodatku raz beda ulozone do lewej a raz do prawej i prawie zawsze oblane beda tekstem.
  1. .blok_L {
  2. float: left;
  3. width: 120px;
  4. height: 90px;
  5. margin: 5px 5px 0px 20px;
  6. border:1px solid #dddddd;
  7. background:#eeeeee;
  8. }
  9. .blok_R {
  10. float: right;
  11. width: 120px;
  12. height: 90px;
  13. margin: 5px 20px 0px 5px;
  14. border:1px solid #dddddd;
  15. background:#eeeeee;
  16. }
  17. .txt {
  18. margin: 5px 20px 0px 20px;
  19. }
  20.  
  21. <span class="blok_L">blok</span>
  22. <span class="blok_L">blok</span>
  23. <p class="txt">
  24. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  25. </p>
  26. <br style="clear:both;" />
  27. <span class="blok_R">blok</span>
  28. <span class="blok_R">blok</span>
  29. <p class="txt">
  30. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  31. </p>
siemakuba
Witam,
rozwiązania twojego problemu trzeba szukać tu: Positioniseverthing

Spotkałeś się z tzw. IE Doubled Float-Margin Bug.
Pokrótce:

Jeżeli masz element z ustawionym float:left i ma on margin-left:10px to IE podwoi ten margin, co da w efekcie margines 20px.
Jezeli masz nastepujace po sobie elementy z taka sama wartoscia float (np.left), to bug ten dotknie tylko pierwszego z elementów.

Rozwiązanie wydaję się być tyleż banalne co niezrozumiałe: dla elementu, którego margin jest podwajany ustaw display:inline. Banalne, bo sprawę załatwia w mig. Niezrozumiałe, bo element (jako że ma float) pozostaje blokowy i zachowuje się jak blokowy.

Polecam jednak lekturę opsiu błędu pod podanym adresem, napisałem tak z pamięci jak to jest, być może przeoczyłem coś.

pozdr.
Zajec
Cytat(siemakuba @ 2005-11-24 11:41:38)
Rozwiązanie wydaję się być tyleż banalne co niezrozumiałe: dla elementu, którego margin jest podwajany ustaw display:inline. Banalne, bo sprawę załatwia w mig. Niezrozumiałe, bo element (jako że ma float) pozostaje blokowy i zachowuje się jak blokowy.

Kiedyś mnie to zaciekawiło i trochę o tym poczytałem.

Taka metoda to naprawienie buga IE za pomocą 2 innych bugów ;-)

1) Właściwość display teoretycznie jest ignorowana jeśli elementowi nadaliśmy "float", więc Opery/FF/K to ignorują. IE natomiast traktuje to całkiem poważnie i element staje się liniowym.

2) Formatowanie za pomocą height i width w Operze/FF/K działa, bo dla nich jest to nadal element blokowy. Natomiast IE jest głupie i pozwala okreslać elementy typowe dla elementów blokowych elemenom liniowym. Więc mimo, że dostaliśmy element liniowy to height i width działają.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.