CSS选择器如果存在于兄弟姐妹附近

时间:2011-08-19 19:35:08

标签: css css-selectors siblings

我有以下(简化的)HTML结构

<td> 
    <DIV class="t-numerictextbox">
        <DIV class="t-formatted-value">$0.00</DIV>
        <INPUT id="MyObj_PropertyName class="t-input" name="MyObj.PropertyName">
    </DIV>
    <SPAN class="field-validation-error" data-valmsg-for="MyObj.PropertyName">blah blah</SPAN> 
</td>

如果span元素也存在,我想要做的是将父div.t-numerictextbox的背景颜色设置为红色。在相邻的兄弟上执行此条件选择的css语法是什么?

BTW,我需要这个必须适用于IE 8。

背景,如果你很好奇:

我有一个asp.net MVC应用程序,并使用Telerik MVC NumericTextBox控件。当我有ModelState验证错误时,MVC框架会自动在元素上插入class =“input-validation-error”属性,样式表会选择此类以突出显示红色元素。但是,它不适用于Telerik MVC控件(我假设因为Telerik的javascript会覆盖它)。

谢谢!

2 个答案:

答案 0 :(得分:18)

可以在html中将div放在div之前,然后用css定位。

然后使用css邻近兄弟选择器选择与跨度相邻的div。

最后在跨度上放置一个绝对位置,并给它一个top:..px以使其低于div。

所以你得到以下内容:

span + div {
  background-color:red;
}
<td> 
  <span class="field-validation-error" data-valmsg for="MyObj.PropertyName">blah blah</span> 
  <div class="t-numerictextbox">
    <div class="t-formatted-value">$0.00</div>
    <input id="MyObj_PropertyName" class="t-input" name="MyObj.PropertyName">
  </div>        
</td>
  

答案 1 :(得分:1)

CSS无法做到这一点。如果div.t-numerictextbox存在,您可以设置范围的样式,但不是相反。这是css的限制,但可能永远不会改变。