2016-08-04 4 views
14

साथ नेविगेशन प्रदर्शित करने के लिए यह वह जगह है जो मैं jsFiddle linkCss संक्रमण ब्लॉक, subnav

nav.main ul ul { 
 
    position: absolute; 
 
    list-style: none; 
 
    display: none; 
 
    opacity: 0; 
 
    visibility: hidden; 
 
    padding: 10px; 
 
    background-color: rgba(92, 91, 87, 0.9); 
 
    -webkit-transition: opacity 600ms, visibility 600ms; 
 
      transition: opacity 600ms, visibility 600ms; 
 
} 
 

 
nav.main ul li:hover ul { 
 
    display: block; 
 
    visibility: visible; 
 
    opacity: 1; 
 
}
<nav class="main"> 
 
    <ul> 
 
     <li> 
 
      <a href="">Lorem</a> 
 
      <ul> 
 
       <li><a href="">Ipsum</a></li> 
 
       <li><a href="">Dolor</a></li> 
 
       <li><a href="">Sit</a></li> 
 
       <li><a href="">Amet</a></li> 
 
      </ul> 
 
     </li> 
 
    </ul> 
 
</nav>

है क्यों वहाँ कोई संक्रमण है? अगर मैं

nav.main ul li:hover ul { 
    display: block; 
    visibility: visible; 
    opacity: 0; /* changed this line */ 
} 

फिर "सबनाव" कभी नहीं दिखाई देगा (बिल्कुल) लेकिन अस्पष्टता पर संक्रमण क्यों ट्रिगर नहीं करता है? संक्रमण कैसे काम करें?

+1

फीका संक्रमण मेरे लिए काम करता है, तो आप प्रदर्शन गुण निकालें: https://jsfiddle.net/LgvhLxya/ –

+1

@JamesWaddington Thats मैं क्या कह रहा हूँ। –

+0

आप Jquery शो और छिपाने के साथ ऐसा क्यों नहीं करते? फिर, आप अपनी एनीमेशन कर सकते हैं। – Vcasso

उत्तर

26

जैसा कि आप जानते हैं कि display संपत्ति एनिमेटेड नहीं हो सकती है लेकिन बस इसे अपने सीएसएस में रखने से यह visibility और opacity संक्रमणों को ओवरराइड करता है।

समाधान ... बस display गुण हटा दिए गए।

nav.main ul ul { 
 
    position: absolute; 
 
    list-style: none; 
 
    opacity: 0; 
 
    visibility: hidden; 
 
    padding: 10px; 
 
    background-color: rgba(92, 91, 87, 0.9); 
 
    -webkit-transition: opacity 600ms, visibility 600ms; 
 
    transition: opacity 600ms, visibility 600ms; 
 
} 
 
nav.main ul li:hover ul { 
 
    visibility: visible; 
 
    opacity: 1; 
 
}
<nav class="main"> 
 
    <ul> 
 
    <li> 
 
     <a href="">Lorem</a> 
 
     <ul> 
 
     <li><a href="">Ipsum</a> 
 
     </li> 
 
     <li><a href="">Dolor</a> 
 
     </li> 
 
     <li><a href="">Sit</a> 
 
     </li> 
 
     <li><a href="">Amet</a> 
 
     </li> 
 
     </ul> 
 
    </li> 
 
    </ul> 
 
</nav>

+10

हां, लेकिन वह उल इस तरह से डोम में जगह ले जाएगा। – Vcasso

+0

कोई फर्क नहीं पड़ता क्योंकि आप पूर्ण स्थिति का उपयोग कर रहे हैं जो सामान्य दस्तावेज़ प्रवाह से तत्व को हटा देता है। यहां एक और पोस्ट है जो आपके जैसा है ... http://stackoverflow.com/questions/22103006/css3-transition-doesnt-work-with-display-property। दोनों डिस्प्ले को हटाएं: कोई नहीं 'और' दृश्यता: छुपा '। –

7

आप एनीमेशन-फ़्रेम के बजाय संक्रमण के साथ ऐसा कर सकते हैं। अपने होवर घोषणा को बदलें और एनीमेशन कीफ्रेम जोड़ें, आपको -मोज़- और -webkit- के लिए ब्राउज़र उपसर्ग जोड़ने की भी आवश्यकता हो सकती है। अधिक विस्तृत जानकारी के लिए https://developer.mozilla.org/en/docs/Web/CSS/@keyframes देखें।

nav.main ul li:hover ul { 
    display: block; 
    visibility: visible; 
    opacity: 1; 
    animation: fade 1s; 
} 

@keyframes fade { 
    0% { 
     opacity: 0; 
    } 

    100% { 
     opacity: 1; 
    } 
} 

यहां आपके पहेली पर एक अपडेट है। https://jsfiddle.net/orax9d9u/1/

+0

यह बहुत चालाक है। प्रदर्शन: कोई नहीं -> ब्लॉक एनिमेट नहीं कर सकता है, लेकिन एक दृश्यता जोड़ना: छुपा -> दृश्य इसे ट्रिगर करता है। Coolio! – Ryan

+0

आप महोदय, एक प्रतिभाशाली हैं। – Aerik

11

आम तौर पर जब लोग display: none चेतन करने के लिए क्या वे वास्तव में चाहते कोशिश कर रहे हैं: में

  1. फीका सामग्री, और
  2. आइटम नहीं जब छिपा हुआ दस्तावेज़ में स्थान ले लो

सबसे लोकप्रिय उत्तर visibility का उपयोग करते हैं, जो केवल पहले लक्ष्य को प्राप्त कर सकते हैं, लेकिन सौभाग्य से यह position का उपयोग करके दोनों को हासिल करना आसान है।

position: absolute के बाद से निकाल देता है दस्तावेज़ प्रवाह रिक्ति टाइपिंग से तत्व, आप position: absolute और position: static (वैश्विक डिफ़ॉल्ट) के बीच टॉगल कर सकते हैं, opacity के साथ संयुक्त। नीचे उदाहरण देखें।

.content-page { 
 
    position:absolute; 
 
    opacity: 0; 
 
} 
 

 
.content-page.active { 
 
    position: static; 
 
    opacity: 1; 
 
    transition: opacity 1s linear; 
 
}

+0

क्या होगा यदि मैं लंबवत केंद्रित सामग्री (फीका आउट/इन) होने के लिए मूल तत्व पर 'डिस्प्ले: फ्लेक्स' का उपयोग कर रहा हूं? 'स्थिति: पूर्ण' तो इसे तोड़ देता है। –

+0

लंबवत केंद्र के अन्य तरीके हैं, जैसे लाइन ऊंचाई, ऊंचाई देखें, या jquery/जावास्क्रिप्ट का उपयोग करना। या आप अपने फ्लेक्स प्रदर्शित माता-पिता के भीतर बच्चे को बना सकते हैं? –

+0

यदि आप बच्चों को बना सकते हैं तो आप क्या सुझाव देते हैं? –

संबंधित मुद्दे