【问题标题】:Having a div's background image change (using CSS) with text positioned on top of the div?让 div 的背景图像发生变化(使用 CSS),文本位于 div 顶部?
【发布时间】:2012-01-03 04:37:19
【问题描述】:

我有一个关于某些 CSS 的问题,我确信它有一个简单的解决方案,但还不够明显,我还没有找到它。

我在我的 HTML 文件中定义了一个带有背景图像的 div,这是我在我的 CSS 文件中设置的。然后,我使用 CSS 为 div 设置悬停状态,以便背景图像在鼠标悬停时发生变化。然后,我将文本放在 HTML 文件中的 div 顶部,以制作一个带有文本的按钮。

这是我遇到问题的地方,但是 - 当我将鼠标悬停在图像(div 的背景图像)上时,图像会发生变化,但是当我的光标碰到它上面的文本时,悬停状态会变回常规的,也改变了背景图像,而文本没有改变。当我将光标从文本上移开时,它会变回悬停状态。

我在 http://jsfiddle.net/Cwca22/jk7ty/ 的 JSFiddle 中设置了代码 - 任何帮助将不胜感激!提前致谢!

【问题讨论】:

    标签: css html text hover


    【解决方案1】:

    您可以真正简化您的代码。

    HTML

    <a class="button" href="directions.html">Get Directions</a>
    

    CSS

    a.button {
        background: url('http://f.cl.ly/items/0G0b0m1k0A1T2c3D102H/get-directions-button.png') no-repeat;
        color: white;
        display: block;
        font-family: Ovo, serif;
        font-size: 18px;
        height: 42px;
        line-height: 42px;
        text-align: center;
        width: 135px;
    }
    
    a.button:hover {
        background-image: url('http://f.cl.ly/items/0U1O3P1F2h312W0j3k1Z/get-directions-button-hover.png');
        color: #fff;
    }
    

    :hover 仅在您将鼠标悬停在该元素或其子元素之一上时适用。您使用一个元素创建了按钮,然后创建了文本并使用 CSS 技巧将其放置在按钮上。只要您将鼠标悬停在文本上,浏览器就会认为您不再将鼠标悬停在按钮上,并丢弃新背景。

    此外,样式级联。因此,在:hover 的规则中,您只需指定已更改的属性即可。 (在这种情况下,backgroundcolor。)

    小提琴:http://jsfiddle.net/jk7ty/10/

    【讨论】:

    • 啊,也感谢您的快速回复。你可能是对的,就网页而言,我的代码病态肥胖,但它最终完成了工作。感谢您的帮助!
    • 当然可以,但它很痛苦,原因有两个:1)它在多个地方更新宽度/高度很糟糕,2)你的 css 越复杂,它在某些浏览器中失败的可能性就越大。没问题!
    【解决方案2】:

    将 Get Directions 链接移动到主 div 内。您需要对其进行一些格式化,但这应该会让您非常接近。

    <a href="directions.html">
      <div id="getDirections" class="getDirections" style="margin-top: 10px; margin-left: 131px;">  
        <h3 class="getDirectionsText" style="margin-left: 154px; margin-top: -28px; font-size: 14px; font-weight: 300;">Get Directions</h3>
      </div>
    </a>
    

    【讨论】:

    • 拍脑袋。 哈哈,我知道这会很简单,现在想起来,我不知道为什么我没有想到.非常感谢您帮助我!
    【解决方案3】:

    我为您重写并简化了它,现在可以使用:

    这是链接:

    <a href="directions.html" class="getDirections">Get Directions</a>
    

    这是 CSS:

    a.getDirections {
    display: block;
    background: url('http://f.cl.ly/items/0G0b0m1k0A1T2c3D102H/get-directions-button.png') no-repeat top left;
    width: 135px;
    height: 30px;
    font-family: Ovo, serif;
    font-size: 15px;
    color: white;
    text-align: center;
    text-decoration: none;
    padding: 12px 0 0 0;
    }
    a.getDirections:hover {
        background: url('http://f.cl.ly/items/0U1O3P1F2h312W0j3k1Z/get-directions-button-    hover.png') no-repeat top left;
    }
    

    需要注意的几点:

    • 如果你给它一个 display: block; 你可以把一个 A 标签当作一个 div财产
    • 由于我在顶部放置了 12px 的内边距,所以我从 height: 属性中减去了 12px,只剩下 30px(按钮实际上是 42px 高)
    • 我建议您阅读“盒子模型”(谷歌搜索)以在未来提供帮助

    如果您愿意,也可以在 JSFiddle 上查看:

    http://jsfiddle.net/nerdburn/95ysC/

    【讨论】:

    • 哦,好的,感谢有关 display:block 属性的提示。我将不得不对此进行更多阅读,因为听起来它可以在以后减轻很多压力和头痛。再次感谢您的帮助。
    【解决方案4】:

    我会将所有 HTML 保留在 HTML 部分,将 CSS 保留在 CSS 部分。这有助于保持一切正常,尤其是在您进行测试时。

    这会给你一个很好的结果:

    <a href="directions.html"><div id="getDirections" class="getDirections"><h3 class="getDirectionsText">Get Directions</h3></div></a>
    
    #getDirections {
    display: table;
    }
    .getDirections {
    background-image: url('http://f.cl.ly/items/0G0b0m1k0A1T2c3D102H/get-directions-   button.png');
    background-repeat: no-repeat;
    width: 135px;
    height: 42px;
    cursor: pointer;
    }
    
    .getDirections:hover {
    background-image: url('http://f.cl.ly/items/0U1O3P1F2h312W0j3k1Z/get-directions-button-hover.png');
    background-repeat: no-repeat;
    width: 135px;
    height: 42px;
    cursor:     }
    a{
    text-decoration:none;
    }
    h3 {
    font-family: Ovo, serif;
    font-size: 18px;
    color: white;
    display:table-cell;
    vertical-align: middle;
    text-align: center;
    }    
    

    如果您使用这种代码样式,您可以更改元素大小,而无需重新调整文本的居中。

    【讨论】:

    • 啊,谢谢你的帮助!我通常会尝试将我的 CSS 和 HTML 分开,但在这个网站中,每个段落最终都会有不同的宽度和边距,所以这就是为什么我只是将它与 HTML 一起使用,而不是为每个段落创建大量的类。
    猜你喜欢
    • 2017-07-09
    • 2015-03-09
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2020-11-23
    相关资源
    最近更新 更多