Gim*_*mmy 153 css css3 css-transitions
有没有一个跨浏览器解决方案来生成只有CSS的滑入式转换,没有javascript?以下是html内容的示例:
<div>
    <img id="slide" src="http://.../img.jpg />
</div>
Chr*_*der 255
您可以使用CSS3过渡或CSS3动画在元素中滑动.
对于浏览器支持:http://caniuse.com/
我做了两个简单的例子,只是为了告诉你我的意思.
CSS转换(悬停时)
相关守则
.wrapper:hover #slide {
    transition: 1s;
    left: 0;
}
在这种情况下,我只是从转移位置left: -100px;到0;了1秒.持续时间.也可以使用移动元素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
希望这有帮助.
mat*_*e64 147
transform来避免性能问题(移动)甲常见缺陷是动画
left/top/right/bottom属性,而不是使用CSS变换,以实现相同的效果.由于各种原因,转换的语义使它们更容易卸载,但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>w.s*_*ger 13
这是使用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: all .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>