Advertisement
  1. Web Design
  2. HTML & CSS

10 właściwości CSS3 które musisz znać

Scroll to top
Read Time: 13 min
This post is part of a series called CSS3 Mastery.
The 30 CSS Selectors You Must Memorize

() translation by (you can also view the original English article)

Przerobiliśmy już 30 selektorów, które musisz zapamiętać; ale co z nowymi właściwościami CSS3? Pomimo, że większość nadal wymaga specjalnych przedrostków, już dzisiaj możesz korzystać z nich w swoich projektach. A właściwie, zachęcam Cię do tego!

Kluczem do tego jest zdefiniowanie na początku projektu, czy zgadzasz się na trochę inne przdstawienie strony pomiędzy przeglądarkami. Czy zgadzasz się by, np IE wyświetlało ostre rogi, zamiast ładnych zaokrąglonych? To Twój wybór. Jednak pamiętaj, że strony nie muszą wyglądać identycznie we wszystkich przeglądarkach. W ramach podsumowania tego artykułu, popracujemy nad jednym projektem.

1. border-radius

Border-radius

Zobacz Demo

Najbardziej popularna własność CSS3, border-radius była niejako wizytówką CSS3. Podczas gdy designerzy byli przerażeni, że layout może wyglądać inaczej w różnych przeglądarkach, mały kroczek, jakim były zaokrąglone narożniki, był prostym sposobem na zwabienie ich!

Ironią jest to, że zupełnie normalne wydaje nam się tworzenie odmiennego wyglądu dla urządzeń mobilnych. Natomiast dziwi fakt, że niektórzy nie stosują się do tego przy urządzeniach desktopowych.

1
-webkit-border-radius: 4px;
2
-moz-border-radius: 4px;
3
border-radius: 4px;

Zapamiętaj, że Safari i IE9 wdrożyły oficjalną składnię `border-radius`.

Okręgi

Niektórzy z Was mogą być nieświadomi tego, że korzystając z tej właściwości możemy tworzyć okręgi.

1
-moz-border-radius: 50px;
2
-webkit-border-radius: 50px;
3
 border-radius: 50px;
Circles

Zobacz Demo

...I jeśli chcemy się trochę zabawić, możemy wykorzystać Flexible Box Model (szczegóły w #8) by wycentować tekst znajdujący się w okręgu poziomo jak i pionowo. Wymaga to trochę kodu, ale tylko z powodu potrzeby wypisywania przedrostków.

1
display: -moz-box;
2
display: -webkit-box;
3
display: box;
4
5
-moz-box-orient: horizontal; /* wartość domyślna, więc prawdę mówiąc, tutaj zbędna */
6
-webkit-box-orient: horizontal;
7
box-orient: horizontal;
8
9
-moz-box-pack: center;
10
-moz-box-align: center;
11
12
-webkit-box-pack: center;
13
-webkit-box-align: center;
14
15
box-pack: center;
16
box-align: center;

2. box-shadow

Box-ShadowBox-ShadowBox-Shadow

Zobacz Demo

Następnie mamy wszechobecny box-shadow, który pozwala na nadanie głębi wybranemu elementowi. Tylko nie przesadzaj z wartościami!

1
-webkit-box-shadow: 1px 1px 3px #292929;
2
-moz-box-shadow: 1px 1px 3px #292929;
3
box-shadow: 1px 1px 3px #292929;

box-shadow przyjmuje cztery parametry:

  • x-offset (oś x)
  • y-offset (oś y)
  • blur (rozmycie)
  • color of shadow (kolor cienia)

Wielu nie zdaje sobie sprawy, że możemy nadać elementowi kilka właściwości box-shadows jednocześnie. Może to prowadzić do naprawdę interesujących efektów. W poniższym screenshocie użyłem niebieskiego i zielonego cienia by je wyróżnić.

Multiple box shadowsMultiple box shadowsMultiple box shadows

Zobacz Demo
1
-webkit-box-shadow: 1px 1px 3px green, -1px -1px blue;
2
-moz-box-shadow: 1px 1px 3px green,-1px -1px blue;
3
box-shadow: 1px 1px 3px green, -1px -1px blue;

Mądre Cienie

Używając cieni z pseudo-klasami ::before i ::after, możemy stworzyć bardzo ciekawe efekty. Oto jedna na początek:

HTML

1
<div class="box">
2
   <img src="tuts.jpg" alt="Tuts" />
3
</div>

CSS

1
.box:after {
2
   content: '';
3
   position: absolute;
4
5
   z-index: -1; /* schowaj cień za obrazek */
6
7
   /* The Shadow */
8
   -webkit-box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
9
   -moz-box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
10
   -box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
11
12
   width: 70%;
13
   left: 15%; /* połowa z pozostałych 30% (sprawdź szerokość powyżej) */
14
15
   height: 100px;
16
   bottom:  0;
17
}
Cool ShadowsCool ShadowsCool Shadows

Zobacz Demo

Chcesz więcej fajnych efektów? Zobacz ten tutorial na Nettuts+.

3. text-shadow

Text-shadowText-shadowText-shadow

Zobacz Demo

text-shadow jest jedną z kilku właściwości CSS3, w której możemy ominąć przedrostki. Musi być nadana tekstowi i podobnie jak box-shadow, zawiera cztery parametry:

  • x-offset (oś x)
  • y-offset (oś y)
  • blur (rozmycie)
  • color of shadow (kolor cienia)
1
 h1 {
2
text-shadow: 0 1px 0 white;
3
    color: #292929;
4
 }

Obrys Tekstu

Podobnie jak w box-shadow, możemy nadawać elementowi kilka cieni, oddzielając je przecinkami. Np. powiedźmy, że chcesz stworzyć obrys dla tekstu. Co prawda webkit oferuje metodę stroke możemy jednak osiągnąć ten efekt na innych przeglądarkach stosująć poniższą metodę (która prawdę mówiąc nie jest taka ładna):

1
body { background: white; }
2
3
h1 {
4
   text-shadow: 0 1px 0 black, 0 -1px 0 black, 1px 0 0 black, -1px 0 0 black;
5
   color: white;
6
}
Text OutlineText OutlineText Outline Zobacz Demo

4. Text-Stroke

Text-StrokeText-StrokeText-Stroke

Zobacz Demo

Bądź ostrożny z tą metodą. Przez ostatnie kilka lat tylko webkit ją wspierał (Safari, Chrome, iPhone).W rzeczywistości, chociaż mogę się mylić, 'text-stroke' nie jest jeszcze częścią specyfikacji CSS3.W tym wypadku, z białym tekstem, Firefox, wyświetli białą stronę. Możesz wykorzystać wykrywanie JavaScript do obejścia tego, albo upewnić się że kolor tekstu jest różny od koloru tła.

1
h1 {
2
   -webkit-text-stroke: 3px black;
3
   color: white;
4
}

Wykrywanie cechy

Jak możemy zapewnić jeden styl dla powiedźmy Firefoxa, a inny dla Safari i Chroma? Jednym rozwiązaniem jest wykrywacz.

Z wykrywaczem, możemy użyć JavaScript do sprawdzenia czy dana właściwość jest dostępna. Jeśli nie jest, stosujemy kod awaryjny.

Wróćmy do problemu z text-stroke. Ustawmy kolor awaryjny black dla wyszukiwarek które nie wspierają tej właściwości (aktualnie wszystko oprócz webkit).

1
var h1 = document.createElement('h1');
2
if ( !( 'webkitTextStroke' in h1.style ) ) {
3
   var heading = document.getElementsByTagName('h1')[0];
4
   heading.style.color = 'black';
5
}

Na początku tworzymy element h1. Później sprawdzamy czy -webkit-text-stroke jest dostępne dla tego elementu, poprzez atrybut style. Jeśli nie, to chwytamy nagłówek Hello Readers i zmieniamy jego color z białego na czarny.

Zwróć uwagę, że powyższe przykłady są bardzo ogólne. Jeśli chcesz zamienić kilka h1 na stronie, muszisz skorzystać z pętli while by przefiltrować każdy nagłówek i odpowiednio je zaktualizować.

Testujemy tylko dla webkit, a możliwe jest, że pozostałe przeglądarki w końcu zaczną wspierać text-stroke. Miej to na uwadze.

Jeśli chcesz bardziej pełny skrypt wykrywający cechy, zajrzyj na Modernizr.

5. Wielokrotne tła

Multiple Background ImagesMultiple Background ImagesMultiple Background Images

Zobacz Demo

Właściwość background została wprowadzona, by umożliwić wstawianie wielokrotnego tła w CSS3.

Stwórzmy przykład, który pokaże jak to działa. Z powodu braku odpowiednich obrazków w pobliżu, skorzystam z dwóch pochodzących z tutoriala, by ustawić nasze tło. Oczywiście, w swoim projekcie możesz wykorzystać tekstury albo nawet gradient dla tła.

1
.box {
2
background: url(image/path.jpg) 0 0 no-repeat,
3
 url(image2/path.jpg) 100% 0 no-repeat;
4
}

Powyżej, korzystając z przecinka jako odstępu, wstawiamy dwa oddzielne obrazki tła. Zwróć uwagę, że pierwszy z nich ustawiony jest w górnym lewym rogu (0 0), a drugi w prawym górnym(100% 0).

Upewnij się że zapewniasz wyjście awaryjne dla przeglądarek, które nie obsługują wsparcia dla tej właściwości. Ominą one tę właściwość i zostawią puste tło.

Rekompensata dla starszch przeglądarek

By ustawić pojedyncze tło z dla starszych przeglądarek jak np. IE7, zadeklaruj background dwa razy: pierwszy dla starych przeglądarek i drugi jako nadpisanie. Ewentualnie możesz skorzystać z Modernizr.

1
.box {
2
/* awaryjnie */
3
background: url(image/path.jpg) no-repeat;
4
5
/* nowoczesne przeglądarki */
6
background: url(image/path.jpg) 0 0 no-repeat,
7
 url(image2/path.jpg) 100% 0 no-repeat;
8
}

6. background-size

Do niedawna byliśmy zmuszeni używać podstępów by zmienić rozmiar naszego obrazka w tle.

1
background: url(path/to/image.jpg) no-repeat;
2
background-size: 100% 100%;

Kod powyżej zmusi obrazek w tle do wypełnienia całej przestrzeni. Np. jeśli byśmy chcieli, by obrazek zajął cały element body niezależnie od szerokości okna przeglądarki?

1
body, html { height: 100%; }
2
3
body {
4
 background: url(path/to/image.jpg) no-repeat;
5
 background-size: 100% 100%;
6
}

To wszystko co musimy zrobić. background-size przyjmuje dwa parametry: odpowiednio szerokości x i y.

Podczas gdy ostatnie wersje Chrome i Safari wspierają background-size, nadal musimy korzystać z przedrostków w przypadku starszych wyszukiwarek.

1
body {
2
 background: url(path/to/image.jpg) no-repeat;
3
 -moz-background-size: 100% 100%;
4
 -o-background-size: 100% 100%;
5
 -webkit-background-size: 100% 100%;
6
 background-size: 100% 100%;
7
}

Zobacz Demo

7. text-overflow

Rozwijana przez Internet Explorer właściwość text-overflow przyjmuje dwie wartości:

  • clip (ucięcie)
  • ellipsis (wielokropek)

Ta właściwość może być wykorzystana do wycięcia tekstu który wystaje poza pojemnik, jednocześnie dostarczając informacji użytkownikowi, jak wielokropek.

Text-OverflowText-OverflowText-Overflow

Zobacz Demo

Czy wiesz, że Internet Explorer zapewnia wsparcie dla tej właściwości od wersji IE6? To oni ją stworzyli!

1
.box {
2
   -o-text-overflow: ellipsis;
3
   text-overflow:ellipsis;
4
5
   overflow:hidden;
6
   white-space:nowrap;
7
8
   border: 1px solid black;
9
   width: 400px;
10
   padding: 20px;
11
12
   cursor: pointer;
13
}

W tym momencie, możesz rozważyć pokazanie całej zawartości kiedy użytkownik najedzie myszką na pojemnik.

1
#box:hover {
2
  white-space: normal;
3
  color: rgba(0,0,0,1);
4
  background: #e3e3e3;
5
  border: 1px solid #666;
6
}

Trochę dziwne jest, że nie ma (chyba, że się mylę) sposobu na zresetowanie text-overflow lub jej wyłączenie. By to "zasymulować", w :hover, ustawiamy white-space z powrotem na normal. To działa, poniewać funkcjonalność text-overflow jest od tego zależna.

Czy wiesz, że: Możesz samemu określić ciąg znaków, które będą użyte jako trzykropek. Robiąc to wyświetli się ciąg znaków reprezentujący przycięty tekst.

8. Flexible Box Model

Flexible Box Model, w końcu pozwala nam pozbyć się tych wszystkich float. Pomimo, że zrozumienie tej właściwości wymaga trochę pracy, to gdy już załapiesz, ma sens.

Zróbmy szybkie demo i stwórzmy dwukolumnowy layout.

1
<div id="container">
2
3
 <div id="main"> Główna zawartość </div>
4
 <aside> Zawartość z boku </aside>
5
6
</div>

Teraz CSS: na początku musimy określić container, który będzie traktowany jako box. Dodatkowo okręślę jakieś generalne rozmiary, skoro nie mamy żadnej zawartości.

1
 #container {
2
width: 960px;
3
    height: 500px; /* na potrzeby demo */
4
5
    background: #e3e3e3;
6
    margin: auto;
7
8
    display: -moz-box;
9
    display: -webkit-box;
10
    display: box;

Następnie ustawmy różne kolory tła dla #main div, i aside.

1
#main {
2
   background: yellow;
3
}
4
5
aside {
6
   background: red;
7
}

Jak narazie nie ma tego wiele.

Flexible Box ModelFlexible Box ModelFlexible Box Model

Jedna rzecz warta odnotowania to fakt, że kiedy ustawiamy display: box elementy dzieci zabiorą całą szerokość; taka jest domyślna wartość box-align stretch.

Zobacz co się stanie gdy dokładnie określimy szerokość zawartość #main.

1
#main {
2
  background: yellow;
3
  width: 800px;
4
}
Flexbox Example 2Flexbox Example 2Flexbox Example 2

Już trochę lepiej, ale nadal mamy problem z aside, które nie zabiera całej dostępnej przestrzeni. Możemy to zmienić korzystając z nowej właściwości box-flex.

box-flex nakazuje elementowi zabranie całej dostępnej przestrzeni.

1
 aside {
2
display: block;
3
    background: red;
4
5
   /* zabiera całą dostępną przestrzeń */
6
    -moz-box-flex: 1;
7
    -webkit-box-flex: 1;
8
    box-flex: 1;
9
 }

Dzięki temu, niezależnie od szerokości #main, aside zajmie całą dostępną szerokość. Nie musisz już się martwić problemami z float, jak opadanie elementów poniżej głównej zawartości.

Example 3 of Flexible Box ModelExample 3 of Flexible Box ModelExample 3 of Flexible Box Model

Zobacz Demo

Jedynie zaczęliśmy temat. Zobacz świetny artykuł Paula Irisha, który to rozwija. Bądź ostrożny używając tej metody ponieważ nie jest w pełni wspierana w starszych przeglądarkach. W takim przypadku możesz skorzystać z wykrywacza lub Modernizr by wykryć i zapewnić konieczne wyjścia awaryjne.

9. Resize

Dostępna wyłącznie w Firefox 4 oraz Safari 3, resize -- część CSS3 UI -- pozwala określić wymiary textarea.

1
<textarea name="elem" id="elem" rows="5" cols="50"></textarea>

Zwróć uwagę, że domyślnie przeglądarki webkit oraz Firefox 4 pozwalają ustawić rozmiar textareas w pionie jak i poziomie.

1
textarea {
2
   -moz-resize: vertical;
3
   -webkit-resize: vertical;
4
   resize: vertical;
5
}

Możliwe wartości

  • both: Zmiana w pionie i poziomie
  • horizontal: Zmiana w poziomie
  • vertical:Zmiana w pionie
  • none: Wyłącza resize
ResizeResizeResize

Zobacz Demo

10. Transition

Prawdopodobnie najbardziej odjechana właściwośc CSS3, pozwalająca dodawać animacje do elementów, bez używania JavaScript.

Mimo, że IE9 nadal nieobsługuje transition, to nie oznacz, że nie powinieneś tego używać.

Skopiujmy efekt, gdzie po najechaniu na link w pasku bocznym tekst przesunie się lekko w prawo.

HTML

1
<ul>
2
   <li>
3
  <a href="#"> Najedź na mnie </a>
4
   </li>
5
   <li>
6
      <a href="#"> Najedź na mnie </a>
7
   </li>
8
   <li>
9
      <a href="#"> Najedź na mnie </a>
10
   </li>
11
   <li>
12
      <a href="#"> Najedź na mnie </a>
13
   </li>
14
</ul>

CSS

1
 ul a {
2
-webkit-transition: padding .4s;
3
    -moz-transition: padding .4s;
4
    -o-transition: padding .4s;
5
    transition: padding .4s;
6
 }
7
8
 a:hover {
9
    padding-left: 6px;
10
 }

transition przyjmuje trzy parametry:

  • Właściwość do zmiany. (Ustaw wartość na all jeśli to konieczne)
  • Czas
  • Tempo

Powodem, dla którego nie nadajemy transition bezpośrednio do hover jest to, że gdybyśmy tak zrobili, animacja miałaby efekt, tylko podczas najechania kursorem. Natomiast podczas opuszczania pola element wróciłby do swojego pierwotnego stanu, bez animacji.

Zobacz demo

Ponieważ tylko ulepszyliśmy kod, nie wyrządziliśmy żadnej szkody dla starszych przeglądarek

Końcowy projekt

Weźmy większość technik, których się nauczyliśmy i stwórzmy odjechany efekt. Przejrzyj najpierw efekt końcowy (najlepiej w przeglądarce Webkit).

Krok 1. Tagi

W naszym kontenerze .box dodajmy dwa divy: jeden na przód i jeden na tył.

1
<body>
2
3
   <div class="box">
4
  <div>Hello</div>
5
      <div> World </div>
6
   </div>
7
8
</body>

Krok 2. Centrowanie w poziomie i pionie

Następnie, chcę by nasza karta była dokładnie wycentrowana na monitorze. By to zrobić skorzystamy z Flexible Box Model. Upewnij się tylko, by wykorzystać Modernizr dla starszych przeglądarek.

Skoro nasza strona zawiera tylko tę kartę możemy skorzystać z body jako głównego pojemnika.

1
body, html { height: 100%; width: 100%; }
2
3
body {
4
    display: -moz-box;
5
    display: -webkit-box;
6
    display: box;
7
8
    -moz-box-orient: horizontal;
9
    -webkit-box-orient: horizontal;
10
    box-orient: horizontal;
11
12
    -moz-box-pack: center;
13
    -moz-box-align: center;
14
15
    -webkit-box-pack: center;
16
    -webkit-box-align: center;
17
18
    box-pack: center;
19
    box-align: center;
20
}
centered

Krok 3. Stylizacja pojemnika

Teraz nadamy styl naszym "kartom":

1
 .box {
2
background: #e3e3e3;
3
    border: 1px dashed #666;
4
    margin: auto;
5
    width: 400px;
6
    height: 200px;
7
    cursor: pointer;
8
    position: relative;
9
10
    -webkit-transition: all 1s;
11
    -moz-transition: all 1s;
12
    transition: all 1s;
13
 }

Zauważ, że zaleciliśmy temu elementowi wykonania wszystkich zmian stylu. Jeśli nastąpią, dokonamy zmian w ciągu jednej sekundy (transition: all 1s).

styling the boxstyling the boxstyling the box

Krok 4. Efektywny cień

Następnie, jak nauczyliśmy się z artykułu, zamontujemy cień za pomocą pseudo-klasy ::after.

1
 .box::after {
2
content: '';
3
    position: absolute;
4
5
    width: 70%;
6
    height: 10px;
7
    bottom: 0;
8
    left: 15%;
9
10
    z-index: -1;
11
12
    -webkit-box-shadow: 0 9px 20px rgba(0,0,0,.4);
13
    -moz-box-shadow: 0 9px 20px rgba(0,0,0,.4);
14
    box-shadow: 0 9px 20px rgba(0,0,0,.4);
15
}
effective shadowseffective shadowseffective shadows

Krok 5. Stylizowanie dzieci div

W tym momencie dzieci divy znajdują się jeden na drugim. Nadajmy im position absolute, a następnie każmy zająć całą dostępną przestrzeń.

1
 .box > div {
2
background: #e3e3e3;
3
4
    position: absolute;
5
    width: 100%; height: 100%;
6
    top: 0; left: 0;
7
8
9
    font: 45px/200px bold helvetica, arial, sans-serif;
10
    text-align: center;
11
12
    -webkit-transition: all .5s ease-in-out;
13
    -moz-transition: all .5s ease-in-out;
14
    transition: all .5s ease-in-out;
15
 }
styling the children divsstyling the children divsstyling the children divs

Krok 6. Naprawa "przodu"

Sprawdź obrazek u góry; zwróć uwagę jak domyślnie wyświetlany jest tył karty?Jest to spowodowane tym, że element znajduje się niżej w kodzie, dlatego dostaje wyższy z-index. Naprawmy to.

1
 /* Upewnij się, że najpierw widzimy przód */
2
 .box > div:first-child {
3
position: relative;
4
    z-index: 2;
5
 }
fixing the front-sidefixing the front-sidefixing the front-side

Krok 7. Rotacja karty

Teraz czas na zabawę; kiedy najeżdżamy kursorem na kartę, powinno się obrócić i pokazać tył (a przynajmniej umowny tył). By tego dokonać, używamy transformacji oraz funkcji rotateY.

1
 .box:hover {
2
-webkit-transform: rotateY(180deg);
3
    -moz-transform: rotateY(180deg);
4
    transform: rotateY(180deg);
5
 }
rotating the cardrotating the cardrotating the card

Krok 8. Odwrócony tekst

Czy to nie wygląda świetnie? Ale teraz tekst jest odwrócony. Oczywiście dzieje się tak dlatego, że transformujemy kontener. Naprawmy to nadając rotację dziecku div o 180 stopni.

1
/* Schowaj przód kiedy najedzie kursorem*/
2
 .box:hover > div:first-child {
3
opacity: 0;
4
 }
5
6
 .box:hover div:last-child {
7
    -webkit-transform: rotateY(180deg);
8
    -moz-transform: rotateY(180deg);
9
    transform: rotateY(180deg);
10
 }

I dzięki tym ostatnim linijkom uzyskaliśmy porządany efekt!

Final productFinal productFinal product

Zobacz efekt końcowy (najlepiej w przeglądarce Webkit).

Podsumowanie

Dziękuję za przeczytanie, oraz mam nadzieję że czegoś się nauczyłeś!

Ps: ze względu na to, że artykuł pochodzi z 2010 roku, niektóre z właściwości są obecnie zmienione.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.