Upiększenia: okrągłe brzegi i cieniowanie

W artykule tym przedstawię sposób tworzenia zaokrąglonych narożników oraz pokażę, jak wiele możliwości daje cieniowanie tekstu oraz dodawanie cienia pod pudełkami. Obydwa te efekty zrealizuję przy użyciu CSS. Nie będę używać w tym celu obrazków, lecz wykorzystam właściwości border-radius, box-shadow oraz text-shadow.

Właściwości te pojawiły się w wersji CSS3. Nie są one jeszcze w pełni obsługiwane przez wszystkie przeglądarki. Te, które je obsługują (Mozilla Firefox, Safari), używają specyficznych przyrostków, aby podkreślić, że właściwości te nie są jeszcze oficjalnie wspierane i wciąż trwają nad nimi prace. Przedrostki te to -webkit oraz -moz, dla, odpowiednio, Safari i Firefoksa. CSS używający tych właściwości nie będzie się wprawdzie walidował, jednak przeglądarki nie obsługujące takich właściwości po prostu je zignorują.

Zaokrąglone narożniki

Zacznijmy od zaokrąglonych narożników, efektu, który – w świecie CSS-owych prostokątów – wyjątkowo cieszy oko. Proszę zresztą rzucić okiem na obrazek:
Zaokrąglone brzegi - przykład renderowania w Mozilli Firefox 3.6

Przykład 1

Oto przykład tekstu, który pojawi się w zaokrąglonym prostokącie:

Ten tekst ma ładne i zaokrąglone narożniki - tak przynajmniej powinien wyglądać w przeglądarce Firefox oraz Safari.

Wyrenderowany tekst:

Ten tekst ma ładne i zaokrąglone narożniki – tak przynajmniej
powinien wyglądać w przeglądarce Firefox oraz Safari.

… oraz jego stylizacja:

 .rounded1 {
    background-color: #46719d;
    color: #eaf6b2;
    font-weight: bold;
    padding: 10px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
  }

Przykład 2 – trochę większe zaokrąglenia

Oto tekst:

    
A to kolejny przykład: Ten tekst ma ładne i zaokrąglone narożniki - tak przynajmniej powinien wyglądać w przeglądarce Firefox oraz Safari.

Oto wyrenderowany przykład:

A to kolejny przykład:
Ten tekst ma ładne i zaokrąglone narożniki – tak przynajmniej
powinien wyglądać w przeglądarce Firefox oraz Safari.

Oto stylizacja:

.rounded2 {
    background-color: #5593de;
    color: #eaf6b2;
    font-weight: bold;
    padding: 10px;
    -moz-border-radius: 20px;
    -webkit-border-radius: 15px;
  }

Przykład 3: całkiem duże zaokrąglenie

Tekst:

    
„He who receives an idea from me receives instruction himself without lessening mine, as he who lights his taper at mine, receives light without darkening me. ” -- Thomas Jefferson

Renderowanie:

„He who receives an idea from me receives instruction himself without lessening mine, as he who lights his taper at mine, receives light without darkening me. ” — Thomas Jefferson

Stylizacja:

 blockquote {
    margin: 1em 20px;
    padding: 15px;
    border: 2px solid #555;
    background-color: #f2f2f2;
    color: #555;
    font-size: 110%;
    -moz-border-radius: 50px;
    -webkit-border-radius: 50px;
  }

Przykład 4 – każdy narożnik stylizowany z osobna

Tekst:

    
Można zaokrąglać tylko wybrane narożniki. W tym przykładzie zostały zaokrąglone: lewy górny i prawy dolny.

Renderowanie:

Można zaokrąglać tylko wybrane narożniki. W tym przykładzie
zostały zaokrąglone: lewy górny i prawy dolny.

Stylizacja:

.warning {
    border: 5px solid #fc0;
    padding: 8px 10px;
    font-size: 120%;
    color: #d58616;
    font-weight: bold;
    background-color: #f1e36b;
    -moz-border-radius-topleft: 10px;
    -webkit-border-top-left-radius: 10px;
    -moz-border-radius-bottomright: 10px;
    -webkit-border-bottom-right-radius: 10px;
  }

Przykład 5 – chmurka

Tekst:

    
Pozostawiając jeden narożnik bez zaokrąglenia można uzyskać efekt „dymka”, który może się przydać na przykład podczas stylizowania komentarzy.

Renderowanie:

Pozostawiając jeden narożnik bez zaokrąglenia można uzyskać
efekt „dymka”, który może się przydać na przykład podczas stylizowania
komentarzy.

CSS:

.comment {
   border: 1px solid #999;
    background-color: #d8d8f4;
    color: #999;
    padding: 15px;
    font-size: 80%;
    -moz-border-radius-topleft: 15px;
    -webkit-border-top-left-radius: 15px;
    -moz-border-radius-topright: 15px;
    -webkit-border-top-right-radius: 8px;
    -moz-border-radius-bottomleft: 15px;
    -webkit-border-bottom-left-radius: 15px;
  }

Cień pod tekstem

Deklaracja text-shadow pozwala na uzyskanie cienia pod tekstem – powtórzonego tekstu, delikatnie „rozmazanego” i przesuniętego względem oryginału.

Przykład 1 – rozmyty cień

Oto fragment HTML-a:

Przykład cienia pod tekstem - cień rozmyty

Tak wygląda ten fragment w przeglądarce:

Przykład cienia pod tekstem – cień rozmyty

… gdy zastosujemy stylizację:

  .sha1{
    text-shadow: 2px 2px 12px #888;
  }

Stylizacja polega na podaniu przesunięcia cienia względem tekstu oryginalnego (przesunięcie dodatnie określa kierunek w prawo lub w dół, przesunięcie ujemne określa kierunek w lewo lub w górę) oraz długości promienia rozmycia i koloru.

Przykład 2 – cień bez rozmycia

Gdy promień rozmycia wynosi zero, poniższy HTML:

Przykład cienia pod tekstem - cień bez rozmycia

zostanie wyrenderowany następująco:

Przykład cienia pod tekstem – cień bez rozmycia

A to odpowiednia reguła CSS:

  .sha1-noblur {
    text-shadow: 2px 2px 0 #888;
  }

Przykład 3 – poświata

Jeśli użyjemy czarnego tła, cień okaże się poświatą, co też daje całkiem ciekawy efekt:

Oto poświata nie z tego świata!

Reguła CSS dla klasy glow:

.glow {
    text-shadow: 2px 2px 5px #fff;
    background-color: #000000;
    color: white;
    padding: 1em;
    font-size: 120%;
  }

Przykład 4 – rozmycie tekstu

Właściwość text-shadow może być użyta jako zwykłe rozmycie
tekstu – efekt uzyskuje się, ustalając wartości poziomego i pionowego przesunięcia cienia na zero:

A to tekst, który jest rozmyty

CSS:

 .blur {
    text-shadow: 0px 0px 5px #000;
  }

Przykład 5

Można równiez używać wielu cieni na raz, co daje bardzo interesujące efekty kolorystyczne:

Takie ogniste litery!

CSS:

.manyblurs {
    text-shadow: 0 0 4px white, 
    0 -5px 4px #FFFF33, 
    2px -10px 6px #FFDD33,
    -2px -15px 11px #FF8800,
    2px -25px 18px #FF2200;
 
    background-color: #fff;
    color: red;
    padding: 1em;
    font-size: 120%;
  }

Cień pod pudełkami

Specyfikacja dotycząca cieniów pod pudełkami pozwala na ustawienie wartości właściwości box-shadow w następujący sposób:

none | <shadow> [ <shadow> ]*

gdzie <shadow> może przyjmować wartość:

<shadow> = inset? && [ <length>{2,4} && <color>? ]

Dwie pierwsze wartości <length> to przesunięcie cienia odpowiednio poziome i pionowe. Wartość dodatnia poziomego przesunięcia oznacza cień z prawej, ujemna zaś – z lewej strony względem stylizowanego pudełka. Podobnie z przesunięciem pionowym: wartość dodatnia to cień pod, a ujemna – nad pudełkiem. Trzecia wartość określa promień rozmycia, a czwarta – promień rozszerzenia, dzięki któremu możliwe jest zarówno tworzenie cienia większego od elementu (wartość dodatnia), jak i mniejszego od niego (wartość ujemna).

Kilka przykładów

Tak powinny wyglądać przykłady, które zostaną zamieszczone poniżej.
Przykład cieni pod pudełkami - CSS3

Przykładowa strona html wraz z wbudowanym arkuszem stylów zawiera dokładnie te przykłady: Pudełka z cieniem

Prosty cień

Spróbujmy utworzyć zielony cień pod zielonym pudełkiem (klasa simple). Pionowe i poziome przesunięcie wynosi 3px, a promień rozmycia 20px, kolor cienia to #357e13, taki sam, jak kolor tła pudełka.

To jest test

Odpowiadający temu kod css:

.simple {
    -moz-box-shadow: 3px 3px 20px #357e13;
    -webkit-box-shadow: 3px 3px 20px #357e13;
    background-color: #357e13;
    color: #fff;
  }

Cień wewnętrzny

Czasami potrzebujemy umieścić cień wewnątrz pudełka.

To jest test

Używamy wówczas słowa kluczowego inset :

.inset {
    -moz-box-shadow: inset 1px 1px 10px #357e13;
    -webkit-box-shadow: inset 1px 1px 10px #357e13;
  }

Inny ciekawy efekt:

To jest test
.inset2 {
    -moz-box-shadow: inset 5px 5px 20px #fff;
    -webkit-box-shadow: inset 5px 5px 20px #fff;
   background-color: #000;
   color: white;
  }

Cień rozszerzenia

Oto cień mniejszy od pudełka (wartość czwartej składowej jest ujemna):

To jest test
.spread {
    -moz-box-shadow: 0px 20px 10px -10px #357e13;
    -webkit-box-shadow: 0px 20px 10px -10px #357e13;
  }

A tutaj cień większy, niż pudełko:

To jest test
.spread {
    -moz-box-shadow: 0px 20px 10px 5px #357e13;
    -webkit-box-shadow: 0px 20px 10px 5px #357e13;
  }

Stylizowanie pudełek polega więc na wyborze koloru (bądź kolorów – gdyż cienie można ze sobą łączyć, wymieniając je po przecinku), ustaleniu, czy cień ma być zewnętrzny czy wewnętrzny (inset), określeniu rozmiaru (promienia) rozmycia oraz promienia rozciągania.

To jest test
  .many {
    -moz-box-shadow: 0 0 20px black, 20px 15px 30px yellow,
       -20px 15px 30px lime, -20px -15px 30px blue, 
       20px -15px 30px red;
    -webkit-box-shadow: 0 0 20px black, 20px 15px 30px yellow,
        -20px 15px 30px lime, -20px -15px 30px blue,
        20px -15px 30px red;
    margin-top: 50px;
    margin-bottom: 50px;
  }

Źródła

http://www.cssnewbie.com/easy-rounded-corners-with-border-radius/
http://hacks.mozilla.org/2009/06/text-shadow
http://hacks.mozilla.org/2009/06/moz-box-shadow

15 komentarzy do “Upiększenia: okrągłe brzegi i cieniowanie”

  1. Znalazłem błąd „Przedrostki te to -web oraz -moz, dla, odpowiednio, Firefoksa i Safari.”
    powinno być -webkit, a dalej odwrotna kolejność przeglądarek.

    Nie ma czegoś takiego jak „zaokrąglone brzegi”, brzeg to inaczej krawędź. Jak już to zaokrąglone rogi, albo narożniki. A „pudełka” to nie są żadne pudełka, tak się przyjęło, ale to jest błędne tłumaczenie, powinno być „pola”.

    Poza tym bardzo fajny artykuł 🙂

  2. Dziękuję za ten komentarz – poprawiłam przedrostek i kolejność przeglądarek oraz zamieniłam „brzegi” na „narożniki” (pozostał jednak tytułu wpisu i obrazki). Niestety, pudełka pozostaną na razie pudełkami, chyba że mnie ktoś przekona do innego tłumaczenia. Moim zdaniem „model pudełkowy” to dość trafna nazwa – dobrze odzwierciedla zachowanie „boksów” podczas renderowania strony w przeglądarce i jest zgodna z intuicją: „pudełka”, podobnie jak fizyczne obiekty, mają wysokość i szerokość, zajmują miejsce, przesuwają się względem siebie. Jestem jednak otwarta na inne argumenty…

  3. Hej, co do modelu pudełkowego, może to Cię przekona:
    http://www.beautifulcode.pl/artykuly/pudelka_w_CSS_i_ich_wlasciwosci.php

    Problem z modelem pudełkowym uwidacznia się, gdy stworzysz za pomocą modułu CSS 3D Transforms, sześcian, taki jak tutaj:
    http://www.youtube.com/user/css3pl#p/a/f/0/f1_EaaZsOpE

    Wtedy stosując błędną terminologię, otrzymasz, że każda dwuwymiarowa ściana, posiada swój model pudełkowy i słowo „pudełkowy” traci sens. Chyba bardziej pasuje tutaj 'model pola’ podobnie jak w matematyce, gdzie wymiarujemy i obliczamy pola figur, bo one są dwuwymiarowe.
    Oczywiście można mieć inne zdanie, chętnie bym poznał opinie osób, które się z tym nie zgadzają. Jednak do tej pory chyba nikt się tym szerzej nie zajmował.

  4. Mam problem z cieniem inset – co bym nie robił, to cień pojawia się tylko z lewej i z góry (w środku mam JPG z białym tłem). Oto mój styl:
    #blablabla {
    -moz-box-shadow: inset 17px 17px 15px -5px #FFBBBB;
    -webkit-box-shadow: inset 17px 17px 15px -5px #FFBBBB;
    box-shadow: inset 17px 17px 15px -5px #FFBBBB;
    -webkit-border-radius: 32px;
    -moz-border-radius: 32px;
    border-radius: 32px;
    border-color: #FFBBBB;
    border-style:solid;
    border-width:16px;
    background-color:#FFFFFF;
    padding: 32px;

    }

  5. Gdzie mozna sie nauczyc kodowania od podstaw?
    Zrobilam sobie wlasna skorke na Word Press, specjalnym programem i myslalam, ze epoka kodowania skonczyla sie tak jak lata temu DOS, ale widze, ze jednak nie da rady. Chce takie ladne pola i ramki do zdjec i galerie. Jak i gdzie zaczac? Widzialam taki tutorial po angielsku, moze ktos sie zainspiruje i podziala po polsku?

    http://www.w3schools.com/cssref/pr_background-color.asp

    1. A można wiedzieć jaki to specjalny program pozwala na wykonanie własnej skórki?

      O naukę jakiego kodowanie od podstaw dokładnie chodzi? O CSS? Pisanie własnych skórek? Jeszcze coś innego? Ramki galerii to albo CSS albo jQuery, musiałabym zobaczyć na przykładzie o co dokładnie chodzi?

  6. Np. chcialabym zrobic dodatkowa ramke wokol filmiku, ktory pomoglas mi wkleic na moja strone. Tak jak tu:
    http://www.kotlet.tv. Albo oddzielic kolejne posty na stronie innymi kolorami; znaczy wpisac kazdy post w osobne prostokatne tlo. Tak jak u Ciebie komentarze admina oddzielone sa od komentarzy czytelnikow innym kolorem.

    Skorke zrobilam programem Artisteer 3, niedrogi, przeciagalam sobie kolory i ramki i mam wlasna skorke, ale czasami chcialoby sie cos ekstra wkleic. Program generuje ramki, ich szerokosc, kolory itp, ale sa czasem obrazy, ktore chcialabym wstawic bez ramek i tutaj juz trzeba wiedziec co nieco o tym gaszczu literek i cyferek zwanym kodem.
    Przy okazji mam temat na kolejny odcinek webfaces. pl: Dlaczego zdjecia nie trzymaja sie swoich miejsc, kiedy ogladam swoja strone iphonem, albo w pomnejszonym oknie dialogowym?

    1. Dziękuję za informację o programie Artisteer 3.

      Za sterowanie formą prezentacji (czyli kolorki, ramki, wielkość czcionek itp.) odpowiada CSS. Kod CSS-a w stronie WordPressowej najczęściej znajdziemy w pliku
      style.css (w katalogu do którego wgrana jest nasza skórka). Ale trzeba jeszcze wiedzieć, co ma (które klasy CSS) wpływ na wygląd danego elementu. Tutaj polecam przeglądarkę Chrom i funkcję „Zbadaj element” dostępną pod prawym przyciskiem myszy po najechaniu na wybrany element strony. Gdyby coś było niejasne, pytaj śmiało.

      Dlaczego zdjecia nie trzymaja sie swoich miejsc, kiedy ogladam swoja strone iphonem, albo w pomnejszonym oknie dialogowym?

      Musiałabym zobaczyć tę stronę. Strona, pod adresem, który podałaś podczas wysyłania komentarza (applenglishschool.com) nie odpowiada.

  7. Dziekuje za odpowiedz.
    Wlasnie wzielam sie za studiowanie HTML. CSS zaraz potem, ale bede wdzieczna za chocby mala wskazowke, w ktorym miejscu „ugryzcs” ten cod, by rozmiescic zdjecia ze strony glownej wg wlasnego gustu (wordpress rozmiescil mi je w pionie, a chce w poziomie), zlikwodowac wygenerowane przez Artisteer ramki wokol obrazkow czy napisow zrobionych w Gimpie i tym podobne korekty.

    „Musiałabym zobaczyć tę stronę. Strona, pod adresem, który podałaś podczas wysyłania komentarza (applenglishschool.com) nie odpowiada.

    Ups, zjadlam jedna literke, poprawny adress: www. appleenglishschool.com

    Pozdrawiam serdecznie
    Ela

    1. Ela, a próbowałaś wybrać opcję równania do lewej podczas załadunku (wstawiania zdjęć)? Jest to standardowa opcja w WordPressie, zdecydowana większość szablonów ma dla niej wsparcie.

  8. Tak, probowalam. Strasznie topornie to wyglada, ale coz, w koncu dopiero raczkuje.
    Mam wyzwanie dla Ciebie: A wiec: WordPress po angielsku(latwiej mi administrowac), strona dla japonskiego klienta, hosting amerykanski. (to moja pierwsza strona w zyciu:)
    Stattpress pokazuje wejscia glownie z „en”. Znaczy musze zmienic („zdeclarowac iezyk”). Grzebalam w kodach ale tych dwoch pierwzych linijek w HTML nie moglam podmienic. Jakies sugestie? Musze zmienic WordPressa na japonski?
    A jak tam Artisteer, probowalas? Co o nim sadzisz?

  9. Bardzo ciekawy efekt obramowania w 3D

    -moz-box-shadow: 2px 2px rgba(0,0,0,0.4),4px 4px rgba(0,0,0,0.2),6px 6px rgba(0,0,0,0.1);
    -webkit-box-shadow: 2px 2px rgba(0,0,0,0.4),4px 4px rgba(0,0,0,0.2),6px 6px rgba(0,0,0,0.1);
    box-shadow: 2px 2px rgba(0,0,0,0.4),4px 4px rgba(0,0,0,0.2),6px 6px rgba(0,0,0,0.1);

    Można podmienić na text-shadow i mamy również interesujący wynik cienia dla fontów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.