【问题标题】:Toggle text display using pure CSS :hover pseudo-class使用纯 CSS 切换文本显示:hover 伪类
【发布时间】:2013-04-19 19:45:33
【问题描述】:

当有人将鼠标悬停在文本上时,我希望文本完全改变。我在网上找到了应该可以工作的代码,但它没有。有什么建议吗?

<span class="show">
     <p>if {&nbsp;<br /></p>
     <p>yourSite < awesome;&nbsp;<br /></p>
     <p>solution = aislingDouglas (HTML5 + CSS3 +&nbsp;<br /></p>
     <p>JavaScript + PHP);&nbsp;<br /></p>
     <p>}&nbsp;<br /></p>
     <p>else {&nbsp;<br /></p>
     <p>solution = null;&nbsp;<br /></p>
     <p>}&nbsp;</p>
 </span>

 <span class="noshow">
     <p>Need a website? &nbsp;<br /></p>
     <p>You found your dream developer!&nbsp;<br /></p>
     <p>And hey - I already helped you on the web,&nbsp;<br /></p>
     <p>why not let me help you&nbsp;<br /></p>
     <p>build an amazing site!&nbsp;<br /></p>
 </span>

这是 CSS:

.noshow, p:hover .show { display: none }
p:hover .noshow { display: inline }

我不反对使用 JavaScript(欢迎提出编码建议),但我希望它保留在 CSS 中。

提前致谢!

【问题讨论】:

  • &lt;p&gt; 不是&lt;span&gt; 的有效子代。
  • 应该使用 &amp;lt; 代替 <p>yourSite < awesome;&nbsp;<br /></p>
  • 你能提供你在网上找到它的链接吗?这可能会有所帮助。
  • 请提供一个JSfiddle链接进行测试

标签: css


【解决方案1】:

你的想法是对的,有点……

目标是拥有一个包含两个文本部分的容器元素。
当该元素被鼠标悬停时,它被分配了伪类:hover。使用此选择器,您可以适当地重新设置子项的样式(如下,.first.second)。

请注意,我已将 &lt;span&gt; 用于文本,将 &lt;p&gt; 用于下面的父级,但如果您想使用 block level 子级来执行此操作,例如更多 &lt;p&gt; 元素,那么您应该使用 &lt;div&gt; 作为父代。

http://jsfiddle.net/G28qz/

HTML:

<p class="hovertext">
    <span class="first">This is what you see first</span>
    <span class="second">But this shows up on mousehover</span>
</p>

CSS:

/* Hide the second piece of text by default */
p.hovertext .second {
     display:none;
}

/* Hide the first piece of text on hover */
p.hovertext:hover .first {
     display:none;
}

/* Re-show the second piece of text on hover */
p.hovertext:hover .second {
    display:inline;
}

【讨论】:

  • 谢谢!感谢您抽出时间来回答 - 这真的很有帮助!
【解决方案2】:

我想你想要这样的东西:

<div class="wrap">
    <div class="show">
        <p>if {&nbsp;</p>
        <p>yourSite
            < awesome;&nbsp; </p>
                <p>solution = aislingDouglas (HTML5 + CSS3 +&nbsp;</p>
                <p>JavaScript + PHP);&nbsp;</p>
                <p>}&nbsp;</p>
                <p>else {&nbsp;</p>
                <p>solution = null;&nbsp;</p>
                <p>}&nbsp;</p>
    </div>
    <div class="noshow">
        <p>Need a website? &nbsp;</p>
        <p>You found your dream developer!&nbsp;</p>
        <p>And hey - I already helped you on the web,&nbsp;</p>
        <p>why not let me help you&nbsp;</p>
        <p>build an amazing site!&nbsp;</p>
    </div>
</div>

使用以下 CSS:

.wrap {
    outline: 1px dotted blue;
    height: 300px;
}
.noshow, .wrap:hover .show {
    display: none
}
.wrap:hover .noshow {
    display: block
}

您需要一个外部容器来包装将打开和关闭的两个块。

为获得最佳效果,请为外包装设置一个高度,否则您将获得一个摆动的显示/隐藏效果,因为面板会因文本数量的不同而自行调整大小,这意味着鼠标可能不在面板即将显示,因此悬停状态将立即恢复为非悬停,从而重新触发显示/隐藏效果。

小提琴:http://jsfiddle.net/audetwebdesign/zAt7f/

【讨论】:

  • @ummlayth 非常欢迎您!这是一个很好的技术。请为其中几个答案投票,因为它们都是解决问题的好方法。
  • 甜蜜!刚到15,所以我终于可以投票了-投票完成了!再次感谢。
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 2010-10-25
  • 2013-05-08
  • 1970-01-01
  • 2019-02-15
  • 2011-02-22
相关资源
最近更新 更多