7a494caed78fcf6c7e1c4136a90cd15cb59405be
[WebKit-https.git] / LayoutTests / css3 / flexbox / flex-align.html
1 <!DOCTYPE html>
2 <html>
3 <style>
4 body {
5     margin: 0;
6 }
7 .flexbox {
8     width: 600px;
9     display: -webkit-flexbox;
10     background-color: #aaa;
11     position: relative;
12 }
13 .flexbox > div {
14     border: 0;
15 }
16
17 .flexbox :nth-child(1) {
18     background-color: blue;
19 }
20 .flexbox :nth-child(2) {
21     background-color: green;
22 }
23 .flexbox :nth-child(3) {
24     background-color: red;
25 }
26 .flexbox :nth-child(4) {
27     background-color: yellow;
28 }
29 .flexbox :nth-child(5) {
30     background-color: purple;
31 }
32 .flexbox :nth-child(6) {
33     background-color: orange;
34 }
35 .flexbox :nth-child(7) {
36     background-color: lime;
37 }
38 @font-face {
39     font-family: test;
40     src: url(../../resources/Ahem.ttf);
41 }
42 </style>
43 <script>
44 if (window.layoutTestController)
45     layoutTestController.dumpAsText();
46 </script>
47 <script src="resources/flexbox.js"></script>
48 <body onload="checkFlexBoxen()">
49
50 <!-- stretch is the default flex-align so these flexitems should all have the same height. -->
51 <div class="flexbox">
52   <div data-expected-height="100" style="width: -webkit-flex(1 0 0);"></div>
53   <div data-expected-height="100" style="width: -webkit-flex(1 0 0); height: 100px"></div>
54   <div data-expected-height="100" style="width: -webkit-flex(1 0 0);"></div>
55 </div>
56
57 <div class="flexbox">
58   <div data-expected-height="60"  data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 60px; margin: auto 0;"></div>
59   <div data-expected-height="120" data-offset-y="0" style="width: -webkit-flex(1 0 0); margin: auto 0 0;"></div>
60   <div data-expected-height="120" data-offset-y="0" style="width: -webkit-flex(1 0 0); margin: auto 0;"></div>
61   <div data-expected-height="100" data-offset-y="10" style="width: -webkit-flex(1 0 0); height: 100px; margin: 10px 0;"></div>
62   <div data-expected-height="50" data-offset-y="20" style="width: -webkit-flex(1 0 0); height: 50px; margin: 20px 0 10px;"></div>
63   <div data-expected-height="90" data-offset-y="20" style="width: -webkit-flex(1 0 0); margin: 20px 0 10px;"></div>
64   <div data-expected-height="120" data-offset-y="0" style="width: -webkit-flex(1 0 0);">
65     <!-- Since no parent has a fixed height, this div shrink-wraps. -->
66     <div data-expected-height="0" style="height: 100%; background-color:black"></div>
67   </div>
68 </div>
69
70 <div class="flexbox" style="-webkit-flex-align: start">
71     <div data-expected-height="0" data-offset-y="0" style="width: -webkit-flex(1 0 0);"></div>
72     <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
73 </div>
74
75 <div class="flexbox" style="-webkit-flex-align: end">
76     <div data-expected-height="0" data-offset-y="100" style="width: -webkit-flex(1 0 0);"></div>
77     <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
78 </div>
79
80 <div class="flexbox" style="-webkit-flex-align: center">
81     <div data-expected-height="0" data-offset-y="50" style="width: -webkit-flex(1 0 0);"></div>
82     <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
83 </div>
84
85 <div class="flexbox" style="-webkit-flex-align: baseline">
86     <div data-expected-height="10" data-offset-y="90" style="width: -webkit-flex(1 0 0); line-height: 10px;"><div style="display:inline-block;"></div></div>
87     <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
88 </div>
89
90 <div class="flexbox" style="-webkit-flex-align: stretch">
91     <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0);"></div>
92     <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
93 </div>
94
95 <div class="flexbox" style="-webkit-flex-align: start">
96     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0); height: 100px;"></div>
97     <div data-expected-height="0" data-offset-y="0" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0);"></div>
98     <div data-expected-height="0" data-offset-y="0" style="-webkit-flex-item-align: start; width: -webkit-flex(1 0 0);"></div>
99     <div data-expected-height="0" data-offset-y="100" style="-webkit-flex-item-align: end; width: -webkit-flex(1 0 0);"></div>
100     <div data-expected-height="0" data-offset-y="50" style="-webkit-flex-item-align: center; width: -webkit-flex(1 0 0);"></div>
101     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); line-height: 10px;"><div style="display:inline-block;"></div></div>
102     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); margin: 20px; line-height: 10px;"><div style="display:inline-block;"></div></div>
103     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: stretch; width: -webkit-flex(1 0 0);"></div>
104 </div>
105
106 <div class="flexbox" style="-webkit-flex-align: end">
107     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0); height: 100px;"></div>
108     <div data-expected-height="0" data-offset-y="100" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0);"></div>
109     <div data-expected-height="0" data-offset-y="0" style="-webkit-flex-item-align: start; width: -webkit-flex(1 0 0);"></div>
110     <div data-expected-height="0" data-offset-y="100" style="-webkit-flex-item-align: end; width: -webkit-flex(1 0 0);"></div>
111     <div data-expected-height="0" data-offset-y="50" style="-webkit-flex-item-align: center; width: -webkit-flex(1 0 0);"></div>
112     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); line-height: 10px;"><div style="display:inline-block;"></div></div>
113     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); margin: 20px; line-height: 10px;"><div style="display:inline-block;"></div></div>
114     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: stretch; width: -webkit-flex(1 0 0);"></div>
115 </div>
116
117 <div class="flexbox" style="-webkit-flex-align: center">
118     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0); height: 100px;"></div>
119     <div data-expected-height="0" data-offset-y="50" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0);"></div>
120     <div data-expected-height="0" data-offset-y="0" style="-webkit-flex-item-align: start; width: -webkit-flex(1 0 0);"></div>
121     <div data-expected-height="0" data-offset-y="100" style="-webkit-flex-item-align: end; width: -webkit-flex(1 0 0);"></div>
122     <div data-expected-height="0" data-offset-y="50" style="-webkit-flex-item-align: center; width: -webkit-flex(1 0 0);"></div>
123     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); line-height: 10px;"><div style="display:inline-block;"></div></div>
124     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); margin: 20px; line-height: 10px;"><div style="display:inline-block;"></div></div>
125     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: stretch; width: -webkit-flex(1 0 0);"></div>
126 </div>
127
128 <div class="flexbox" style="-webkit-flex-align: baseline">
129     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: start; width: -webkit-flex(1 0 0); height: 100px;"></div>
130     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0); line-height: 10px;"><div style="display:inline-block;"></div></div>
131     <div data-expected-height="0" data-offset-y="0" style="-webkit-flex-item-align: start; width: -webkit-flex(1 0 0);"></div>
132     <div data-expected-height="0" data-offset-y="100" style="-webkit-flex-item-align: end; width: -webkit-flex(1 0 0);"></div>
133     <div data-expected-height="0" data-offset-y="50" style="-webkit-flex-item-align: center; width: -webkit-flex(1 0 0);"></div>
134     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); line-height: 10px;"><div style="display:inline-block;"></div></div>
135     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); margin: 20px; line-height: 10px;"><div style="display:inline-block;"></div></div>
136     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: stretch; width: -webkit-flex(1 0 0);"></div>
137 </div>
138
139 <div class="flexbox" style="-webkit-flex-align: stretch">
140     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0); height: 100px;"></div>
141     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: auto; width: -webkit-flex(1 0 0);"></div>
142     <div data-expected-height="0" data-offset-y="0" style="-webkit-flex-item-align: start; width: -webkit-flex(1 0 0);"></div>
143     <div data-expected-height="0" data-offset-y="100" style="-webkit-flex-item-align: end; width: -webkit-flex(1 0 0);"></div>
144     <div data-expected-height="0" data-offset-y="50" style="-webkit-flex-item-align: center; width: -webkit-flex(1 0 0);"></div>
145     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); line-height: 10px;"><div style="display:inline-block;"></div></div>
146     <div data-expected-height="10" data-offset-y="20" style="-webkit-flex-item-align: baseline; width: -webkit-flex(1 0 0); margin: 20px; line-height: 10px;"><div style="display:inline-block;"></div></div>
147     <div data-expected-height="100" data-offset-y="0" style="-webkit-flex-item-align: stretch; width: -webkit-flex(1 0 0);"></div>
148 </div>
149
150 <div class="flexbox" style="height: 100px;">
151   <div data-expected-height="50"  data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 50px;"></div>
152   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0);"></div>
153   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100%;">
154     <div data-expected-height="100" style="height: 100%; background-color:black"></div>
155   </div>
156 </div>
157
158 <div class="flexbox" style="height: 100px;">
159   <div data-expected-height="50"  data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 50px;"></div>
160   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0);"></div>
161 </div>
162
163 <div class="flexbox">
164   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 50px; margin: auto 0 0;"></div>
165   <div data-expected-height="70" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 70px; margin: 0 0 auto"></div>
166   <div data-expected-height="70" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 70px;"></div>
167   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
168 </div>
169
170 <div class="flexbox">
171   <div data-expected-height="0" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start;"></div>
172   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start; height: 50px;"></div>
173   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start; height: 50px; margin: auto 0"></div>
174   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start; height: 50px; margin: auto 0 0"></div>
175   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start; height: 50px; margin: 25px 0"></div>
176   <div data-expected-height="50" data-offset-y="20" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start; height: 50px; margin: 20px 0 10px;"></div>
177   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
178 </div>
179
180 <div class="flexbox">
181   <div data-expected-height="0" data-offset-y="100" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end;"></div>
182   <div data-expected-height="50" data-offset-y="50" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end; height: 50px;"></div>
183   <div data-expected-height="50" data-offset-y="50" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end; height: 50px; margin: auto 0"></div>
184   <div data-expected-height="50" data-offset-y="50" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end; height: 50px; margin: auto 0 0"></div>
185   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end; height: 50px; margin: 25px 0"></div>
186   <div data-expected-height="50" data-offset-y="40" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end; height: 50px; margin: 20px 0 10px;"></div>
187   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
188 </div>
189
190 <div class="flexbox">
191   <div data-expected-height="0" data-offset-y="50" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center;"></div>
192   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center; height: 50px;"></div>
193   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center; height: 50px; margin: auto 0"></div>
194   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center; height: 50px; margin: auto 0 0"></div>
195   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center; height: 50px; margin: 25px 0"></div>
196   <div data-expected-height="50" data-offset-y="30" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center; height: 50px; margin: 20px 0 10px;"></div>
197   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
198 </div>
199
200 <div class="flexbox">
201   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start; height: 50px; -webkit-writing-mode: vertical-rl;"></div>
202   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center; height: 50px; -webkit-writing-mode: vertical-rl;"></div>
203   <div data-expected-height="50" data-offset-y="50" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end; height: 50px; -webkit-writing-mode: vertical-rl;"></div>
204   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 50px; margin: auto 0; -webkit-writing-mode: vertical-rl;"></div>
205   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px; -webkit-writing-mode: vertical-rl;"></div>
206 </div>
207
208 <div class="flexbox">
209   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: start; height: 50px;"></div>
210   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center; height: 50px;"></div>
211   <div data-expected-height="50" data-offset-y="50" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: end; height: 50px;"></div>
212   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 50px; margin: auto 0"></div>
213   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0);"></div>
214   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
215 </div>
216
217 <div class="flexbox">
218   <div data-expected-height="20" data-offset-y="20" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline; height: 20px;"></div>
219   <!-- FIXME: This looks like it might be positioned 10 pixels too high due the margin-bottom. All the boxes should have their bottoms aligned I think. -->
220   <div data-expected-height="10" data-offset-y="20" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline; height: 10px; margin: 20px 0 10px;"></div>
221   <div data-expected-height="10" data-offset-y="30" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline; height: 10px; margin: 20px 0 0;"></div>
222   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
223 </div>
224
225 <div class="flexbox" style="font-family: test;">
226   <div id="baseline1" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline;">ahem</div>
227   <div id="baseline2" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline;"><img src="../../fast/replaced/resources/1x1-blue.png" style="height: 50px;"></div>
228   <div data-expected-height="50" data-offset-y="25" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: center;"><img src="../../fast/replaced/resources/1x1-blue.png" style="height: 50px; vertical-align: middle"></div>
229   <div id="baseline3" data-expected-height="50" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline;"><img src="../../fast/replaced/resources/1x1-blue.png" style="height: 50px; vertical-align: middle"></div>
230   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
231 </div>
232
233 <div class="flexbox" style="font-family: test;">
234   <div id="baseline4" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline;">ahem</div>
235   <div id="baseline5" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline;"><br><img src="../../fast/replaced/resources/1x1-blue.png" style="height: 50px;"></div>
236   <div data-expected-height="50" data-offset-y="0" style="width: -webkit-flex(1 0 0); -webkit-flex-item-align: baseline;"><img src="../../fast/replaced/resources/1x1-blue.png" style="height: 50px; vertical-align: middle"></div>
237   <div data-expected-height="100" data-offset-y="0" style="width: -webkit-flex(1 0 0); height: 100px;"></div>
238 </div>
239
240 <div id="results"></div>
241
242 <script>
243 function additionalBaselineChecks()
244 {
245     var baseline1 = document.getElementById("baseline1");
246     var baseline2 = document.getElementById("baseline2");
247     var baseline3 = document.getElementById("baseline3");
248     logIfFalse(baseline1.offsetTop + baseline1.offsetHeight == baseline2.offsetTop + baseline2.offsetHeight,
249                "baseline1 and baseline2 should have the same baseline.");
250     logIfFalse(baseline3.offsetTop < 25,
251                "baseline3 should be above the center flex-item-aligned item.");
252
253     var baseline4 = document.getElementById("baseline4");
254     var baseline5 = document.getElementById("baseline5");
255     logIfFalse(baseline4.offsetTop == baseline5.offsetTop,
256                "baseline4 and baseline5 should be top aligned with each other.");
257     logIfFalse(baseline4.offsetTop > 0,
258                "baseline4 and baseline5 should be below baseline6.");
259 }
260
261 function logIfFalse(condition, msg)
262 {
263     if (!condition)
264         document.getElementById("results").innerText += msg;
265 }
266
267 additionalBaselineChecks();
268 </script>
269
270 </body>
271 </html>