Kurs HTML

9.14. Zaokrąglone rogi (border-radius)

Strona główna > Kurs CSS > Rozdział 9: Tła i Obramowania > Zaokrąglone rogi (border-radius)

Wprowadzenie: Łagodzenie krawędzi

Domyślnie rogi elementów HTML są ostre (kąty proste). Właściwość border-radius pozwala na **zaokrąglenie** tych rogów, nadając elementom bardziej miękki i nowoczesny wygląd.

Zaokrąglenie jest tworzone przez "wycięcie" fragmentu rogu za pomocą ćwiartki okręgu lub elipsy. Właściwość border-radius definiuje promień (lub promienie) tego okręgu/elipsy.

border-radius działa niezależnie od tego, czy element ma widoczne obramowanie (border), czy nie. Zaokrągla zarówno tło (background), jak i obramowanie.

Wartości border-radius

Właściwość border-radius jest shorthandem, który może przyjąć od jednej do czterech wartości, definiujących promienie zaokrąglenia dla poszczególnych rogów:

  • Jedna wartość: (np. border-radius: 10px;) - Wszystkie cztery rogi mają ten sam promień zaokrąglenia (10px).
  • Dwie wartości: (np. border-radius: 10px 20px;) - Pierwsza wartość dla rogów górnego lewego i dolnego prawego (10px), druga dla rogów górnego prawego i dolnego lewego (20px).
  • Trzy wartości: (np. border-radius: 10px 20px 30px;) - Pierwsza dla górnego lewego (10px), druga dla górnego prawego i dolnego lewego (20px), trzecia dla dolnego prawego (30px).
  • Cztery wartości: (np. border-radius: 10px 20px 30px 40px;) - Kolejno: górny lewy (10px), górny prawy (20px), dolny prawy (30px), dolny lewy (40px) (zgodnie z ruchem wskazówek zegara).

Wartości mogą być podawane w jednostkach długości (px, em, rem itp.) lub w procentach (%). Wartości procentowe odnoszą się do wymiarów pudełka elementu (padding-box): procentowa wartość poziomego promienia odnosi się do szerokości pudełka, a pionowego do wysokości.

<div class="box radius-example r1">10px</div>
<div class="box radius-example r2">10px 20px</div>
<div class="box radius-example r3">10px 20px 30px</div>
<div class="box radius-example r4">10px 20px 30px 40px</div>
<div class="box radius-example r-percent">50% (Elipsa/Okrąg)</div>
.radius-example {
  width: 120px;
  height: 80px;
  padding: 10px;
  margin: 10px;
  background-color: lightcoral;
  border: 2px solid darkred;
  display: inline-block; /* Aby były obok siebie */
  text-align: center; line-height: 80px; color: white;
}

.r1 { border-radius: 10px; }
.r2 { border-radius: 10px 20px; }
.r3 { border-radius: 10px 20px 30px; }
.r4 { border-radius: 10px 20px 30px 40px; }
.r-percent { 
  border-radius: 50%; /* Tworzy elipsę lub okrąg, jeśli element jest kwadratem */
  width: 100px; height: 100px; line-height: 100px;
}

Zaokrąglenia eliptyczne (dwie wartości na róg)

Można również zdefiniować różne promienie dla osi poziomej i pionowej dla każdego rogu, tworząc zaokrąglenia eliptyczne. Robi się to, podając dwie wartości oddzielone ukośnikiem (/) w ramach definicji promieni.

border-radius: [promienie poziome] / [promienie pionowe];

Każda część (przed i po ukośniku) może zawierać od jednej do czterech wartości, zgodnie z zasadami opisanymi wcześniej.

  • border-radius: 10px / 20px; - Wszystkie rogi mają promień poziomy 10px i pionowy 20px.
  • border-radius: 10px 30px / 20px 40px; - Górny lewy i dolny prawy: 10px/20px. Górny prawy i dolny lewy: 30px/40px.
  • border-radius: 10px 20px 30px 40px / 5px 15px 25px 35px; - Każdy róg ma inną parę promieni (poziomy/pionowy).
<div class="box radius-example ellipse-radius">10px 30px / 20px 40px</div>
.ellipse-radius {
  border-radius: 10px 30px / 20px 40px;
  background-color: lightseagreen;
  border-color: darkslategray;
}

Ta składnia jest rzadziej używana, ale pozwala na tworzenie bardziej niestandardowych kształtów.

Indywidualne właściwości dla rogów

Istnieją również indywidualne właściwości do ustawiania promieni dla każdego rogu z osobna:

  • border-top-left-radius
  • border-top-right-radius
  • border-bottom-right-radius
  • border-bottom-left-radius

Każda z tych właściwości może przyjąć jedną (promień kołowy) lub dwie wartości (promień poziomy i pionowy dla elipsy), np.:

.individual-radius {
  background-color: gold;
  border: 2px solid darkgoldenrod;
  width: 150px; height: 100px;

  /* Tylko górny lewy róg zaokrąglony kołowo */
  border-top-left-radius: 20px; 

  /* Dolny prawy róg zaokrąglony eliptycznie */
  border-bottom-right-radius: 30px 15px; /* 30px poziomo, 15px pionowo */
}

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Nadaj elementowi div zaokrąglenie wszystkich rogów o promieniu 8px.

Rozwiązanie:

HTML:

<div class="rounded-box">Zaokrąglone rogi</div>

CSS:

.rounded-box {
  padding: 20px;
  background-color: #eee;
  border: 1px solid #ccc;
  border-radius: 8px; /* Kluczowa właściwość */
}

Efekt: Pudełko będzie miało lekko zaokrąglone wszystkie rogi.

Zadanie 2 (do samodzielnego wykonania)

Stwórz przycisk (button) i nadaj mu zaokrąglenie tylko lewego górnego i prawego dolnego rogu (np. 15px).

Zadanie 3 (do samodzielnego wykonania)

Stwórz element div i użyj border-radius: 50%;, aby zamienić go w elipsę (lub okrąg, jeśli div jest kwadratem).

FAQ - Najczęściej zadawane pytania

Czy border-radius działa na wszystkich elementach?

Tak, border-radius działa na większości elementów, w tym na elementach blokowych (div, p), inline-block, a nawet na niektórych elementach zastępowanych jak obrazy (img - zaokrągla sam obrazek). Może nie działać zgodnie z oczekiwaniami na niektórych elementach formularzy lub tabelach ze złożonymi stylami obramowań.

Jak wartości procentowe w border-radius są obliczane?

Wartości procentowe odnoszą się do wymiarów **padding-box** elementu. Poziomy promień jest procentem szerokości padding-box, a pionowy promień jest procentem wysokości padding-box. Dlatego border-radius: 50%; na niekwadratowym elemencie tworzy elipsę.

Czy border-radius wpływa na layout?

Nie, border-radius wpływa tylko na wizualne renderowanie tła i obramowania. Nie zmienia wymiarów elementu ani jego pozycji w przepływie dokumentu.

Czy mogę użyć border-radius do stworzenia koła?

Tak. Aby stworzyć idealne koło, element musi być kwadratem (mieć równą szerokość i wysokość), a następnie należy ustawić border-radius: 50%;.