Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dostosowanie szablonu pod 1024x768
Forum PHP.pl > Forum > Po stronie przeglądarki > CSS
WebCM
Kiedyś stosowałem technikę One True Layout. Tym razem nie ma potrzeby, bo tło dla wszystkich 3 kolumn jest jednakowe.

Szablon, który podpinam, ma ściśle określone szerokości. Strona wyświetla się w całości pod wyższą rozdzielczością. Na rynku dominują panoramiczne monitory LCD i OLED, ale w netbookach, laptopach i tabletach 1024x768 pewnie wciąż jest standardem.

Układ jest taki:
  1. <div id="top"></div>
  2. <div id="poziomyPasekMenu"></div>
  3. <div id="lewyPanel"></div>
  4. <div id="srodkowyPanel"></div>
  5. <div id="prawyPanel"></div>
  6. <div id="stopka">

Wszystko działa. Style CSS:
Kod
#top {
  float: left;
  width: 1100px;
  height: 117px;
  overflow: hidden;
}

#poziomyPasekMenu {
  float: left;
  width: 1080px;
  height: 28px;
  padding: 12px 10px 0;
  margin-bottom: 10px;
}

#lewyPanel {
  float: left;
  width: 230px;
}

#prawyPanel {
  float: right;
  width: 230px;
}

#srodkowyPanel {
  float: left;
  width: 620px;
  margin: 0 10px
}

Jak widać, każdy panel ma swoje miejsce i nic nie powinno "wypłynąć" albo przesunąć się.

Załóżmy, że szablon ma wyświetlać się w całości na 1024x768. Powiecie, że nie opłaca się, bo technika się szybko rozwija. Mimo wszystko prawie wszystkie strony biorą tę rozdzielczość pod uwagę.

W czym problem?

Załóżmy, że szerokość strony zależy od szerokości okna przeglądarki. Może to wyglądać tak:

Lewy panel: wartość stała
Środkowy panel: wartość procentowa (!)
Prawy panel: wartość stała

Jeżeli boczne panele będą miały stałą szerokość, a środkowy - procentową, strona może się rozjechać przy zbyt małej rozdzielczości ekranu albo szerokości okna przeglądarki. Po prostu środkowy panel będzie zbyt duży, dlatego prawy wyleci na dół.

Jakie rozwiązanie?

Mogę zapożyczyć rozwiązanie z One True Layout, czyli pozycjonowanie relatywne, marginesy i prawdopodobnie float. Raczej nie ma problemu z wyświetlaniem w IE, ale ma kilka wad:

1) Edycja jest trudna - dla mniej wprawionych webmasterów
2) Środkowy i prawy panel mają (prawie) ściśle ustawione marginesy - nie wiem, czy to nie utrudnia życia użytkownikom mobilnych rozwiązań

Są też zalety:

1) Środkowy panel może być ładowany na początku, a potem boczne
2) Można określić minimalną i maksymalną szerokość strony

Co o tym wszystkim myślicie?

A tak w ogóle jaki układ doradzacie? Strona o stałej czy zmiennej szerokości? Wydaje mi się, że szkoda marnować połowę miejsca na marginesy (byle nie przesadzić), z drugiej strony ewentualne obrazki na stronie trzeba skalować (max-width: 100%). Może zastosować inną technikę albo pozostać przy tej, która już jest (czyli float i stałe szerokości)?

Zależy mi na tym, by przeglądarka wyświetlała (renderowała) stronę tak szybko, jak to możliwe.
Damonsson
Według mnie optymalnie to: Stała szerokość 1024x768

Obalam Twój argument o tym, że strona się będzie rozjeżdżać przy mniejszych rozdzielczościach...aktualnie mniej niż 1024px szerokości posiada 0,7% rynku

Przy stałej szerokości strona będzie wyglądać tak samo, czy na małym monitorze, czy na wielkim panoramicznym LCD, czy też na laptopie. Bez zbędnego martwienia się.

Wszystkie nowe strony są dopasowywane do 1024px, ba Nasza Klasa jakieś dopiero pół roku temu przeszła bodajże z 800px, dopiero na 1024px

Myślę, że przez najbliższe 2 lata procentowy udział 1024px w rynku nie spadnie poniżej 20%, a to jest już sporo.
everth
Hm, nie znam się co prawda dobrze na layoutach ale dlaczego ustalasz % szerokość środka? A takie coś:
  1. body {min-width:800px;}
  2. #lewyPanel {
  3. float: left;
  4. width: 230px;
  5. }
  6. #prawyPanel {
  7. float: right;
  8. width: 230px;
  9. }
  10. #srodkowyPanel {
  11. padding: 0 240px;
  12. width:100%;
  13. }

Według tego środek skaluje się wraz z szerokością - ogranicznik dolnej szerokości w body wprowadzam po to że można było sensownie zaprojektować grafikę. Oczywiście układ ten może być bez sensu z jakiegoś (nieznanego mi) powodu, ale na pierwszy rzut oka powinno działać.
WebCM
@everth: nie działa, jak trzeba, chyba że źle coś robię. Wypróbowałeś ten sposób?

Chyba pozostanę przy Holy Grail, tyle że bez kombinowania z tłem. Jeżeli macie inne sposoby, chętnie przetestuję.

Wadą tej techniki jest trudna modyfikacja, przez co zniechęcę część osób do jakichkolwiek zmian.
maverick22
ja zawsze ustawiam stałe wartości,

załóżmy mam top,menupoziome,lewybox,content,prawybox,stopka wszystko to wrzucam w kontener



<div id="container">reszta divów</div>


container { width: 960px;
margin-left: auto;
margin-right: auto;
}






top { width: stała wartość np 960px;
height: 100px;
float:left;
}

menupoziome { width: 960px;
height: 20px;
float: left;
}

lewybox { width: 200px;
height: 200px;
float: left;

content { width: 560px;
height: 200px;
float: left;
}

prawybox { width: 200px;
height: 200px;
float: left;
}

stopka { width: 960px;
height: 20px;
clear: both;
}


obecnie BARDZO mało osób ma rozdzielczość mniejszą niż 1024 więc ja preferuje stałe. i mam pewnosc że strona mi się nie rozjedzie.

no chyba że robisz stronę pod telefon smile.gif






everth
Tak działa, wymaga tylko pewnego przetasowania elementów w drzewku html -> tutaj masz prototypowy szablon.
WebCM
Cytat
Tak działa, wymaga tylko pewnego przetasowania elementów w drzewku html
Wymaga, by najważniejsza część dokumentu (środek) znajdowała się w kodzie na samym końcu (po bocznych panelach). Wolę, by znalazł się na początku (zaraz po nagłówku i pasku menu) albo ostatecznie w środku. Wciąż kombinuję, ale może uda mi się znaleźć optymalne rozwiązanie.

W tej chwili udało mi się uzyskać taki efekt, że wymiary poszczególnych paneli są poprawne, ale prawy i lewy znajdują się pod środkowym (ale po obu stronach).
darophp
A ja zapraszam na eduweb.pl --> http://blog.eduweb.pl/rozmiar-strony-www/
WebCM
Tam są już nieaktualne dane. Odsetek 1024x768 zmniejszył się do ~25%, ale może utrzymywać się na tym samym poziomie. Większość korzysta jednak z wyższych rozdzielczości, dlatego to będzie główny target.

Możecie jeszcze przekonać mnie do stałej szerokości ~1024px, a duże marginesy przy wyższych nie są stratą przestrzeni.

Z tego wszystkiego wynika, że pozostaje One True Layout. Pobawiłem się trochę w CSS.
  1. <div id="top"></div>
  2. <div id="pasekMenu"></div>
  3. <div id="kontenerNaSmieci">
  4. <div id="srodkowyPanel"></div>
  5. <div id="lewyPanel"></div>
  6. <div id="prawyPanel"></div>
  7. </div>
  8. <div id="stopka"></div>
  9. </body>

  1. #srodkowyPanel {
  2. float: left;
  3. width: 100%; /* nie wiem, ile % szerokości zajmie panel przy danej szerokości !! */
  4. }
  5.  
  6. #lewyPanel {
  7. float: left;
  8. margin-left: -100%; /* chyba to ma związek z ustawieniem 100% dla środkowego */
  9. position: relative;
  10. right: 240px; /* chyba to samo to left: -240px, uwzględniamy margines 10px */
  11. width: 230px;
  12. }
  13.  
  14. #prawyPanel {
  15. float: left; /* ostatecznie można ustawić right */
  16. margin-right: -240px;
  17. width: 230px;
  18. position: relative;
  19. }
  20.  
  21. #kontenerNaSmieci {
  22. min-width: 400px; /* minimalna szerokość środka */
  23. padding-left: 240px;
  24. padding-right: 230px;
  25. position: relative;
  26. }

Coś może pomotałem, ale efekt powinien wyjść. Czy da się wyrzucić nadmiarowy element #kontenerNaSmieci? Jeżeli wrzuciłbym jego CSS-y do znacznika <body>, wtedy marginesy wpłyną na nagłówek, pasek menu i stopkę.

Pewnie istnieją lepsze sposoby na uzyskanie efektu (3 kolumny, boczne o stałej szerokości, środkowa o zmiennej). Najlepiej, by środkowa kolumna pojawiła się w kodzie jako pierwsza, a potem boczne - rozwiązanie ma swoje zalety.
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.