Bug 1512066 - Make <input type=range> min-content size the same as its max-content size (not zero). r=jwatt

This commit is contained in:
Mats Palmgren 2018-12-11 22:56:00 +01:00
Родитель 02d066656d
Коммит d62eb86e96
4 изменённых файлов: 188 добавлений и 3 удалений

Просмотреть файл

@ -4907,8 +4907,9 @@ inline static bool FormControlShrinksForPercentISize(nsIFrame* aFrame) {
}
LayoutFrameType fType = aFrame->Type();
if (fType == LayoutFrameType::Meter || fType == LayoutFrameType::Progress) {
// progress and meter do have this shrinking behavior
if (fType == LayoutFrameType::Meter || fType == LayoutFrameType::Progress ||
fType == LayoutFrameType::Range) {
// progress, meter and range do have this shrinking behavior
// FIXME: Maybe these should be nsIFormControlFrame?
return true;
}

Просмотреть файл

@ -741,7 +741,7 @@ LogicalSize nsRangeFrame::ComputeAutoSize(
}
nscoord nsRangeFrame::GetMinISize(gfxContext* aRenderingContext) {
return nscoord(0);
return GetPrefISize(aRenderingContext);
}
nscoord nsRangeFrame::GetPrefISize(gfxContext* aRenderingContext) {

Просмотреть файл

@ -0,0 +1,99 @@
<!DOCTYPE HTML>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html><head>
<meta charset="utf-8">
<title>Reference: type=range intrinsic size</title>
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1512066">
<style>
html,body {
color:black; background-color:white; font:16px/1 monospace;
}
.flex {
display: inline-flex;
width: 0;
border: 1px solid;
justify-items:start;
}
.flex2 {
display: inline-flex;
border: 1px solid;
justify-items:start;
}
.grid {
display: inline-grid;
grid: auto / 0;
border: 1px solid;
justify-items:start;
}
.grid2 {
display: inline-grid;
border: 1px solid;
justify-items:start;
}
.ib {
display: inline-block;
width: 0;
border: 1px solid;
justify-items:start;
}
input {
width: -moz-max-content;
width: max-content;
min-width: 0;
}
input.min {
min-width: -moz-min-content;
min-width: min-content;
}
input.mbp0 {
margin-left: 0;
margin-right: 0;
padding: 0;
border: 0;
}
</style>
</head>
<body>
<div class="flex"><input type="range" class="min"></div><br>
<div class="flex"><input type="range" style="width:0"></div><br>
<div class="flex"><input type="range" class="min"></div><br>
<div class="flex"><input type="range" class="min"></div><br>
<div class="flex"><input type="range" class="min"></div><br>
<br>
<div class="flex2"><input type="range"></div>
<div class="flex2" style="width:3px"><input type="range" style="width:3px" class="mbp0"></div>
<div class="flex2" style="width:30px"><input type="range" class="mbp0"></div>
<div class="flex2"><input type="range"></div>
<div class="flex2"><input type="range"></div>
<div class="flex2"><input type="range"></div>
<div class="flex2"><input type="range"></div>
<br>
<div class="grid"><input type="range" style="width:0"></div><br>
<div class="grid"><input type="range" style="width:0"></div><br>
<div class="grid" style="justify-items:start"><input type="range"></div><br>
<div class="grid2"><input type="range"></div>
<div class="grid2"><input type="range" style="min-width:0"></div>
<div class="grid2" style="width:3px"><input type="range" style="width:3px" class="mbp0"></div>
<div class="flex2" style="width:30px"><input type="range" class="mbp0"></div>
<div class="flex2" style="width:30px"><input type="range" class="mbp0"></div>
<div class="grid2" style="justify-items:start"><input type="range"></div>
<br>
<div class="ib"><input type="range"></div><br>
<div class="ib"><input type="range"></div><br>
<input type="range">
<input type="range"
</body>
</html>

Просмотреть файл

@ -0,0 +1,85 @@
<!DOCTYPE HTML>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html><head>
<meta charset="utf-8">
<title>Test: type=range intrinsic size</title>
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1512066">
<link rel="match" href="range-intrinsic-size-ref.html">
<style>
html,body {
color:black; background-color:white; font:16px/1 monospace;
}
.flex {
display: inline-flex;
width: 0;
border: 1px solid;
}
.flex2 {
display: inline-flex;
border: 1px solid;
}
.grid {
display: inline-grid;
grid: auto / 0;
border: 1px solid;
}
.grid2 {
display: inline-grid;
border: 1px solid;
}
.ib {
display: inline-block;
width: 0;
border: 1px solid;
}
input.mbp0 {
margin-left: 0;
margin-right: 0;
padding: 0;
border: 0;
}
</style>
</head>
<body>
<div class="flex"><input type="range"></div><br>
<div class="flex"><input type="range" style="min-width:0"></div><br>
<div class="flex" style="justify-items:start"><input type="range"></div><br>
<div class="flex" style="-webkit-box-pack: start"><input type="range"></div><br>
<div class="flex" style="-webkit-box-pack: start; justify-content: flex-start;"><input type="range"></div><br>
<br>
<div class="flex2"><input type="range"></div>
<div class="flex2" style="width:3px"><input type="range" style="min-width:0" class="mbp0"></div>
<div class="flex2" style="width:30px"><input type="range" style="min-width:0" class="mbp0"></div>
<div class="flex2"><input type="range" style="min-width:0"></div>
<div class="flex2" style="justify-items:start"><input type="range"></div>
<div class="flex2" style="-webkit-box-pack: start"><input type="range"></div>
<div class="flex2" style="-webkit-box-pack: start; justify-content: flex-start;"><input type="range"></div>
<br>
<div class="grid"><input type="range"></div><br>
<div class="grid"><input type="range" style="min-width:0"></div><br>
<div class="grid" style="justify-items:start"><input type="range"></div><br>
<div class="grid2"><input type="range"></div>
<div class="grid2"><input type="range" style="min-width:0"></div>
<div class="grid2" style="width:3px"><input type="range" style="min-width:0" class="mbp0"></div>
<div class="grid2" style="width:30px"><input type="range" style="min-width:0" class="mbp0"></div>
<div class="grid2" style="grid:auto/30px"><input type="range" class="mbp0"></div>
<div class="grid2" style="justify-items:start"><input type="range"></div>
<br>
<div class="ib"><input type="range"></div><br>
<div class="ib"><input type="range" style="min-width:0"></div><br>
<input type="range" style="width:-moz-min-content; width:min-content;">
<input type="range" style="width:-moz-max-content; width:max-content;">
</body>
</html>