纯css实现鼠标移动方向遮罩效果

codepen上看到一款css效果,很不错
这里写图片描述
根据鼠标进入框的方向的不同,遮罩进入的方向也不同。

自己思考如何判断鼠标进入的方向,没有事件可以直接获取进入元素的方向,虽然可以用鼠标坐标计算,但是太麻烦。直接用纯css就可以实现

原理

这里写图片描述
首先定位4个不同方向的遮罩,然后给每个遮罩添加伪元素before
这里写图片描述
上图中黑框内不同颜色的地方就是每个遮罩的before,鼠标从某个方向进入时,必定会停在某个颜色区域上,停在哪个区域的颜色上就说明是从哪个颜色进入的,我们给不同遮罩加上hover效果就可以了。

这种方式的局限性就是box只能是正方形,因为4个before要将box分成4个直角三角形
当box是矩形时就要用js来判断鼠标进入时的方向,具体可以参考判断鼠标移入移出元素时的方向

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>纯css实现不同方向的遮罩效果</title>
    <style>
        .box {
            margin: 5em auto;
            position: relative;
            width: 10em;
            height: 10em;
            line-height: 10em;
            overflow: hidden;
        }

        .box__right, .box__left, .box__top, .box__bottom, .box__center {
            position: absolute;
            width: inherit;
            height: inherit;
            text-align: center;
            line-height: inherit;
            transition: transform .4s ease;
        }

        .box__right:before, .box__left:before, .box__top:before, .box__bottom:before, .box__center:before {
            position: absolute;
            content: '';
            /*
             * Calculation:
             *      ____a____
             *    /|\        |
             *   b | \       |
             *  /  a  \      |
             *  \  |  /      |
             *   \ | /       |
             *    \|/________|
             *
             *  a^2 = b^2+b^2
             *
             *  solve to b:
             *
             *  a^2         = 2b^2 | /2
             *  a^2 / 2     =  b^2 | sqrt
             *  a / sqrt(2) =  b
             *
             * Percentage:
             * a = 100%
             * 100 / sqrt(2) = 70.71%
             *                 ------
             */
            width: 70.71%;
            height: 70.71%;
            transform: rotate(45deg);
        }

        .box__right:hover, .box__left:hover, .box__top:hover, .box__bottom:hover, .box__center:hover {
            transform: translateX(0);
            z-index: 1;
        }

        .box__right:hover:before, .box__left:hover:before, .box__top:hover:before, .box__bottom:hover:before, .box__center:hover:before {
            width: 100%;
            height: 100%;
            transform: none;
        }

        .box__right {
            background: blue;
            transform: translateX(100%);
        }

        .box__right:before {
            right: 100%;
            bottom: 0;
            transform-origin: 100% 100%;
        }

        .box__right:hover ~ .box__center {
            transform: translateX(-100%);
        }

        .box__left {
            background: green;
            transform: translateX(-100%);
        }

        .box__left:before {
            left: 100%;
            transform-origin: 0 0;
        }

        .box__left:hover ~ .box__center {
            transform: translateX(100%);
        }

        .box__top {
            background: red;
            transform: translateY(-100%);
        }

        .box__top:before {
            top: 100%;
            right: 0;
            transform-origin: 100% 0;
        }

        .box__top:hover ~ .box__center {
            transform: translateY(100%);
        }

        .box__bottom {
            background: yellow;
            transform: translateY(100%);
        }

        .box__bottom:before {
            bottom: 100%;
            left: 0;
            transform-origin: 0 100%;
        }

        .box__bottom:hover ~ .box__center {
            transform: translateY(-100%);
        }

        .box__center {
            background: orange;
            z-index: -1;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="box__right">Right → Left</div>
    <div class="box__left">Left → Right</div>
    <div class="box__top">Top → Bottom</div>
    <div class="box__bottom">Bottom → Top</div>
    <div class="box__center">Hover from any side</div>
</div>
</div>
</body>
</html>
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下的HTML和CSS代码来实现图片底部透明遮罩文字标题: HTML代码: ```html <div class="image-container"> <img src="your-image-url" alt="your-image-alt-text"> <div class="overlay"> <h2>Your Title Here</h2> </div> </div> ``` CSS代码: ```css .image-container { position: relative; display: inline-block; overflow: hidden; } .image-container img { display: block; width: 100%; height: auto; } .overlay { position: absolute; bottom: 0; left: 0; width: 100%; background-color: rgba(0, 0, 0, 0.6); color: #fff; padding: 10px; box-sizing: border-box; transition: all 0.3s ease; } .overlay h2 { margin: 0; } .image-container:hover .overlay { transform: translateY(-100%); } ``` 解释一下: 首先,我们使用一个 `div` 元素作为图片容器,并设置其为相对定位。接着,我们在容器内部放置一个 `img` 元素用于显示图片,并设置其为块级元素,宽度为100%,高度自适应。 接下来,我们再在容器内部放置一个 `div` 元素,用于显示标题。我们将其设置为绝对定位,底部对齐,左侧对齐,宽度为100%,背景颜色为半透明黑色,文字颜色为白色,内部添加10px的内边距,并设置盒模型为 `box-sizing: border-box`,以便于我们在设置内边距时不会影响元素的实际宽度。 最后,我们使用CSS3的过渡效果,当鼠标悬停在容器上时,将标题向上移动,露出图片底部的部分,从而实现了透明遮罩效果。 需要注意的是,以上CSS代码中的 `rgba(0, 0, 0, 0.6)` 表示半透明黑色,其中最后一个参数 `0.6` 可以根据需要进行调整。同时,需要将代码中的 `your-image-url` 和 `your-image-alt-text` 替换为实际的图片 URL 和替代文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值