Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS]3 kolumny 100% width i height
Forum PHP.pl > Forum > Przedszkole
ShadowD
Szukam rozwiązania na coś takiego:
http://d.pr/i/v3zB

Ogólnie to ma być strona na 100% wysokości 100% szerokości z 3 kolumnami i belką na górze, chciał bym wszystko zrobić za pomocą css - niby jest to proste ale tak na prawdę to skomplikowany lay.

To co mi się udało wykombinować za pomocą sieci:
1. użycie position: absolute; top: 0px; right: 0px; itd. tym sposobem można osiągnąć taki szablon, jednak przy powiększaniu się stronty ponad 100% (ponad pełen ekran) pojawia się pasek przewijania, ale kolumny sięgają tylko do pewnego miejsca.
2. Tabelki - da się to zrobić bez problemu i działa jak należy w 100%, ale tabelka nie służy do robienia szablonów stron...
3. http://www.dynamicdrive.com/style/layouts/...ed-fluid-fixed/ - działa bardzo ładnie, ale pojawia się problem z uzyskaniem height: 100%;, wszystko było by super gdyby w css dało się napisać tak jak na screenie czyli 100% - 40px tak by całość dać na full minus wysokość headera - zostaje użycie js czego chciał bym uniknąć.

Macie jakiś pomysł jak to napisać tak by nie użyć js lub tabelek?
Kaarpiik
  1. <div id="top"></div>
  2. <div id="lewa"></div>
  3. <div id="srodek"></div>
  4. <div id="prawa"></div>

CSS:
  1. #top {
  2. width: 100%;
  3. height: 40px;
  4. float: left;
  5. }
  6. #lewa {
  7. width: xx;
  8. height: 100%;
  9. float: left;
  10. }

i analogicznie smile.gif
kamil_lk
http://jsfiddle.net/Q7HYS/

  1. *{
  2. margin: 0;
  3. padding: 0;
  4. }
  5.  
  6. html, body{
  7. width: 100%;
  8. height: 100%;
  9. min-width: 980px;
  10.  
  11. }
  12.  
  13. #kontener{
  14. height: 100%;
  15. overflow: hidden;
  16. }
  17.  
  18. #top{
  19. width: 100%;
  20. height: 40px;
  21. background: #999;
  22. }
  23.  
  24. #content{
  25. height: 100%;
  26. overflow: hidden;
  27. }
  28.  
  29. #content div{
  30. height: 100%;
  31. }
  32.  
  33. .menu-lewe{
  34. width: 230px;
  35. float: left;
  36. background: #666;
  37. }
  38.  
  39. .tresc{
  40. float: left;
  41. }
  42.  
  43. .menu-prawe{
  44. float: right;
  45. width: 230px;
  46. background: #666;
  47. }


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Untitled Document</title>
  5. </head>
  6. <div id="kontener">
  7.  
  8. <div id="top">TOP</div>
  9. <div id="content">
  10. <div class="menu-lewe">menu - lewe</div>
  11. <div class="tresc">tresc</div>
  12. <div class="menu-prawe">menu - prawe</div>
  13. </div>
  14.  
  15. </div>
  16. </body>
  17. </html>
ShadowD
@Kaarpiik próbowałeś jak działa Twój kod? height: 100%; to szerokość całej powierzchni na stronę więc dodając header tworzymy 100% + 40px gdzie pojawia nam się scroll właśnie na te 40px.

@kamil_lk Twoje rozwiązanie faktycznie działa, ale ma pewne problemy - nie dość że na start ścinana 40px to jeszcze w przypadku większej ilości elementów na stronie gdzie powinien pojawić się pasek przewijania Twój sposób po prostu zetnie kawałek kodu. ;-( Dodatkowo tworząc taki lay zawartość środka będzie zależna od jego szerokości - np formy i wszystkie inne elementy będą mieć width: 98%; margin: 0 1%; a ten sposób nie zadziała w tym przykładzie - musiał bym dać na stałe width formom, ale w takim przypadku przy dużej rozdzielczości zostaną paski pustego miejsca - a tego chce uniknąć.

Może macie inne pomysły?
!*!
Może tak: http://jsfiddle.net/92ENJ/show/ tylko nie pamiętam regułki css która da header na 100% szerokości, w przypadku display:table-row.
wNogachSpisz
Widzę że każdy z Was zatrzymał się w rozwoju w połowie lat 90'tych.
Niniejszym informuję Was, że minęło trochę czasu i w sieci jest zatrzęsienie wyśmienitych framewróków HTML+CSS na każdą okazję. Np. ten:

http://workless.ikreativ.com/scaffold.html

Oczywiście najlepiej sięgnąć po tw.bootstrap lub fundation.
!*!
Faktycznie, świetny, tylko... niewiele wnosi.
wNogachSpisz
Cytat(!*! @ 9.03.2013, 10:48:50 ) *
Faktycznie, świetny, tylko... niewiele wnosi.

Troche jednak wnosi
- dostarcza przemyślany, semantyczny zestaw znaczników HTML i klas CSS których łatwo się nauczyć i które są napisane w taki sposób aby nie kolidować z innymi elementami strony wykonanymi bez zwracania uwagi na framework
- sprawia że strona wyświetla się tak samo na każdym urządzeniu/przeglądarce/systemie operacyjnym
- nie musisz zajmowac się eliminowaniem bugów, robią to członkowie projektu, więc utrzymanie kodu staje się znacznie tańsze
- jest duża szansa, że któregoś dnia przeglądaki będą optymalizowane pod frameworki html+css, w skutek czego Twoja strona stanie się wyjątkowo wydajna.
- i wiele, wiele innych
kamil_lk
Pytanie, czy rozwiązuje postawiony problem?
!*!
wNogachSpisz - Ty tak na poważnie? Nazwanie takich "kodów" frameworkami, to już solidne nadużycie. W 99% przypadków takie gotowce zwyczajnie się nie sprawdzają.
Nie widzę też tam rozwiązania które przydałoby się autorowi tematu. Już nie mówiąc o tym, że jakieś rozwiązania są przypisane do nazw klasy.

Sztuka dla sztuki, ale każdy używa tego co chce.
wNogachSpisz
@kamil_lk
Tak, rozwiązuje, jak każdy framework dostarcza tzw. "grid system".

@!*!
Odmawiam dalszej rozmowy z Tobą, nie masz bladego pojęcia o developowaniu frontentendu.
!*!
Podaj przykład bezinwazyjnego użycia takiego gotowca w dwóch przykładach.
1. bardzo łatwy, szablon ma być taki jaki zaproponował autor
2. może być obojętnie co, ale już istniejące np. strona wortalu + Twoje modyfikacje

Zakładając że pierwszy szablon wyklepiesz metodą kopiuj/wklej to jak unikniesz kolizji w nazwach przy późniejszych modernizacjach? W drugim przykładzie może być znacznie gorzej, bo kolizja może być już od początku.
Jeszcze przestrzeni nazw do html i css nie wprowadzili, a samo dziedziczenie z możliwością resetu to za mało. Tyle w temacie.

ps. I przyznam Ci racje, coś takiego ma sens, tylko i wyłącznie jak chcemy na szybko zaprojektować szkic.

Cytat(wNogachSpisz)
developowaniu frontentendu
+1
wNogachSpisz
Jeśli potrebujesz tylko niektórych funkcji frameworka, to np. tw.bootstrap pozwala wygenerować paczkę zawierającą tylko wybrany zestaw modułów

http://twitter.github.com/bootstrap/customize.html

Musisz odznaczyć wszystko za wyjątkiem "Grid system".
!*!
To prawda, generator dobra rzecz, ale to nie rozwiązuje problemu. Chce mieć formularze, buttony i navbar, to wygenerowałem sobie CSS na ichniejszej stronie. Dostałem 1789 linijek kodu, ale to mniejsza z tym, kod do navbaru wygląda np. tak:

  1. .navbar-inverse .navbar-search .search-query {
  2. color: #ffffff;
  3. background-color: #515151;
  4. border-color: #111111;
  5. -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
  6. -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
  7. box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
  8. -webkit-transition: none;
  9. -moz-transition: none;
  10. -o-transition: none;
  11. transition: none;
  12. }
  13. .navbar-inverse .navbar-search .search-query:-moz-placeholder {
  14. color: #cccccc;
  15. }


UPS, ale ja mam już u siebie w html coś co ma klasę navbar-search i/lub search-query (już nie wspominając o samym form, input itp) ... czyli muszę zmieniać ten plik CSS, lub swój html? Bo może o czymś nie wiem, i są jednak w tym jakieś przestrzenie nazw?
_Borys_
Odnośnie tematu
  1. <!DOCTYPE HTML>
  2. <meta http-equiv="content-type" content="text/html" charset="utf-8"/>
  3. <style type="text/css">
  4. <!--
  5. #divContainer {
  6. width: 100%;
  7. height: 100%;
  8. }
  9. #divHeader {
  10. position: absolute;
  11. left: 0px;
  12. top: 0px;
  13. right: 0px;
  14. height: 40px;
  15. -webkit-box-shadow:inset 0px 0px 0px 5px red;
  16. -moz-box-shadow:inset 0px 0px 0px 5px red;
  17. box-shadow:inset 0px 0px 0px 5px red;
  18. }
  19.  
  20. #divLeft {
  21. position: absolute;
  22. top: 40px;
  23. left: 0px;
  24. width: 230px;
  25. bottom: 0px;
  26. -webkit-box-shadow:inset 0px 0px 0px 5px green;
  27. -moz-box-shadow:inset 0px 0px 0px 5px green;
  28. box-shadow:inset 0px 0px 0px 5px green;
  29. }
  30. #divCenter {
  31. position: absolute;
  32. top: 40px;
  33. left: 230px;
  34. right: 230px;
  35. bottom: 0px;
  36. -webkit-box-shadow:inset 0px 0px 0px 5px brown;
  37. -moz-box-shadow:inset 0px 0px 0px 5px brown;
  38. box-shadow:inset 0px 0px 0px 5px brown;
  39. }
  40. #divRight {
  41. position: absolute;
  42. width: 230px;
  43. top: 40px;
  44. right: 0px;
  45. bottom: 0px;
  46. -webkit-box-shadow:inset 0px 0px 0px 5px green;
  47. -moz-box-shadow:inset 0px 0px 0px 5px green;
  48. box-shadow:inset 0px 0px 0px 5px green;
  49. }
  50.  
  51. -->
  52. </head>
  53. <div id="divContainer">
  54. <div id="divHeader"></div>
  55. <div id="divLeft"></div>
  56. <div id="divCenter"></div>
  57. <div id="divRight"></div>
  58. </div>
  59. </body>
  60. </html>
wNogachSpisz
Kolejny przybysz z przeszłości smile.gif
!*!
Cytat(wNogachSpisz @ 9.03.2013, 13:34:00 ) *
Kolejny przybysz z przeszłości smile.gif

To pokażesz w końcu ten grid system jak autor pytał, lub przestrzeń nazw czy tylko będziesz nabijał posty?
ShadowD
Wymieniałem to rozwiązanej jako jedno z możliwych i właśnie w taki sposób mam to teraz zrobione, niestety ma to problemy przy content > 100%, wstaw sobie:
  1. 1<br>
  2. 2<br>
  3. 3<br>
  4. 4<br>
  5. 5<br>
  6. 6<br>
  7. 7<br>
  8. 8<br>
  9. 9<br>
  10. 0<br>


tak z 10 razy i wszystko się rozjedzie - a dokładnie mówiąc wszystko wygląda ok do czasu zjechania screllem niżej. :/ Trzeba by dopisać js który po resize() ustalał by nie 100% a wartość aktualną.

Cytat(_Borys_ @ 9.03.2013, 12:18:51 ) *
Odnośnie tematu
  1. <!DOCTYPE HTML>
  2. <meta http-equiv="content-type" content="text/html" charset="utf-8"/>
  3. <style type="text/css">
  4. <!--
  5. #divContainer {
  6. width: 100%;
  7. height: 100%;
  8. }
  9. #divHeader {
  10. position: absolute;
  11. left: 0px;
  12. top: 0px;
  13. right: 0px;
  14. height: 40px;
  15. -webkit-box-shadow:inset 0px 0px 0px 5px red;
  16. -moz-box-shadow:inset 0px 0px 0px 5px red;
  17. box-shadow:inset 0px 0px 0px 5px red;
  18. }
  19.  
  20. #divLeft {
  21. position: absolute;
  22. top: 40px;
  23. left: 0px;
  24. width: 230px;
  25. bottom: 0px;
  26. -webkit-box-shadow:inset 0px 0px 0px 5px green;
  27. -moz-box-shadow:inset 0px 0px 0px 5px green;
  28. box-shadow:inset 0px 0px 0px 5px green;
  29. }
  30. #divCenter {
  31. position: absolute;
  32. top: 40px;
  33. left: 230px;
  34. right: 230px;
  35. bottom: 0px;
  36. -webkit-box-shadow:inset 0px 0px 0px 5px brown;
  37. -moz-box-shadow:inset 0px 0px 0px 5px brown;
  38. box-shadow:inset 0px 0px 0px 5px brown;
  39. }
  40. #divRight {
  41. position: absolute;
  42. width: 230px;
  43. top: 40px;
  44. right: 0px;
  45. bottom: 0px;
  46. -webkit-box-shadow:inset 0px 0px 0px 5px green;
  47. -moz-box-shadow:inset 0px 0px 0px 5px green;
  48. box-shadow:inset 0px 0px 0px 5px green;
  49. }
  50.  
  51. -->
  52. </head>
  53. <div id="divContainer">
  54. <div id="divHeader"></div>
  55. <div id="divLeft"></div>
  56. <div id="divCenter"></div>
  57. <div id="divRight"></div>
  58. </div>
  59. </body>
  60. </html>



Korzystałem z twitterbootstrap kiedyś przy małym projekcie robiony na bardzo szybko i od razu w html bez grafiki - ok sprawdza się i dało by się to wykonać, ale czy na prawdę chce taką kobyłę do bardzo prostego lay'a? Ma być to panel admina który i tak jest już przeładowany js'em i zamiast bootstrapa wolał bym skorzystać z sposobu Fixed-Fluid-Fixed lub choćby z absolutów i dodać js w 2 liniach mówiący o zmianie height dla body.

@!*! ma rację bootstrap css tak, ale tam gdzie jest niezbędny np. przy projektowaniu, a nie wszędzie gdzie się da.

Jest dość nowoczesny sposób w css - calc(). Niestety obsługa tego wynalazku jest jeszcze kulejąca, no ale cóż gradienty też są wynalazkiem, może ktoś jeszcze zna jakiś wspaniały trick i się podzieli. ;-)

  1. width: 100%;
  2. min-height: -webkit-calc(100% - 40px);
  3. min-width: -o-calc(100% - 400px);
  4. min-height: -moz-calc(100% - 40px);
  5. min-height: calc(100% - 40px);


http://caniuse.com/#search=calc

Bez problemu można w nim zrobić też kolumny poziomo, teraz tylko się modlić by to było jeszcze bardziej wspierane i by ie8 zmiksowało z rynku.
wNogachSpisz
Cytat(ShadowD @ 9.03.2013, 20:01:43 ) *
@!*! ma rację bootstrap css tak, ale tam gdzie jest niezbędny np. przy projektowaniu, a nie wszędzie gdzie się da.

Bo?
Nieuzasadniając swoich decyzji narażasz się na śmieszność. To co robisz jest według mnie głupie i wynika z niewiedzy.
ShadowD
Ok, proszę pokaż kod w twitter bootstrap który:

1. zajmuje 100% wysokości lub więcej jeśli zawartość jest większa niż 100%
2. ma header 100% width i 40 height
3. pod headerem są 3 kolumny - dwie stałe zawsze po 230px i jedna środkowa typu fluid (100% - 2*230), dodam że wszystkie te elementy mają mieć height 100% minus header, tak by rozciągać się na całą wolną przestrzeń

Próbowałem to przed wypowiedzią ogarnąć, nie siedzę nad tym problemem pierwszy dzień i na prawdę jeśli uda Ci się coś takiego to ok. przyznam Ci rację. Na chwilę obecną sądzę że problemy wynikające z tego to:
1. konflikty nazw
2. w sumie nauka kolejnego "standardu"
3. przy moich próbach miałem problem z 1 stałą kolumną i 2 zmienną - w sumie można by dodać min-width i zmienić lay, ale uważam że 230px w moim przypadku jest idealne i szkoda nawet tych 40px więcej które skrócą treść z lewej i prawej poprzez procentowy udział
4. ogrom js i css które są używane w małym stopniu - w sumie to można sobie podarować każdy ma już przynajmniej 1mb neta.

Na koniec - ja się nie upieram przy 1 rozwiązaniu, myślę po prostu że szkoda mi dodawać nawet okrojonego bootstrapa jak i tak skorzystał bym z niego tylko do tego lay a całość w środku będzie prosta jak but.
wNogachSpisz
Cytat(ShadowD @ 9.03.2013, 20:38:16 ) *
Ok, proszę pokaż kod w twitter bootstrap który:

1. zajmuje 100% wysokości lub więcej jeśli zawartość jest większa niż 100%
2. ma header 100% width i 40 height
3. pod headerem są 3 kolumny - dwie stałe zawsze po 230px i jedna środkowa typu fluid (100% - 2*230), dodam że wszystkie te elementy mają mieć height 100% minus header, tak by rozciągać się na całą wolną przestrzeń

Ile płacisz?

Cytat(ShadowD @ 9.03.2013, 20:38:16 ) *
myślę po prostu że szkoda mi dodawać nawet okrojonego bootstrapa jak i tak skorzystał bym z niego tylko do tego lay a całość w środku będzie prosta jak but.

Nie szkoda, przeciwnie, jest to jedyna opcja (tw lub inny framework). Za dużo plaftorm żeby swobodnie pisać css i html. Rozleci się. Nawet gdybyś był najwyższej klasy ekspertem, na nic się to zda, któego dnia wyjdzie nowa wersja czegoś tam i twoja strona przestanie działać.
ShadowD
Ile płacisz? Jak bym tak brał za każdego posta na tym i innych forach to był bym bogaty, to max 50 linii kodu zakładając każdy znacznik w nowej linii - mogę na piwo albo dwa przelew zrobić, choć i tak to wyzysk. ;P
!*!
wNogachSpisz - od kiedy stałeś się trolem na forum? biggrin.gif

ShadowD - w zasadzie to zrób to... standardowo + js z resize (raptem 2 linijki kodu) i problem z głowy.
ShadowD
Aktualnie stoję nad dylematem js vs calc(), ale mam manię do szukania idealnych rozwiązań - a czasem się tak po prostu nie da. ;-(

Dzięki wszystkim w każdym bądź razie!
!*!
Cytat(ShadowD @ 9.03.2013, 20:01:43 ) *
Wymieniałem to rozwiązanej jako jedno z możliwych i właśnie w taki sposób mam to teraz zrobione, niestety ma to problemy przy content > 100%, wstaw sobie:
  1. 1<br>
  2. 2<br>
  3. 3<br>
  4. 4<br>
  5. 5<br>
  6. 6<br>
  7. 7<br>
  8. 8<br>
  9. 9<br>
  10. 0<br>


tak z 10 razy i wszystko się rozjedzie - a dokładnie mówiąc wszystko wygląda ok do czasu zjechania screllem niżej. :/ Trzeba by dopisać js który po resize() ustalał by nie 100% a wartość aktualną.


Czekaj... Co Ci się rozjedzie? Wpisując to w article, masz scroll po lewej który przewija cała stronę w dół, wszystkie pola są równe do samego końca. Chcesz, aby główny kontener był cały czas na 100%? To daj overflow dla jego dzieci, wtedy scroll będzie tylko dla nich.
ShadowD
O nie zauważyłem Twojego posta, u mnie wygląda to tak - widzę całość, a jak dodam dużo br to robi się scroll, jak nim przewinę to strona dalej jest biała. :/

http://d.pr/i/3Ul - tak to wygląda, a w założeniu te bloki powinny się rozciągać na dół.
!*!
Nie możliwe. Musisz coś nadpisywać. Popatrz na kod który podałem, wklej coś w article, 3 kolumny sa przesuwane w dół tak samo.
ShadowD
A piszesz o swoim kodzie nie Borysa, Twój pod ff wogóle się nie sprawdza (trzeba toam coś poprawić) pod chrome jest ok, tylko trzeba header jakoś rozciągnąć - no nic pokombinuję, wcześniej miałem to dosłownie na table zrobione i wystarczyło scalić kolumny tu może być gorzej. ;-)

Dzięki.
sebastian.rozmus
Spróbuj tego: smile.gif

  1. <div style="clear: both"></div>
wNogachSpisz
Cytat(!*! @ 9.03.2013, 21:19:09 ) *
wNogachSpisz - od kiedy stałeś się trolem na forum? biggrin.gif

Od kiedy [daruj sobie]
ShadowD
@sebastian.rozmus niestety to nie ta bajka - pomogło by dla float. ;-)

Kurde chciałem zaraportować a klikałem pomógł, ale już naprawiłem swój błąd.
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.