Propiedad CSS overflow-y: guía completa, valures y trucos

Останнє оновлення: 11/13/2025
Автор: C SourceTrail
  • Overflow-y controla el desbordamiento vertical: recorta, desplaza o muestra el contenido.
  • Автоматичне/прокручування/приховане створення контексту формату; clip recorta sin permitir desplazamiento.
  • Для цього ефекту визначте параметри (або розмір блоку) і поєднайте їх із переповненням-x, щоб створити рядок.
  • Atiende accesibilidad: foco por teclado, tabindex y roles/nombres ARIA apropiados.

Ілюстрація використання CSS overflow-y

Controlar cómo se comporta el contenido cuando se sale del contenedor es clave para un diseño web limpio y usable; en ese terreno, overflow-y en CSS команда для вертикального дисборду, decidiendo si recortar, mostrar barras de desplazamiento o dejar que el contenido se asome fuera del cuadro.

Más allá de lo básico, hay matices que cambian por completo el resultado: ciertos valores activan un nuevo contexto de formateo, algunos permiten desplazamiento con JavaScript y otros lo bloquean, y hasta hay efectos colaterales que pueden provocar que un contenedor pase a ser “scrollable” en ambos ejes si no se configura bien.

¿Qué es overflow-y y para qué sirve?

Власність перелив-у indica al navegador qué hacer con el contenido que rebasa el elemento por su верхня та нижня межі. Cuando un bloque tiene más contenido del que cabe en su altura definida (o máxima), este ajuste deci si el contenido se recorta, se hace desplazable o se deja visible fuera del recuadro.

Conviene recordar su relación con su “hermana” horizontal: overflow-x controla los laterales izquierdo y derecho, mientras que overflow-y se centra en arriba y abajo. Y, por supuesto, la propiedad abreviada переповнення permite establecer ambos ejes a la vez con uno o dos valores.

Синтаксис та визнані значення

У своїй більш прямій формі, переповнення та прийняття цінностей прихований, прокручування, автоматичний і видимий; desde especificaciones modernas también existe clip. Puedes declararla así:

/* CSS */
selector {
  overflow-y: hidden | scroll | auto | visible | clip;
}

Якщо ви використовуєте скорочення переповнення, можна пройти одна або дві цінності. Con un valor, se aplica a ambos ejes; con dos valores, el primeroresponde a переповнення-x (горизонтальний) та другий перелив-у (вертикальний):

/* Un solo valor, aplica a X e Y */
.container { overflow: auto; }

/* Dos valores: overflow-x overflow-y */
.panel { overflow: hidden auto; }

Significado detallado de cada valor

Es fácil quedarse en la superficie, pero cada palabra clave encierra un comportamiento específico, y algunos incluyen reglas de accesibilidad y rendimiento importantes.

  • видимий (доблесть через дефект): el contenido no se recorta y puede sobresalir más allá del área de padding del elemento. El elemento no se convierte en contenedor de desplazamiento; útil si no quieres limitar el contenido, pero puede provocar solapamientos con otros componentes.

  • прихований: el contenido se recorta en el borde del padding; no se muestran barras de desplazamiento. El contenido sigue existiendo en el flujo interno, pero no es visible fuera del área. Aunque el usuario no pueda hacer scroll manual, sí puede desplazarse de forma programática (por ejemplo, con scrollTop o desplazando el foco), de modo que el elemento se considera contenedor de desplazamiento.

  • кліп: запишіть вміст у край переливного затискача, визначено для overflow-clip-marginПрихована різниця, no permite desplazamiento, ni manual ni programático. No crea un nuevo contexto de formateo por sí mismo; si necesitas aislar el flujo (como haría auto/scroll/hidden), combínalo con display: flow-root. Úsalo cuando quieras un corte tajante sin scroll ni “resquicios”.

  • прокруткивміст записаний і siempre se muestran barras de desplazamiento en el eje al que aplique, haya o no desbordamiento real. Esta constancia evita que las barras aparezcan y desaparezcan cuando el contenido fluctúa; ten en cuenta que, aun así, al imprimir puede que el contenido desbordado se incluya según el motor de impresión.

  • автоматичнийсхожий на сувій, але solo añade barras cuando son necesarias. Si el contenido cabe, el resultado visual se aproxima a visible, pero el elemento ya actúa como contenedor de desplazamiento y además establece un nuevo contexto de formateo por motivos de rendimiento y reflujo con elementos flotantes.

Matices esenciales que cambian el resultado

Hay cinco detalles que no conviene pasar por alto y que, en la practica, markan la diferencia: las dimensiones, el contexto de formateo, la interacción entre ejes, la impresión y el soporte de desplazamiento programático.

Para que el desbordamiento vertical tenga efecto real, el bloque debe tener altura (висота) або altura máxima (максимальна висота) definidas; si trabajas en términos lógicos, США розмір блоку o максимальний розмір блоку. Para escenarios dinámicos, aprende a obtener la altura de un elemento. En el eje horizontal ocurre lo propio con ширина/максимальна ширина o розмір-вбудованого-файлу/максимальний-розмір-вбудованого-файлу; otra opción para forzar el desbordamiento en línea es білий простір: nowrap.

Al elegir cualquier valor distinto de видимий і кліп para overflow/overflow-y, el elemento crea un nuevo contexto de formateo de bloque. Esto evita que, por ejemplo, un float vecino reempaquete el contenido en cada paso de scroll, algo que degradaría el rendimiento al desplazarse.

Hay también reglas de interacción entre ejes que sorprenden la primera vez: si estableces видимий в очах y en el otro usas un valor que no sea visible ni clip, ese видимий фактично як автомобільАсимізм, якщо понесеш кліп на маму y en el otro no es vidno ni clip, el кліп поводиться як прихований; conviene conocerlo para evitar resultados inesperados.

En la práctica diaria, mucha gente observa que al aplicar прокрутіть або автоматично в лотку, елемент проходить через scroll контейнер y ciertas acciones (como pseudo-elementos que sobresalen) pueden activar también el desplazamiento en el otro eje si no se controla bien. Es un comportamiento coherente con la especificación y los motores de renderizado actuales.

Ejemplo rápido: fijar la altura y activar el scroll vertical

Una demostración típica consiste en acotar la altura de un bloque de texto y permitir que el exceso se desplace verticalmente. En este caso, переповнення-y: авто añade la barra solo cuando haga falta.

<div class="caja">
  <p>Texto largo...</p>
  <p>Más texto...</p>
</div>

.caja {
  max-height: 220px;
  padding: 12px;
  border: 1px solid #ccc;
  overflow-y: auto;   /* barra vertical solo si es necesaria */
  overflow-x: hidden; /* evitamos scroll horizontal accidental */
}

Залиште в деталях: overflow-x: приховане доповнення до overflow-y para impedir que vibraciones de layout, sombras or pseudo-elementos provoquen una barra horizontal indeseada.

Control y desplazamiento con JavaScript

Cuando el contenedor es desplazable (автоматично, прокрутка або включено приховано), puedes mover el contenido por código con propiedades y métodos estándar como Element.scrollTop y Element.scrollTo(). Esto permite, por ejemplo, llevar el foco visual a un ancla interior o simular un salto al final de la lista.

// Desplazar 200px hacia abajo
const panel = document.querySelector('.panel');
panel.scrollTop = 200;

// O ir con precisión a una posición
panel.scrollTo({ top: 0, behavior: 'smooth' });

Hay una excepción explícita: якщо США переповнюють: кліп, агент користувача no permite desplazamiento programático; el contenido fuera del borde de clip no es acesible ni con el ratón ni desde JavaScript.

Accesibilidad: teclado, foco y lectores de pantalla

Unárea desplazable no siempre es фокусується за допомогою клавіатури, así que el usuario que navega sin ratón puede quedarse sin forma de desplazarla. En Firefox і en Chrome 132 o superior, los contenedores de scroll se hacen focuseables por defecto; en otros navegadores, añade tabindex="0" претендент.

Тепер добре, якщо представить це зупинка табуляції a ciegas, un lector de pantalla puede llegar a la región sin contexto. Para mitigarlo, asigna un рол ARIA адекватно (наприклад, role="region") і пропорція один доступний номер з aria-label o aria-labelledby. Un etiquetado claro mejora la navegación asistida sin sacrificar usabilidad.

Overflow-x y overflow-y: як комбінувати

Скорочена власність переповнення permite establecer ambos ejes a la vez con uno o dos valores; cuando especificas dos, el primero es para переповнення-x а другий для перелив-у. Esto facilita casos como evitar la barra horizontal a la vez que permites scroll vertical.

/* Evita barra horizontal, permite scroll vertical si hace falta */
.contenedor { overflow: hidden auto; }

Como recordatorio rápido, los valores disponibles para configurar el desbordamiento son: видимий, прихований, кліп, прокрутки y автоматичнийРівень очей. переповнення-x gobierna el flujo horizontal y перелив-у el vertical, y puedes combinarlos según convenga.

«Обрізати край» та переповнення поля обрізання

Якщо ви виберете переповнення: кліп (o solo en el eje Y), el recorte se realiza en el denominado borde de clip de desbordamiento. Ese borde puede extenderse más allá del padding gracias a overflow-clip-margin, який приймає один longitud para dejar “aire” antes de recortar.

.tarjeta {
  overflow-y: clip;              /* cortar sin permitir scroll */
  overflow-clip-margin: 8px;     /* recorta 8px por fuera del padding */
}

Запам'ятати clip no crea un nuevo contexto de formateo. Si necesitas ese aislamiento (por ejemplo, para gestionar floats o contener márgenes colapsados), combina clip con дисплей: потік-корінь y así consigues el mismo fecto de contención que aportan auto/scroll/hidden.

Cuándo necesitas dimensiones explícitas

Para que el recorte o el scroll aparezcan de verdad, el elemento necesita una фіксована висота (висота або максимальна висота) en el eje de bloque, or su equivalente lógico розмір-блоку/максимальний-розмір-блоку; si no, el contenedor crecerá con el contenido y el desbordamiento no se activará.

En layouts horizontales (por ejemplo, carouses), визначте ширина/максимальна ширина o розмір-вбудованого-файлу/максимальний-розмір-вбудованого-файлу para forzar el desbordamiento en el eje X; también puedes usar білий простір: nowrap para impedir los saltos de línea y provocar que el contenido exceda el ancho disponible.

Evitar la barra horizontal por pseudo-elementos o sombras

Un caso real muy habitual: un pseudo-elemento :: після que flota hacia la derecha, o una sombra alargada, sobrepasa el contenedor y активуйте горизонтальну стрічку en un elemento que ya tiene overflow-y. Esto sucede porque, al convertirse en contenedor de scroll, el motor considera el área desbordada para el eje opuesto.

Типові рішення: апліка переповнення-x: приховано en el contenedor desplazable; controla el tamaño y posición del pseudo-elemento (p. ej., con трансформувати en lugar de posición absoluta si procede); o акота кон кліп/шлях-кліпу si buscas un recorte tajante. Cualquiera de estas estrategias evita el scroll horizontal indeseado без жертвування вертикаллю.

Demostración de resultados con cada valor

El siguiente bloque muestra cómo cambian la visibilidad y las barras con los distintos valores de overflow-y, todos con la максимальна висота para forzar el desbordamiento vertical:

<div class="demo visible">Contenido largo...</div>
<div class="demo hidden">Contenido largo...</div>
<div class="demo clip">Contenido largo...</div>
<div class="demo scroll">Contenido largo...</div>
<div class="demo auto">Contenido largo...</div>

.demo {
  max-height: 140px;
  padding: 10px;
  margin-bottom: 12px;
  border: 1px solid #bbb;
}
.visible { overflow-y: visible; }
.hidden  { overflow-y: hidden; }
.clip    { overflow-y: clip; }
.scroll  { overflow-y: scroll; }
.auto    { overflow-y: auto; }

Зверніть увагу на це сувій siempre muestra la barra вертикальний, mientras que auto solo lo hace cuando el texto excede la altura. En hidden, el contenido sobrante no se ve pero sigue estando ahí; en clip, directamente no existe una vía de desplazamiento, ni si quiera con código.

Impresión y contenido desbordado

Un detalle menos conocido: con переповнення: прокручування, algunos motores de impresión pueden acabar imprimiendo el contenido desbordado aunque no quepa en pantalla. Si tu caso de uso contempla exportar a PDF or papel, pruébalo y resolve si prefieres прихований про Включена кліп щоб уникнути несподіваних відправлень.

Compatibilidad entre navegadores

Властивості переповнення, переповнення-x-y переповнення-y gozan de soporte sólido en los navegadores modernos desde hace muchas versiones. Доблесть кліп та його партнер overflow-clip-margin pertenecen a especificaciones más recientes, pero su фактичне усиновлення є поширеним y crece con cada lanzamiento; comprueba las matrices de compatibilidad si apuntas a entornos antiguos.

En cuanto al foco de contenedores desplazables, recuerda la peculiaridad: Firefox та Chrome 132+ los hacen focuseables por defecto; para el resto, añade tabindex=”0″ manualmente y un rol/nombre acesible para una experiencia consistente.

Buenas practicas de maquetación

No todo es poner una barra y listo: combina propiedades para prevenir desplazamientos indeseados y ganar en estabilidad visual. Aquí van unas pautas que funcionan muy bien en producción.

  • Визначити розміри: sin height/max-height або block-size, el contenedor crecerá y no verás el el el effecto de overflow-y.

  • Додати overflow-x: приховано cuando використовує overflow-y, salvo que necesites belt-and-braces horizontales. Evitas barras laterales provocadas por sombras, bordes o pseudo-elementos.

  • Переважно автоматичне прокручування передньої частини si quieres que la barra aparezca solo cuando haga falta, y scroll si buscas dimensiones estables de layout sin “saltos” por aparición/desaparición de scrollbars.

  • Usa clip cuando quieras recorte duro (sin rutas de desplazamiento), y combínalo con display: flow-root si necesitas contención del flujo.

Relación con el DOM y APIs útiles

У JavaScript, розкриття DOM переповнення como propiedad de estilo, y puedes inspeccionar/ajustar el estado del elemento: element.style.overflowY y getComputedStyle(element).overflowY. Además, para desplazar contenidos usa scrollTop y scrollTo(), salvo con clip donde no hay scroll de ningún tipo.

const panel = document.querySelector('.panel');
panel.style.overflowY = 'auto';
if (getComputedStyle(panel).overflowY !== 'visible') {
  panel.scrollTo({ top: panel.scrollHeight, behavior: 'smooth' });
}

Si trabajas con enlaces internos, recuerda que табличний hacia un elemento oculto dentro de un contenedor hidden/auto puede hacer que el navegador автоматично прокручувати para ponerlo en vista; es una forma legítima de desplazamiento programático, útil para mejorar la navegación con teclado.

Tabla mental rápida de opciones

Para tenerlo claro de un stazo: видимий вже знаю все про запас; прихований recorta y permite scroll programático; кліп запис і не дозволено прокручування; прокрутки recorta pero siempre muestra barras; р автоматичний solo muestra barras cuando procede. Y recuerda que no visible/clip crea contexto de formateo, vital para rendimiento con floats.

Ejemplos de combinación por ejes

Dos patrones que verás constantemente: дозволити вертикальне прокручування sin barra horizontal, y recortar en un eje con clip mientras el otro se desplaza avtáticamente.

/* Scroll vertical, sin horizontal */
.lista {
  max-height: 300px;
  overflow-x: hidden;
  overflow-y: auto;
}

/* Recorte duro en X, desplazamiento automático en Y */
.panel {
  overflow-x: clip;
  overflow-y: auto;
  display: flow-root; /* contén el flujo si lo necesitas */
}

Ten presentes las reglas de interacción: si un eje usa un valor distinto de visible/clip y el otro pone visible, ese visible se підняти авто. Con clip sucede algo parecido: si el otro eje no es visible ni clip, el кліп актуальний як прихований.

Загальні випадки використання

У сучасних інтерфейсах, перелив-у є неймовірними для вікон чату, панелей фільтрів, великих меню, журналів або списків з іншими місцями. Se complementa con cabeceras pegajosas y footers dentro del contenedor, y suele acompañarse de переповнення-x: приховано для уникнення бічних стрижнів.

En diseños con tarjetas o modales, puedes alternar entre автоматичний (para no mostrar la barra si no hace falta) y прокрутки (para estabilizar el ancho cuando aparecería la barra durante la carga). Si el modal debe recortar partes decorativas, кліп evita interacciones y ahorra cálculos.

Поширені помилки та як їх уникнути

El fallo más repetido es declarar переповнення без висоти y esperar una barra que nunca llega; визначте висоту або максимальну висоту/розмір блоку. El segundo es olvidarse del eje horizontal: завжди цінує overflow-x en paralelo, sobre todo si usas sombras o pseudo-elementos.

Третє не враховується доступність: contenedores desplazables sin foco de teclado o sin nombre acesible complican la vida a usuarios con lector de pantalla. Añade tabindex, роль та aria-label cuando no sea focuseable por defecto.

Пов'язані ресурси

Si quieres ampliar, revisa el tutorial general de відокремлено від CSS та посилання на DOM для переповнення en elementos. Estas páginas cubren desde fundamentos hasta peculiaridades finas de implementación y compatibilidad.

Dominar overflow-y imlica entender qué recorta, cuándo se desplaza, cómo interactúa con el eje opuesto y qué efecto tiene en el contexto de formateo; con las pautas de dimensiones, accesibilidad y combinación con overflow-x, es sencillo lograr paneles fluidos, sin barras imprevistas y con un desplazamiento suave tanto para usuarios como para scripts.

Пов'язана стаття:
Вирішено: отримати висоту елемента ref
Схожі повідомлення: