<!DOCTYPE html>
<!--
     Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
  <head>
    <meta charset="utf-8">
    <title>CSS Test: Testing min-height:auto</title>
    <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
    <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#min-size-auto">
    <link rel="match" href="flexbox-min-height-auto-001-ref.html">
<!--
     This testcase tests the used value of "min-height:auto" (the property's
     initial value) on flex items in a vertical flex container.

     It's supposed to resolve to the smallest of:
      a) The used 'flex-basis' (taken from 'height'), if 'flex-basis' is at its
         initial value.
      b) The computed 'max-height' property
      c) If there's no intrinsic aspect ratio: the item's min-content height.
      d) If there is an intrinsic aspect ratio: the item's height derived from
         the ratio & constraints in the other dimension.

    We measure what the used value is by putting flex items in a small flex
    container, which will shrink its items down to their min-height.

    This test checks for situations where we should resolve the min-height as
    (a), (b), or (c) above. Another test will check (d).
-->
    <style>
      .flexbox {
        display: flex;
        flex-direction: column;
        height: 1px;  /* No available space; shrink flex items to min-height */
        margin-right: 2px; /* (Just for spacing things out, visually) */
        float: left;
      }

      .flexbox > * {
        /* Flex items have purple border: */
        border: 2px dotted purple;
      }

      .flexbox > * > * {
        /* Flex items' contents are gray & fixed-size: */
        background: gray;
        width: 10px;
        height: 80px;
      }
    </style>
  </head>
  <body>
    <!-- Check for min-height:auto resolving correctly when the smallest
         candidate value is: -->
    <!-- *** (a) Used 'flex-basis' (from 'height') *** -->
    <!-- First, without definite max-height: -->
    <div class="flexbox">
      <div style="height: 50px"><div></div></div>
    </div>
    <!-- ...and now with definite (& large) 'max-height': -->
    <div class="flexbox">
      <div style="height: 50px; max-height: 120px;"><div></div></div>
    </div>
    <!-- ...and now with used 'flex-basis' being a calc expression:-->
    <div class="flexbox">
      <div style="height: calc(10% + 50px)"><div></div></div>
    </div>

    <!-- *** (b) The computed 'max-height' *** -->
    <!-- First, with a larger candidate 'flex-basis' value (from 'height') -->
    <div class="flexbox">
      <div style="height: 100px; max-height:50px"><div></div></div>
    </div>
    <!-- ...and now with a larger explicit 'flex-basis' value (which shouldn't
         be considered for 'min-height:auto' anyway) -->
    <div class="flexbox">
      <div style="flex-basis: 100px; max-height:50px"><div></div></div>
    </div>
    <!-- ...and now with a smaller explicit 'flex-basis' value (which shouldn't
         be considered for 'min-height:auto' anyway) -->
    <div class="flexbox">
      <div style="flex-basis: 10px; max-height:50px"><div></div></div>
    </div>

    <!-- *** (c) (no intrinsic aspect ratio) The min-content size *** -->
    <!-- First, with a larger candidate 'flex-basis' value (from 'height') -->
    <div class="flexbox">
      <div style="height: 100px"><div></div></div>
    </div>
    <!-- ...and now with a larger explicit 'flex-basis' value (which shouldn't
         be considered for 'min-height:auto' anyway) -->
    <div class="flexbox">
      <div style="flex-basis: 100px"><div></div></div>
    </div>
    <!-- ...and now with a smaller explicit 'flex-basis' value (which shouldn't
         be considered for 'min-height:auto' anyway) -->
    <div class="flexbox">
      <div style="flex-basis: 10px"><div></div></div>
    </div>
  </body>
</html>
