如果在表格单元格中,CSS悬停更改其他文本/类的样式不起作用

Posted

技术标签:

【中文标题】如果在表格单元格中,CSS悬停更改其他文本/类的样式不起作用【英文标题】:CSS hover changing style of other text / class doesn't work if within a table cell 【发布时间】:2014-03-08 11:43:06 【问题描述】:

我有一些文本,我希望在将鼠标悬停在初始文本上时,同一页面中的某些其他文本位会改变字体颜色。

例如,使用下面的代码,当将鼠标悬停在“Hover over me”文本上时,我希望它将class="span2" 的两个跨度的字体颜色更改为红色。

令人讨厌的是,如果跨度在表格单元格内,它不想这样做:

<style type="text/css">
.span1:hover ~ .span2 
    color: red;

</style>

<span class="span1">Hover over me</span>
<br>
<span class="span2">This font colour changes as required.</span>
<br>
<table>
    <tr>
        <td>
            <span class="span2">This font colour doesn't change, why?</span>
        </td>
    </tr>
</table>

我尝试了向 td 和 CSS 代码添加类/ID 的各种组合,但没有任何运气,所以希望有人能提供解决方案!

注意:我不一定需要它在表格单元格的外部和内部工作,事实上,我只需要它在表格单元格内工作,但会有多次出现的文本分布在不同的表格中。

【问题讨论】:

【参考方案1】:

这里的问题与~ 选择器有关。它只选择后续的兄弟姐妹,而不是兄弟姐妹的孩子。这就是为什么它适用于您的第一行,而不是嵌套在表格中的那一行。这是一个方便的css selectors 列表,我觉得很有帮助。

不幸的是,没有办法在不改变 html 布局方式的情况下纯粹使用 CSS 来解决这个问题。您可以尝试以下方法:

HTML:

<div class="wrapper">
 //all your existing html
</div>

CSS:

.wrapper:hover .span2 
    color: red;

或者您可以保留当前的 ​​html,并使用 jQuery 解决方案:

$(document).ready(function () 
  $('.span1').hover(
      function () 
          $('.span2').css('color', 'red');
      , function () 
          $('.span2').css('color', 'black');
      
   );
);

这是两者的working fiddle

【讨论】:

似乎不起作用:&lt;script src="jquery-1.11.0.min.js"&gt;&lt;/script&gt; &lt;script&gt; $('.span3').hover( function () $('.span4').css('color', 'red'); , function () $('.span4').css('color', 'white'); ); &lt;/script&gt; &lt;div class="wrapper"&gt; &lt;span class="span3"&gt;Hover over me with JS&lt;/span&gt; &lt;br&gt; &lt;span class="span4"&gt;This font colour changes as required.&lt;/span&gt; &lt;br&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt; &lt;span class="span4"&gt;This font colour doesn't change&lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt; 抱歉,我不完全确定如何在评论中正确显示代码。需要注意的是,我在与页面相同的目录下有“jquery-1.11.0.min.js”文件,上面的代码都在body标签内。我还添加了包装器 div CSS,尽管我认为无论如何都不应该在这种情况下使用它。 我怀疑我的页面没有正确安装 jQuery,因为上面的代码适用于 JSFiddle,但不适用于我的网页。我也尝试将脚本 src="... 移动到 head 标签中,但仍然没有运气。 我似乎无法正常工作,您能看看吗?我的链接没有任何变化:codjumper.com/hover.php @user3294858,您的示例似乎缺少$(document).ready();。小提琴自动包含这个。请参阅我编辑的答案。【参考方案2】:

我不认为 CSS 可以执行这种功能。

如果您不反对使用它,Jquery 绝对可以处理此功能。一个简单的 onhover 事件可以操纵你想要的 css。

【讨论】:

【参考方案3】:

您的 span1 是否始终是您要在其中查找 span2 的表的兄弟?如果是这样,

.span1:hover ~ table tr td .span2 
    color: red;

http://jsfiddle.net/S5VAp/ 但是,如果 span1 是表中的另一个 td,或者如果您的表变得嵌套,则变得更加困难。在这种情况下,javascript 解决方案会更直接。

【讨论】:

span1(只出现一次)将在一个完全不同于 span2 的表中,恐怕! 实际上,事实证明您上面的代码有效 - 即使我在不​​同的表中有 span2 的重复项,所有出现的地方都会改变颜色。非常感谢! 但是如果你将 span1 放在一个表中(而不是表是 span1 的兄弟),我的代码将无法工作。 jsfiddle.net/S5VAp/1 啊,是的,我明白你的意思了。回到绘图板! 我认为@badAdviceGuy 的 jQuery 解决方案是我要走的路。【参考方案4】:

出于同样的原因,如果您将 &lt;span class="span2"&gt;This font colour changes as required.&lt;/span&gt; 包装在 div 中(例如 &lt;div&gt;&lt;span class="span2"&gt;This font colour changes as required.&lt;/span&gt;&lt;/div&gt;,即使第一个 .span2 也不会变红!因为它不符合您的 css 规则!

做这样的事情JSFiddle 会为你工作:

CSS(你的规则不变):

.span1:hover .span2 
    color: red;

HTML(将所有.span2 包装在.span1 中):

<span class="span1">Hover over me
    <br />
    <span class="span2">This font colour changes as required.</span>
    <br />
    <span>This should not be red</span>
    <table>
        <tr>
            <td>
                <span class="span2">This font colour doesn't change, why?</span>
            </td>
        </tr>
    </table>
</span>

【讨论】:

span 元素中不允许有表格。但是,你的基本前提是好的。如果 span1 是父级,那么事情就简单了。 当然,它不会验证(违反内联块),但它可以工作。只需将span 更改为div【参考方案5】:

我遇到了表格行将正确突出显示但每个 td 标记内的字体颜色保持不变的问题。

问题:

tr:hover 
    background: #0585fd;
    color: #FFF;

修复:

tr:hover td 
    background: #0585fd;
    color: #FFF;

将 td 添加到 tr:hover 伪代码中,使 td 标签内的文本在整行悬停时变为白色。

【讨论】:

以上是关于如果在表格单元格中,CSS悬停更改其他文本/类的样式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Google chrome:当鼠标悬停在表格单元格上时如何显示全文

空白:nowrap 和溢出:隐藏在表格单元格中

HTML / CSS / Javascript - 将鼠标悬停在不同的单元格上时更改一个表格单元格的值

通过用户输入和 Javascript 更改特定表格单元格中的文本

在 s-s-rS 表格的单元格中突出显示文本的方法

使用 CSS,如何根据我悬停的单元格更改表格行的背景颜色?