问题
In IE10, I am trying to create a css linear gradient, from the top of the page to the bottom of the page. This is what I have so far
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<body>
<meta http-equiv="X-UA-Compatible" content="IE=10">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type='text/javascript' src='./includes/js/jquery-2.0.0.min.js'></script>
<link rel='stylesheet' type='text/css' href='./includes/css/css.css'/>
<p id="title">
Test
</p>
</body>
</html>
css
body {
margin: 0px;
padding: 0px;
background-image: linear-gradient(to bottom, #dcdcdc 0%, #b0b0b0 100%);
}
#title {
color:red;
}
But it doesn't look the way I want it to look. This ends up with linear gradients that's about the height of 100px, then keeps repeating downwards. Similar to this image:
Does anyone know whats wrong?
回答1:
This is not an issue with IE10 alone; in fact, it's by design.
Backgrounds have special behavior when applied to body
and/or html
. When you apply a background to body
without touching html
, what happens is that the body background gets propagated to the viewport, and that background acts as if it were declared on html
:
For documents whose root element is an HTML
HTML
element or an XHTMLhtml
element: if the computed value of ‘background-image’ on the root element is ‘none’ and its ‘background-color’ is ‘transparent’, user agents must instead propagate the computed values of the background properties from that element's first HTMLBODY
or XHTMLbody
child element. The used values of thatBODY
element's background properties are their initial values, and the propagated values are treated as if they were specified on the root element.
Even though it appears otherwise, the html
and body
elements don't actually start with an intrinsic 100% height (except in IE in quirks mode); rather they take the height of their contents, just like any other block boxes. This means html
is the same height as the combined height of your p
element and its default margins (which are collapsed with the body
element).
While gradient backgrounds are designed to stretch across the full height and width by default, the actual height of html
doesn't allow enough room for a gradient to cover the entire viewport by itself, so it only stretches to a certain height before it starts repeating. AFAIK, this behavior is consistent across all browsers that implement gradients according to the latest standard.
If you want to make the gradient stretch across the whole viewport even if there isn't enough content for the whole page, simply add this rule:
html {
min-height: 100%;
}
If you want, you can move the background styles from body
to html
as well, but as long as you only set a background on one of those elements at a time, it doesn't make a difference which one you apply it to.
回答2:
This fixed posted below helped me. Just add
background-attachment:fixed
I know this is an old post but i am pretty sure people still struggle with this i tried adding a linear gradient and was not working till i found out if i the background-attachment property it works.
来源:https://stackoverflow.com/questions/16181155/how-to-use-css-linear-gradients-in-ie10