.scrollbox {
overflow: auto;
width: 200px;
max-height: 200px;
margin: 50px auto;
background:
/* Shadow covers */
linear-gradient(white 30%, rgba(255,255,255,0)),
linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,
/* Shadows */
radial-gradient(50% 0, farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)),
radial-gradient(50% 100%,farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%;
background:
/* Shadow covers */
linear-gradient(white 30%, rgba(255,255,255,0)),
linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,
/* Shadows */
radial-gradient(farthest-side at 50% 0, rgba(0,0,0,.2), rgba(0,0,0,0)),
radial-gradient(farthest-side at 50% 100%, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%;
background-repeat: no-repeat;
background-color: white;
background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;
/* Opera doesn't support this in the shorthand */
background-attachment: local, local, scroll, scroll;
}
<div class="scrollbox">
<ul>
<li>Not enough content to scroll</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
<div class="scrollbox">
<ul>
<li>Ah! Scroll below!</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>The end!</li>
<li>No shadow there.</li>
</ul>
</div>
El elemento puede desbordarse verticalmente, horizontalmente o ambos. Esta función le devolverá un valor booleano si el elemento DOM se desborda:
Mostrar fragmento de código
Ejemplo ES6:
fuente
$("#element").overflown()
):$.fn.overflown=function(){var e=this[0];return e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth;}
element.addEventListener ("overflow", () => log( "overflow" ), false);
Referencia: evento de desbordamientoEn comparación
element.scrollHeight
conelement.clientHeight
debería hacer la tarea.A continuación se muestran las imágenes de MDN que explican Element.scrollHeight y Element.clientHeight.
fuente
Hice un codepen multiparte demostrando las respuestas anteriores (por ejemplo, usando el desbordamiento oculto y la altura) pero también cómo expandiría / colapsaría los elementos desbordados
Ejemplo 1: https://codepen.io/Kagerjay/pen/rraKLB ( Ejemplo realmente simple, sin javascript, solo para recortar elementos desbordados)
Ejemplo 2: https://codepen.io/Kagerjay/pen/LBErJL (el controlador de eventos individuales muestra más / showless en elementos desbordados)
Ejemplo 3: https://codepen.io/Kagerjay/pen/MBYBoJ (controlador de eventos múltiples en muchos mostrar más / mostrar menos en elementos desbordados)
También he adjuntado el ejemplo 3 a continuación , uso Jade / Pug, por lo que podría ser un poco detallado. Sugiero revisar los codepens que he hecho más fácil de entender.
fuente
¿Algo como esto: http://jsfiddle.net/Skooljester/jWRRA/1/ work? Simplemente verifica la altura del contenido y lo compara con la altura del contenedor. Si es mayor de lo que puede poner en el código para agregar un botón "Mostrar más".
Actualización: se agregó el código para crear un botón "Mostrar más" en la parte superior del contenedor.
fuente
Si está utilizando jQuery, puede intentar un truco: hacer un div externo con
overflow: hidden
un div interno con contenido. Luego use la.height()
función para verificar si la altura del div interno es mayor que la altura del div externo. No estoy seguro de que funcione, pero pruébalo.fuente
use js para verificar si el niño
offsetHeight
es más que los padres ... si es así, haga que los padres se desbordenscroll/hidden/auto
lo que quiera y tambiéndisplay:block
en el más div ..fuente
Puede verificar los límites relativos al desplazamiento principal.
Si pasa este elemento, le dirá si sus límites están completamente dentro de un contenedor y, por defecto, será el elemento primario de desplazamiento del elemento si no se proporciona un contenedor explícito. Usa
fuente
Otro problema que debe considerar es la falta de disponibilidad de JS. Piensa en el encantamiento progresivo o la degradación elegante. Yo sugeriría:
fuente
Aquí hay un violín para determinar si un elemento se ha desbordado usando un contenedor wrap con overflow: hidden y JQuery height () para medir la diferencia entre el contenedor y un contenido interno div.
Fuente: Marcos y extensiones en jsfiddle.net
fuente
Esta es la solución jQuery que funcionó para mí.
clientWidth
etc. no funcionó.Si esto no funciona, asegúrese de que el elemento primario de los elementos tenga el ancho deseado (personalmente, tuve que usarlo
parent().parent())
.position
Es relativo al elemento primario. También lo he incluidoextra_width
porque mis elementos ("etiquetas") contienen imágenes que requieren poco tiempo para carga, pero durante la llamada a la función tienen ancho cero, lo que estropea el cálculo. Para evitarlo, utilizo el siguiente código de llamada:Espero que esto ayude.
fuente
Esto me funcionó. Gracias.
fuente
La alternativa de jquery a la respuesta es usar la tecla [0] para acceder al elemento sin formato como este:
fuente
He extendido Element por razones de encapsulación. De la respuesta micnic.
Úselo así
fuente