सीएसएस 3 स्लाइड-इन बाएं संक्रमण से


177

क्या सीएसएस के साथ एक स्लाइड-इन संक्रमण का उत्पादन करने के लिए एक क्रॉस ब्राउज़र समाधान है, कोई जावास्क्रिप्ट नहीं? नीचे HTML सामग्री का एक उदाहरण दिया गया है:

<div>
    <img id="slide" src="http://.../img.jpg />
</div>

जवाबों:


286

आप एक तत्व में स्लाइड करने के लिए CSS3 बदलाव या शायद CSS3 एनिमेशन का उपयोग कर सकते हैं।

ब्राउज़र समर्थन के लिए: http://caniuse.com/

मैंने आपको केवल यह दिखाने के लिए दो त्वरित उदाहरण दिए कि मेरा क्या मतलब है।

सीएसएस संक्रमण (होवर पर)

डेमो एक

प्रासंगिक कोड

.wrapper:hover #slide {
    transition: 1s;
    left: 0;
}

इस मामले में, मैं सिर्फ से स्थिति संक्रमण left: -100px;के लिए 0;एक 1s के साथ। समयांतराल। उपयोग करने वाले तत्व को स्थानांतरित करना भी संभव हैtransform: translate();

सीएसएस एनीमेशन

डेमो दो

#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, जो एनीमेशन समाप्त होने पर डिव को दृश्यमान रखते हुए अंतिम स्थिति को बनाए रखेगा।

जैसा कि मैंने कहा, यह दिखाने के लिए दो त्वरित उदाहरण हैं कि यह कैसे किया जा सकता है।

EDIT: सीएसएस एनिमेशन और बदलाव के बारे में जानकारी के लिए देखें:

एनिमेशन

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

आशा है कि इससे मदद मिली।


174

transformप्रदर्शन समस्याओं (मोबाइल) से बचने के लिए CSS3 2D का उपयोग करें

एक आम नुकसान का उपयोग करने के बजाय चेतन left/ top/ right/ bottomगुण हैउसी प्रभाव को प्राप्त करने के लिए। कई कारणों से, परिवर्तनों के शब्दार्थ उन्हें बोझ उतारने में आसान बनाते हैं, लेकिन left/ top/ right/ bottomबहुत अधिक कठिन होते हैं।

स्रोत: मोज़िला डेवलपर नेटवर्क (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>


20

यहाँ एक और समाधान है 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>


2

उपयोग छोड़ने के लिए अधिकार का उपयोग करें:

HTML:

   <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>

सीएसएस:

/*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;
}

जे एस:

  $(document).ready(function(){
  $('a#click-a').click(function(){
    $('.nav').toggleClass('nav-view');
  });
});

0

मुझे @ 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>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.