ďťż

[CSS] wątpliwości w kwestii szerokości :) czyli problem z atrybutem width

       

Podstrony


telcocafe

Od niedawna staram się uczyć tworzenia stron bez tworzenia tabelek. Mam jednak pewną watpliwość odnośnie atrybutu 'width', a oto problem :) :

W kursie Włodzimierza Gajdy, współpracujacego m.in. z Magazynem Internet możemy przeczytać m.in.


Poszczególne obszary zostały na rysunku oznaczone: M - margines, B - obramowanie, P - wyrównanie oraz Z - zawartość. Margines, obramowanie i wyrównanie otaczają zawartość z czterech stron nazywanych top (góra), bottom (dół), left (lewa) oraz right (prawa). Atrybuty te możemy stosować do wszystkich czterech krawędzi na raz pisząc:

padding : 15px;
margin  : 30px;

oraz do każdej krawędzi z osobna stosując przyrostki -top, -bottom, -left oraz -right, na przykład:

border-left : 1px solid blue;
margin-top  : 100px;

Szerokość całego elementu wynika z szerokości poszczególnych obszarów i jest równa ich sumie:

lewy margines + lewe obramowanie + lewe wyrównanie +
zawartość +
prawe wyrównanie + prawe obramowanie + prawy margines

lub, w przypadku elementów symetrycznych w pionie:

2 * margines + 2 * obramowanie + zawartość

Warto zapamiętać, że szerokość elementu ustalana atrybutem width określa wyłącznie szerokość przeznaczoną na treść. W celu wyliczenia szerokości zajmowanej przez cały element należy do podanej wartości dodać marginesy, obramowanie i wyrównanie.

Jeśli chcemy otrzymać pudełko o szerokości 100 pikseli i posiadające jednopikselowe obramowanie wówczas podajemy marginesy równe 0, obramowanie równe 1, wyrównanie równe 0 oraz zawartość równą 98, według wzoru:

0 + 1 + 0 + 98 + 0 + 1 + 0

Style mają postać:

div {
    margin  : 0px;
    border  : 1px solid black;
    padding : 0px;
    width  : 98px;
}

Jeśli zechcemy, by cały element miał 150 pikseli szerokości, był otoczony 5-cio pikselowym marginesem, posiadał trzypikselowe obramowanie, zaś jego zawartość była odsunięta od krawędzi o 10 pikseli to należy użyć stylów:

div#mala {
    margin  : 5px;
    border  : 3px solid red;
    padding : 10px;
    width  : 114px;
}


pokazuje to że aby uzyskać całkwoita liczę pikseli szerokości strony trzeba od wartości 'width' odjąc wszelkie elementy składowe tak jakby element width oznaczał tylko szerokości zawartości bez padding czy border:

jednakże w wielu miejscach , chociazby w książce :
"CSS. Antologia. 101 wskazówek i trików" Rachel Andrew, wyraźnie jest pokazane że np przy padding: 15px, border: 1px width wynosi np 760px co jest wartością szerokości strony dla ekranu 800px, co wyraźnie pokazuje że wartośc width w tym przypadku jest autonomiczną wartością wobec padding czy border ... czyli zupełnie inaczej niz w 1 przypadku

-----------------

i teraz pytania:

1. czy możecie mi wyjaśnić jak to jest w końcu z atrybutem 'width', czyli która metoda jest 'legalna' :)
2. czy wy stosujecie metodę pierwszą czy drugą
3. ew. jakies uwagi,
Użytkownik rotsap edytował ten post 30 czerwiec 2006, 19:12


Nie wiem, o co Ci dokładnie chodzi, ale:
jeśli width wynosi 300px i np. border 15px to cały element będzie 300+15[lewe obramowanie]+15[prawe obramowanie]=330px

Jeśli więc chcesz osiągnąć 800px szerokości z 10px obramowania, 15 wypełnienia oraz 5 marginesu robisz tak: 800-(10*2 + 15*2 + 5*2)=800-60=740px, więc width:740px;

Pozwolę sobie tylko zwrócić uwagę, iż Microsoftowski IE interpretuje padding jako część width, tak samo z border. Czyli jeśli mamy div width:760px;height:100px;padding:5px;border:4px; to w IE zostanie wyświetlony div o szerokości 760px i wysokości 100px (w tym border i padding), a już w Operze czy Firefoxie będzie to div o szerokości 760+(2*5)+(2*4)=778px i wysokości 100+(2*5)+(2*4)=118px

własnie miałem napisac o tym cudzie jaki dzieje sie w IE oraz FF i Operze. a rozwiązaniem tego oczywiscie użycie 1 diva o głównej szerokości bez padingów itd. a pozostałe powinny uzywac marinu wzgledem głownego diva i wtedy ładnie wyglada na wszystkich przegladarkach.




Pozwolę sobie tylko zwrócić uwagę, iż Microsoftowski IE interpretuje padding jako część width, tak samo z border. Czyli jeśli mamy div width:760px;height:100px;padding:5px;border:4px; to w IE zostanie wyświetlony div o szerokości 760px i wysokości 100px (w tym border i padding), a już w Operze czy Firefoxie będzie to div o szerokości 760+(2*5)+(2*4)=778px i wysokości 100+(2*5)+(2*4)=118px

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.