Skip to content

Guía 02 — Propiedades lógicas: compatibilidad RTL/LTR

Regla

Usa siempre propiedades lógicas (padding-inline, margin-block, inset-inline-start…) en lugar de propiedades físicas (padding-left, margin-top, left…) cuando el valor dependa del eje horizontal.


Por qué

Las propiedades físicas (left, right, padding-left…) están ancladas a una dirección absoluta del viewport. En un layout RTL (árabe, hebreo…) lo que debería estar "al inicio" está físicamente a la derecha, no a la izquierda.

Las propiedades lógicas usan ejes relativos al flujo del texto:

Eje lógicoDirección en LTRDirección en RTL
inline-startizquierdaderecha
inline-endderechaizquierda
block-startarribaarriba
block-endabajoabajo

Con propiedades lógicas, el mismo CSS funciona en ambas direcciones sin ningún override adicional.


Tabla de equivalencias

Propiedad físicaPropiedad lógica equivalente
widthinline-size
heightblock-size
min-width / max-widthmin-inline-size / max-inline-size
min-height / max-heightmin-block-size / max-block-size
padding-leftpadding-inline-start
padding-rightpadding-inline-end
padding-toppadding-block-start
padding-bottompadding-block-end
padding-left + padding-rightpadding-inline
padding-top + padding-bottompadding-block
margin-leftmargin-inline-start
margin-rightmargin-inline-end
margin-topmargin-block-start
margin-bottommargin-block-end
margin-left + margin-rightmargin-inline
margin-top + margin-bottommargin-block
border-leftborder-inline-start
border-rightborder-inline-end
leftinset-inline-start
rightinset-inline-end
topinset-block-start
bottominset-block-end
text-align: lefttext-align: start
text-align: righttext-align: end

Anti-patrón — propiedades físicas

scss
.c-badge {
  // ❌ Solo funciona en LTR
  .icon {
    margin-right: spacing(1.5);
  }
}

.c-drawer {
  // ❌ En RTL el drawer aparecerá por el lado contrario
  position: fixed;
  left: 0;
  top: 0;
}

Patrón correcto — propiedades lógicas

scss
.c-badge {
  // ✅ Funciona en LTR y RTL
  .icon {
    margin-inline-end: spacing(1.5);
  }
}

.c-drawer {
  // ✅ Se adapta automáticamente al dir del documento
  position: fixed;
  inset-inline-start: 0;
  inset-block-start: 0;
}

Cuándo sí usar propiedades físicas

Las propiedades físicas son correctas cuando el valor no depende del eje horizontal del texto, sino de una posición absoluta en pantalla:

scss
// ✅ Correcto: una sombra decorativa siempre cae abajo, independiente del idioma
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);

// ✅ Correcto: un tooltip siempre aparece bajo el trigger
.tooltip {
  top: calc(100% + spacing(1)); // posición vertical absoluta, no afectada por RTL
}

La regla práctica: si cambiando el dir del documento el elemento debería moverse horizontalmente, usa propiedades lógicas.


Soporte de navegadores

Las propiedades lógicas tienen soporte completo en todos los navegadores modernos desde 2021. No requieren prefijos ni polyfills.

Publicado bajo licencia MIT.