WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 115248
[CSSRegions] Min-width and max-width for a region should support values other than length
https://bugs.webkit.org/show_bug.cgi?id=115248
Summary
[CSSRegions] Min-width and max-width for a region should support values other...
Mihnea Ovidenie
Reported
2013-04-26 05:21:29 PDT
Right now, code in RenderRegion::computePreferredLogicalWidths supports only length values. It should support other values like: percentage, calc or viewport relative
Attachments
Screenshot of firefox example
(8.02 KB, image/png)
2013-07-10 06:22 PDT
,
Chris
no flags
Details
Screenshot of chrome example
(6.69 KB, image/png)
2013-07-10 06:23 PDT
,
Chris
no flags
Details
Patch
(8.33 KB, patch)
2013-08-05 08:22 PDT
,
Anton Obzhirov
no flags
Details
Formatted Diff
Diff
Patch
(5.29 KB, patch)
2013-08-06 08:50 PDT
,
Anton Obzhirov
no flags
Details
Formatted Diff
Diff
Show Obsolete
(1)
View All
Add attachment
proposed patch, testcase, etc.
Anton Obzhirov
Comment 1
2013-06-11 08:52:17 PDT
I am going to try fixing this one.
Anton Obzhirov
Comment 2
2013-06-13 07:04:57 PDT
After playing with css region width, min-width, max-width properties it seems that the region width is calculated properly for other cases as well (percent, calculated, viewport relative, ...). I will double check it and add a new test.
Chris
Comment 3
2013-07-06 10:56:30 PDT
Seems that min-width: xx%; doesn't work when display: table; or display: table-cell; is set on the element, or parent element. See
http://www.martialartworld.co.uk/
for an example - the top menu items *should* be equal widths (min-width: 14%), but the percentage is ignored. Tested in Chrome 27.0.1453.116 and Chrome 30.0.1559.0 canary. [note:
http://www.martialartworld.co.uk/
is under development at the moment, but I've opened it up to viewing to demonstrate this issue, so the CSS is in a bit of a mess :-( ] Compare the menu viewed using Chrome to how it looks in Firefox 22.0 (latest release as of this date).
Mihnea Ovidenie
Comment 4
2013-07-07 23:08:13 PDT
(In reply to
comment #3
)
> Seems that > > min-width: xx%; > > doesn't work when > > display: table; > or > display: table-cell; > > is set on the element, or parent element. > > See
http://www.martialartworld.co.uk/
for an example - the top menu items *should* be equal widths (min-width: 14%), but the percentage is ignored. > > Tested in Chrome 27.0.1453.116 and Chrome 30.0.1559.0 canary. > > [note:
http://www.martialartworld.co.uk/
is under development at the moment, but I've opened it up to viewing to demonstrate this issue, so the CSS is in a bit of a mess :-( ] > > Compare the menu viewed using Chrome to how it looks in Firefox 22.0 (latest release as of this date).
Thanks for the info. Would you be willing to create a small html sample that reproduces the problem and upload it here?
Chris
Comment 5
2013-07-10 06:22:01 PDT
Created
attachment 206384
[details]
Screenshot of firefox example
Chris
Comment 6
2013-07-10 06:23:08 PDT
Created
attachment 206385
[details]
Screenshot of chrome example
Chris
Comment 7
2013-07-10 06:27:06 PDT
I have created a simple fiddle here:
http://jsfiddle.net/chrisjg/q7nhQ/
example HTML <nav role="navigation"> <ul class="nav menu"> <li class="item-1">short</li> <li class="item-2">a bit longer</li> <li class="item-3">this is a lot longer</li> <li class="item-4">short</li> </ul> </nav> ----------------- example CSS nav { font-size: 16px; letter-spacing: -0.5px; list-style: none outside none; } .nav, nav ul { display: table; margin: 0; width: 100%; } .nav { float: left; left: 0; position: relative; list-style: none outside none; margin-bottom: 1.42857rem; margin-left: 0; width: 400px; } li { border: 1px solid black; display: table-cell; height: 34px; min-width: 25%; text-align: center; vertical-align: middle; } ------- The important bits are .nav display: table; li display: table-cell; li min-width: 25%; It should result in 4 equally sized boxes, as in the firefox screenshot I have attached. But in chrome it auto-sizes each box to fit the content - as in the chrome screenshot I also attached. Hope this helps. Chris.
Anton Obzhirov
Comment 8
2013-07-10 08:24:34 PDT
Thanks! I will try convert to a ref test and fix the problem.
Anton Obzhirov
Comment 9
2013-08-01 07:07:47 PDT
(In reply to
comment #7
)
> I have created a simple fiddle here:
http://jsfiddle.net/chrisjg/q7nhQ/
> > example HTML > > <nav role="navigation"> > <ul class="nav menu"> > <li class="item-1">short</li> > <li class="item-2">a bit longer</li> > <li class="item-3">this is a lot longer</li> > <li class="item-4">short</li> > </ul> > </nav> > ----------------- > > example CSS > > nav { > font-size: 16px; > letter-spacing: -0.5px; > list-style: none outside none; > } > .nav, nav ul { > display: table; > margin: 0; > width: 100%; > } > .nav { > float: left; > left: 0; > position: relative; > list-style: none outside none; > margin-bottom: 1.42857rem; > margin-left: 0; > width: 400px; > } > > li { > border: 1px solid black; > display: table-cell; > height: 34px; > min-width: 25%; > text-align: center; > vertical-align: middle; > } > > ------- > The important bits are > .nav display: table; > li display: table-cell; > li min-width: 25%; > > It should result in 4 equally sized boxes, > as in the firefox screenshot I have attached. But in chrome it auto-sizes each box to fit the content - as in the chrome screenshot I also attached. > > Hope this helps. > > Chris.
Hi, Checked the example html now - I think it is probably intended for another bug or new bug should be created for this. From what I see it doesn't use CSS regions. Chris, could you confirm that - may be I am missing something.
Anton Obzhirov
Comment 10
2013-08-05 08:22:33 PDT
Created
attachment 208126
[details]
Patch
Anton Obzhirov
Comment 11
2013-08-05 08:32:23 PDT
Submitted new test to test min/max width cases for regions - the test is pass. There is an issue with red line in the last region which in my opinion is not related to this bug but should be investigate in a new one. If is ok I will create a new bug for the red line issue.
Mihnea Ovidenie
Comment 12
2013-08-06 07:06:17 PDT
Comment on
attachment 208126
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=208126&action=review
> LayoutTests/ChangeLog:3 > + [CSSRegions] Min/max-width should support values other than length
(This is an informal review) I think you should have a new pass on this test to clean it up a bit. Please note that I changed the bug description to make it more clear.
> LayoutTests/fast/regions/region-min-max-width-support.html:1 > +<!doctype html>
doctype -> DOCTYPE
> LayoutTests/fast/regions/region-min-max-width-support.html:5 > +<style>
You can reduce the style declarations in the (possible) following way: .box { height: 20px; border: 1px solid black; position: absolute; left: 200px; } .region { -webkit-flow-from: flow; } .reference { background-color: red; } #region1 { max-width: 1%; top: 100px;} #reference1 { max-width: 1%; top: 100px; } and later you can use the above classes when setting the properties for regions and their corresponding reference elements: <div id="reference1" class="box reference">region1</div> <div id="region1" class="box region"></div>
> LayoutTests/fast/regions/region-min-max-width-support.html:6 > + #content { -webkit-flow-into: flow; background-color: green;}
If you want to avoid seeing the red for the last region, you need to ensure that height of each slice of content flowed in each region has 20px. You can do that in the following way: body { font: 16px/1.25 monospace; }
> LayoutTests/fast/regions/region-min-max-width-support.html:37 > +<body font-size: 20px; font-family: ahem;>
Are these style declarations for body used?
> LayoutTests/fast/regions/region-min-max-width-support.html:38 > +<p>Test for <a href="
https://bugs.webkit.org/show_bug.cgi?id=115248
"> [CSSRegions] Min/max-width should support values other than length</a>.</p>
Please update the test with the new bug title. Also, it would be nice if you could add below something like: <p>On success you should see PASS below</p>
> LayoutTests/fast/regions/region-min-max-width-support.html:78 > +document.body.offsetTop; // force layout
Why do you need to force layout here?
> LayoutTests/fast/regions/region-min-max-width-support.html:79 > +document.getElementById("region1").setAttribute("data-expected-width", document.getElementById('reference1').offsetWidth);
All the below statements can be written in a for loop.
> LayoutTests/fast/regions/region-min-max-width-support.html:91 > +checkLayout('#region1');
You can use something like this instead of repeating all the checkLayout statements: <body onload="checkLayout('.region')"> should you want to use a class for the region elements.
Mihnea Ovidenie
Comment 13
2013-08-06 07:09:10 PDT
(In reply to
comment #11
)
> Submitted new test to test min/max width cases for regions - the test is pass. There is an issue with red line in the last region which in my opinion is not related to this bug but should be investigate in a new one. If is ok I will create a new bug for the red line issue.
The redness you are seeing in the last region is not a bug. You can avoid it by making sure that each slice of content has 20px, like i said in the review.
Anton Obzhirov
Comment 14
2013-08-06 07:29:15 PDT
Comment on
attachment 208126
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=208126&action=review
>> LayoutTests/ChangeLog:3 >> + [CSSRegions] Min/max-width should support values other than length > > (This is an informal review) > I think you should have a new pass on this test to clean it up a bit. Please note that I changed the bug description to make it more clear.
ok
>> LayoutTests/fast/regions/region-min-max-width-support.html:1 >> +<!doctype html> > > doctype -> DOCTYPE
ok
>> LayoutTests/fast/regions/region-min-max-width-support.html:5 >> +<style> > > You can reduce the style declarations in the (possible) following way: > > .box { height: 20px; border: 1px solid black; position: absolute; left: 200px; } > .region { -webkit-flow-from: flow; } > .reference { background-color: red; } > > #region1 { max-width: 1%; top: 100px;} > #reference1 { max-width: 1%; top: 100px; } > > and later you can use the above classes when setting the properties for regions and their corresponding reference elements: > <div id="reference1" class="box reference">region1</div> > <div id="region1" class="box region"></div>
ok
>> LayoutTests/fast/regions/region-min-max-width-support.html:6 >> + #content { -webkit-flow-into: flow; background-color: green;} > > If you want to avoid seeing the red for the last region, you need to ensure that height of each slice of content flowed in each region has 20px. You can do that in the following way: > body { font: 16px/1.25 monospace; }
yes, thanks for pointing it - made a mistake below as well.
>> LayoutTests/fast/regions/region-min-max-width-support.html:37 >> +<body font-size: 20px; font-family: ahem;> > > Are these style declarations for body used?
made a mistake here - forgot "style=""".
>> LayoutTests/fast/regions/region-min-max-width-support.html:38 >> +<p>Test for <a href="
https://bugs.webkit.org/show_bug.cgi?id=115248
"> [CSSRegions] Min/max-width should support values other than length</a>.</p> > > Please update the test with the new bug title. Also, it would be nice if you could add below something like: > <p>On success you should see PASS below</p>
ok
>> LayoutTests/fast/regions/region-min-max-width-support.html:78 >> +document.body.offsetTop; // force layout > > Why do you need to force layout here?
it was copy paste from other test - forgot to remove.
>> LayoutTests/fast/regions/region-min-max-width-support.html:79 >> +document.getElementById("region1").setAttribute("data-expected-width", document.getElementById('reference1').offsetWidth); > > All the below statements can be written in a for loop.
Yep, will look better
>> LayoutTests/fast/regions/region-min-max-width-support.html:91 >> +checkLayout('#region1'); > > You can use something like this instead of repeating all the checkLayout statements: > <body onload="checkLayout('.region')"> should you want to use a class for the region elements.
ok
Anton Obzhirov
Comment 15
2013-08-06 08:50:20 PDT
Created
attachment 208194
[details]
Patch
Mihnea Ovidenie
Comment 16
2013-08-07 01:26:21 PDT
(In reply to
comment #15
)
> Created an attachment (id=208194) [details] > Patch
LGTM
Alexandru Chiculita
Comment 17
2013-08-16 13:19:59 PDT
Comment on
attachment 208194
[details]
Patch r=me
WebKit Commit Bot
Comment 18
2013-08-22 09:56:44 PDT
Comment on
attachment 208194
[details]
Patch Clearing flags on attachment: 208194 Committed
r154453
: <
http://trac.webkit.org/changeset/154453
>
WebKit Commit Bot
Comment 19
2013-08-22 09:56:47 PDT
All reviewed patches have been landed. Closing bug.
murali
Comment 20
2016-01-05 09:58:15 PST
(In reply to
comment #16
)
> (In reply to
comment #15
) > > Created an attachment (id=208194) [details] > > Patch > > LGTM
When i ran the final test case with webkit1 (
r164000
), im getting failed for Max-width cases. Min-width cases are passing. Needed help..Copying below the failed cases: FAIL: Expected 10 for width, but got 2. <div id="region1" class="box region" data-expected-width="10"></div> FAIL: Expected 10 for width, but got 2. <div id="region2" class="box region" data-expected-width="10"></div> FAIL: Expected 8 for width, but got 2. <div id="region3" class="box region" data-expected-width="8"></div> FAIL: Expected 18 for width, but got 2. <div id="region4" class="box region" data-expected-width="18"></div> FAIL: Expected 20 for width, but got 2. <div id="region5" class="box region" data-expected-width="20"></div> FAIL: Expected 3 for width, but got 2. <div id="region6" class="box region" data-expected-width="3"></div>
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug