- Limpahan-y mengawal el desbordamiento menegak: recorta, desplaza or muestra el contenido.
- Auto/skrol/tersembunyi creat contexto de formateo; clip recorda sin permitir desplazamiento.
- Untuk kesannya, takrifkan altura (o saiz blok) y combina con limpahan-x según convenga.
- Akses penuh: fokus pada teknologi, indeks tab dan peranan/nombre apropiados ARIA.
Controlar cómo se comporta el contenido cuando se sale del contenedor es clave for un diseño web limpio y useable; en ese terreno, limpahan-y dalam CSS mandatori el desbordamiento menegak, decidiendo si recortar, mostrar barras de desplazamiento or dejar que el contenido se asome fuera del cuadro.
Más allá de lo básico, hay matices que cambian por completo el resultdo: ciertos valores activan un nuevo contexto de formateo, algunos mengizinkan desplazamiento dengan JavaScript dan banyak lagi blok, dan mempunyai kesan sampingan yang boleh diprovokasi oleh contenedor melalui "boleh ditatal" dan tidak boleh dikonfigurasikan.
¿Qué es limpahan-y y para qué sirve?
Harta limpahan-y indica al navegador qué hacer con el contenido que rebasa el elemento por su borde superior e inferior. Cuando un bloque tiene más contenido del que cabe en su altura definida (o maxima), este ajuste decide si el contenido se recorta, se hace desplazable or se deja visible fuera del recuadro.
Conviene recordar su relación con su “hermana” mendatar: limpahan-x controla los laterales izquierdo y derecho, mientras que overflow-y se centra en arriba y abajo. Y, por supuesto, la propiedad abreviada limpahan permite stablecer ambos ejes a la vez con uno o dos valores.
Sintaxis y valores admitidos
En su forma más directa, limpahan-y acepta los valores tersembunyi, tatal, auto y kelihatan; desde especificaciones modernas también existe clip. Puedes declararla así:
/* CSS */
selector {
overflow-y: hidden | scroll | auto | visible | clip;
}
Si usas la abreviatura limpahan, puedes pasar uno o dos valores. Con un valor, se aplica a ambos ejes; con dos valores, el primero corresponde a limpahan-x (mendatar) y el segundo a limpahan-y (menegak):
/* 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 facil quedarse en la superficie, but cada palabra clave encierra un comportamiento específico, y algunos incluyen reglas de accesibilidad y rendimiento importants.
-
boleh dilihat (valor por defecto): el contenido no se recorta y puede sobresalir más allá del área de padding del elemento. Elemen no se convierte en contenedor de desplazamiento; útil si no quieres limitar el contenido, but puede provocar solapamientos con otros componentes.
-
tersembunyi: el contenido se recorta en el borde del padding; no se muestran barras de desplazamiento. El contenido sigue existiendo en el flujo interno, tetapi tiada yang boleh dilihat di kawasan itu. Aunque el usuario no pueda hacer scroll manual, sí puede desplazarse de forma programática (contohnya, con scrollTop or desplazando el foco), de modo que el element se considera contenedor de desplazamiento.
-
music: rekod el kandungan en el tepi klip limpahan, definido por
overflow-clip-margin. Perbezaan yang tersembunyi, tidak dibenarkan desplazamiento, ini manual adalah programático. Tiada penciptaan konteks nuevo de formateo por sí mismo; anda memerlukan aislar el flujo (como haría auto/scroll/hidden), combínalo condisplay: flow-root. Anda perlu membuat tatal dengan "resquicios". -
tatal ke: el contenido se recorda y siempre se muestran barras de desplazamiento en el eje al que aplique, haya or no desbordamiento real. Esta constancia evita que las barras aparezcan y desaparezcan cuando el contenido fluctúa; sepuluh en cuenta que, aun así, al imprimir puede que el contenido desbordado se incluya según el motor de impresion.
-
auto: serupa tatal, tetapi solo añade barras cuando son necesarias. Si el contenido cabe, el resultdo visual se aproxima a visible, but the element is 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 resultdo
Hay cinco detalles que no conviene market por alto y que, en la práctica, marcan la diferencia: las dimensiones, el contexto de formateo, la interacción entre ejes, la impresión y el support de desplazamiento programático.
Untuk tujuan desbordamiento menegak tenga berkesan nyata, el bloque debe tener altura (ketinggian) atau altura máxima (tinggi maksimum) definidas; si trabajas en términos logicos, usa saiz blok o saiz blok maks. Untuk senario dinámicos, aprende a obtener la altura de un element. En el eje horizontal ocurre lo propio con lebar/lebar maksimum o saiz sebaris/saiz-sebaris maks; otra opción untuk forzar el desbordamiento en línea es ruang putih: nowrap.
Al elegir cualquier valor distinto de dilihat dan music para limpahan/limpahan-y, elemen 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 tambien reglas de interacción entre ejes que soprenden la primera vez: si estableces nampak en un eje y en el otro usas un valor que no sea visible ni clip, ese boleh dilihat actúa como auto. Asimismo, si pones klip en un eje y en el otro no es visible ni clip, el klip se comporta como tersembunyi; conviene conocerlo for evitar resultdos inesperados.
En la práctica diaria, mucha gente observa que al aplicar tatal o auto en un eje, el elemento pasa a ser un bekas tatal 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.
Contoh rapido: fijar la altura y activar el scroll vertical
Satu 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, limpahan-y: auto 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 */
}
Fíjate en el detalle: overflow-x: hidden complementa a overflow-y untuk menghalang getaran dalam susun atur, unsur-unsur palsu atau unsur-unsur palsu yang mendatar di tempat lain.
Kawal y desplazamiento dengan JavaScript
Cuando el contenedor es desplazable (auto, tatal atau termasuk tersembunyi), puedes mover el contenido por código con propiedades y métodos estándar como Element.scrollTop y Element.scrollTo(). Ini dibenarkan, sebagai contoh, llevar el foco visual dan dalaman tambahan atau simulasi dan salto dalam senarai akhir.
// 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: si usas limpahan: clip, el agente de usuario tiada permite desplazamiento programático; el contenido fuera del borde de clip no es accesible ni con el ratón ni desde JavaScript.
Kebolehaksesan: teclado, foco y lectores de pantalla
Satu kawasan yang tidak boleh didiami boleh difokuskan oleh teclado, así que el usuario que navega sin ratón puede quedarse sin forma de desplazarla. Dalam Firefox dan Chrome 132 atau lebih tinggi, tiada tatal se hacen focuseables por defecto; en otros navegadores, añade tabindex="0" al contenedor.
Ahora bien, si memperkenalkan ese hentian tab a ciegas, un lector de pantalla puede llegar a la región sin contexto. Untuk mengurangkan, asigna un rol ARIA adecuado (contohnya, role="region") y proporciona un nombre boleh diakses dengan aria-label o aria-labelledby. Tidak ada etika yang jelas dalam memajukan asistida dosa pengorbanan kebolehgunaan.
Limpahan-x y limpahan-y: cómo se combinan
La propiedad abreviada limpahan membenarkan establecer ambos ejes a la vez con uno o dos valores; cuando especificas dos, el primero es para limpahan-x dan yang kedua untuk limpahan-y. Ini adalah kemudahan yang boleh dibuat seperti evitar la barra mendatar dan membenarkan tatal menegak.
/* Evita barra horizontal, permite scroll vertical si hace falta */
.contenedor { overflow: hidden auto; }
Seperti recordatorio rápido, los valores disponibles untuk mengkonfigurasi el desbordamiento son: dilihat, tersembunyi, music, tatal ke y auto. A nivel de ejes, limpahan-x gobierna el flujo mendatar y limpahan-y el menegak, y puedes combinarlos según convenga.
"Tepi klip" y limpahan-klip-margin
Jika anda memilih limpahan: klip (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, que acepta una longitud untuk dejar “aire” antes de recortar.
.tarjeta {
overflow-y: clip; /* cortar sin permitir scroll */
overflow-clip-margin: 8px; /* recorta 8px por fuera del padding */
}
Ingat klip tiada penciptaan konteks nuevo de formateo. Jika anda memerlukan aislamiento (contohnya, para gestionar floats atau contener márgenes colapsados), combina clip con paparan: aliran-akar y así consigues el mismo efecto de contención que aportan auto/scroll/hidden.
Perlukan dimensi eksplisit
Untuk merakamkan tatal aparezcan de verdad, elemen perlu satu altura establecida (ketinggian o maks-tinggi) en el eje de bloque, o su equivalente logico saiz blok/saiz blok maks; jika tidak, el contenedor crecerá con el contenido y el desbordamiento no se activará.
En susun atur mendatar (contohnya, karusel), tentukan lebar/lebar maksimum o saiz sebaris/saiz-sebaris maks untuk forzar el desbordamiento en el eje X; también puedes usar ruang putih: nowrap para impedir los saltos de línea y provocar que el contenido exceda el ancho disponible.
Evitar la barra horizontal por pseudo-elementos or sombras
Un caso real muy habitual: un pseudo-elemento ::selepas que flota hacia la derecha, o una sombra alargada, sobrepasa el contenedor y activa la barra mendatar en un element que ya tiene overflow-y. Esto sucede porque, al convertirse en contenedor de scroll, el motor considera el área desbordada for el eje opuesto.
Penyelesaian biasa: aplica overflow-x: tersembunyi en el contenedor desplazable; controla el tamaño y posición del pseudo-elemento (hlm. ej., con mengubah en lugar de position absoluta si procede); o acota con klip/laluan klip si buscas un recordte tajante. Cualquiera de estas estrategias evita el tatal mendatar indeseado pengorbanan dosa el menegak.
Demostración de resultados con cada valor
El siguiente bloque muestra cómo cambian la visibility y las barras con los distintos valores de limpahan-y, todos con la misma altura máxima untuk forzar el desbordamiento menegak:
<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; }
Perhatikan bahawa tatal siempre muestra la barra menegak, mientras que auto solo lo hace cuando el texto excede la altura. En hidden, el contenido sobrante no se ve but sigue estando ahí; dalam klip, arahan tidak wujud satu melalui desplazamiento, ini adalah quiera con código.
Impresión y contenido desbordado
Un detalle menos conocido: con limpahan: tatal, algunos motores de impresion pueden acabar imprimiendo el contenido desbordado aunque no quepa en pantalla. Jika anda ingin mengeksport PDF atau kertas, baca dan tentukan pilihan anda tersembunyi atau bahkan music para evitar salidas inesperadas.
Keserasian entre navegadores
Sifat-sifatnya limpahan, limpahan-x y limpahan-y gozan de soporte sólido en los navegadores modernos desde hace muchas versiones. El valor music y su compañera overflow-clip-margin pertenecen a especificaciones más recientes, but su adopción actual es amplia y crece con cada lanzamiento; comprueba las matrices de compatibilidad si apuntas and entornos antiguos.
En cuanto al foco de contenedores desplazables, recuerda la peculiaridad: Firefox dan Chrome 132+ los hacen focuseables por defecto; para el resto, añade tabindex=”0″ manual y un rol/nombre accesible for un experiencia consistente.
Buenas prácticas de maquetación
Tiada perkara yang perlu dilakukan dalam senarai senarai: gabungan propiedades para pencegahan desplazamientos indeseados dan memastikan kestabilan visual. Aquí van unas pautas que funcionan muy bien en producción.
-
Tentukan dimensi: tinggi dosa/tinggi maks o saiz blok, el contenedor crecerá y no verás el efecto de limpahan-y.
-
Añade overflow-x: tersembunyi cuando menggunakan limpahan-y, salvo que memerlukan tali pinggang dan pendakap mendatar. Evitas barras laterales provocadas por sombras, bordes o pseudo-elementos.
-
Prefiee auto frente tatal jika anda ingin melihat barra aparezca solo cuando haga falta, dan tatal dimensi buscas estables de layout sin “saltos” oleh aparición/desaparición de scrollbars.
-
Usa clip cuando quieras recorde duro (sin rutas de desplazamiento), y combínalo con paparan: flow-root si need contención del flujo.
Relación con el DOM y API útiles
Dalam JavaScript, el ekspone DOM melimpahY como propiedad de estilo, y puedes inspeccionar/ajustar el state del element: element.style.overflowY y getComputedStyle(element).overflowY. Además, para desplazar contenidos usa tatal Atas y tatalKe(), 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 jadual hacia un element oculto dentro de un contenedor hidden/auto puede hacer que el navegador tatal secara automatik para ponerlo en vista; es una forma legítima de desplazamiento programático, útil for mejorar la navegación con teclado.
Tabla mental rápida de opciones
Untuk tenerlo claro de un vistazo: dilihat deja que todo sobresalga; tersembunyi rekod dan membenarkan tatal program; music tatal rekod dan tiada kebenaran; tatal ke recorta tetapi siempre muestra barras; y auto solo muestra barras cuando procede. Y recuerda que tiada boleh dilihat/klip crea contexto de formateo, vital para rendimiento con terapung.
Contoh de combinación por ejes
Dos patrones que verás constantemente: permitir skrol menegak dosa barra mendatar, y recortar en un eje con clip mientras el otro se desplaza automá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 */
}
Sepuluh pembentangan las reglas de interacción: si un eje usa un valor distinto de visible/clip y el otro pone visible, ese visible se tingkatkan kereta. Con clip sucede algo parecido: si el otro eje no es visible ni clip, el klip actúa como tersembunyi.
Kes penggunaan biasa
En antara muka moden, limpahan-y ia tidak dapat ditafsirkan untuk kotak sembang, panel penapis, menu largo, log atau senarai dan acotada. Sebagai pelengkap dengan cabeceras pegajosas y footers dentro del contenedor, y suele acompañarse de limpahan-x: tersembunyi para evitar barras laterales.
En diseños con tarjetas o modales, puedes alternar entre auto (para no mostrar la barra si no hace falta) y tatal ke (para estabilizar el ancho cuando aparecería la barra durante la carga). Si el modal debe recortar partes decorativas, music evita interacciones y ahorra cálculos.
Kesilapan biasa dan cara mengelakkannya
El fallo más repetido es declarar limpahan-y sin altura y esperar una barra que nunca llega; tentukan ketinggian o ketinggian maks/saiz blok. El segundo ialah olvidarse del eje mendatar: siempre valora limpahan-x en paralelo, sobre todo si usas sombras or pseudo-elementos.
Un tercero es no considerar kemudahan: contenedores desplazables sin foco de teclado o sin nombre accesible complican la vida a usuarios con lector de pantalla. Añade tabindex, peranan y aria-label cuando no sea focuseable por defecto.
Recursos relacionados
Jika perlu, semak semula tutorial umum de desbordamiento dalam CSS y la rujukan del DOM untuk overflowY en elemen. Estas páginas cubren desde fundamentos hasta peculiaridades finas de implementación y compatibilidad.
Dominar overflow-y implica 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, akses dan kombinasi dengan limpahan-x, es sencillo lograr paneles fluidos, sin barras imprevistas y con un desplazamiento suave tanto for usuarios como para skrip.