CSS不会过渡不透明度

Posted

技术标签:

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

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

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

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

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动画 我试试,谢谢 【参考方案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检查其余答案

以上是关于CSS不会过渡不透明度的主要内容,如果未能解决你的问题,请参考以下文章

CSS 不透明度过渡淡入一行

有没有办法仅将“过渡:背景图像”用于不透明度?

淡入/淡出的简单切换不适用于过渡、不透明度和可见性

CSS不透明度忽略过渡时间

悬停时不透明度的 CSS3 过渡不起作用

css img过渡为不透明度