Grupa
MagazynyInternetowe.pl
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.
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:
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:
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:
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:
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:
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 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.:
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:
-moz-border-radius: 10px
Z kolei silnik Webkit wymaga użycia przedrostka -webkit:
-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:
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:
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:
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:
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:
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:
Oraz w Internet Explorerze:
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:
Powiązane publikacje
Komentarzy: 14
Jak dołączyć plik border-radius.htc do strony, gdzie wstawić adres do niego i gdzie wstawić sam plik?
Witam...
Miejmy nadzieję, że niedługo IE będzie obsługiwać border-radius i problem się wkońcu sam rozwiąże.
Polecam plugin do zaokraglonych rogow, w jquery. Dziala znakomicie, wystarczy dodac jedna linijke javascript.
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 ![]()
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;-)
A gdzie atrybut alt="......" dla img? Jeszcze trochę i będą tu tutoriale na tabelkach ![]()
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
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?
pod ie przyklad z samej gory nie bedzie dzialal:
bottom i right dla tego samego elementu nie dziala.
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:
CSS3 niesie wiele nowości. Teraz wszystko jest proste i szybkie w implementacji. Szkoda tylko, że nie wszędzie działa.
Polecamy:
Na skróty:
Magazyny Internetowe| Co za ile| Programy| Praca| Magazyn Internet| Internet Maker| Web Toster| ForumNasze serwisy: