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不会过渡不透明度的主要内容,如果未能解决你的问题,请参考以下文章