Newsletter

Grupa MagazynyInternetowe

Online: 996

Wyszukiwarka

CSS

Jak uzyskać zaokrąglone rogi?

Jak uzyskać zaokrąglone rogi? Zaokrąglone rogi to charakterystyczny element wielu współczesnych projektów stron. Wbrew pozorom ich zastosowanie nie jest szczególnie skomplikowane i nie wymaga zaawansowanej wiedzy technicznej.

Bartłomiej Dymecki

Rozważmy dwie najprostsze metody implementacji zaokrąglonych rogów w pojemniku div lub innym elemencie blokowym. Założeniem przedstawionych przykładów jest sytuacja, gdy mamy do czynienia z prostymi, jednokolorowymi elementami. Projekty bardziej skomplikowane graficznie będą wymagać użycia innych technik CSS.

Dołączenie plików graficznych

Najbardziej oczywistą metodą zaokrąglenia rogów pojemnika div jest stworzenie czterech plikół graficznych i umieszczenie ich wewnątrz pojemnika. W pierwszym etapie należy utworzyć kod HTML zawierający element div oraz 4 pliki graficzne z odpowiednimi klasami:

[+]
 
 
Pobierz
1. <div id="pojemnik">
2.         <img src="gora_l.png" class="gora_l">
3.         <img src="gora_p.png" class="gora_p">
4.         <img src="dol_l.png" class="dol_l">
5.         <img src="dol_p.png" class="dol_p">
6. </div>

Użyte pliki graficzne wyglądają następująco:

Jak uzyskać zaokrąglone rogi?

To oczywiście powiększenie. Utworzenie takich narożników jest bardzo proste w każdym popularnym programie graficznym, np. Gimpie lub Photoshopie. Możesz także pobrać mniejszą wersję umieszczoną poniżej. Wystarczy, że klikniesz prawym przyciskiem myszy i zapiszesz plik na dysku, a następnie wytniesz poszczególne narożniki:

Jak uzyskać zaokrąglone rogi?

Możesz dowolnie wykorzystywać ten plik graficzny, zarówno w projektach komercyjnych, jak i niekomercyjnych.

Aby z czterech narożników stworzyć prostokąt z zaokrąglonymi rogami musisz posłużyć się pozycjonowaniem absolutnym w CSS). Spójrzmy najpierw na gotowy kod:

[+]
 
 
Pobierz
 1. #pojemnik {
 2.         position: relative;
 3.         width: 300px;
 4.         height: 150px;
 5.         background: #737568
 6. }
 7.  
 8. .gora_l {
 9.         position: absolute;
10.         top: 0;
11.         left: 0
12. }
13.  
14. .gora_p {
15.         position: absolute;
16.         top: 0;
17.         right: 0
18. }
19.  
20. .dol_l {
21.         position: absolute;
22.         bottom: 0;
23.         left: 0
24. }
25.  
26. .dol_p {
27.         position: absolute;
28.         bottom: 0;
29.         right: 0
30. }

Kod powinien być prosty do zrozumienia. Pojemnik div ma nadaną właściwość position: relative. Kolejne klasy odpowiadające poszczególnym plikom graficznym są pozycjonowane absolutnie wewnątrz pojemnika w jego 4 rogach przy użyciu właściwości top, right, bottom i left. To rozwiązanie zadziała w każdej przeglądarce, a efekt przedstawia się następująco:

Jak uzyskać zaokrąglone rogi?

Jeśli potrafisz programować w JavaScript, to możesz także pokusić się o dynamiczne wstawianie plików graficznych do pojemnika div. Przedstawiona metoda może być również modyfikowana, aby do kontenera były wstawiane jedynie dwa pliki graficzne – na górze i na dole lub po obu bokach. Wtedy należy przygotować pliki graficzne odpowiadające szerokości lub wysokości pojemnika. Warto to zrobić, jeśli pojemnik posiada bardziej skomplikowany projekt graficzny.

Zaokrąglone rogi i CSS 3

Zaokrąglone rogi możesz również uzyskać dzięki właściwości border-radius będącej częścią CSS 3. Wielkość zaokrąglenia podaje się w pikselach, np.:

[+]
 
 
Pobierz
border-radius: 10px

Właściwość obsługują przeglądarki oparte na silniku Gecko oraz Webkit. Jednak w obu przypadkach mamy do czynienia z inną formą właściwości border-radius. Firefox i inne przeglądarki oparte na Gecko wymagają dodania przedrostka -moz:

 
 
 
Pobierz
-moz-border-radius: 10px

Z kolei silnik Webkit wymaga użycia przedrostka -webkit:

 
 
 
Pobierz
-webkit-border-radius: 10px

Osobną kwestią jest obsługa zaokrąglonych rogów w Internet Explorerze oraz Operze. W pierwszy przypadku możesz posłużyć się specjalnym plikiem .htc dostępnym na na stronie http://code.google.com/p/curve.... Do stylów CSS dołączysz go kodem:

 
 
 
Pobierz
behavior:url(border-radius-ie8.htc)

Kod działa w Internet Explorerze od wersji 5.5 w górę. Jeśli pojemnik div objęty tym kodem przesuwa się na środek ekranu, to w pliku .htc z linijki rozpoczynającej się od this.outerHTML usuń kod:

 
 
 
Pobierz
margin: ' + margin + '

Ostatnim problemem, jaki trzeba rozwiązać jest obsługa zaokrąglonych rogów w Operze. Rozwiązaniem jest użycie pliku SVG, jako tła dla pojemnika div:

[+]
 
 
Pobierz
background: #737568 url(narozniki.svg)

Warto przy tym przypomnieć, że format SVG funkcjonuje na bazie XML-a i umożliwia bardzo szybkie tworzenie grafik zarówno przy pomocy programów graficznych (np. Inkscape) oraz przez ręczne wpisywanie kodu (szerszy opis składni języka:http://www.internetmaker.pl/ar...). Wystarczy odpowiednia struktura pliku oraz dwa polecenia, aby uzyskać zaokrąglone rogi. Plik narozniki.svg zawiera więc następujący kod:

[+]
 
 
Pobierz
 1. <?xml version="1.0" standalone="no"?>
 2.  
 3. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 4.  
 5. "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 6.  
 7. <svg width="100%" height="100%" version="1.1"
 8.  
 9. xmlns="http://www.w3.org/2000/svg">
10.  
11.         <rect fill="white"  x="0" y="0" width="100%" height="100%" />
12.  
13.         <rect fill="#737568"  x="0" y="0" width="100%" height="100%" rx="10px"/>
14.  
15. </svg>

Gotowy kod CSS dla kontenera prezentuje się następująco:

[+]
 
 
Pobierz
1. #pojemnik {
2.         width: 300px;
3.         height: 150px;
4.         background: #737568 url(narozniki.svg);
5.         -moz-border-radius: 10px;
6.         -webikt-border-radius: 10px;
7.         behavior:url(border-radius-ie8.htc)
8. }

Efekt w przeglądarce Firefox:

Jak uzyskać zaokrąglone rogi?

Oraz w Internet Explorerze:

Jak uzyskać zaokrąglone rogi?

Czy są inne sposoby?

Z pewnością istnieją inne sposoby uzyskania zaokrąglonych rogów. Większość z nich nie jest jednak tak prosta, jak wyżej opisane metody. Będą one wystarczające dla większości projektów w których zaistnieje potrzeba implementacji zaokrąglonych rogów.

Pobierz przykłady z tego artykułu:

12 października 2009

Powiązane publikacje

CSS3 w praktyce

CSS3 w praktyce

CSS dla zaawansowanych: atrybuty i pseudoklasy

CSS dla zaawansowanych: atrybuty i pseudoklasy

7 porad dla mistrzów CSS

7 porad dla mistrzów CSS

CSS - kaskadowe arkusze stylów

CSS - kaskadowe arkusze stylów

 
Przyciski rollover w CSS

Przyciski rollover w CSS

 
Skomentuj
ten artykuł

Komentarzy: 15

Kod obrazkowy
(Kliknij, aby zmienić)
 
Przejdż do tego postu na forum wtorek, 27.04.2010 22:25Czarek

Czy można się dowiedzieć od autora artykuły jak uzyskał efekt zaokrąglonych rogów dla IE jak na obrazku powyżej. U mnie to niedziała w IE7 ani IE8.

Przejdż do tego postu na forum czwartek, 17.12.2009 18:24galganka

CYTAT(Koleżanka @ 15.12.2009)
Jak dołączyć plik border-radius.htc do strony, gdzie wstawić adres do niego i gdzie wstawić sam plik?


Witam!

Czy ktoś może mi udzielić tej informacji?

Przejdż do tego postu na forum wtorek, 15.12.2009 11:28Koleżanka

Jak dołączyć plik border-radius.htc do strony, gdzie wstawić adres do niego i gdzie wstawić sam plik?

Przejdż do tego postu na forum piątek, 27.11.2009 15:58Wojtek Komorowski

Witam...
Miejmy nadzieję, że niedługo IE będzie obsługiwać border-radius i problem się wkońcu sam rozwiąże.

Przejdż do tego postu na forum poniedziałek, 16.11.2009 15:24Filip Górny

Polecam plugin do zaokraglonych rogow, w jquery. Dziala znakomicie, wystarczy dodac jedna linijke javascript.

Przejdż do tego postu na forum środa, 28.10.2009 00:32mr.proper

zgadzam sie ze uzycie <img> jako elementow layoutu jest niesemantyczne i wzbudza zle nawyki.
raczej:
xhtml
1. <div id="pojemnik">
2. <div class="gora_l">
3. <div class="gora_p">
4. <div class="dol_l">
5. <div class="dol_p">
6. </div>
css
#pojemnik {
2. position: relative;
3. width: 300px;
4. height: 150px;
5. background: #737568
6. }
7.
8. .gora_l {
9. position: absolute;
10. top: 0;
11. left: 0
background: url('gora_l.png');
12. }
13.
14. .gora_p {
15. position: absolute;
16. top: 0;
17. right: 0
background: url('gora_p.png');
...itd smile.gif

Przejdż do tego postu na forum środa, 21.10.2009 15:32woody

Ad1. dlaczego auto użył <img/> ? powinny być to puste elementy np. div'y, a grafiki wstawione css'ami, Ponieważ grafiki odpowiedzialne za wygląd serwisu nie powinny być jego contentem;-)

Przejdż do tego postu na forum sobota, 17.10.2009 19:51stachu

A gdzie atrybut alt="......" dla img? Jeszcze trochę i będą tu tutoriale na tabelkach wink.gif

Przejdż do tego postu na forum piątek, 16.10.2009 00:55Pepej

CYTAT(Riklaunim @ 14.10.2009)
Bo CSS3 i HTML5 w IE nie istnieją ogólnie ;]


osobiście polubiłem ten generator http://www.spiffycorners.com/http://forum.magazynyinternetowe.pl/index.php?sc=...B2FC&sz=5px

Dodatkowo żeby nie babrać się za każdym razem z html spłodziłem w pehapie funkcje gdzie stworzenie elementu z zaokrąglonymi rogami sprowadza się do wywołania gen_tips('content'); Działa wszędzie i przewidywalnie smile.gif

Przejdż do tego postu na forum środa, 14.10.2009 18:56Riklaunim

Bo CSS3 i HTML5 w IE nie istnieją ogólnie ;]

Przejdż do tego postu na forum środa, 14.10.2009 18:43dotworker

zaokrąglone narożniki ( bez css3 ) > http://www.cssjuice.com/25-rounded-corners...iques-with-css/ < i wszystko w temacie / Css3 jeszcze nie jest validowany a poza tym jego świetny border-radius nie działa w IE

Przejdż do tego postu na forum wtorek, 13.10.2009 15:45szymbas

CYTAT(m @ 12.10.2009)
pod ie przyklad z samej gory nie bedzie dzialal:
bottom i right dla tego samego elementu nie dziala.

Ależ będzie działał i to nawet w ie6. Wielokrotnie używałem bottom i right jednocześnie i nie miałem z tym żadnych problemów.

Niemniej jednak, jako że z pozycjonowaniem absolutnym związanych jest wiele bugów ie, zamiast powyższej konstrukcji wolę używać zagnieżdżone div-y, każdy z odpowiednio spozycjonowanym obrazkiem tła.

Przejdż do tego postu na forum poniedziałek, 12.10.2009 18:35Janusz

keniled: o jakiś Ty mądry... tongue.gif

Przejdż do tego postu na forum poniedziałek, 12.10.2009 16:21keniled

Autor nic nowego nie wymyślił. Właściwie pokazał tylko sposób "na chłopski rozum", dodał trochę hacków CSS i to wszystko. Jak napisał przedmówca, nie działa to nawet w IE. Na koniec dopisał "Z pewnością istnieją inne sposoby uzyskania zaokrąglonych rogów. Większość z nich nie jest jednak tak prosta" i po sprawie. Autor ani nie zgłębił tematu, ani nie podał żadnych odnośników do innych źródeł czy rozwiązań.
Proszę spojrzeć na Nifty Corners Cube (http://www.html.it/articoli/niftycube/index.html). Żadnych plików graficznych z rogami, kompatybilność ze wszystkimi przeglądarkami do IE 5.5 wstecz, możliwość wyboru rozmiaru narożników i ich liczby (nie każdy róg musi być zaokrąglony!), automatyczne wykrywanie kolorów i wiele innych. Trudno zastosować? nic bardziej mylnego! Wystaczy taki kod w <head>:
<script type="text/javascript" src="niftycube.js"></script>
<script type="text/javascript">
window.onload=function(){
Nifty("div#content");
}
</script>
i mamy okrągłe rożki! Z resztą proszę przejrzeć przykłady na stronie projektu. I co, trudne?

Przejdż do tego postu na forum poniedziałek, 12.10.2009 15:22m

pod ie przyklad z samej gory nie bedzie dzialal:
bottom i right dla tego samego elementu nie dziala.

Zobacz wszystkie komentarze »

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.