css – 带梯度的透明背景图像

前端之家收集整理的这篇文章主要介绍了css – 带梯度的透明背景图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
今天,我正在设计一个透明的PNG背景,只能位于一个div的左上角,而其余的div将为PNG的所有透明区域以及其余的div本身保留渐变背景。

可能最好通过我认为可能工作的代码来解释:

#mydiv .isawesome { 
    /* Basic color for old browsers,and a small image that sits in the top left corner of the div */
    background: #B1B8BD url('../images/sidebar_angle.png') 0 0 no-repeat;

    /* The gradient I would like to have applied to the whole div,behind the PNG mentioned above */
    background: -moz-linear-gradient(top,#ADB2B6 0%,#ABAEB3 100%);
    background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#ADB2B6),color-stop(100%,#ABAEB3));
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ADB2B6',endColorstr='#ABAEB3',GradientType=0 );
}

我一直在找的是大多数浏览器选择一个或多个浏览器 – 大多数选择梯度,因为它进一步向下的CSS文件

我知道这里的一些人会说“只是应用渐变到您正在制作的PNG” – 但这不是理想的,因为div将保持一个动态的高度 – 有时很短,有时甚至很高。我知道这个渐变不是必需的,但我认为可能值得问你所想的一切。

是否可以拥有背景图像,同时将其余背景保持为渐变?

解决方法

请记住,CSS渐变实际上是一个 image value,而不是一些可能期望的颜色值。因此,它特别对应于背景图像,而不是背景颜色,或整个背景简写。

基本上,你真正想要做的是分层两个背景图像:梯度上的位图图像。为此,您可以在同一声明中指定它们,并使用逗号分隔它们。首先指定图像,然后指定渐变。如果您指定背景颜色,那么该颜色将始终画在最底下的图像之下,这意味着渐变将覆盖它,但是即使在后备的情况下也可以使用。

由于您包含供应商前缀,因此您需要为每个前缀执行一次,对于无前缀而言需要一次,而对于后退(无梯度)则需要执行一次。为避免重复其他值,请使用longhand属性1而不是背景简写:

#mydiv .isawesome { 
    background-color: #B1B8BD;
    background-position: 0 0;
    background-repeat: no-repeat;

    /* Fallback */
    background-image: url('../images/sidebar_angle.png');

    /* CSS gradients */
    background-image: url('../images/sidebar_angle.png'),-moz-linear-gradient(top,#ABAEB3 100%);
    background-image: url('../images/sidebar_angle.png'),-webkit-gradient(linear,#ABAEB3));
    background-image: url('../images/sidebar_angle.png'),linear-gradient(to bottom,#ADB2B6,#ABAEB3);

    /* IE */
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ADB2B6',GradientType=0);
}

不幸的是,这在IE中无法正常工作,因为它使用过滤器进行渐变,它总是在后台绘制。

解决IE的问题,您可以将过滤器和背景图像放在单独的元素中。这样可以消除CSS3多重背景的强大功能,尽管如此,您只需为所有浏览器进行分层,但这是您必须做的一个折衷。如果您不需要支持不实施标准化CSS渐变的IE版本,则无需担心。

1在技术上,背景位置和背景重复声明在这里适用于这两个层,因为间隙通过重复值而不是被夹住来填充,但是由于背景位置是其初始值,并且背景重复对于梯度覆盖整个元素,这并不重要。处理分层背景声明的细节可以在here中找到。

猜你在找的CSS相关文章