Bug 18090

Summary: static position of abspos element at the end of a single-line shrinkwrapped container is incorrect
Product: WebKit Reporter: jasneet <jasneet>
Component: CSSAssignee: Robert Hogan <robert>
Status: RESOLVED DUPLICATE    
Severity: Normal CC: eric, jasneet, ojan.autocc, pravind.2k4, robert, tabatkins, webkit.review.bot
Priority: P2 Keywords: HasReduction
Version: 525.x (Safari 3.1)   
Hardware: PC   
OS: Windows XP   
URL: http://skyrock.com/
Attachments:
Description Flags
screenshot
none
reduction
none
Reduction
none
Patch none

Description jasneet 2008-03-25 16:43:49 PDT
I Steps:
Go to 
http://skyrock.com/

II Issue:
Text "powered by yahoo search" on top right near button "go" is showing on to next line. 

III Conclusion:
Issue is caused due to position:absolute; Safari/FF/Opera/IE behave the same way on removing this property.

IV Other browsers:
IE7: ok
FF3: ok
Opera9.24: ok

V Nightly tested: 31238
Comment 1 jasneet 2008-03-25 16:44:36 PDT
Created attachment 20057 [details]
screenshot
Comment 2 jasneet 2008-03-25 16:45:38 PDT
Created attachment 20058 [details]
reduction
Comment 3 Tab Atkins 2011-10-20 01:02:10 PDT
Yup, valid bug.  The error is that, if an inline element is the last thing in a single-line shrinkwrapped container, when you position the inline its static position is instead computed as if it linewrapped onto a second line.

Here's a testcase:

<!DOCTYPE html>
<div id=wrapper>
  <div id=inline></div><div id=inline-positioned></div>
</div>
<div id=cover></div>
<style>
body { margin: 0; }
#wrapper {
  float: left;
}
#inline {
  display: inline-block;
  width: 50px;
  height: 20px;
  background: green;
}
#inline-positioned {
  display: inline-block;
  width: 50px;
  height: 20px;
  background: red;
  position: absolute;
}
#cover {
  position: absolute;
  top: 0;
  left: 50px;
  width: 50px;
  height: 20px;
  background: green;
}
</style>
Comment 4 Pravin D 2012-07-18 15:05:52 PDT
(In reply to comment #3)
> Yup, valid bug.  The error is that, if an inline element is the last thing in a single-line shrinkwrapped container, when you position the inline its static position is instead computed as if it linewrapped onto a second line.
> 
> Here's a testcase:
> 
> <!DOCTYPE html>
> <div id=wrapper>
>   <div id=inline></div><div id=inline-positioned></div>
> </div>
> <div id=cover></div>
> <style>
> body { margin: 0; }
> #wrapper {
>   float: left;
> }
> #inline {
>   display: inline-block;
>   width: 50px;
>   height: 20px;
>   background: green;
> }
> #inline-positioned {
>   display: inline-block;
>   width: 50px;
>   height: 20px;
>   background: red;
>   position: absolute;
> }
> #cover {
>   position: absolute;
>   top: 0;
>   left: 50px;
>   width: 50px;
>   height: 20px;
>   background: green;
> }
> </style>
> 

The above test case is a little different from the one jasneet has reported.
If you move the <style> stuff above the first <div> there will be no red box seen.
Your test case exposes another bug , that for positioned objects the renderers are not properly re-attached.
See https://bugs.webkit.org/show_bug.cgi?id=91665
Comment 5 Pravin D 2012-07-18 15:12:06 PDT
Created attachment 153098 [details]
Reduction
Comment 6 Robert Hogan 2012-12-12 11:38:24 PST
Created attachment 179093 [details]
Patch
Comment 7 Robert Hogan 2012-12-15 04:01:30 PST

*** This bug has been marked as a duplicate of bug 45274 ***
Comment 8 Robert Hogan 2012-12-15 04:02:43 PST
Here's the reduction without any collapsing space. It passes.

data:text/html,<!DOCTYPE html><style>body { margin: 0; }#wrapper {float: left;}#inline {display: inline-block;width: 50px;height: 20px;background: green;}#inline-positioned {display: inline-block;width: 50px;height: 20px;background: red;position: absolute;}#cover {position: absolute;top: 0;left: 50px;width: 50px;height: 20px;background: green;}</style><div id=wrapper><div id=inline></div><div id=inline-positioned></div></div><div id=cover></div>

So this the same issue as bug 45274.