transparent
Fully transparent. This keyword can be considered a
shorthand for transparent black,rgba(0,0),which is its computed
value.
那么什么给了?为什么两个看似相同的值会产生不同的结果?我已经看过RGBA的the formatting,并寻找类似的问题(无济于事)。每个问题/答案提到从透明到rgba(0,0)的转换总是有’应该’或’根据’。(例如here)。实际的差别是什么,为什么会改变输出这么多?
N.B:这发生在大多数(如果不是全部)Internet Explorer版本中。我们也知道它发生在一些版本的Firefox。但是Chrome和Safari不显示这种行为,导致我们相信在-webkit中有一些补丁。
为了能够提交这个bug,我们需要使用最少的代码重现问题。所以,从我的其他问题转移,这里是使用透明vs rgba(0,0)的比较,当我们使用两者时会发生什么。
透明
@keyframes spin{ 0% {transform:rotateZ(0deg);} 50% {transform:rotateZ(360deg);border-radius:60%;} 100%{transform:rotateZ(720deg);} } .spinme{ display:inline-block; position:relative; left:0; top:0; margin:0.2rem; width:0.8rem; height:0.8rem; border:0.2rem solid black; border-radius:0%; outline: 1px solid transparent; transform:rotateZ(0deg); animation: spin infinite 4s; }
<div class="spinme"></div>
RGBA(0,0)
@keyframes spin{ 0% {transform:rotateZ(0deg);} 50% {transform:rotateZ(360deg);border-radius:60%;} 100%{transform:rotateZ(720deg);} } .spinme{ display:inline-block; position:relative; left:0; top:0; margin:0.2rem; width:0.8rem; height:0.8rem; border:0.2rem solid black; border-radius:0%; outline: 1px solid rgba(0,0); transform:rotateZ(0deg); animation: spin infinite 4s; }
<div class="spinme"></div>
都
正如@andyb所指出的,当在单独的元素上使用时,有奇怪的行为。你会期望只有一个摇摆,但他们都做。如图所示:
@keyframes spin{ 0% {transform:rotateZ(0deg);} 50% {transform:rotateZ(360deg);border-radius:60%;} 100%{transform:rotateZ(720deg);} } .spinme{ display:inline-block; position:relative; left:0; top:0; margin:0.2rem; width:0.8rem; height:0.8rem; border:0.2rem solid black; border-radius:0%; outline: 1px solid rgba(0,0); transform:rotateZ(0deg); animation: spin infinite 4s; } .spinme:nth-of-type(2){ outline: 1px solid transparent; }
<div class="spinme"></div> <div class="spinme"></div>
对于那些不能在Internet Explorer中测试这里,这里是一个动画的.gif的问题:
这是在左边透明,在中间rgba,和在右边。
正如@Abhitalks所指出的,我错读了参考文献,但是我将在问题中留下下面的内容,以表明我们已经考虑过这种可能性,或者如果某些东西被遗漏/被忽略。
感谢@ juan-c-v的答案,我决定尝试创建一个测试,以找到计算的值在每个浏览器的透明,并提出了以下:
$('p').text($('p').css("background-color"));
p{background-color:transparent;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p></p>
如果你在Chrome / Safari中查看这个,那么你很可能会看到(如果你没有评论的话)rgba(0,0)。但在IE中,你可能会看到透明的静止。我正在阅读MSDN参考,发现:
The transparent keyword is not supported.
这解释了为什么浏览器显示不同的结果。然而,它不解释任何地方他们的版本的透明实际上定义为。我浏览了旧的CSS1和CSS2 w3c规格,找不到一个旧的定义。透明是什么意思?
解决方法
另一方面,“transparent”是一个CSS属性,它标识一个项目将是完全透明的,而不进行颜色和alpha的计算。作为一个CSS属性而不是一个函数,每个浏览器以不同的方式应用它,因此它与浏览器应用此属性使用的方法有很大不同。
编辑
好吧,你说我矛盾在我的答案:
transparent
Fully transparent. This keyword can be considered a shorthand for
transparent black,which is its computed value.
嗯,我不矛盾。一件事是W3C标准的规范,另一件事是不同浏览器的开发者对该标准的实现。我不会打破IE的代码来证明我在说什么,因为它有点非法,直接问微软的家伙看到他们的答案。
我告诉你的是,他们是浏览器,不处理透明和rgba(0,0,0,0)在同样的方式。这是因为透明属性比rgba(0,0,0,0)函数更老(你喜欢比rgba()更多?),最有可能的是,虽然为IE开发了一个有效的方法为rgba g,b,a),他们仍然使用具有透明属性的旧方法。
你总是要记住的一件事是,没有web浏览器满足W3C标准到100%,这就是为什么在大多数新的属性必须添加制造商的特定扩展(moz- webkit-等)
想想为什么这么荒谬的写同样的事情四次,当一切都将使用标准属性解决,你自己会回答,因为它是不一样的使用透明和rgba(0,0,0,0)在IE 。