Newsletter

Grupa MagazynyInternetowe

Online: 995

Wyszukiwarka

CSS

Jak stworzyć układ kolumnowy przy użyciu negatywnych marginesów?

Jak stworzyć układ kolumnowy przy użyciu negatywnych marginesów? Negatywne marginesy są relatywnie rzadko spotykaną metodą budowy układów kolumnowych. Tymczasem jest to technika mająca duży potencjał, a przy tym jest prosta do zastosowania.

Bartłomiej Dymecki

Jako pierwszy technikę tą opisał najprawdopodobniej Ryann Brill na łamach cenionego serwisu A List Apart (http://www.alistapart.com/arti...). Przy użyciu negatywnych marginesów stworzymy układy dwu- i trójkolumnowe.

Środkowa kolumna będzie posiadać płynną szerokość dostosowującą się do rozmiarów okna przeglądarki. Natomiast Bocznym kolumnom nadamy stałą szerokość. Strona będzie także posiadać nagłówek oraz stopkę. Przedstawione przykłady możesz dowolnie wykorzystywać w tworzonych projektach. Jeśli dodatkowo chciałbyś, aby strona posiadała ściśle zdefiniowaną szerokość, to przedstawiane w przykładach kolumny powinieneś objąć dodatkowym wycentrowanym pudełkiem DIV.

Tworzymy dwie kolumny

Tworzenie układu dwukolumnowego rozpoczynamy od najprostszego szkieletu HTML:

[+]
 
HTML
Pobierz
 1. <div id="top">Nagłówek serwisu</div>
 2.  
 3. <div id="middle">
 4.         Lorem Ipsum...
 5. </div>
 6.  
 7. <div id="right">
 8.         Lorem Ipsum...
 9. </div>
10.  
11. <div id="footer">Stopka serwisu</div>

Kod zawiera nagłówek, kolumnę środkową, prawą oraz stopkę. Kod CSS dla tych dwóch ostatnich pojemników jest bardzo prosty:

[+]
 
CSS
Pobierz
 1. #top {
 2.         height: 80px;
 3.         background: #d4f393
 4. }
 5.  
 6. #footer {
 7.         background: #bdf884;
 8.         height: 60px;
 9.         clear: both
10. }

Prawa kolumna jest standardowo przesuwana na prawą stronę przy użyciu właściwości float. Nadajemy jej także szerokość 170 pikseli:

[+]
 
CSS
Pobierz
1. #right {
2.         float: right;
3.         width: 170px
4. }

Natomiast kod dla kolumny środkowej przedstawia się następująco:

[+]
 
CSS
Pobierz
1. #middle {
2.         float: left;
3.         width: 100%;
4.         margin-right: -170px
5. }

Wymaga on krótkiego omówienia. Po pierwsze, kolumna jest przesunięta na lewą stronę. To zrozumiałe. Po drugie, posiada negatywny margines o takiej samej wielkości, jak szerokość prawej kolumny. Nie działał on by jednak prawidłowo, gdyby szerokość kolumny nie została ustalona na 100%.

Powyższy kod powinien w teorii działać bardzo dobrze. Jednak kolumny zachodzą na siebie:

Jak stworzyć układ kolumnowy przy użyciu negatywnych marginesów?

Rozwiązanie to umieszczenie w środkowej kolumnie kolejnego pojemnika:

[+]
 
HTML
Pobierz
1. <div id="middle">
2.         <div id="content">
3.                 Lorem Ipsum...
4.         </div>
5. </div>

Któremu należy nadać odpowiedni margines:

[+]
 
HTML
Pobierz
1. #content {
2.         margin-right: 170px
3. }

Teraz dwie kolumny działają w odpowiedni sposób:

Jak stworzyć układ kolumnowy przy użyciu negatywnych marginesów?

Z efektem możesz się zapoznać w pliku przyklad1.html.

Dodajemy płynne tło

Powyższy układ kolumnowy ma jedną istotną wadę. Kolumny nie rozciągają się w pionie. Rozwiązaniem tego problemu jest objęcie kolumn dodatkowym pojemnikiem i nadanie mu podwójnego tła. Głównym tłem będzie tło środkowej kolumny, a dodatkowym będzie obrazek imitujący rozciąganie prawej kolumny. Obrazek musi mieć więc szerokość dokładnie 170 pikseli:

Jak stworzyć układ kolumnowy przy użyciu negatywnych marginesów?

Spójrz na uzupełniony kod HTML:

[+]
 
HTML
Pobierz
 1. <div id="background">
 2.         <div id="middle">
 3.                 <div id="content">
 4.                         Lorem Ipsum
 5.                 </div>
 6.         </div>
 7.  
 8.         <div id="right">
 9.                 Lorem Ipsum
10.         </div>
11.  
12.         <div class="clear"></div>
13. </div>

Kod CSS dla nowego pojemnika to tylko nadanie tła z powtarzalnością w pionie:

[+]
 
HTML
Pobierz
1. #background {
2.          background: #e7e2d5 url(right.png) right repeat-y;
3. }

Pod dwoma kolumnami pojawił się także DIV z klasą clear. Odpowiada on za automatyczne rozciągnięcie nowej pojemnika dzięki poniższemu kodowi:

[+]
 
CSS
Pobierz
1. .clear {
2.         clear: both
3. }

Spójrzmy jeszcze na całość kodu CSS:

[-]
 
CSS
Pobierz
Listing zwinięty - 35 linii

Z gotowym przykładem możesz się zapoznać tradycyjnie w pliku przyklad2.html.

Czas na trzy kolumny

Stworzenie układu z trzema kolumnami jest na ogół dużym wyzwaniem. Jednak w przypadku naszego układu dwukolumnowego dodanie lewej kolumny wymaga jedynie kilku prostych modyfikacji. Dla uproszczenia przykładu załóżmy, że lewa kolumna będzie posiadać taką samą szerokość i identyczny kolor, jak kolumna prawa. Dzięki temu możemy posłużyć już przygotowanym plikiem graficznym imitującym tło.

Finalny kod HTML prezentuje się następująco:

[+]
 
HTML
Pobierz
 1. <div id="background">
 2.         <div id="background2">
 3.                 <div id="middle">
 4.                         <div id="content">
 5.  
 6.                                 <div id="left">
 7.                                         Lorem Ipsum
 8.                                 </div>
 9.  
10.                                 <div id="center">
11.                                         Lorem Ipsum
12.                                 </div>
13.  
14.                         </div>
15.                 </div>
16.  
17.                 <div id="right">
18.                         Lorem Ipsum
19.                 </div>
20.  
21.                 <div class="clear"></div>
22.         </div>
23. </div>

Jak łatwo zauważyć, dokonaliśmy w nim dwóch ważnych modyfikacji. Po pierwsze, lewa kolumna znajduje się wewnątrz DIV-a #content, a kolumnę środkową objęliśmy DIV-em #center. Kod CSS dla tych dwóch elementów wygląda następująco:

[+]
 
CSS
Pobierz
1. #left {
2.         width: 170px;
3.         float: left;
4.         background: #cfc4a9
5. }
6.  
7. #center {
8.         margin-left: 170px
9. }

Dodatkowo wszystkie kolumny są teraz objęte dwoma pojemnikami imitującymi tło: #background i #background2. Pierwszy tworzy tło dla kolumny środkowej i prawej:

[+]
 
CSS
Pobierz
1. #background {
2.          background: #e7e2d5 url(right.png) right repeat-y
3. }

Drugi pojemnik odpowiada za tło jedynie dla kolumny lewej:

[+]
 
CSS
Pobierz
1. #background2 {
2.          background: url(right.png) left repeat-y
3. }

To już niemal koniec. Ostatnim krokiem jest dodanie imitacji tła dla DIV-a #content, który obejmuje dwie kolumny:

[+]
 
CSS
Pobierz
1. #content {
2.         margin-right: 170px;
3.         background: #e7e2d5;
4.         background: url(right.png) left repeat-y
5. }

Na końcu spójrzmy na całość kodu CSS:

[-]
 
CSS
Pobierz
Listing zwinięty - 51 linii

Nic nie stoi na przeszkodzie, aby lewa kolumna posiadała inne tło lub szerokość. Wtedy należy użyć innego pliku graficznego, jako tła dla pojemników #background2 oraz #content. Finalny rezultat naszych działań przedstawia ilustracja:

Jak stworzyć układ kolumnowy przy użyciu negatywnych marginesów?

Kod gotowy do wykorzystania znajduje się w pliku przyklad3.html

Podsumowanie

Tworzenie układów kolumnowych na bazie przesunięcia środkowej kolumny przy pomocy negatywnego marginesu okazuje się być prostym zadaniem. Wystarczy zrozumieć zasadę działania negatywnych marginesów oraz poznać kilka sztuczek z imitowaniem tła przy użyciu plików graficznych.

Przedstawione przykłady można pobrać tutaj:

26 listopada 2009

Powiązane publikacje

CSS dla zaawansowanych: atrybuty i pseudoklasy

CSS dla zaawansowanych: atrybuty i pseudoklasy

Pozycjonowanie elementów w CSS

Pozycjonowanie elementów w CSS

Utopia HTML. Projektowanie w CSS bez użycia tabel

Utopia HTML. Projektowanie w CSS bez użycia tabel

HTML i CSS - świat tabel

HTML i CSS - świat tabel

 
Skomentuj
ten artykuł

Brak komentarzy

Kod obrazkowy
(Kliknij, aby zmienić)
 

Autor

Bartłomiej Dymecki

Bartłomiej Dymecki od kilku lat publikuje artykuły w Magazynie INTERNET i Internet Makerze. Prowadzi także poświęcony użyteczności blog www.dymecki.pl i firmę realizującą audyty serwisów internetowych.

Artykuły tego autora:

Załączniki

Newsletter

Jesli chcesz być na bieżąco z tym co się dzieje na stronie magazynu INTERNET Maker zapisz się do naszego newslettera.