.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>
O elemento pode ser estourado verticalmente, horizontalmente ou ambos. Esta função retornará um valor booleano se o elemento DOM estiver excedido:
Mostrar snippet de código
Exemplo ES6:
fonte
$("#element").overflown()
):$.fn.overflown=function(){var e=this[0];return e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth;}
element.addEventListener ("overflow", () => log( "overflow" ), false);
Referência: evento overflowComparando
element.scrollHeight
comelement.clientHeight
deve fazer a tarefa.Abaixo estão as imagens do MDN explicando Element.scrollHeight e Element.clientHeight.
fonte
Fiz um codepen de várias partes demonstrando as respostas acima (por exemplo, usando overflow hidden e height), mas também como você expandiria / reduziria itens excedidos
Exemplo 1: https://codepen.io/Kagerjay/pen/rraKLB (Exemplo simples e real, sem javascript, apenas para cortar itens excedidos)
Exemplo 2: https://codepen.io/Kagerjay/pen/LBErJL (o manipulador de eventos único mostra mais / não mostra em itens excedidos)
Exemplo 3: https://codepen.io/Kagerjay/pen/MBYBoJ (Manipulador de eventos múltiplo em muitos mostra mais / mostra menos em itens excedidos)
Eu ligado exemplo 3 abaixo, assim , uso Jade / Pug por isso pode ser um pouco detalhado. Sugiro verificar os códigos que tornei mais fácil de entender.
fonte
Algo assim: http://jsfiddle.net/Skooljester/jWRRA/1/ funcionaria? Apenas verifica a altura do conteúdo e a compara com a altura do contêiner. Se for maior do que você pode inserir no código para adicionar um botão "Mostrar mais".
Atualização: foi adicionado o código para criar um botão "Mostrar mais" na parte superior do contêiner.
fonte
Se você estiver usando jQuery, tente um truque: faça div externa com
overflow: hidden
e div interna com conteúdo. Em seguida, use a.height()
função para verificar se a altura da div interna é maior que a altura da div externa. Não sei se funcionará, mas tente.fonte
use js para verificar se a criança
offsetHeight
é mais do que os pais. se for, faça com que os pais transbordemscroll/hidden/auto
o que quiser e tambémdisplay:block
nas div.fonte
Você pode verificar os limites em relação ao pai de deslocamento.
Se você passar esse elemento, ele informará se seus limites estão inteiramente dentro de um contêiner e assumirá o padrão do deslocamento pai do elemento se nenhum contêiner explícito for fornecido. Usa
fonte
Outra questão que você deve considerar é a indisponibilidade de JS. Pense em encantamento progressivo ou degradação graciosa. Eu sugeriria:
fonte
A seguir, um tutorial para determinar se um elemento foi estourado usando uma div de wrapper com overflow: hidden e JQuery height () para medir a diferença entre o wrapper e uma div de conteúdo interno.
Fonte: Estruturas e extensões em jsfiddle.net
fonte
Esta é a solução jQuery que funcionou para mim.
clientWidth
etc não funcionou.Se isso não funcionar, verifique se o pai dos elementos tem a largura desejada (pessoalmente, eu tive que usar
parent().parent())
.position
É relativo ao pai. Também incluíextra_width
porque meus elementos ("tags") contêm imagens que levam pouco tempo para serem usadas . load, mas durante a chamada de função eles têm largura zero, estragando o cálculo.Para contornar isso, eu uso o seguinte código de chamada:Espero que isto ajude.
fonte
Isso foi trabalhado para mim. Obrigado.
fonte
A alternativa jquery para a resposta é usar a tecla [0] para acessar o elemento bruto como este:
fonte
Estendi o Element por motivos de encapsulamento. Da resposta do micnic.
Use-o assim
fonte