#3333 closed bug (fixed)
.css("marginRight") is incorrect in WebKit
Reported by: | soldair | Owned by: | rworth |
---|---|---|---|
Priority: | blocker | Milestone: | 1.5.2 |
Component: | dimensions | Version: | 1.5 |
Keywords: | needsreview | Cc: | soldair |
Blocked by: | Blocking: |
Description
in safari (win) and google chrome (only included because the same error occurs and both use webkit)
a call to $("#element").outerWidth({margin:true}) reports the value of parent.innerWidth()
this bug does not happen in any other browser tested ie6,firefox3,opera9.5,konqueror (tested because khtml is the webkit base)
Attachments (6)
Change History (29)
Changed 15 years ago by
Attachment: | jquery_outerwidth_bug.jpg added |
---|
Changed 15 years ago by
Attachment: | jquery_outer_width_chrome.jpg added |
---|
this is s creen shot of the bug in chrome
Changed 15 years ago by
Attachment: | jquery_outer_width_firefox.jpg added |
---|
this is a screenshot of the bug not occuring in firefox
Changed 15 years ago by
Attachment: | jquery_outer_width_ie6.jpg added |
---|
this is a screen shot of the bug not occuring in ie6
Changed 15 years ago by
Attachment: | jquery_outer_width_konqueror.jpg added |
---|
this is a screen shot of the bug not occuring in konqueror
Changed 15 years ago by
Attachment: | jquery_outer_width_opera.jpg added |
---|
this is a screenshot of the bug not occuring in opera
comment:1 Changed 15 years ago by
Cc: | soldair added |
---|---|
Component: | core → dimensions |
Owner: | set to brandon |
comment:2 Changed 13 years ago by
Owner: | changed from brandon to soldair |
---|---|
Status: | new → pending |
Please provide a distilled and reduced jsFiddle test case, thanks!
comment:3 Changed 13 years ago by
Status: | pending → closed |
---|
Automatically closed due to 14 days of inactivity.
comment:7 Changed 13 years ago by
Milestone: | 1.3 → 1.4.5 |
---|---|
Priority: | major → high |
Status: | closed → reopened |
Version: | 1.2.6 → 1.4.4 |
test case. It looks like actually the value of margin-right in webkit/chrome is borked.
comment:8 Changed 13 years ago by
Status: | reopened → open |
---|
comment:9 Changed 12 years ago by
That's actually the way webkit handles display: block (as in divs). If something needs that property, it means put it on a line by itself. All browsers do this by giving the element (let's call it element A) full width so that it spans the full width of the element it is relative to in order to knock its next sibling down below, which we've all probably noticed when hovering over an H1 or something in web inspector/firebug and saw that it spanned the whole window. However, if you specify a width for element A, browsers need to do something else. The solution webkit chose was give it the necessary margin on the right to accomplish the same thing, regardless of whether the user specifies a margin-right because it usually won't matter style-wise if it's display block and all proceeding elements go below.
There is an addendum. If the element is display: block; margin-right: 3px; AND float: left; the element MUST keep its margin. You will see that if you add float: left to your #inner in the test case above, you will get the correct outerWidth. This is not a jQuery bug, but a choice on how to implement display: block in webkit.
Regardless, a possible solution would be to float the element in any direction just long enough to get the correct margins, then put it back to what it was before. I went ahead and made a pull request that utilizes swap in getWH in css.js, and added a test in the dimensions component.
comment:11 Changed 12 years ago by
Version: | 1.4.4 → 1.5 |
---|
comment:12 Changed 12 years ago by
I think the issue I'm working on relates to this. #4146 https://github.com/jboesch/jquery/commit/bc80f2990741891180d64605d750deaf5cdf9b8c
It's not 100% done, tests pass everywhere except 3 in IE7. Still fixing it up.
comment:13 Changed 12 years ago by
I landed a fix for ticket #4146 which I believe fixes this bug as well: http://bugs.jquery.com/ticket/4146
comment:15 Changed 12 years ago by
I belive this issue is WebKit only and fixed in nightlies since Feb 2011
- webkit bug: https://bugs.webkit.org/show_bug.cgi?id=13343
- chromium bug: http://code.google.com/p/chromium/issues/detail?id=23816
- pure JS test case: http://jsfiddle.net/rdworth/XMgur/2/
- jQuery 1.5.1 test case: http://jsfiddle.net/rdworth/JWqAK/1/
comment:16 Changed 12 years ago by
comment:17 Changed 12 years ago by
This issue is blocking a regression in jQuery UI 1.8.11 http://bugs.jqueryui.com/ticket/7084
comment:18 Changed 12 years ago by
The best workaround I've found is to set display:inline-block on the element temporarily in order to get the correct computed margin-right value. Though I've only tested so far in Safari 5 on Windows.
- Demo of workaround: http://jsfiddle.net/rdworth/bRyDW/
comment:19 Changed 12 years ago by
Cc: | soldair removed |
---|---|
Keywords: | needsreview added; outerWidth removed |
Milestone: | 1.next → 1.5.2 |
Priority: | high → blocker |
comment:20 Changed 12 years ago by
Cc: | soldair added |
---|
comment:21 Changed 12 years ago by
Owner: | soldair deleted |
---|---|
Status: | open → assigned |
Summary: | jquery outerWidth reports incorrect value in saffari (3.1.2 win) and google chrome → .css("marginRight") is incorrect in WebKit |
comment:22 Changed 12 years ago by
Owner: | set to rworth |
---|
comment:22 Changed 12 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Added css hook to work around bug in WebKit computed margin-right. Fixes #3333 - .css("marginRight") is incorrect in WebKit
Changeset: c3c507e900fceb419628157504004ab2813b7d01
this is a screen shot of the bug in action