<?xml version="1.0" encoding="UTF-8"?>
<!--
     Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/
-->
<!-- Reference case for align-items / align-self behavior, using blocks in
     place of flex items and using float and width keywords to emulate the
     align-items / align-self properties. -->
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>CSS Reftest Reference</title>
    <link rel="author" title="Mihir Iyer" href="mailto:miyer@mozilla.com"/>
    <style>
      .flexbox {
        border: 1px dashed blue;
        width: 200px;
        float: left;
        font-size: 10px;
        direction: rtl;
      }

      .flex-start, .flex-end, .center, .baseline, .stretch, .self-start, .self-end {
        clear: both;
        margin:       1px 2px 3px 4px;
        border-width: 2px 3px 4px 5px;
        padding:      3px 4px 5px 6px;
        border-style: dotted;
      }

      div.big {
        font-size: 20px;
        width: 50px;
      }

      /* Classes for each of the various align-self values */
      .flex-start {
        background: lime;
        float: right;
      }
      .flex-end {
        background: orange;
        float: left;
      }
      <!-- We center shrinkwrapped text by putting it into an inline-block, and
           then wrapping that inline-block in a helper-div that has
           "text-align:center" set. -->
      .centerParent {
        text-align: center;
      }
      .center {
        background: lightblue;
        display: inline-block;
        text-align: right; /* Keep parent's centering from tweaking my text */
      }
      .baseline {
        background: teal;
        float: right;
      }
      .stretch {
        background: pink;
      }
      .self-start {
        background: yellow;
        float: right;
      }
      .self-end {
        background: purple;
        float: left;
      }
      .clearFloats { clear: both }
   </style>
  </head>
  <body>
    <div class="flexbox">
      <div class="flex-start">start</div>
      <div class="flex-start big">a b c d e f</div>
      <div class="flex-end">end</div>
      <div class="flex-end big">a b c d e f</div>
      <div class="clearFloats"></div>
      <div class="centerParent">
        <div class="center">center</div>
      </div>
      <div class="centerParent">
        <div class="center big">a b c d e f</div>
      </div>
    </div>
    <div class="flexbox">
      <div class="baseline">base</div>
      <div class="baseline big">abc</div>
      <div class="clearFloats"></div>
      <div class="stretch">stretch</div>
      <!-- Force a 3px + 1px = 4px margin between this and the previous div
           (to thwart the effects of margin-collapsing). This is the only
           place we need this hack, because everywhere else in this test
           we use floats or inline-blocks, whose margins don't collapse. -->
      <div class="stretch big" style="margin-top: 4px">a b c d e f</div>
    </div>
    <div class="flexbox">
      <div class="self-start">self-start</div>
      <div class="self-start big">a b c d e f</div>
      <div class="self-end">self-end</div>
      <div class="self-end big">a b c d e f</div>
    </div>
  </body>
</html>
