smastrom/vue-collapsed

Overflow hidden on default slot prevents from setting correct height on element

oleh-selivanov opened this issue · 4 comments

Hi, I am trying to create Collapse which contains to parts:

  1. Div with non scrollable content
  2. Div with scrollable content, that should have height of 100% of expanded collapse

I have to set overflow: hidden to all items scrollable content is nested in, but setting overflow: hidden to top item inside collapse make it always 0px height. Maybe I missed something. Thanks in advance

<Collapse>
 <div class="flex flex-col h-full overflow-hidden">
  // This is non scrollable
  <div>...</div>

  // This is scrollable
  <div class="overflow-auto h-full flex flex-col">...</div>
 <div>
</Collapse>

Hi @oleh-selivanov, I can definitely look into it but I would kindly need you to create a reproduction on Stackblitz.

No problem, gonna share it today

Hi @oleh-selivanov, sorry for getting back now but I've been a bit more busy than usual and thank you for providing the reproduction.

I played a bit with it and yeah, overflow: hidden on a direct child causes the scrollHeight property of the parent (Collapse) to always be equal to 0 even multiple frames after removing display: none from it. That's why the collapse is not expanding nor collapsing as its "expanded" height is expected to be 0.

While I'm still not sure why those DOM APIs acts like this when this occurs, I figured that since this is a very edge case caused by the content (and not by the package) and that it can easily be worked-around (by setting a specific height on the direct child and then overflow: hidden on the next child, for example), I won't implement any hacky solution in vue-collapsed itself that takes care of this. This won't be fair for all the people that uses this package daily and would also push a bit too far its scope.

However, what I can do and will do in the PR I'm merging is that everytime this occurs, vue-collapsed will force the expansion of the collapse container (without playing any transition) so that nobody will ever get stuck in a situation like yours and will actually be able to see the content, edit and test it.

Thank you again for raising the issue and I'll hope you'll keep enjoying this package! Cheers!