我正在尝试为每个单独的li列表元素设置动画,同时保持列表格式。
这是css
$(“。BeverlyWarbrickcontent”)。css(“visibility”,“hidden”);
$( “#BeverlyWarbrick”)……
而不是使用 position: absolute; ,你需要使用 position: relative;
position: absolute;
position: relative;
#BeverlyWarbrick { position: relative; }
例如:
body { background-color: #000; } ul { margin: 0; padding: 0; } .women { margin-left: 10px; } .women ul li { font-family: serif; font-size: 3em; color: #fff; list-style: none; } .women div { position: relative; animation: 2s float-right ease-out forwards; left: -500px; } .women div:nth-of-type(2) { animation-delay: 1s; } @keyframes float-right { 0% { left: -500px; opacity: 0; } 25% { opacity: 1; } 75% { left: -20px; } 100% { left: 0px; } }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="women"> <ul> <div id="BeverlyWarbrick"> <li>Beverly Warbrick</li> </div> <div id="MargaretNooski"> <li>Margaret Nooski</li> </div> </ul> </div>
请注意,我已从以下代码段中删除了一些代码,并且仅为了演示目的将其保留在最小值。
而且,编写CSS的方式不具备可扩展性。您正在为每个元素重复相同的CSS。除此之外,考虑使用标签选择器,建议使用SASS进行此类操作,以便您可以轻松地将每个项目的延迟循环到动画,或者您可以使用jQuery附加一个 class 对这些项目中的每一项进行延迟,然后依次为它们设置动画。
class
在您发表评论之后,我还添加了一个jQuery解决方案来延迟这些项目。例如:
let c = 0; $(".women").find('div').each(function() { let elm = $(this); elm.css({ 'animation-delay': `${c}s` }); c++; });
body { background-color: #000; } ul { margin: 0; padding: 0; } .women { margin-left: 10px; } .women ul li { font-family: serif; font-size: 3em; color: #fff; list-style: none; } .women div { position: relative; animation: 2s float-right ease-out forwards; left: -500px; } @keyframes float-right { 0% { left: -500px; opacity: 0; } 25% { opacity: 1; } 75% { left: -20px; } 100% { left: 0px; } }
在这里,我循环遍历所有 div 并添加延迟 1s 超过以前 div 所以这些项目将一个接一个地动画。请注意,我已删除 animation-delay 第二个 div 来自CSS,不像我之前的解决方案,因为现在你不再需要了。
div
1s
animation-delay