gpt4 book ai didi

html - 如何使用表面上的 "reveal"div 显示隐藏在彩色 div 后面的动画

转载 作者:行者123 更新时间:2023-12-03 16:55:41 24 4
gpt4 key购买 nike

想象一下,我们有两层背景。

  • 底层为绿色<div class="green"></div> .为简单起见,我们假设它只是一种颜色。但是在我的元素中,这一层包含一个 css动画 .
  • 另一层蓝色在它上面<div class="blue"></div> .
  • 现在,我想要另一个 div它位于两者之上,它显示了绿色背景(我元素中的动画层)。

  • 我能想到的最接近的例子是,如果你想象一个聚光灯。一切看起来都是黑色的,聚光灯四处移动并显露出背景。

    基本上,这就是我所拥有的:
    <div class="green">
    <div class="blue">
    <div class="reveal"></div>
    </div>
    </div>

    它看起来像这样。请记住,绿色层是我元素中的动画。

    enter image description here

    问题:我怎样才能完成 .reveal样式来实现上述行为。
  • 第一个 div - 绘制 .green背景(动画)
  • 第二个 dv - 抽奖 .blue背景在它上面
  • 第三/第四/... divs - 在两者之上,但它揭示了任何背景First div抽奖

  • 注意:第一个和第二个 div 封面 100%可用的宽度和高度。
    .green {
    background-color: #159c82;
    width: 100vw;
    height: 100vh;
    }

    .blue {
    background-color: #1b4287;
    // I could change this to a sibling div and use,
    // position: absolute; but that seems unnecessary
    width: 100%;
    height: 100%;
    }

    .reveal {
    margin-top: 10px;
    margin-left: 10px;
    width: 200px;
    height: 50px;
    // not sure what else to put here to make it work
    }

    <div class="green">
    <div class="blue">
    <div class="reveal"></div>
    </div>
    </div>

    附言我发现有一种方法我根本不喜欢。

    enter image description here

    最佳答案

    使用掩码创建一个洞,不需要显示 div。您可以稍后更改大小和位置以获得所需的动画:

    .green {
    background: linear-gradient(45deg,#159c82,red);
    height: 100vh;
    }

    .blue {
    background:#1b4287;
    height: 100%;
    -webkit-mask:
    /* you adjust this */
    linear-gradient(#fff,#fff)
    50px 50px/ /*left top*/
    200px 20px, /*width height*/
    /**/
    linear-gradient(#fff,#fff);
    -webkit-mask-repeat:no-repeat;
    -webkit-mask-composite: destination-out;

    mask:
    /* you adjust this */
    linear-gradient(#fff,#fff)
    50px 50px/ /*left top*/
    200px 20px, /*width height*/
    /**/
    linear-gradient(#fff,#fff);
    mask-repeat:no-repeat;
    mask-composite:exclude;
    transition:.5s;
    }
    .blue:hover {
    -webkit-mask-position:100px 100px,0 0;
    mask-position:100px 150px,0 0;
    -webkit-mask-size:300px 50px,auto;
    mask-size:300px 50px,auto;
    }

    body {
    margin: 0;
    }
    <div class="green">
    <div class="blue">
    </div>
    </div>

    您还可以根据需要添加任意数量的掩码:

    .green {
    background: url(https://picsum.photos/id/1018/800/800) center/cover;
    height: 100vh;
    }

    .blue {
    background:#1b4287;
    height: 100%;
    -webkit-mask:
    /* 3rd mask */
    radial-gradient(farthest-side,#fff 99%,transparent)
    top 50px right 50px/
    100px 100px,
    /**/
    /* 2nd mask */
    linear-gradient(#fff,#fff)
    bottom 50px right 50px/
    300px 20px,
    /**/
    /* 1st mask */
    linear-gradient(#fff,#fff)
    50px 50px/
    200px 20px,
    /**/
    linear-gradient(#fff,#fff);
    -webkit-mask-repeat:no-repeat;
    -webkit-mask-composite: destination-out;

    mask:
    /* 3rd mask */
    radial-gradient(farthest-side,#fff 99%,transparent)
    top 50px right 50px/
    100px 100px,
    /**/
    /* 2nd mask */
    linear-gradient(#fff,#fff)
    bottom 50px right 50px/
    300px 20px,
    /**/
    /* 1st mask */
    linear-gradient(#fff,#fff)
    50px 50px/
    200px 20px,
    /**/
    linear-gradient(#fff,#fff);
    mask-repeat:no-repeat;
    mask-composite:exclude;
    transition:.5s;
    }
    .blue:hover {
    -webkit-mask-position:
    100px 100px,
    bottom 100px left 50px,
    top 50px right 50px,
    0 0;
    mask-position:
    100px 100px,
    bottom 100px left 50px,
    top 50px right 50px,
    0 0;
    -webkit-mask-size:
    150px 150px,
    50px 50px,
    300px 50px,
    auto;
    mask-size:
    150px 150px,
    50px 50px,
    300px 50px,
    auto;
    }

    body {
    margin: 0;
    }
    <div class="green">
    <div class="blue">
    </div>
    </div>

    关于html - 如何使用表面上的 "reveal"div 显示隐藏在彩色 div 后面的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61552860/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com