Chrome rendering issue. Fixed position anchor with UL in body
Chrome solution:
Adding -webkit-transform: translateZ(0)
to the #sidebar
fixed the issue for me.
I've used translateZ(0)
to fix numerous Chrome display bugs over the years. The rationale is that by invoking 3D transformation, re-paint is separated from the rest of the CSS pain stack (I can't provide much more detail than that, it's pretty much all Greek to me). In any case, it appears to work for me!
#sidebar {
-webkit-transform: translateZ(0);
}
Opera solution:
This is not a generic solution (will need to be tweaked depending on the positioning requirements of the element in question). It works by forcing continuous repaints (via CSS animation) on a property that could affect layout (forcing other layout factors to be calculated and rendered, ie maintaining fixed positioning), but in practice do not. In this case, I've used margin-bottom
, because there's no way that's going to affect your page layout (but Opera doesn't know that!):
@keyframes noop {
0% { margin-bottom: 0; }
100% { margin-bottom: 1em; }
}
#sidebar {
animation: noop 1s infinite;
}
Note: the solution is not perfect, in that (on my machine at least) the bug test cases will result in a minute flicker as Opera loses positioning and quickly redraws. Sadly I think this is as good as you will get, because as George says in his answer, this is Opera's natural behaviour between redraws — in theory my code makes redraw for the element continuous, but in practice there will be infinitesimal gaps.
EDIT 2 (2013-11-05): I've since encountered variations of this bug quite often. Although the original poster's reduced test case presents a perfectly legitimate bug, most occurences have been in situations where there is already a 3D transform operating on the body (or similarly high up the DOM tree). This is often used as a hack to force GPU rendering, but will actually lead to nasty repaint issues like this. 2 no-op 3D transforms don't make a right: if you're using one higher up the tree, try removing it first before adding another one.
EDIT 3 (2014-12-19): Chris reports that translateZ(0)
doesn't work in some cases where scale3d(1,1,1)
does.
Fix CSS width-animation issue due to scrollbar hiding in Chrome
I fixed it by making the naimation for from the right instead of the left by adding
nav a::before {
content: '';
display: block;
height: 5px;
background-color: aliceblue;
position: absolute;
top: 10px;
width: 0px;
right: 0px; *<- Add this*
transition: all ease-in-out 250ms;
}
Chrome redraw issue
Chrome is getting buggier. Something worth trying is forcing gpu hardware acceleration on the element.
Add this to the CSS to force hardware acceleration:
-webkit-transform: translate3d(0, 0, 0);
Fixed page header overlaps in-page anchors
I had the same problem.
I solved it by adding a class to the anchor element with the topbar height as the padding-top value.
<h1><a class="anchor" name="barlink">Bar</a></h1>
I used this CSS:
.anchor { padding-top: 90px; }
MouseEvents don't fire on body when inner div has position fixed in firefox
You can see what's going on if you add this css:
body { border: 1px solid red; }
I'm not entirely sure of the reasoning, but Chrome decides that the 'body' element should be the full height of the window, whereas Firefox collapses the body element to a single line. I believe the body collapsing is the correct behavior, because a 'block' element (such as <body>
or <div>
) should only be as tall as necessary to contain its contents (and since you made the inner div absolutely positioned, it won't take this into account in calculating its height).
The correct fix depends on your intended outcome, but you could use document
or window
instead of document.body
because they represent the entire viewable window instead of just the actual <body>
element.
You could also set your body to a specific height like 100%. Alternatively, once you add more content to the body (stuff that isn't absolutely positioned), it will "fill out" and cause the mousemove event to fire properly anyway, so you won't need any of these fixes.
Related Topics
Why Does Flexbox Stretch My Image Rather Than Retaining Aspect Ratio
Html5Shiv VS Dean Edwards IE7-Js VS Modernizr - Which to Choose
How to Get a Specific Number Child Using CSS
Allow Specific Tag to Override Overflow:Hidden
What Is the ::Content/::Slotted Pseudo-Element and How Does It Work
Easiest Way to Extract the Urls from an HTML Page Using Sed or Awk Only
Fontawesome Icons Are Not Showing, Why
Node.Js - How to Send Data from HTML to Express
$Http Doesn't Send Cookie in Requests
Setting a Width and Height on an a Tag
How to Prevent Line Break at Hyphens in All Browsers
How to Darken a Background Using CSS
Jquery Click Function Doesn't Work After Ajax Call
How to Add an Element After Another Element
Line Break (Like <Br>) Using Only CSS