Najczęstsze problemy z arkuszami stylów CSS
Wraz z rozwojem arkuszy CSS wzrasta liczba możliwości rozwiązania konkretnego problemu. Niekiedy interpretacja pewnych właściwości jest różna w konkurencyjnych przeglądarkach, co może prowadzić do problemów spędzających początkującym webmasterom sen z powiek. W artykule zajmiemy się kilkudziesięcioma takimi problemami, jednocześnie prezentując sprawdzone sposoby ich rozwiązania. Przy okazji pokażemy również kilka sztuczek CSS, które poprawiają wygląd strony WWW.
1. Błąd podwójnego marginesu
To błąd występujący wyłącznie w Internet Explorerze. Gdy elementowi nadamy atrybuty margin oraz float w tę samą stronę, wartość marginesu zostaje podwojona. Najprostszym rozwiązaniem tego problemu jest dodanie do pliku CSS następującego wiersza: display: inline. Twój kod powinien więc wyglądać tak:
|
#content { |
2. Minimalna wysokość ignorowana w IE
Atrybut min-height działa w Mozilla Firefoksie, w przeglądarce Microsoftu jest natomiast ignorowany. Rozwiązaniem jest nadanie atrybutu height, który jest odpowiednikiem min-height w IE. Problem został rozwiązany w IE7.
| /* zwykłe przeglądarki */ .warstwa { min-height:8em; height:auto; } /* dla IE */ /*\*/ * html .warstwa { height: 8em; } /**/ |
3. Wyśrodkowanie środkowego bloku na trzy sposoby
Witryny WWW najczęściej mają szerokość mniejszą niż ekran monitora, a ich zawartość jest wyśrodkowana. Niestety, nie da się tego zrobić intuicyjnym poleceniem text-align:center, trzeba więc stosować inne sposoby.
I. Sposób najwygodniejszy: <div> zostaje wyśrodkowany, gdy jego parametry left-margin i right-margin są ustawione na auto. Dzieje się tak, ponieważ – zgodnie z modelem CSS2 – jeśli oba marginesy są ustawione na auto, ich wartość jest równa. (Działa to w IE od wersji szóstej, tylko gdy przeglądarka jest w trybie standard compliant). Przykład wykorzystania:
| body { /*text-align działa w tym przypadku w IE*? text-align: center; /*ustawiamy minimalną szerokość strony dla przeglądarek innych niż IE, zapobiega to „chowaniu” się fragmentów DIV-a poza okno przeglądarki*/ min-width: 500px; } #kontener { text-align: left; /*ustawia szerokość DIVa*/ width: 500px; /*wyśrodkowanie elementu, dla przeglądarek, w których text-align nie działa w odniesieniu do głównych DIV-ów*/ margin-left: auto; margin-right: auto; } |
II. Wyśrodkowanie wykorzystujące wartości procentowe – sposób najprostszy. Przykładowo: gdy środkowy <div> ma mieć 60% szerokości strony, to oba marginesy zajmują 40% – więc margines lewy to połowa, czyli 20% strony. Analogicznie można wyśrodkować elementy w pionie.
| .kontener { position: absolute; width: 60%; left: 20%; } |
III. Wyśrodkowanie przy użyciu wartości absolutnych. Musimy znać szerokość elementu, który chcemy wyśrodkować. Załóżmy, że będzie to 500 px. Przesuwamy go więc o 50% w prawo, tak aby jego lewa krawędź była w środku strony. Cały trik polega na takim ustawieniu lewego marginesu, aby wydawało się, że <div> jest wyśrodkowany. Ustawiamy left-margin na -250 px, czyli –(500 px/2). Oczywiście, ten sam sposób da się także zastosować do wyśrodkowania elementu w pionie.
| .kontener { position: absolute; width: 500px; height: 600px; left: 50%; top: 50%; margin-left: -250px; margin-top: -300px; } |
4. Wyśrodkowanie elementu w pionie
Zastosowanie zwykłego vertical-align:middle może dać niespodziewane rezultaty, gdy tekst ma wiele linii. Oczywiście, da się temu zapobiec, jeśli się skorzysta z elementu <div>. W tym celu tworzymy trzy zagnieżdżone znaczniki <div>, a następnie wewnątrz ostatniego umieszczamy znacznik <p> z tekstem.
|
<style type="text/css"> <div id="kontener"> |
5. Problemy z kolumnami
To bardzo wygodny i elegancki sposób prezentowania treści, ale często powoduje problemy. Weźmy pod uwagę taki kod:
|
<style type="text/css"> </style> <div class="columns"> |
W założeniu chcemy osiągnąć stronę podobną do tej na górnym schemacie i w większości przeglądarek ta strona będzie tak właśnie wyglądała. Jednak w IE sidebar ucieka do dołu, poniżej kolumny main. Problemem okazuje się obrazek banner.gif, którego szerokość jest większa niż szerokość kolumny. Równie dobrze to samo może się stać, gdy do lewej kolumny wpisany zostanie zbyt długi tekst, którego nie można przełamać (np. adres URL – należy o tym pamiętać, akceptując treści wpisywane przez użytkowników witryny).
Ten problem jest powodowany przez pogwałcenie przez IE domyślnych ustawień atrybutu overflow, którego domyślną wartością jest visible. Dzięki temu wszystko, co nie mieści się w kolumnie o określonej wielkości, może poza nią wystawać – i tak odbywa się to w Mozilla Firefoksie. Internet Explorer, niestety, próbuje rozszerzyć lewą kolumnę, przez co brakuje dla niej miejsca i zostaje ona przesunięta w dół.
Dla tego problemu istnieją dwa rozwiązania: pierwsze to ustawienie dla lewej kolumny overflow na hidden – wtedy wszystko to, co wystaje poza kolumnę, zostaje przycięte; drugie rozwiązanie polega na wpisaniu dwóch następujących definicji: word-wrap: break-word; – spowoduje to, że tekst zostanie odpowiednio złamany na fragmenty mieszczące się w zadanym polu. Drugie rozwiązanie działa również dla odnośników, nie jest natomiast obsługiwane przez Firefoksa 3.
6. Pozycjonowanie elementów
Młodzi adepci stylów CSS mają często problem z wyborem typu pozycjonowania danego elementu. Po pierwsze, należy zrozumieć, czym jest pozycjonowanie bezwzględne. Chodzi tutaj o to, że wybrany element jest zabierany ze swojego miejsca i przenoszony dokładnie tam, gdzie tego chce webmaster. Dobrze zobrazuje to poniższy przykład: tworzymy znacznik <div> w kształcie czerwonego kwadratu i umieszczamy go bezpośrednio w <body>. Do arkusza stylów dodamy następujące linie:
| #kwadrat { position: absolute; bottom: 40px; right: 40px; width:40px; height:40px; background:red; } |
Efekt będzie taki, że kwadrat zostanie umieszczony 40 pikseli od dołu strony i 40 pikseli od prawej krawędzi ekranu, cokolwiek by się tam znajdowało.
Użycie pozycjonowania względnego spowoduje, że kwadrat zostanie przeniesiony w górną część ekranu. Dzieje się tak dlatego, że elementy zostaje przesunięty o 40 px w lewo (od prawej krawędzi) oraz 40 px w górę (od dołu) w stosunku do nadrzędnego elementu pozycjowanego względnie lub do krawędzi monitora (gdy takiego brak). Przykład:
| #kwadrat { position: relative; bottom: 40px; right: 40px; width:40px; height:40px; background:red; } |
7. Wszystko, co musisz wiedzieć o elementach pływających (float)
To prawdopodobnie najmniej intuicyjny element w całym CSS, który jest powodem najczęstszych narzekań webmasterów. Niemniej problemem nie jest sama teoria elementów pływających, a sposób, w jaki są one interpretowane przez przeglądarki. Oto najważniejsze fakty, o których należy pamiętać, budując stronę na bazie warstw pływających:
- Pływający fragment umieszczamy wewnątrz standardowej treści, a następnie przesuwamy jak najdalej w prawo lub w lewo, a treść strony może opływać ten element. Kiedy jednak element zostanie „wyjęty” z treści (np. przez nadanie mu bezwzględnej pozycji), jest on ignorowany, a reszta treści może zająć jego miejsce (pod lub nad nim).
- Nie należy definiować elementu pływającego bez zadeklarowania jego szerokości (wyjątkiem są zdjęcia), gdyż efekty tego mogą być nieprzewidywalne.
- Należy pamiętać, że element pływający może zostać dociągnięty tylko do jednej krawędzi i nie da się go umieścić na środku strony.
- Gdy brakuje miejsca na element pływający, zostaje on przesunięty w dół, dopóki będzie on mógł być osadzony bez przeszkód.
- Element pływający nigdy nie wystaje ponad linię, w której został utworzony.
- Minusem korzystania z elementów pływających jest to, że gdy są one wielokrotnie zagnieżdżone, w praktyce każda przeglądarka może to inaczej zinterpretować.
- Jeśli umieścimy po definicji elementu pływającego blok tekstu, to będzie go on opływał. Gdy chcemy, by tak się działo, należy nadać mu atrybut clear. Dzięki atrybutowi clear:left tekst nie będzie opływał elementów pływających przyciągniętych do lewej krawędzi. Analogiczny efekt osiągniemy dzięki clear:right, dzięki clear:both tekst nie będzie natomiast opływał żadnego elementu pływającego.
- Domyślnie element, w którym umieszczony jest float (zwany dalej kontenerem), nie rozszerzy się tak, aby go objąć.
Istnieją dwie możliwości, by zawrzeć cały float wewnątrz kontenera. Prostsza z nich to umieszczenie po każdym elemencie pływającym pustego znacznika <div> z definicją clear:both.
Druga metoda jest o wiele bardziej profesjonalna i nie wymaga wpisywania jakichkolwiek dodatkowych znaczników <div>. Wystarczy do arkusza CSS dołączyć następujący fragment definicji:
| .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { display: inline-block; } * html .clearfix {height: 1%;} |
Teraz do znacznika <div>, który służy jako kontener, wystarczy przypisać klasę clearfix. Trik ten działa we wszystkich przeglądarkach zgodnych ze standardami, a dzięki ostatniej linii arkusza nawet w Internet Explorerze.
«poprzednia 1 2 następna »
Polecamy
Reklama
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Firefox 10 już jest. Wiele atrakcji dla programistów, użytkownicy raczej nic nie zauważą
9
Źle się dzieje z Chrome, ze stabilnością coraz gorzej. Gdzie się podziała słynna izolacja procesów?
26
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Debata w sprawie ACTA: internauci spodziewali się chyba czegoś innego
13
Nowa polityka prywatności Google'a już za miesiąc wejdzie w życie. Mamy się czego bać?
16
PHP 5.3.9 nie pozwoli hakerom zawiesić serwera. Pozwoli za to przejąć nad nim kontrolę
28
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
[Aktualizacja] Facebook zablokował Demotywatory.pl. W czym zawiniły?
36
FBI zamknęło Megaupload. Anonimowi dali się sprowokować. Teraz ich akcja uzasadni potrzebę SOPA?
17
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
Rząd Tuska zablokował dostęp do tańszych leków z internetowych aptek
61
„Donald matole, twój rząd dopadną kibole” – hakerska elita przyłącza się do walki z ACTA
23
Społeczność
WebDev Z tego wynika, że zmienią się tylko serwery z którymi przeglądarka łączy...
agilob Ale folder bez nazwy się da założyć :P
zetesha Apple nie zrezygnował z PPC całkiem ponieważ posiada P.A. Semi, która to...
pablo1919191 Thunderbolt to jest technolgia intela wiec skora appel wpakowal jako...
BartekBb Już wiem skąd kopiujecie artykuły, bo zrobiliście ten sam błąd co na...
Marr moglibyście się zdecydować. W newsach podajecie, że systemy wymiany (czyli...
setXYZ I jeszcze warto poczytać co o tym myśli sam MS http://webhosting.pl/Koniec...
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
- Marek: problem z menu (2)
- Marek: Własne checkboxy w HTML,CSS (1)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |















#1 nrafal 2008-08-06 17:12:11 0
None
#2 czytelnik7 2008-08-07 18:17:09 0
None
#3 Basstardamus 2008-08-09 12:37:55 0
None
#4 Marr 2008-08-12 23:50:40 0
None
#5 Roberto 2008-08-15 23:10:23 0
None
#6 gosc123 2009-02-17 10:22:31 0
IP: 83.29.251.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20