Corner radius es un parámetro de redondeo de esquinas de elementos UI, que se mide en píxeles lógicos (pt en iOS, dp en Android) y define el radio del círculo inscrito en la esquina de un rectángulo. La elección correcta del corner radius afecta la percepción de la interfaz: los redondeos grandes crean un tono suave y amigable, los pequeños — estricto y formal. Según las Material Design Guidelines (Google, 2026), el radius recomendado para tarjetas es 8–16 dp, para botones — 4–8 dp. Más información sobre la gestión de la apariencia de elementos en el artículo sobre sombras en UI.
Lo más importante
Corner radius es un valor numérico que determina el grado de redondeo de las esquinas de un elemento rectangular. Cuanto mayor es el valor, más redondeada se vuelve la esquina. Con un valor de 0, la esquina permanece recta (90°); con un valor igual a la mitad del lado menor, el elemento se convierte en un círculo (para un cuadrado) o en un rectángulo redondeado con lados rectos (cápsula).
En el diseño móvil, corner radius se utiliza para: tarjetas y mosaicos, botones, campos de entrada, ventanas modales, imágenes y avatares, indicadores de progreso, chips y etiquetas. Cada tipo de elemento tiene un rango recomendado de redondeo basado en las guías de Material Design y Human Interface Guidelines.
Según Material Design 3 (Google, 2026), el redondeo de esquinas se clasifica en tres niveles: pequeño (4 dp) para botones y campos de entrada, medio (8–12 dp) para tarjetas y hojas, grande (16–28 dp) para diálogos y bottom sheets. Apple HIG (2025) recomienda un corner radius uniforme de 10–12 pt para elementos del sistema (UIButton, UITextField) y 20+ pt para presentaciones modales.
En iOS, el redondeo de esquinas se implementa mediante la propiedad cornerRadius de CALayer. En UIKit, cada UIView tiene una capa a la que se le puede establecer cornerRadius. Para redondeos más complejos (diferentes radios para diferentes esquinas), se utilizan maskedCorners y CACornerMask en combinación con UIBezierPath.
// UIKit: redondeo mediante CALayer
import UIKit
let cardView = UIView()
cardView.backgroundColor = .systemBackground
cardView.layer.cornerRadius = 12
cardView.layer.maskedCorners = [
.layerMinXMinYCorner,
.layerMaxXMinYCorner
]
En SwiftUI, el redondeo se define mediante el modificador cornerRadius() o mediante ClipShape con RoundedRectangle. SwiftUI también admite el redondeo individual de esquinas a través de UIRectCorner en combinación con clipped() y overlay().
// SwiftUI: redondeo mediante RoundedRectangle
import SwiftUI
VStack {
Text("Corner Radius 16")
.padding()
.background(
RoundedRectangle(cornerRadius: 16)
.fill(Color.blue)
)
}
// Redondeo individual de esquinas
RoundedRectangle(
cornerSize: CGSize(width: 16, height: 16),
style: .continuous
)
Continuous corner radius es un estilo de redondeo utilizado por Apple en iOS desde iOS 7. A diferencia del radio clásico (circular), el radio continuo crea un redondeo más suave mediante el uso de una curva Bezier de tercer orden en lugar de un arco circular. SwiftUI admite este estilo a través del parámetro style: .continuous en RoundedRectangle. Apple recomienda continuous corner radius para todos los elementos del sistema por ser visualmente más natural.
En Android, el redondeo de esquinas se implementa tradicionalmente mediante recursos XML shape en la carpeta res/drawable. Shape define la forma del fondo con los parámetros cornerRadius y solid. Para diferentes esquinas, se utiliza <corners android:bottomLeftRadius="..." />. En Material Design 3, se ha añadido MaterialShapeDrawable con soporte para temas y formas dinámicas.
<!-- 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>
En Jetpack Compose, el redondeo se define mediante el parámetro shape de Modifier. Compose proporciona RoundedCornerShape con soporte para diferentes radios para cada esquina y estilo (CircularShape o CutCornerShape). Compose también admite continuous corner radius a través de RoundedCornerShape en combinación con trazo gráfico.
// Jetpack Compose: redondeo mediante 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 = "Card con redondeo personalizado")
}
MaterialShapeDrawable en el sistema View de Android permite cambiar dinámicamente el corner radius sin recrear el drawable. Use ShapeAppearanceModel para una configuración precisa: establezca cornerFamily (rounded o cut) y cornerSize para cada esquina individualmente.
Elegir el corner radius depende del tipo de elemento, el contexto de uso y la plataforma. No existe una regla universal, pero Material Design y Apple HIG proporcionan recomendaciones claras para componentes estándar. El principio principal: el redondeo debe ser notable pero no interferir con el contenido.
| Tipo de elemento | Radius recomendado | Plataforma | Notas |
|---|---|---|---|
| Botones | 4–8 dp / 8 pt | iOS, Android | Cuanto más grande el botón, mayor el radius |
| Tarjetas | 8–16 dp / 10–12 pt | iOS, Android | Material Design: 12 dp predeterminado |
| Campos de entrada | 4–8 dp / 8 pt | iOS, Android | Demasiado redondeo se ve antinatural |
| Ventanas modales | 16–28 dp / 20+ pt | iOS, Android | iOS 18: 24 pt predeterminado |
| Avatares | 50% del tamaño | iOS, Android | Para avatares circulares radius = mitad del lado |
| Chips / Etiquetas | 16–20 dp / 14 pt | Android | Forma de cápsula con redondeo grande |
Regla de contraste: los elementos con diferente corner radius en la misma interfaz deben diferir al menos en 4 dp para que la diferencia visual sea notable. No use 3 niveles de redondeo en una pantalla — esto crea ruido visual. Material Design 3 recomienda usar no más de dos niveles de redondeo por pantalla: uno para contenedores (tarjetas, diálogos) y otro para elementos interactivos (botones, campos).
En Flutter, el redondeo de esquinas se implementa mediante la clase BorderRadius, que acepta valores Radius.circular() o Radius.elliptical(). Flutter admite redondeo individual a través de BorderRadius.only() y BorderRadius.horizontal()/vertical(). El widget ClipRRect recorta el elemento hijo según el BorderRadius dado.
// Flutter: redondeo mediante ClipRRect y 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('Redondeo personalizado de esquinas'),
)
// ClipRRect con Image
ClipRRect(
borderRadius: BorderRadius.circular(12.0),
child: Image.network(
'https://example.com/image.jpg',
fit: BoxFit.cover,
),
)
ClipRRect en Flutter se usa cuando necesita recortar una imagen o widget complejo a lo largo de un borde redondeado. Para contenedores de fondo simples, BoxDecoration con borderRadius es suficiente — esto es más eficiente ya que no crea una capa de recorte separada. Material Flutter 3.22+ admite continuous corner radius a través de ContinuousRectangleBorder.
Preguntas frecuentes
dp (density-independent pixels) en Android y pt (points) en iOS son unidades lógicas que corresponden al tamaño físico en pantalla independientemente de la densidad de píxeles. 1 dp ≈ 1 pt ≈ 1/160 pulgada. Los valores numéricos de corner radius en dp y pt se pueden usar indistintamente al transferir diseño entre plataformas.
En iOS, use maskedCorners con CACornerMask: layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]. En Android XML — . En Jetpack Compose — RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp). En Flutter — BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)).
Continuous corner radius es un estilo de redondeo en el que la esquina se forma no por un arco circular sino por una curva Bezier de tercer orden. Apple ha estado usando este estilo desde iOS 7 para todos los elementos del sistema. Visualmente, el redondeo continuo se ve más suave y natural en comparación con el estilo circular clásico.
Se recomiendan 10–12 pt en iOS (como el teclado del sistema) y 8–12 dp en Android. Las teclas dentro del teclado pueden tener un radius menor (4–6 dp) o no tener redondeo. Para aumentar el área de contacto, use padding de 4–8 dp entre el borde redondeado y el borde del botón.
UITableViewCell no hereda cornerRadius de contentView automáticamente porque el fondo de la celda se dibuja en backgroundView. Para redondear una celda, establezca cornerRadius tanto en contentView.layer como en backgroundView.layer simultáneamente. En SwiftUI, use .listRowBackground() con RoundedRectangle.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también