【问题标题】:Change background from bottom to top on hover悬停时从下到上更改背景
【发布时间】:2019-01-26 09:57:41
【问题描述】:

如何使用持续时间为 0.3 秒的从底部到顶部的过渡来更改 a:hover 的背景颜色?

<ul>
  <li><a></a></li>
  <li><a></a></li>
  <li><a></a></li>
</ul>

这可能吗?

谢谢

【问题讨论】:

    标签: css background css-transitions


    【解决方案1】:

    无法(通常)在 CSS 中应用过渡方向。但是,我们可以解决这个限制,方法是使用伪元素(或其他方法,例如 this example 如何使用渐变)。

    通过使用伪元素,它最初的 可见 高度为 0,当链接悬停时,我们可以将高度从和到所需方向转换。出于性能原因,最好使用transform: scale,这意味着在这种情况下我们需要将transform-origin 设置为bottom center,以确保它从下到上。

    这种方法可能是最通用的,适用于非纯色背景等,但确实需要伪元素或子元素。

    该方法的 CSS 将是:

    li {
        background: red;
    }
    a {
        position: relative;
        z-index: 1;
    }
    a::after {
        content: "";
        position: absolute;
        bottom: 0;
        left: 0;
        width: 100%;
        height: 100%;
        transform: scaleY(0);
        transform-origin: bottom center;
        background: blue;
        z-index: -1;
        transition: transform 0.3s;
    }
    a:hover::after {
        transform: scaleY(1);
    }
    

    Demo

    【讨论】:

    • 伪元素 :after 在你的 DEMO 中对我有用。谢谢
    • 也许答案中的第一行现在是错误的,仅仅是因为浏览器的改进,但这个 codepen 示例证明说没有办法应用过渡方向是错误的:codepen.io/brandon4117/pen/ihIgE
    • @shellscape 不,该声明仍然正确。您可以使用转换以这种方式更改转换原点并转换 元素,但您不能单独应用转换方向。例如,您不能在不伪造的情况下将元素的不透明度从左向右转换(这是您的示例通过使用渐变所做的)
    • 如果你用图片替换那个蓝色背景,你就会明白我的意思。它之所以有效,是因为使用该方法的背景颜色是纯色的
    猜你喜欢
    • 2019-08-06
    • 2020-07-24
    • 2022-01-18
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    相关资源
    最近更新 更多