【问题标题】::target not changing background-color if pre defined:如果预先定义,目标不会改变背景颜色
【发布时间】:2023-03-25 18:45:01
【问题描述】:

是否有原因导致此代码不起作用但以下代码起作用。

不工作:

#contact {
border-radius: 10px;
max-width: 40%;
margin: 2% 4%;
float: left;
padding-left: 2%;
padding-bottom: 2%;  
color: black 
background-color: #CF8D56;
}

:target {
background-color: #E6E6E6;
color: black;
margin-bottom: 20px;
}

Codepen:http://codepen.io/anon/pen/QbWmbj

工作:

#contact {
border-radius: 10px;
max-width: 40%;
margin: 2% 4%;
float: left;
padding-left: 2%;
padding-bottom: 2%;
color: black  
background-color: #CF8D56;
}

#contact:target {
background-color: #E6E6E6;
}

Codepen:http://codepen.io/anon/pen/RPwMNE

我不明白为什么第一个示例不起作用,因为如果我在不预先定义#contact background-color 的情况下做同样的事情,它会起作用:

工作:

#contact {
border-radius: 10px;
max-width: 40%;
margin: 2% 4%;
float: left;
padding-left: 2%;
padding-bottom: 2%;  
color: black 
}

:target {
background-color: #E6E6E6;
color: black;
margin-bottom: 20px;
}

Codepen:http://codepen.io/anon/pen/KpKodM

有什么原因吗?

【问题讨论】:

标签: css css-selectors


【解决方案1】:

这是由于 CSS 特殊性优先级。通过元素的 id 定义规则比通过伪选择器定义规则具有更高的优先级。有关优先级的完整说明,请查看this MDN article

您可以通过添加 important 关键字来覆盖优先级。在您的第一个示例中,将您的样式规则更新为

:target {
  background-color: #E6E6E6 !important;  
}

它应该可以工作。

正如@BoltClock 在他们的评论中正确指出的那样,通常最好不要过度使用important 关键字,并尽可能使您的其他CSS 选择器更加具体,就像您在第二支笔中所做的那样。

简短回答:您已经有了正确的解决方案:)

【讨论】:

  • 或者您也可以使用已在问题中显示有效的解决方案:使用更具体的选择器(如此处所述)。
  • @BoltClock 当然,只是指出有一些方法可以覆盖默认行为。在这种情况下使您的规则更具体肯定是更好的解决方案,我已将此添加到我的答案中。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 2014-06-21
  • 2014-04-21
  • 2021-01-23
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多