CSS:之前:在背景颜色之后

时间:2017-01-23 13:10:24

标签: css colors

我想在点击时将心脏形状变​​成黑色,但是更改.heart的颜色不会影响它:之前:选择器之后。有没有办法这样做?

.heart {
  background-color: red;
  height: 60px; /*dimension of the square*/
  position: relative;
  top: 40px; /*position from top*/
  transform: rotate(-45deg); /*negative = counter clockwise, put 0 to try*/
  width: 60px; /*dimension of the square*/
  transition: all 1s ease; /*length of animation*/
}

.heart:before,
.heart:after {
  content:""; /*kosong, for it to exist*/
  background-color: red;
  border-radius: 50%; /*perfect round curve*/
  height: 60px; /*dimension of the shape*/
  position: absolute;
  width: 60px; /*dimension of the shape*/
}

.heart:before {
  top: -30px; /*position of the left shape*/
  left: 0; /*remember rotated ACW 45deg*/
}

.heart:after {
  left: 30px; /*position of the right shape*/
  top: 0px; /*remember rotated ACW 45deg*/
}

.heart
    {
        opacity:0.3; /*original state*/
    }
.heart:hover
    {
        opacity:1; /*hover state*/
    }
.heart:active
    {
        opacity:1; /*hover state*/
        background:black;
    }

3 个答案:

答案 0 :(得分:3)

在应用:active /:hover等状态时,您需要定位伪元素。

像这样:

.heart:active::before,
.heart:active::after {
  background: black;
} 

这是一个有效的 Fiddle.

我还为你的伪元素添加了一个过渡,这样它们就可以很好地淡化心脏的底部。

答案 1 :(得分:2)

只需将伪元素的background属性的值更改为inherit,它就会始终与父background元素的.heart匹配。这样,如果您将来添加更多颜色更改,则无需记住添加更多规则。它还有继承父母从红色到黑色过渡的额外好处。



.heart{
  background:#f00;
  height:60px;
  left:30px;
  opacity:.3;
  position:relative;
  top:40px;
  transform:rotate(-45deg);
  transition:background 1s ease,opacity 1s ease;
  width:60px;
}
.heart:hover{
  opacity:1;
}
.heart:active{
  background:#000;
  opacity:1;
}
.heart:before,.heart:after{
  content:"";
  background:inherit;
  border-radius:50%;
  height:60px;
  position:absolute;
  width:60px;
}
.heart:before{
  left:0;
  top:-30px;
}
.heart:after{
  left:30px;
  top:0;
}

<div class="heart"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

在您的情况下,如前所述,您需要专门针对前后伪元素。这样做的方法是添加以下CSS:

.element:active::before,
.element:active::after{
  background-color: #000;
}

这样,当元素处于活动状态时,您将定位前后伪元素。有一篇很棒的文章here解释了之前和之后的属性。