-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Expand file tree
/
Copy pathflexbox-min-height-auto-003.html
More file actions
104 lines (95 loc) · 4.22 KB
/
Copy pathflexbox-min-height-auto-003.html
File metadata and controls
104 lines (95 loc) · 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<!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 & 'overflow' interaction</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">
<!--
This testcase checks how "overflow-y" impacts the sizing behavior of flex
items with "min-height:auto" (the new initial value for "min-height").
In particular, the flex-item-specific "min-height:auto" behavior is
supposed to be disabled (e.g. we end up with min-height:0) when
"overflow-y" is non-"visible".
-->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.flexbox {
display: flex;
flex-direction: column;
height: 30px; /* Shrink flex items below 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: 40px;
height: 80px;
}
.yvisible { overflow-y: visible; }
.yhidden { overflow-y: hidden; }
.yscroll { overflow-y: scroll; }
.yauto { overflow-y: auto; }
</style>
</head>
<body>
<!-- min-height:auto should prevent shrinking below intrinsic height when
the flex item has "overflow-y: visible", but not for any other
overflow-y values. -->
<div class="flexbox" id="visible"><div class="yvisible"><div></div></div></div>
<div class="flexbox" id="hidden"><div class="yhidden"><div></div></div></div>
<div class="flexbox" id="scroll"><div class="yscroll"><div></div></div></div>
<div class="flexbox" id="auto"><div class="yauto"><div></div></div></div>
<script>
function verticalScrollbarWidth() {
const probe = document.createElement("div");
probe.style.cssText =
"position:absolute;visibility:hidden;width:100px;height:100px;overflow-y:scroll;";
document.body.appendChild(probe);
const w = probe.offsetWidth - probe.clientWidth;
probe.remove();
return w;
}
const SCROLLBAR = verticalScrollbarWidth();
// Flex item border-box height: 80px content + 2*2px border = 84px.
const INTRINSIC_HEIGHT = 84;
// Shrunk to fit the 30px container.
const SHRUNK_HEIGHT = 30;
// Flex item border-box width without scrollbar gutter:
// 40px content + 2*2px border = 44px.
const BASE_WIDTH = 44;
test(() => {
const item = document.querySelector("#visible > *");
assert_equals(item.offsetHeight, INTRINSIC_HEIGHT, "offsetHeight");
assert_equals(item.offsetWidth, BASE_WIDTH, "offsetWidth");
}, "overflow-y:visible: min-height:auto holds; width has no scrollbar gutter");
test(() => {
const item = document.querySelector("#hidden > *");
assert_equals(item.offsetHeight, SHRUNK_HEIGHT, "offsetHeight");
assert_equals(item.offsetWidth, BASE_WIDTH, "offsetWidth");
}, "overflow-y:hidden: min-height:auto resolves to 0; no scrollbar gutter");
test(() => {
const item = document.querySelector("#scroll > *");
assert_equals(item.offsetHeight, SHRUNK_HEIGHT, "offsetHeight");
assert_equals(item.offsetWidth, BASE_WIDTH + SCROLLBAR, "offsetWidth");
assert_equals(item.scrollWidth, item.clientWidth, "no horizontal overflow");
}, "overflow-y:scroll: min-height:auto resolves to 0; width includes scrollbar gutter");
test(() => {
const item = document.querySelector("#auto > *");
assert_equals(item.offsetHeight, SHRUNK_HEIGHT, "offsetHeight");
assert_equals(item.offsetWidth, BASE_WIDTH + SCROLLBAR, "offsetWidth");
assert_equals(item.scrollWidth, item.clientWidth, "no horizontal overflow");
}, "overflow-y:auto: min-height:auto resolves to 0; width includes scrollbar gutter");
</script>
</body>
</html>