CSS:仅在没有内部<img>的<a>上应用样式

Zby*_*nek 6 css css-selectors css3

我想将样式应用于列表中的悬停链接,但前提是<a>元素内部没有图像.

标记是这样的:

<div id="leftcolumn">
  <ul>
    <li><a href="http://google.com">google</a></li>
    <li><a href="http://google.com"><img src="http://cso.cz/wpimages/cz2.gif"></a></li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

和我的css:

div#leftcolumn ul a:hover{ 
  background-color: #F8F8F8; 
  color: Black; 
  border-bottom: 1px solid Black; 
}
Run Code Online (Sandbox Code Playgroud)

我试过这个css,但无济于事:

div#leftcolumn ul a:hover < img{ 
  background-color: #F8F8F8; 
  color: Black; 
  border-bottom: 1px solid Black; 
}
Run Code Online (Sandbox Code Playgroud)

这是jsfiddle

KAD*_*KAD 5

您不能在CSS中基于元素的子元素来设置样式,可以做的是为<a>保存图像并防止样式设置的标签分配一个特殊的类:

<div id="leftcolumn">
      <ul>
        <li><a href="http://google.com">google</a></li>
        <li><a href="http://google.com" class="withImage"><img src="http://cso.cz/wpimages/cz2.gif"></a></li>
      </ul>
</div>

div#leftcolumn ul a:not(.withImage):hover{ 
  background-color: #F8F8F8; 
  color: Black; 
  border-bottom: 1px solid Black; 
  border-top: 1px solid black; 
} 
Run Code Online (Sandbox Code Playgroud)


Ced*_*ach 2

我怀疑这在纯 CSS 中是否可行。

但是,您可以将文本包装在 a 中<span>并仅在其中应用规则,即:

<div id="leftcolumn">
  <ul>
    <li><a href="http://google.com"><span>google</span></a></li>
    <li><a href="http://google.com"><img src="http://cso.cz/wpimages/cz2.gif"></a></li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

div#leftcolumn ul a:hover > span { 
  background-color: #F8F8F8; 
  color: Black; 
  border-bottom: 1px solid Black; 
}
Run Code Online (Sandbox Code Playgroud)

更新了 JSFiddle