【问题标题】:CSS won't transition opacityCSS不会过渡不透明度
【发布时间】:2020-05-29 09:32:21
【问题描述】:

我想要做的是在页面加载后使用纯CSS 将弹出窗口延迟几秒钟。我决定最好的方法是转换不透明度,然后使用 transition-delay 将其延迟几秒钟。

我的问题是过渡不起作用并且不会延迟弹出窗口(也不是深色叠加层)。

  1. 为什么会这样?我该如何解决?
  2. 如果不可能,还有其他方法可以将弹出窗口延迟几秒钟吗?

hr {
  clear: both;
  margin-top: 15px;
  margin-bottom: 15px;
  border: 0;
  border-top: 1px solid #aaaaaa;
}

#css-only-modals {
  position: fixed;
  pointer-events: none;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 10000000;
  text-align: center;
  white-space: nowrap;
  height: 100%;
}

#css-only-modals:before {
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -0.25em;
}

.css-only-modal-check {
  pointer-events: auto;
}

.css-only-modal-check:checked~.css-only-modal {
  /* FOR TRANSITION */
  opacity: 1;
  transition: opacity 3s;
  /*NOT WORKING */
  pointer-events: auto;
}

.css-only-modal {
  width: 360px;
  background: #FFF;
  z-index: 1;
  display: inline-block;
  position: relative;
  pointer-events: auto;
  padding: 25px;
  text-align: right;
  border-radius: 4px;
  white-space: normal;
  display: inline-block;
  vertical-align: middle;
  opacity: 0;
  pointer-events: none;
}

.css-only-modal h2 {
  text-align: left;
  color: #1A1A1C;
}

.css-only-modal p {
  text-align: left;
}

.css-only-modal-close {
  position: absolute;
  top: 25px;
  right: 25px;
}

.css-only-modal-check {
  display: none;
}

.css-only-modal-check:checked~#screen-shade {
  /* FOR TRANSITION */
  opacity: 0.5;
  transition: opacity 3s;
  /*NOT WORKING */
  pointer-events: auto;
}

#screen-shade {
  opacity: 0;
  background: #000;
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  pointer-events: none;
  transition: opacity 0.8s;
}

.stripe>.container>p,
.stripe>.container>ul {
  text-align: left;
  padding: 35px;
  margin: 0;
}

#nav-spacer {
  display: block;
  height: 50px;
}

.stripe {
  width: 100%;
  text-align: center;
  overflow: hidden;
}

.css-only-modal-btn {
  background-color: #BD2C15;
  color: white;
  padding: 8px 18px;
  letter-spacing: 0.5px;
}

.css-only-modal-btn:hover {
  color: #BD2C15;
  background-color: transparent;
  outline: 2px solid #BD2C15;
  transition: background-color 0.5s, color 0.5s;
}
<label for="modal1">
  <div id="css-only-modals">
    <input id="modal1" class="css-only-modal-check" type="checkbox" checked/>
    <div class="css-only-modal">
      <label for="modal1" class="css-only-modal-close"><i class="fa fa-times fa-2x"></i></label>
      <h2>Referral</h2>
      <hr />
      <p>Refer a customer, email me and receive a 25% commission. <br> Earn up to 1225$ from a single referral!</p>
      <hr />
      <label for="modal1" class="css-only-modal-btn">NICE!</label>
    </div>
    <div id="screen-shade"></div>
  </div>
</label>

CSS 中,我创建了两个“FOR TRANSITION”cmets。它们标记了我想要过渡的不透明度。

【问题讨论】:

  • transition 应始终设置,而不仅仅是在检查某些内容时设置transition
  • 我需要它在 :checked 激活后进行转换,这是 HTML 弹出窗口的制作方式。如果我将其设置为始终设置,而不仅仅是在检查时,我无法关闭弹出窗口。还是我误会了什么?
  • 是的,你误解了transition 属性。阅读此MDN Article 了解更多信息
  • 可以使用css动画
  • 我试试,谢谢

标签: html css css-transitions transition opacity


【解决方案1】:

将过渡效果放在您的初始元素上。

.css-only-modal-check {
    pointer-events: auto;
}


.css-only-modal-check ~ .css-only-modal {
    /* FOR TRANSITION */
    transition: opacity 3s; 
}

.css-only-modal-check:checked ~ .css-only-modal {
    opacity: 1;
    pointer-events: auto;
}

.css-only-modal {
    width: 360px;
    background: #FFF;
    z-index: 1;
    display: inline-block;
    position: relative;
    pointer-events: auto;
    padding: 25px;
    text-align: right;
    border-radius: 4px;
    white-space: normal;
    display: inline-block;
    vertical-align: middle;
    opacity: 0;
    pointer-events: none;
}

【讨论】:

  • 我复制并用您的代码替换了我的代码,它似乎不起作用。你试过了吗?也许我犯了一个错误编辑:在我点击“Nice!”后它会淡出它。按钮。我想过渡淡入
  • 让我做一个快速的小提琴,我会看看。给我5分钟
  • @JamesCurtis,我已经创建了那个 codepen。所以唯一奇怪的是输入是默认检查的。因此,您必须选中或取消选中该框才能真正看到正在发生的变化。我从您的输入中删除了 display: none ,如果我选中或取消选中它,它工作正常。 -> codepen.io/mblmarlon/pen/RwPrrOR
  • 我明白了,谢谢。有没有办法可以在页面加载后延迟检查按钮?我的意思是按钮会在页面加载后 3-4 秒后自我检查。如果我能做到这一点,问题就解决了。顺便说一句,这种见解对我帮助很大。
  • 好吧,如果您不需要复选框,那么您也不一定需要它。您可以向您的模态添加一个类,例如 window.onload... 然后添加诸如“活动”之类的类,如果 modal.active 然后使 oacity 1,...(您也可以为该机器人功能和动画添加延迟-延迟)。如果您随后单击该按钮,您可能希望再次删除活动类。
【解决方案2】:

还要确保始终设置过渡,仅在 ~checked 时将不透明度更改为 0。

transition-delay 也必须在转换之下。 这是完整的修改代码

.css-only-modal-check {
    pointer-events: auto;
}


.css-only-modal-check ~ .css-only-modal {
    /* FOR TRANSITION */
    transition: opacity 3s; 
}

.css-only-modal-check:checked ~ .css-only-modal {
    opacity: 0;
    pointer-events: auto;
}

.css-only-modal {
    width: 360px;
    background: #FFF;
    z-index: 1;
    display: inline-block;
    position: relative;
    pointer-events: auto;
    padding: 25px;
    text-align: right;
    border-radius: 4px;
    white-space: normal;
    display: inline-block;
    vertical-align: middle;
    /*opacity: 0;*/
    transition: opacity 3s; 
    transition-delay:2s;
    pointer-events: none;
}

【讨论】:

  • 当我将 :checked 设置为你所说的那样时,弹出窗口在页面加载时保持在 0 不透明度。代码如下: .css-only-modal-check:checked ~ .css-only-modal { /* FOR TRANSITION */ transition:3s;不透明度:0;指针事件:自动; }
  • 您需要从“ .css-only-modal ”中删除 opacity:0 ,因为该设置默认为 0。默认情况下它应该是 1 并且只有当 ~checked 时它应该是 0。
  • @Gershom检查其余答案
猜你喜欢
  • 2021-07-26
  • 2017-06-27
  • 2018-08-01
  • 2019-01-03
  • 2016-12-08
  • 1970-01-01
  • 2017-11-01
  • 2019-03-26
  • 2011-11-24
相关资源
最近更新 更多