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
.b-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
.b-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.