CSS Transitions允许CSS值的属性更改在指定的持续时间内平滑发生。
使用 Transitions 的 Slider Vue 组件无法获得正确的行为
我正在尝试创建一个简单的 Vue 组件,通过向左滑动一个元素并同时从右侧滑动第二个元素来替换它来交换两个元素。然后触发时反之亦然...
如何在 Vue.js 3 中对动态添加到列表中的元素进行动画处理?
我正在使用 Vue 3 开发一个小型 Todo 应用程序。我希望附加新的待办事项能够顺利,而不是瞬时的。 为此,我已将类 active 添加到最新的待办事项中: <
是否可以将 <hue-interpolation-method> 与动画或过渡一起使用?
是否可以为除渐变之外的任何内容指定a;具体来说:过渡或动画? 。盒子 { 宽度:300px; 高度:50px; } .box.gradient { 背景:线性渐变(...
我正在尝试 VueJS。我制作了一个非常轻量级的“应用程序”,其中只有两个视图:“Home”和“MineSweeper”。在 App.vue 中,我创建了一个导航栏,其中有
我有一个带有渐变轮廓的div 。当处于 :hover 状态时,div 会获得渐变背景。 过渡似乎不起作用。我可以...
在使用 jQuery 的 .fadeOut() 隐藏某些元素后,是否可以通过 css3 过渡来为元素移动设置动画? 我在这里找到了某种解决方案(请参阅“它也适用于网格”部分): 豪...
我有这个简单的反应组件: 函数 DivModal() { const [isOpen, setIsOpen] = useState(true) 返回 ( setIsOpen(prev => !prev)} 我有这个简单的反应组件: function DivModal() { const [isOpen, setIsOpen] = useState(true) return ( <div> <button onClick={() => setIsOpen(prev => !prev)} className={buttonStyle}>Open</button> {isOpen && ( <div className='fixed top-0 left-0 w-full h-full bg-black/50'> <div className={`fixed top-0 ${isOpen ? 'left-0' : '-left-full'} flex transition-left duration-1000 ease-in-out`}> <ul className='bg-white'> <li>first</li> <li>second</li> <li>third</li> </ul> <button onClick={() => setIsOpen(prev => !prev)}>close</button> </div> </div> )} </div> ) } 单击时该组件会正确显示和消失,但是是即时的。打开时没有从左到右的过渡,关闭时没有从左到右的过渡。怎么做呢? transition-left 不是具有默认配置的 Tailwind 类。通过 transition-duration 类设置非零 duration-* 意味着 transition-property: all 无论如何,所以 transition-left 已过时。 要播放过渡,您需要将元素保留在 DOM 中: const { useState } = React; const buttonStyle = ''; function DivModal() { const [isOpen, setIsOpen] = useState(true) return ( <div> <button onClick={() => setIsOpen(prev => !prev)} className={buttonStyle}>Open</button> <div className='fixed top-0 left-0 w-full h-full bg-black/50'> <div className={`fixed top-0 ${isOpen ? 'left-0' : '-left-full'} flex duration-1000 ease-in-out`}> <ul className='bg-white'> <li>first</li> <li>second</li> <li>third</li> </ul> <button onClick={() => setIsOpen(prev => !prev)}>close</button> </div> </div> </div> ) } ReactDOM.createRoot(document.getElementById('app')).render(<DivModal/>); <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js" integrity="sha512-8Q6Y9XnTbOE+JNvjBQwJ2H8S+UV4uA6hiRykhdtIyDYZ2TprdNmWOUaKdGzOhyr4dCyk287OejbPvwl7lrfqrQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js" integrity="sha512-MOCpqoRoisCTwJ8vQQiciZv0qcpROCidek3GTFS6KTk2+y7munJIlKCVkFCYY+p3ErYFXCjmFjnfTTRSC1OHWQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdn.tailwindcss.com/3.4.1"></script> <div id="app"></div> 但是我们看到bg-black/50覆盖仍然存在。因此,我们可以通过将其与内部抽屉一起隐藏来改进这一点,也许还可以使用过渡淡入淡出: const { useState } = React; const buttonStyle = ''; function DivModal() { const [isOpen, setIsOpen] = useState(true) return ( <div> <button onClick={() => setIsOpen(prev => !prev)} className={buttonStyle}>Open</button> <div className={`fixed top-0 left-0 w-full h-full bg-black/50 duration-200 ${isOpen ? '' : 'invisible bg-black/0'}`}> <div className={`fixed top-0 ${isOpen ? 'left-0' : '-left-full'} flex duration-1000 ease-in-out`}> <ul className='bg-white'> <li>first</li> <li>second</li> <li>third</li> </ul> <button onClick={() => setIsOpen(prev => !prev)}>close</button> </div> </div> </div> ) } ReactDOM.createRoot(document.getElementById('app')).render(<DivModal/>); <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js" integrity="sha512-8Q6Y9XnTbOE+JNvjBQwJ2H8S+UV4uA6hiRykhdtIyDYZ2TprdNmWOUaKdGzOhyr4dCyk287OejbPvwl7lrfqrQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js" integrity="sha512-MOCpqoRoisCTwJ8vQQiciZv0qcpROCidek3GTFS6KTk2+y7munJIlKCVkFCYY+p3ErYFXCjmFjnfTTRSC1OHWQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdn.tailwindcss.com/3.4.1"></script> <div id="app"></div> 您也可以考虑使用 transform: translateX() 代替 left。这提高了过渡的性能,因为浏览器不需要在每个动画帧重新执行布局计算。应用 transform: translateX(-100%) 还意味着抽屉只会滑动其自身宽度的距离,这意味着等待它滑动视口宽度时不会出现奇怪的延迟。这也意味着我们可以“同步”覆盖层和抽屉本身的持续时间: const { useState } = React; const buttonStyle = ''; function DivModal() { const [isOpen, setIsOpen] = useState(true) return ( <div> <button onClick={() => setIsOpen(prev => !prev)} className={buttonStyle}>Open</button> <div className={`fixed top-0 left-0 w-full h-full bg-black/50 duration-500 ${isOpen ? '' : 'invisible bg-black/0'}`}> <div className={`fixed top-0 ${isOpen ? '' : '-translate-x-full'} flex duration-500 ease-out`}> <ul className='bg-white'> <li>first</li> <li>second</li> <li>third</li> </ul> <button onClick={() => setIsOpen(prev => !prev)}>close</button> </div> </div> </div> ) } ReactDOM.createRoot(document.getElementById('app')).render(<DivModal/>); <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js" integrity="sha512-8Q6Y9XnTbOE+JNvjBQwJ2H8S+UV4uA6hiRykhdtIyDYZ2TprdNmWOUaKdGzOhyr4dCyk287OejbPvwl7lrfqrQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js" integrity="sha512-MOCpqoRoisCTwJ8vQQiciZv0qcpROCidek3GTFS6KTk2+y7munJIlKCVkFCYY+p3ErYFXCjmFjnfTTRSC1OHWQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://cdn.tailwindcss.com/3.4.1"></script> <div id="app"></div>
防止 CSS 从 Jumping 过渡到 font-size 0
我想通过平滑缩小来使分割消失。 我尝试将字体大小更改为 0,并将过渡设置为 1 秒。 当我这样做时,字体会得到一些最小尺寸,然后
这是我的 CSS,它突出显示具有绿色背景的 :target 伪元素,然后在四秒内淡出背景: @关键帧突出显示{ 0% { 背景:绿色 } 1...
我正在尝试显示我的 p 文本,它没有使用转换。 我试图从一小时内解决它,但不明白为什么它不起作用。 .section-about--card { 宽度:100%; 高度:15re...
#slide-buttons.horizontal { 最大宽度:0; 过渡:最大宽度 0.9s 缓出; 溢出:隐藏; } #slide-buttons.horizontal.slide-in { 最大宽度:1000px; /*溢出:
是否有跨浏览器解决方案来仅使用CSS而不使用JavaScript来生成滑入过渡?下面是 html 内容的示例: 是否有跨浏览器解决方案可以仅使用 CSS 而无需使用 javascript 来生成滑入过渡?以下是 html 内容的示例: <div> <img id="slide" src="http://.../img.jpg /> </div> 您可以使用 CSS3 过渡或 CSS3 动画在元素中滑动。 浏览器支持:http://caniuse.com/ 我做了两个简单的例子只是为了向你展示我的意思。 CSS 过渡(悬停时) 演示一 相关代码 .wrapper:hover #slide { transition: 1s; left: 0; } 在本例中,我只是用 1 秒将位置从 left: -100px; 转换为 0;。期间。也可以使用 transform: translate(); 移动元素 CSS动画 演示二 #slide { position: absolute; left: -100px; width: 100px; height: 100px; background: blue; -webkit-animation: slide 0.5s forwards; -webkit-animation-delay: 2s; animation: slide 0.5s forwards; animation-delay: 2s; } @-webkit-keyframes slide { 100% { left: 0; } } @keyframes slide { 100% { left: 0; } } 与上面(演示一)原理相同,但动画在 2s 后自动开始,在本例中,我将 animation-fill-mode 设置为 forwards,这将保持结束状态,使动画结束时保持 div 可见. 就像我说的,有两个简单的例子来向您展示如何做到这一点。 编辑: 有关 CSS 动画和过渡的详细信息,请参阅: 动画 https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_animations 过渡 https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_transitions 使用 CSS3 2D transform 避免性能问题(移动设备) 一个常见的陷阱是对 left/top/right/bottom属性进行动画处理,而不是使用 css-transform 来实现相同的效果。由于各种原因,转换的语义使它们更容易卸载,但是 left/top/right/bottom 则要困难得多。 来源:Mozilla 开发者网络 (MDN) 演示: var $slider = document.getElementById('slider'); var $toggle = document.getElementById('toggle'); $toggle.addEventListener('click', function() { var isOpen = $slider.classList.contains('slide-in'); $slider.setAttribute('class', isOpen ? 'slide-out' : 'slide-in'); });#slider { position: absolute; width: 100px; height: 100px; background: blue; transform: translateX(-100%); -webkit-transform: translateX(-100%); } .slide-in { animation: slide-in 0.5s forwards; -webkit-animation: slide-in 0.5s forwards; } .slide-out { animation: slide-out 0.5s forwards; -webkit-animation: slide-out 0.5s forwards; } @keyframes slide-in { 100% { transform: translateX(0%); } } @-webkit-keyframes slide-in { 100% { -webkit-transform: translateX(0%); } } @keyframes slide-out { 0% { transform: translateX(0%); } 100% { transform: translateX(-100%); } } @-webkit-keyframes slide-out { 0% { -webkit-transform: translateX(0%); } 100% { -webkit-transform: translateX(-100%); } }<div id="slider" class="slide-in"> <ul> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ul> </div> <button id="toggle" style="position:absolute; top: 120px;">Toggle</button> 这是使用 css 转换的另一种解决方案(出于移动设备上的性能目的,请参阅 @mate64 的答案),而无需使用动画和关键帧。 我创建了两个版本,可以从两侧滑入。 $('#toggle').click(function() { $('.slide-in').toggleClass('show'); });.slide-in { z-index: 10; /* to position it in front of the other content */ position: absolute; overflow: hidden; /* to prevent scrollbar appearing */ } .slide-in.from-left { left: 0; } .slide-in.from-right { right: 0; } .slide-in-content { padding: 5px 20px; background: #eee; transition: transform .5s ease; /* our nice transition */ } .slide-in.from-left .slide-in-content { transform: translateX(-100%); -webkit-transform: translateX(-100%); } .slide-in.from-right .slide-in-content { transform: translateX(100%); -webkit-transform: translateX(100%); } .slide-in.show .slide-in-content { transform: translateX(0); -webkit-transform: translateX(0); }<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="slide-in from-left"> <div class="slide-in-content"> <ul> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ul> </div> </div> <div class="slide-in from-right"> <div class="slide-in-content"> <ul> <li>One</li> <li>Two</li> <li>Three</li> </ul> </div> </div> <button id="toggle" style="position:absolute; top: 120px;">Toggle</button> 我喜欢@mate64的答案,所以我将重用它并稍作修改,以创建下面的向下和向上滑动动画: var $slider = document.getElementById('slider'); var $toggle = document.getElementById('toggle'); $toggle.addEventListener('click', function() { var isOpen = $slider.classList.contains('slide-in'); $slider.setAttribute('class', isOpen ? 'slide-out' : 'slide-in'); });#slider { position: absolute; width: 100px; height: 100px; background: blue; transform: translateY(-100%); -webkit-transform: translateY(-100%); } .slide-in { animation: slide-in 0.5s forwards; -webkit-animation: slide-in 0.5s forwards; } .slide-out { animation: slide-out 0.5s forwards; -webkit-animation: slide-out 0.5s forwards; } @keyframes slide-in { 100% { transform: translateY(0%); } } @-webkit-keyframes slide-in { 100% { -webkit-transform: translateY(0%); } } @keyframes slide-out { 0% { transform: translateY(0%); } 100% { transform: translateY(-100%); } } @-webkit-keyframes slide-out { 0% { -webkit-transform: translateY(0%); } 100% { -webkit-transform: translateY(-100%); } }<div id="slider" class="slide-in"> <ul> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ul> </div> <button id="toggle" style="position:absolute; top: 120px;">Toggle</button> 使用它从右向左滑动 $(document).ready(function() { $('a#click-a').click(function() { $('.nav').toggleClass('nav-view'); }); });/*nav*/ .nav { position: fixed; right: 0; top: 70px; width: 250px; height: calc(100vh - 70px); background-color: #333; transform: translateX(100%); transition: transform 0.3s ease-in-out; } .nav-view { transform: translateX(0); } .nav ul { margin: 0; padding: 0; } .nav ul li { margin: 0; padding: 0; list-style-type: none; } .nav ul li a { color: #fff; display: block; padding: 10px; border-bottom: solid 1px rgba(255, 255, 255, 0.4); text-decoration: none; }<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <div class="menu"> <a href="#" id="click-a">Toggle</a> </div> <div class="nav "> <ul> <li><a href="#">HOME</a></li> <li><a href="#">ABOUT</a></li> <li><a href="#">SERVICES</a></li> <li><a href="#">CONTACT</a></li> </ul> </div> var $slider = document.getElementById('slider'); var $toggle = document.getElementById('toggle'); $toggle.addEventListener('click', function() { var isOpen = $slider.classList.contains('slide-in'); $slider.setAttribute('class', isOpen ? 'slide-out' : 'slide-in'); });#slider { position: absolute; width: 100px; height: 100px; background: blue; transform: translateX(-100%); -webkit-transform: translateX(-100%); } .slide-in { animation: slide-in 0.5s forwards; -webkit-animation: slide-in 0.5s forwards; } .slide-out { animation: slide-out 0.5s forwards; -webkit-animation: slide-out 0.5s forwards; } @keyframes slide-in { 100% { transform: translateX(0%); } } @-webkit-keyframes slide-in { 100% { -webkit-transform: translateX(0%); } } @keyframes slide-out { 0% { transform: translateX(0%); } 100% { transform: translateX(-100%); } } @-webkit-keyframes slide-out { 0% { -webkit-transform: translateX(0%); } 100% { -webkit-transform: translateX(-100%); } }<div id="slider" class="slide-in"> <ul> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ul> </div> <button id="toggle" style="position:absolute; top: 120px;">Toggle</button> var $slider = document.getElementById('slider'); var $toggle = document.getElementById('toggle'); $toggle.addEventListener('click', function() { var isOpen = $slider.classList.contains('slide-in'); $slider.setAttribute('class', isOpen ? 'slide-out' : 'slide-in'); });#slider { position: absolute; width: 100px; height: 100px; background: blue; transform: translateY(-100%); -webkit-transform: translateY(-100%); } .slide-in { animation: slide-in 0.5s forwards; -webkit-animation: slide-in 0.5s forwards; } .slide-out { animation: slide-out 0.5s forwards; -webkit-animation: slide-out 0.5s forwards; } @keyframes slide-in { 100% { transform: translateY(0%); } } @-webkit-keyframes slide-in { 100% { -webkit-transform: translateY(0%); } } @keyframes slide-out { 0% { transform: translateY(0%); } 100% { transform: translateY(-100%); } } @-webkit-keyframes slide-out { 0% { -webkit-transform: translateY(0%); } 100% { -webkit-transform: translateY(-100%); } }<div id="slider" class="slide-in"> <ul> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ul> </div> <button id="toggle" style="position:absolute; top: 120px;">Toggle</button>
我的问题是“如何在 CSS 中用另一张卡片替换一张卡片或用另一张图像替换一张图像?” 这是我的代码: * { 保证金:0; 填充:0; 框大小:边框框; } 身体 { 显示:...
*IN* 和 *OUT* 的不同 CSS 转换(或从转换状态返回)
我有一个在 Ajax 加载事件期间出现的加载图像。通过向 body 元素添加或删除“加载”类来显示/隐藏图像。目前,加载图像有动画
CSS3 转换:*IN* 和 *OUT* 的不同转换(或从转换状态返回)
原始问题...更新了以下工作代码: 我有一个在 ajax 加载事件期间出现的加载图像。通过向 body 元素添加或删除“加载”类来显示/隐藏图像。
当我尝试使用 Tailwind 中的默认“w-#”选项进行转换时,我的转换不适用。当我在自己的类中对宽度进行硬编码时,它工作得很好。泰有什么奇怪的地方吗...
我正在展示一个使用 CSS3 过渡的模式弹出窗口(很大程度上借用自 Effeckt.css)。它适用于除 Safari 之外的所有现代浏览器。在 Safari 中,移动没问题,但是背景颜色...
CSS 文本动画按钮/为悬停时的跨度内容文本添加 CSS 过渡
总结 我想在用户将鼠标悬停在按钮上时使用平滑的 CSS 动画/过渡向按钮文本添加右向双角引号 (»)。 问题 我想添加一个 Right-Po...
我想在鼠标悬停在按钮上时向按钮文本添加右向双角引号 (»)。这工作得很好,请参阅下面的我的代码。但是,当我将鼠标移到
我想在鼠标悬停在按钮上时向按钮文本添加右向双角引号 (»)。这工作得很好,请参阅下面的我的代码。但是,当我将鼠标移到