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

时间:2010-06-10 08:47:56

标签: css css3 box-shadow

我有以下CSS:

box-shadow: inset 0px 0px 2px #a00;

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

似乎没有box-shadow-color,至少Google没有提供任何内容。

7 个答案:

答案 0 :(得分:273)

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

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

  

颜色是阴影的颜色。如果颜色不存在,则使用   颜色取自'color'属性。

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

box-shadow: 1px 2px 3px;
color: #a00;

支持

  • 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%;
}
<div class="green"></div>
<div class="red"></div>

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

答案 1 :(得分:108)

没有

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

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

与大多数缺少的“长手”CSS属性一样,CSS variables可以解决此问题:

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

#el:hover {
    --box-shadow-color: goldenrod;
}

您可以在Firefox 31+中try this out。不幸的是,在撰写本文时,没有其他浏览器具有可行的实现。

答案 2 :(得分:4)

您可以使用CSS预处理器进行蒙皮。使用Sass,您可以执行与此类似的操作:

_theme1.scss:

$theme-primary-color: #a00;
$theme-secondary-color: #d00;
// etc.

_theme2.scss:

$theme-primary-color: #666;
$theme-secondary-color: #ccc;
// etc.

styles.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;

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

答案 3 :(得分:1)

您可以使用 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 */
}

答案 4 :(得分:-3)

您可以使用Chrome和Firefox快速复制/粘贴:(更改#后的内容以更改颜色)

-moz-border-radius: 10px;
-webkit-border-radius: 10px;
-khtml-border-radius: 10px;
-border-radius: 10px;
-moz-box-shadow: 0 0 15px 5px #666;
-webkit-box-shadow: 0 0 15px 05px #666;

Matt Roberts的答案对于webkit浏览器(safari,chrome等)来说是正确的,但我认为有人可能想要一个快速的答案,而不是被告知要学会编程以制作一些阴影。

答案 5 :(得分:-4)

是的,有办法

box-shadow 0 0 17px 13px rgba(30,140,255,0.80) inset

答案 6 :(得分:-7)

也许这是新的(我也很喜欢css3),但我有一个页面完全使用你的建议:

-moz-box-shadow: 10px 10px 5px #384e69;
-webkit-box-shadow: 10px 10px 5px #384e69;
box-shadow: 10px 10px 5px #384e69;}

..它对我来说很好(至少在Chrome中)。