IE9 Rounded Corners & CSS Background Градиенты, живущие вместе?
В IE9 я обнаружил странную вещь, пытающуюся отобразить фоновый градиент.
В основном я применяю несколько классов к контейнеру.
<div class="gradient corners"></div>
Использование этого CSS.
.gradient {
background-color: #96A7C5;
background-image: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.19, #6C86AD),
color-stop(0.6, #96A7C5)
);
background-image: -moz-linear-gradient(
center bottom,
#75A33A 19%,
#8DC447 60%
);
.corners {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
Чтобы получить градиент в IE, я применяю мусор фильтра к моему классу .gradient.
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8DC447', endColorstr='#75A33A');
С этим, градиент работает, но мои закругленные углы уходят.
Итак, я попытался вставить условное выражение для объявления фильтра.
<!--[if IE]>
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8DC447', endColorstr='#75A33A');
<![endif]-->
Это возвращает мои углы, но градиент уходит.
Ответы
Ответ 1
Градиент выйдет для закругленных углов в IE9, поэтому лучшее решение теперь добавить один дополнительный div:
<div class="corners"><div class="gradient"></div></div>
и скрыть переполнение для .corners
.corners {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
overflow: hidden;
}
Я рекомендую этот Photoshop-подобный инструмент для создания кроссбраузерных градиентов: http://www.colorzilla.com/gradient-editor/
И этот для создания граничного радиуса:
http://border-radius.com/
Ответ 2
вам не нужен блок if IE
.
просто поместите все 3 (4, если вы включаете оба IE) правила в декларации стиля, браузеры поймут только те, которые они понимают.
пример:
.gradient {
background-image: -moz-linear-gradient(top, #81a8cb, #4477a1); /* Firefox 3.6 */
background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0, #4477a1),color-stop(1,#81a8cb)); /* Safari & Chrome */
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1'); /* IE6 & IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1')"; /* IE8 */
}
Следует также отметить, что градиенты в IE будут работать, только если элемент hasLayout
(см. http://reference.sitepoint.com/css/haslayout)
Ответ 3
Это довольно сложное решение для проблемы с градиентами IE9 и углами.
Он использует js для генерации SVG на лету - и это быстро.
http://abouthalf.com/2011/10/04/updated-ie9-gradients-with-rounded-corners/
Ответ 4
закругленные углы и фильтр не идут вместе. для IE я всегда включаю http://css3pie.com и использую его для выполнения радиуса и градиента границы в IE. образец css выглядит следующим образом:
.someElement {
behavior: url(assets/js/PIE.htc);
border-radius: 10px;
background: #8cb2d1;
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzhjYjJkMSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQyJSIgc3RvcC1jb2xvcj0iIzQwODBiMyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
background: -moz-linear-gradient(top, #8cb2d1 0%, #4080b3 42%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#8cb2d1), color-stop(42%,#4080b3));
background: -webkit-linear-gradient(top, #8cb2d1 0%,#4080b3 42%);
background: -o-linear-gradient(top, #8cb2d1 0%,#4080b3 42%);
background: -ms-linear-gradient(top, #8cb2d1 0%,#4080b3 42%);
background: linear-gradient(top, #8cb2d1 0%,#4080b3 42%);
-pie-background: linear-gradient(top, #8cb2d1 0%,#4080b3 42%);
}
Этапы:
- включить PIE.htc через поведение
- добавить границы рамки как обычно (border-radius: 10px;)
- добавить специальный атрибут -pie-background: (-pie-background: linear-gradient (верхний, # 8cb2d1 0%, # 4080b3 42%);)
Ответ 5
Просто используйте оболочку div (округленное и переполненное), чтобы скопировать радиус для IE9. Простой, работает кросс-браузер. SVG или JS не нужны.
<div class="ie9roundedgradient"><div class="roundedgradient">text or whatever</div></div>
.ie9roundedgradient {
display:inline-block; overflow:hidden; -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px;
}
.roundedgradient {
-webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px;
/* use colorzilla to generate your cross-browser gradients */
}