是否有"盒子阴影颜色"属性?

Epa*_*aga 176 css css3 box-shadow

我有以下CSS:

box-shadow: inset 0px 0px 2px #a00;
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试提取该颜色以使页面颜色"skinnable".有没有办法做到这一点?只需删除颜色,然后再次使用相同的密钥就会覆盖原始规则.

似乎没有box-shadow-color,至少谷歌没有任何改变.

fre*_*nte 287

其实......有!有点.box-shadow默认为color,就像border那样.

根据http://dev.w3.org/.../#the-box-shadow

颜色是阴影的颜色.如果颜色不存在,则使用的颜色取自"颜色"属性.

在实践中,您必须更改color属性并留下box-shadow没有颜色:

box-shadow: 1px 2px 3px;
color: #a00;
Run Code Online (Sandbox Code Playgroud)

支持

  • Safari 6+
  • Chrome 20+(至少)
  • Firefox 13+(至少)
  • IE9 +(IE8根本不支持box-shadow)

演示

div {
    box-shadow: 0 0 50px;
    transition: 0.3s color;
}
.green {
    color: green;
}
.red {
    color: red;
}
div:hover {
    color: yellow;
}

/*demo style*/
body {
    text-align: center;
}
div {
    display: inline-block;
    background: white;
    height: 100px;
    width: 100px;
    margin: 30px;
    border-radius: 50%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="green"></div>
<div class="red"></div>
Run Code Online (Sandbox Code Playgroud)

以下评论中提到的错误已被修复:)

  • 好的黑客,如果元素中没有文字. (12认同)
  • 是的,否则你必须把它包起来并重新应用`color`到子元素. (9认同)
  • 感谢您提供明智且相关的**答案.+10给你! (4认同)
  • CSS动画中的Chrome 22(金丝雀)中存在一个错误,导致box-shadow无法继承动画`color`属性.https://code.google.com/p/chromium/issues/detail?id=133745 (3认同)
  • 我可以确认它对IE10来说是一样的. (3认同)
  • FWIW,我对这个答案以及已接受的答案都投了赞成票。如果您*无法*解决被迫违背您的意愿改变元素文本内容的颜色的问题,那么这个答案对您不起作用,但这并不会使其在您*可以*使用它的情况下变得不那么有用,这也不会使它比接受的答案“更好”,也不会使接受的答案变得错误。 (2认同)

And*_*y E 115

没有:

http://www.w3.org/TR/css3-background/#the-box-shadow

您可以通过查看计算样式列表在Chrome和Firefox中验证这一点.其他具有速记方法的属性(如border-radius)在规范中定义了它们的变体.

与大多数缺少的"长手"CSS属性一样,CSS变量可以解决此问题:

#el {
    --box-shadow-color: palegoldenrod;
    box-shadow: 1px 2px 3px var(--box-shadow-color);
}

#el:hover {
    --box-shadow-color: goldenrod;
}
Run Code Online (Sandbox Code Playgroud)

你可以在Firefox 31+中试试这个.不幸的是,在撰写本文时,没有其他浏览器具有可行的实现.

  • 这是一个很好的变量使用!让我们希望在未来几年内在所有浏览器中[支持](http://caniuse.com/css-variables):/ (4认同)
  • ...除非你仍然必须支持 IE (3认同)
  • 截至2019年,[所有主流浏览器均支持CSS变量](https://caniuse.com/#feat=css-variables)。 (2认同)
  • 如果你不控制原来的规则就行不通。我认为 CSS 规范中存在一个明显的缺陷,即这种颜色无法单独设置。 (2认同)

san*_*mar 7

您可以使用CSS 变量来做到这一点

.box-shadow {
    --box-shadow-color: #000; /* Declaring the variable */
    width: 30px;                
    height: 30px;
    box-shadow: 1px 1px 25px var(--box-shadow-color); /* Calling the variable */

}

.box-shadow:hover  {
    --box-shadow-color: #ff0000; /* Changing the value of the variable */
}
Run Code Online (Sandbox Code Playgroud)


jje*_*nzz 5

你可以使用 CSS 预处理器来做你的皮肤。使用Sass你可以做类似的事情:

_theme1.scss:

$theme-primary-color: #a00;
$theme-secondary-color: #d00;
// etc.
Run Code Online (Sandbox Code Playgroud)

_theme2.scss:

$theme-primary-color: #666;
$theme-secondary-color: #ccc;
// etc.
Run Code Online (Sandbox Code Playgroud)

样式.scss:

// import whichever theme you want to use
@import 'theme2';

-webkit-box-shadow: inset 0px 0px 2px $theme-primary-color;
-moz-box-shadow: inset 0px 0px 2px $theme-primary-color;
Run Code Online (Sandbox Code Playgroud)

如果它不是站点范围的主题,而是您需要的基于类的主题,那么您可以这样做:http : //codepen.io/jje​​nzz/pen/EaAzo