npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

expando

v0.0.1

Published

expand/collapse html elements

Readme

expando Build Status

expand/collapse html elements with variable height

why?

CSS height transitions are great for making collapsing widgets but they have one major shortcoming. They are unable to transition to/from height 0 and a variable height.

Historically, you could accomplish this functionality via jquery.slideToggle|Up|Down but this would use javascript to manipulate the height of the element instead of css for various reasons, better cross browser support being the major one.

Due to the current CSS height transition limitations, various "hacks" are nedded in order to make use of CSS height transitions. This module does those hacks, allowing you to use transition: height in your css.

how it works

To slide down

from a display: none state

The library first gets the current actual height of the element by setting display: block then reading the clientHeight and then setting the height to 0. All of this causes no display updates since js code never gives up execution. However, reading clientHeight does cause a reflow so that the proper height can be read without uncovering the element.

After setting height to 0, we force another reflow and then set the height to the clientHeight we read earlier. This will now trigger the transition from the current height 0 to the new known height (allowing css transitions to work).

We also listen on transition end events to then remove the fixed height we set in order to allow the element to flow as needed once it has been expanded.

To slide up

Sliding up is a bit easier. We read the current height. We then disable transtions (this is important due to some quirks in browsers). We set the height to 0 and wait for transition to end.

example

<div class="collapsible">
    <p>foo</p>
    <p>bar</p>
</div>
.collapsible {
    transition: height 1s ease;
    overflow-y: hidden;
}
var expando = require('expando');

var div = document.querySelector('.collapsible');

expando.collapse(div, function() {
    // callback when done!
});

api

collapse(HTMLElement [, function])

Collapse the html element to height 0. The speed and timing are determined by the transition you specify in your stylesheets.

expand(HTMLElement [, function])

Expand the html element from height 0. The speed and timing are determined by the transition you specify in your stylesheets.

supported browsers

Browsers with support for CSS transition animations (prefixed or not) are supported.

The test suite is run in IE 10+, Chrome 28+, Firefox, Opera, Safari.

tips

Make sure you don't forget to define the transition in your stylesheet. With a transition the library will fallback to instantly opening and closing.

Make sure that you don't forget overflow-y: hidden; in your stylesheet. The library will automatically handle this but it behaves better if you have it.

License

MIT