【问题标题】:Why are border colors inverted when a background gradient is applied?为什么应用背景渐变时边框颜色会反转?
【发布时间】:2012-07-27 21:46:00
【问题描述】:

我偶然发现了一些奇怪的东西。当对元素应用白色虚线边框时,背景渐变的颜色会出现在元素的错误一侧,如下所示:

我在最新版本的 Firefox、Chrome、Opera 和 IE10 中看到了这一点。不过,IE9 有我的本意。

我的 CSS 目前是:

aside.block { 

    width:                  259px;
    padding:                12px;
    margin:                 15px 0;

    border:                 2px dashed #fff;

    background-image:       -o-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
    background-image:       -moz-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
    background-image:       -webkit-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
    background-image:       -ms-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
    background-image:       linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
    filter:                 progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffec00', endColorstr='#dbcb00');

}

左右两侧的边框颜色很好,但是由于几乎每个浏览器都会发生这种情况,我不得不假设这是我的错误,而不是浏览器错误。我在这里错过了什么?

【问题讨论】:

标签: css colors border gradient


【解决方案1】:

您可以通过将background-origin 设置为border-box 来解决此问题。

http://jsfiddle.net/LVfqe/11/

.block{
        width:                  259px;
        padding:                12px;
        background-image:       -o-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
        background-image:       -moz-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
        background-image:       -webkit-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
        background-image:       -ms-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
        background-image:       linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%);
        filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffec00',endColorstr='#dbcb00');
border:                 2px dashed #fff;
background-origin:border-box;
}

【讨论】:

  • 啊,解决了。我认为我以前从未使用过 background-origin 属性。
  • 原来行为的原因是什么?提供斜边边框?
  • @Stefano Borini - “斜边边框”是什么意思。那是什么?出现此问题的原因是默认背景原点是填充框并且背景设置为重复。除非设置了边框框,否则渐变开始在边框下重复 - 这会将边框计入总框宽度并从那里开始背景。尝试将border-width设置为50px,你就会明白为什么了。
  • 从某种意义上说,边框使用不同的阴影来给人以 3d 实体的印象(使用我们大脑顶部的光幻觉假设是真实的)。
  • @Stefano Borini - nop - 它与边界完全无关。您只能看到这一点,因为边框是虚线(注意边框颜色是白色)。您看到的是在顶部边框下重复的渐变底部(以及在底部边框下重复的渐变顶部)。如果您想删除此行为,只需设置background-repeat:no-repeat;。我怀疑这是有原因的 - 这只是默认的 CSS 设置。
猜你喜欢
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多