What is Auto-Height?

Auto-Height is a very handy feature provided by Cycle2 which manages a slideshow container's height. In order to achieve a slideshow effect, slides must be positioned absolutely within their parent so they can be stacked on top each other. However, this causes the parent element to collapse into a zero-height element because absolutely postioned elements do not participate in the normal flow of the document.

This behavior is not a problem is you assign a specific height to your slideshow container via CSS, and typically this is what is done. However, if you wish to have a fluid-width slideshow then assigning a fixed height in problematic. Enter Cycle2's auto-height feature. Cycle2 provides two ways of managing the container's height in a way that facilitates simple, fluid-width designs.

By leveraging Cycle2's auto-height feature you can create fluid-width slideshows with simply style rules like this:

.cycle-slideshow { width: 50% }
.cycle-slideshow img { width: 100%; height: auto }

If you want your slideshow to be fluid-width do not assign the container or the slides a specific height.

The auto-height feature does not control the height of the slides, just the container. If your slides are images which have fixed dimensions declared in the markup, such as <img width="200" height="150" ...>, then you will need to either remove those dimension attributes or override them in CSS if wish to use this feature.

Sentinel

The default auto-height behavior is to use a sentinel slide. A sentinel slide is a clone of one of the slideshow's actual slides which is prepended into the slideshow container and given styles of { position: static; visibility: hidden }. This prevents the clone from being visible but also causes the container element to expand in fit the sentinel's size, which is what is desired.

By default, the slideshow's first slide is cloned as a sentinel. You can choose a different slide by setting the data-cycle-auto-height attribute to the zero-based index of the slide to use. Alternatively, you can set the attribute value to the string "calc" and Cycle2 will calculate the tallest slide and use it as the sentinel.

The example below, and most of the demos on this site, shows the default auto-height behavior in action. If you view the DOM using a developer tool you'll see the sentinel slide (it's the first slide in the container); however it is never visible and does not participate in the slide rotation. It's sole purpose is to manage the container height.

Ratio

An alternative to using a sentinel slide for height management is to provide a width:height ratio. This is done by setting the data-cycle-auto-height attribute to a ratio string. For example, if your slideshow contains images that are 600 pixels wide and 400 pixels tall, you can enforce this ratio like this: data-cycle-auto-height="600:400". Since this is just a ratio it's not necessary to provide cycle with the actual slide dimensions, so the declaration could be simplified to data-cycle-auto-height="3:2". If your images are square then a simple data-cycle-auto-height="1:1" will get the job done.

The example below sets the following attribute: data-cycle-auto-height="4:3". If you view the DOM using a developer tool you'll see there is no sentinel slide, yet this slideshow maintains it's height as you resize the page, just as the previous example.

Disable Auto-Height

If you do not wish to have Cycle2 provide any auto-height capabilities, simply set the data-cycle-auto-height attribute value to false and give your slideshow container an explicit height via CSS. The example below shows a slideshow with data-cycle-auto-height=false. Since there is no style rule on this page that provides a height for the slideshow container you can see that its height collapses to zero and the text below moves up.

This text should be below the slideshow, but it's not. This is what Cycle2's auto-height feature fixes. Have a nice day.

Dynamic Container Sizing

There have been numerous requests for a way to resize the container based on the height of the current slide. See the Container Resizing page for instructions on how to achieve this functionality.