.#{$prefix}virtualscroller {
    overflow: hidden;
    position: relative;

    .#{$prefix}scroller-inner {
        // the primary function of this element is to act as a wrapper around its content to
        // determine the content's size.  There are several possible ways to achieve this,
        // so first, the ones we tried that didn't work, and the reasons why:
        //
        // 1. display:table - works everywhere except firefox.  In firefox, absolutely positioned
        // children of a display:table element do not contribute to its scrollWidth/scrollHeight
        // and so we cannot use the element to determine the true size of the content.
        //
        // 2. display:table-cell - should work similarly to display:table in that it shrink wraps
        // the content in both directions, and it works as expected with regard to scrollWidth/
        // scrollHeight and absolutely positioned children, but it must be a child of a
        // display:table element in order for min-width/min-height specified as percentages
        // to work (we use min-width/min-height:100% to ensure this element at least fills
        // its container)
        //
        // 3. display:inline-block - does everything we need it to do, except since it is
        // an inline element, its sizing and spacing are affected by line-height, font-size
        // and vertical-align.  We can work around these issues by setting line-height:0,
        // font-size:0, and vertical-align:top.  But this has undesirable side-effects because
        // all three of these properties are inherited by child elements and we do not want
        // the presence of a scroller to change the styling of contained children.
        //
        // The solution - float:left
        // - It shrink wraps the contents in both directions
        // - Being a block element, its scrollWidth/Height are affected by absolutely positioned
        //   children
        // - It can act as a container for child elements without affecting their styling
        float: left;

        // position:relative ensures absolutely positioned children are positioned correctly
        position: relative;

        // https://sencha.jira.com/browse/EXTJSIV-12773
        // Scroller must not cause width of block items to shrink.
        // Must always be at least 100% of component width.
        min-width: 100%;
        min-height: 100%;
    }
}
