2

我正在尝试创建淡出效果,以便标题栏中的最后 5 或 6 个字符在接近容器边缘时逐渐变得更加透明。

我不能基于字符数,因为页面是响应式的并且可以是任何宽度。我也不能只在它上面叠加一个渐变,因为背景上已经有一个渐变,这会使这一点变得明显,除非我可以将我的 CSS 从透明渐变为一种颜色,我认为这是不可能的。

我希望我能以某种方式选择最接近截止点的字符(在它们被父元素上的溢出隐藏之前),如下所示:

在此处输入图像描述

我试图通过 ":last" 选择器来做到这一点,但只能定位标签:

$('#scalable:visible:last').css('opacity','.5');

这是我在 jsfiddle 中的第一次尝试:http: //jsfiddle.net/adamnelson/PgerN/

修复是纯 css:

#scalable {
    background: #408800; /* Old browsers */
    background: -webkit-gradient(linear, 0 0, 0 100%, from(#408800), to(#316600));
    background: -webkit-linear-gradient(#408800 0%, #316600 100%);
    background: -moz-linear-gradient(#408800 0%, #316600 100%);
    background: -o-linear-gradient(#408800 0%, #316600 100%);
    background: linear-gradient(#408800 0%, #316600 100%); /* FF3.6+ */ /* Chrome,Safari4+ */ /* Chrome10+,Safari5.1+ */ /* Opera 11.10+ */ /* IE10+ */ /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#408800', endColorstr='#316600',GradientType=0 ); /* IE6-9 */

    color: white;
    font-size: 20px;
    font-weight: bold;
    margin: 50px auto 0;
    padding: 1em;
    overflow: hidden;
    width: 80%;
    position: relative;
}

#scalable:after {
    content: " ";
    position: absolute;
    height: 100%;
    width: 140px;
    top: 0;
    right: 0;
    background: -moz-linear-gradient(left, rgba(49,102,0,0) 0%, rgba(49,102,0,0.56) 51%, rgba(49,102,0,1) 100%);
    background: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(49,102,0,0)), color-stop(51%,rgba(49,102,0,0.56)), color-stop(100%,rgba(49,102,0,1)));
    background: -webkit-linear-gradient(left,  rgba(49,102,0,0) 0%,rgba(49,102,0,0.56) 51%,rgba(49,102,0,1) 100%);
    background: -o-linear-gradient(left, rgba(49,102,0,0) 0%,rgba(49,102,0,0.56) 51%,rgba(49,102,0,1) 100%);
    background: -ms-linear-gradient(left, rgba(49,102,0,0) 0%,rgba(49,102,0,0.56) 51%,rgba(49,102,0,1) 100%);
    background: linear-gradient(to right, rgba(49,102,0,0) 0%,rgba(49,102,0,0.56) 51%,rgba(49,102,0,1) 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00408800', endColorstr='#408800',GradientType=1 );
}

记录在这个小提琴中:http: //jsfiddle.net/PgerN/2/

4

2 回答 2

2

您介意在这里使用纯 CSS 解决方案吗?

我使用了带有不透明度的 CSS 水平渐变,并且我还使用:after了选择器,这样您就不必在当前语法中添加另一个元素,当您无法访问 HTML 或无法访问 HTML 时,这非常方便出于某种原因更改它..但我也想告诉你:after不支持 IE8,在这种情况下你需要在你的#scalable

演示

#scalable {
    background-color: #408800;
    color: white;
    font-size: 20px;
    font-weight: bold;
    height: 65px;
    margin: 50px auto 0;
    padding: 0 1em;
    overflow: hidden;
    width: 80%;
    position: relative;
}

#scalable:after {
    content: " ";
    position: absolute;
    height: 100%;
    width: 100%;
    top: 0;
    background: -moz-linear-gradient(left,  rgba(64,136,0,0) 0%, rgba(64,136,0,0) 74%, rgba(64,136,0,1) 100%);
    background: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(64,136,0,0)), color-stop(74%,rgba(64,136,0,0)), color-stop(100%,rgba(64,136,0,1)));
    background: -webkit-linear-gradient(left,  rgba(64,136,0,0) 0%,rgba(64,136,0,0) 74%,rgba(64,136,0,1) 100%);
    background: -o-linear-gradient(left,  rgba(64,136,0,0) 0%,rgba(64,136,0,0) 74%,rgba(64,136,0,1) 100%);
    background: -ms-linear-gradient(left,  rgba(64,136,0,0) 0%,rgba(64,136,0,0) 74%,rgba(64,136,0,1) 100%);
    background: linear-gradient(to right,  rgba(64,136,0,0) 0%,rgba(64,136,0,0) 74%,rgba(64,136,0,1) 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00408800', endColorstr='#408800',GradientType=1 );
}

你可以根据自己的需要调整渐变,如果你看到这个例子,我已经把它拉伸得比我以前的要多得多。

是的,渐变代码看起来确实很吓人,但是你有一个方便的工具来创建渐变,它可以很好地处理它们。

注意:通过使用它,当您在文本上覆盖元素时,它将禁用文本选择,因此为了方便您的用户,您可以进行类似的操作

#scalable:hover:after {
    display: none;
}

Demo 3(悬停选择文字)

于 2013-07-24T17:23:30.247 回答
0

它没有得到很好的支持,也不完全符合您的要求,但您可以使用 CSS 掩码来实现此效果:

https://www.webkit.org/blog/181/css-masks/

http://www.html5rocks.com/en/tutorials/masking/adobe/

于 2013-07-24T17:22:25.010 回答