Corner radius — parametr zaoblení rohů UI prvků, který se měří v logických pixelech (pt na iOS, dp na Android) a určuje poloměr kružnice vepsané do rohu obdélníku. Správný výběr corner radius ovlivňuje vnímání rozhraní: velká zaoblení vytvářejí měkký, přátelský tón, malá — přísný a formální. Podle Material Design Guidelines (Google, 2026) je doporučený radius pro karty 8–16 dp, pro tlačítka — 4–8 dp. Více o správě vzhledu prvků si přečtěte v článku o stínech v UI.
Hlavní body
Corner radius — číselná hodnota určující stupeň zaoblení rohů obdélníkového prvku. Čím vyšší hodnota, tím je roh zaoblenější. Při hodnotě 0 zůstává roh rovný (90°), při hodnotě rovné polovině kratší strany se prvek změní v kruh (u čtverce) nebo zaoblený obdélník s rovnými stranami (kapsle).
V mobilním designu se corner radius používá pro: karty a dlaždice, tlačítka, vstupní pole, modální okna, obrázky a avatary, indikátory průběhu, chipy a odznaky. Každý typ prvku má doporučený rozsah zaoblení založený na pokynech Material Design a Human Interface Guidelines.
Podle Material Design 3 (Google, 2026) se zaoblení rohů klasifikuje do tří úrovní: small (4 dp) pro tlačítka a vstupní pole, medium (8–12 dp) pro karty a listy, large (16–28 dp) pro dialogy a bottom sheet. HIG Apple (2025) doporučuje jednotný corner radius 10–12 pt pro systémové prvky (UIButton, UITextField) a 20+ pt pro modální prezentace.
Na iOS se zaoblení rohů realizuje přes vlastnost cornerRadius u CALayer. V UIKit má každý UIView vrstvu, u které lze nastavit cornerRadius. Pro složitější zaoblení (různé poloměry pro různé rohy) se používají maskedCorners a CACornerMask v kombinaci s UIBezierPath.
// UIKit: zaoblení přes CALayer
import UIKit
let cardView = UIView()
cardView.backgroundColor = .systemBackground
cardView.layer.cornerRadius = 12
cardView.layer.maskedCorners = [
.layerMinXMinYCorner,
.layerMaxXMinYCorner
]
Ve SwiftUI se zaoblení nastavuje přes modifikátor cornerRadius() nebo přes ClipShape s RoundedRectangle. SwiftUI také podporuje individuální zaoblení rohů přes UIRectCorner v kombinaci s clipped() a overlay().
// SwiftUI: zaoblení přes RoundedRectangle
import SwiftUI
VStack {
Text("Poloměr rohu 16")
.padding()
.background(
RoundedRectangle(cornerRadius: 16)
.fill(Color.blue)
)
}
// Individuální zaoblení rohů
RoundedRectangle(
cornerSize: CGSize(width: 16, height: 16),
style: .continuous
)
Continuous corner radius — styl zaoblení, který Apple používá v iOS od vydání iOS 7. Na rozdíl od klasického poloměru (circular) vytváří continuous radius plynulejší zaoblení pomocí Bezierovy křivky třetího řádu místo oblouku kružnice. SwiftUI podporuje tento styl přes parametr style: .continuous v RoundedRectangle. Apple doporučuje continuous corner radius pro všechny systémové prvky jako vizuálně přirozenější.
V Android se zaoblení rohů tradičně realizuje přes XML shape zdroje ve složce res/drawable. Shape definuje tvar pozadí s parametry cornerRadius a solid. Pro různé rohy se používají <, bottom, top a <right. V Material Design 3 byl přidán MaterialShapeDrawable s podporou motivů a dynamických tvarů.
<!-- res/drawable/bg_card.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<corners android:radius="12dp" />
</shape>
V Jetpack Compose se zaoblení nastavuje přes parametr shape u Modifier. Compose poskytuje RoundedCornerShape s podporou různých poloměrů pro každý roh a styl (CircularShape nebo CutCornerShape). Compose také podporuje continuous corner radius přes RoundedCornerShape v kombinaci s grafickým obrysem.
// Jetpack Compose: zaoblení přes RoundedCornerShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
Card(
shape = RoundedCornerShape(
topStart = 16.dp,
topEnd = 16.dp,
bottomStart = 4.dp,
bottomEnd = 4.dp
),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Text(text = "Karta s vlastním zaoblením")
}
MaterialShapeDrawable v Android View System umožňuje dynamicky měnit corner radius bez přetváření drawable. Použijte ShapeAppearanceModel pro přesné nastavení: nastavte cornerFamily (rounded nebo cut) a cornerSize pro každý roh zvlášť.
Výběr corner radius závisí na typu prvku, kontextu použití a platformě. Neexistuje univerzální pravidlo, ale Material Design a HIG Apple dávají jasná doporučení pro standardní komponenty. Základní princip: zaoblení by mělo být znatelné, ale nemělo by překážet obsahu.
| Typ prvku | Doporučený radius | Platforma | Poznámka |
|---|---|---|---|
| Tlačítka | 4–8 dp / 8 pt | iOS, Android | Čím větší tlačítko, tím větší radius |
| Karty | 8–16 dp / 10–12 pt | iOS, Android | Material Design: výchozí 12 dp |
| Vstupní pole | 4–8 dp / 8 pt | iOS, Android | Příliš velké zaoblení vypadá nepřirozeně |
| Modální okna | 16–28 dp / 20+ pt | iOS, Android | iOS 18: výchozí 24 pt |
| Avatary | 50 % velikosti | iOS, Android | Pro kulaté avatary radius = polovina strany |
| Chipy / Odznaky | 16–20 dp / 14 pt | Android | Tvar kapsle při velkém zaoblení |
Pravidlo kontrastu: prvky s různým corner radius v jednom rozhraní by se měly lišit alespoň o 4 dp, aby byl vizuální rozdíl znatelný. Nepoužívejte 3 úrovně zaoblení na jedné obrazovce — vytváří to vizuální šum. Material Design 3 doporučuje používat nejvýše dvě úrovně zaoblení na obrazovku: jednu pro kontejnery (karty, dialogy) a jednu pro interaktivní prvky (tlačítka, pole).
Ve Flutter se zaoblení rohů realizuje přes třídu BorderRadius, která přijímá hodnoty Radius.circular() nebo Radius.elliptical(). Flutter podporuje individuální zaoblení přes BorderRadius.only() a BorderRadius.horizontal()/vertical(). Widget ClipRRect ořezává potomka podle zadaného BorderRadius.
// Flutter: zaoblení přes ClipRRect a Container
import 'package:flutter/material.dart';
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16.0),
topRight: Radius.circular(16.0),
bottomLeft: Radius.circular(4.0),
bottomRight: Radius.circular(4.0),
),
),
child: Text('Vlastní zaoblení rohů'),
)
// ClipRRect s Image
ClipRRect(
borderRadius: BorderRadius.circular(12.0),
child: Image.network(
'https://example.com/image.jpg',
fit: BoxFit.cover,
),
)
ClipRRect ve Flutter se používá, když je potřeba oříznout obrázek nebo složitý widget podél zaobleného okraje. Pro jednoduché kontejnery pozadí stačí BoxDecoration s borderRadius — je výkonnější, protože nevytváří samostatnou ořezávací vrstvu. Material Flutter 3.22+ podporuje continuous corner radius přes ContinuousRectangleBorder.
Často kladené otázky
dp (density-independent pixels) v Android a pt (points) v iOS — jsou logické jednotky, které odpovídají fyzické velikosti na obrazovce nezávisle na hustotě pixelů. 1 dp ≈ 1 pt ≈ 1/160 palce. Číselné hodnoty corner radius v dp a pt lze používat jako zaměnitelné při přenosu designu mezi platformami.
Na iOS použijte maskedCorners s CACornerMask: layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]. V Android XML — . V Jetpack Compose — RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp). Ve Flutter — BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)).
Continuous corner radius — styl zaoblení, při kterém se roh tvoří nikoli obloukem kružnice, ale Bezierovou křivkou třetího řádu. Apple používá tento styl od iOS 7 pro všechny systémové prvky. Vizuálně vypadá continuous zaoblení plynuleji a přirozeněji ve srovnání s klasickým circular stylem.
Doporučuje se 10–12 pt na iOS (jako systémová klávesnice) a 8–12 dp na Android. Klávesy uvnitř klávesnice mohou mít menší radius (4–6 dp) nebo být bez zaoblení. Pro zvýšení dotykové plochy použijte padding 4–8 dp mezi zaobleným okrajem a hranou tlačítka.
UITableViewCell nedědí cornerRadius z contentView automaticky, protože pozadí buňky se vykresluje v backgroundView. Pro zaoblení buňky nastavte cornerRadius pro contentView.layer a backgroundView.layer současně. Ve SwiftUI použijte .listRowBackground() s RoundedRectangle.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také