शुद्ध सीएसएस पतन / div का विस्तार


91

मेरे पास एक शुद्ध CSS collapsable div है जो किसी और के कोड पर आधारित है जो :targetpsuedoclass का उपयोग करता है । मैं जो सेट करने का प्रयास कर रहा हूं, वह 12+ प्रश्नों वाला एक पृष्ठ है, और जब आप + बटन पर क्लिक करते हैं, तो उत्तर div नीचे विस्तृत हो जाती है। मैं इस पृष्ठ पर अतिरिक्त सीएसएस का एक टन लिखे बिना एकाधिक टकराने वाले दिव्य तत्वों को बनाने का तरीका नहीं जान सकता। किसी के पास सुझाव है कि यह कैसे लिखें ताकि मेरा सीएसएस कोड कम से कम हो? (यानी, इसलिए मुझे 12+ प्रश्नों में से प्रत्येक के लिए अद्वितीय चयनकर्ताओं का एक समूह इनपुट करना होगा)।

मैं जावास्क्रिप्ट का उपयोग नहीं कर सकता क्योंकि यह एक wordpress.com साइट पर जा रहा है जो JS की अनुमति नहीं देता है।

यहाँ मेरा jfiddle है: http://jsfiddle.net/dmarvs/94ukA/4/

<div class="FAQ">
    <a href="#hide1" class="hide" id="hide1">+</a>
    <a href="#show1" class="show" id="show1">-</a>
    <div class="question"> Question Question Question Question Question Question Question Question Question Question Question? </div>
        <div class="list">
            <p>Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer Answer </p>
        </div>
</div>
/* source: http://www.ehow.com/how_12214447_make-collapsing-lists-java.html */

.FAQ { 
    vertical-align: top; 
    height:auto !important; 
}
.list {
    display:none; 
    height:auto;
    margin:0;
    float: left;
}
.show {
    display: none; 
}
.hide:target + .show {
    display: inline; 
}
.hide:target {
    display: none; 
}
.hide:target ~ .list {
    display:inline; 
}

/*style the (+) and (-) */
.hide, .show {
    width: 30px;
    height: 30px;
    border-radius: 30px;
    font-size: 20px;
    color: #fff;
    text-shadow: 0 1px 0 #666;
    text-align: center;
    text-decoration: none;
    box-shadow: 1px 1px 2px #000;
    background: #cccbbb;
    opacity: .95;
    margin-right: 0;
    float: left;
    margin-bottom: 25px;
}

.hide:hover, .show:hover {
    color: #eee;
    text-shadow: 0 0 1px #666;
    text-decoration: none;
    box-shadow: 0 0 4px #222 inset;
    opacity: 1;
    margin-bottom: 25px;
}

.list p{
    height:auto;
    margin:0;
}
.question {
    float: left;
    height: auto;
    width: 90%;
    line-height: 20px;
    padding-left: 20px;
    margin-bottom: 25px;
    font-style: italic;
}

6
किसी भी व्यक्ति ने इसे वर्डप्रेस का उपयोग नहीं करते देखने के लिए कृपया मुझे यह मत कहो। इसकी हैक और यह एक पृष्ठ की बैक कार्यक्षमता को तोड़ता है जो सुपर कष्टप्रद है।
gbtimmon

जवाबों:


104

इस बात पर निर्भर करता है कि आप किन ब्राउज़रों / उपकरणों का समर्थन करना चाहते हैं, या आप उन गैर-अनुरूप ब्राउज़रों के लिए क्या तैयार करने के लिए तैयार हैं जो आप टैग <summary>और <detail>टैग की जाँच करना चाहते हैं । वे वास्तव में इस उद्देश्य के लिए हैं। किसी भी सीएसएस की आवश्यकता नहीं है क्योंकि ढहने और दिखाने के टैग परिभाषा / स्वरूपण का हिस्सा हैं।

मैंने यहां एक उदाहरण दिया है :

<details>
<summary>This is what you want to show before expanding</summary>
<p>This is where you put the details that are shown once expanded</p>
</details>

ब्राउज़र समर्थन बदलता है। सर्वोत्तम परिणामों के लिए वेबकिट में प्रयास करें। अन्य ब्राउज़र सभी समाधानों को दिखाने में डिफ़ॉल्ट हो सकते हैं। आप शायद ऊपर बताए गए छिपाने / दिखाने की विधि में वापस आ सकते हैं।


2
बग 591737 वह बग है जो फ़ायरफ़ॉक्स में समर्थन को ट्रैक करता है।
श्रीवत्सआर

9
यह लगभग 2016 के मध्य में है और इसके लिए समर्थन कुछ भी नहीं है। निश्चित रूप से इस समाधान का उपयोग न करें।
ड्वेन चारिंगटन

3
@DigitalSea समर्थन 'nonexistent' होना गलत है और 'निश्चित रूप से इस समाधान का उपयोग न करें' एक मानक के लिए मजबूत शब्द हैं जो कई वर्षों से स्थिर है और 2010 mathiasbynens.be/notes-html5-details के बाद से पॉलीफ़िल उपलब्ध है जंकरी । आपके तर्क का आधार क्या है? एमएस एज के इन टैगों को जल्द ही लागू करने की संभावना है। फ़ायरफ़ॉक्स ने सारांश / डिटेल टैग लागू किया है (लेकिन वर्तमान में यह एक ध्वज के पीछे है) वेबकिट क्रोम 12 से इसका समर्थन करता है क्योंकि ओएस एक्स और आईओएस ब्लिंक व्युत्पन्न ब्राउज़रों पर सफारी - क्रोम मोबाइल / डेस्कटॉप, ओपेरा इसे डिफॉल्ट के रूप में सपोर्ट करता है
Thurstan

1
@ थुरस्टन में कोई समर्थन नहीं; IE8, IE9, IE10, IE11, Edge 13, अगस्त 2016 तक फ़ायरफ़ॉक्स में कोई समर्थन नहीं है। इसलिए जब तक आपके पास IE के पूर्ण रूप से समर्थन की वर्तमान स्थिति नहीं है और वर्तमान में एज और फ़ायरफ़ॉक्स, हाँ, अच्छी तरह से समर्थित नहीं है। पॉलीफ़िल अनिवार्य रूप से करता है जो आप पहले से ही जावास्क्रिप्ट (jQuery के बिना) और काफी कुशलता से कर सकते हैं। अपने आप को लागू करने के लिए यह एक आसान पॉलीफ़िल ओवरकिल है। आपके द्वारा जोड़ा गया समाधान jQuery का उपयोग करता है जो अनावश्यक है। मुझे आश्चर्य नहीं होगा अगर हम इसे एक दिन भी कल्पना से हटा दें।
ड्वेन चारिंगटन

4
मैं केवल आधुनिक ब्राउज़रों के लिए विकसित कर रहा हूं और इस तकनीक ने मेरे उपयोग के मामले के लिए पूरी तरह से काम किया है, और सीएसएस की चाट की आवश्यकता नहीं है!
जोश हबदास

39

का उपयोग कर <summary>और<details>

उपयोग करना <summary>और <details>तत्व सबसे सरल है, लेकिन ब्राउज़र समर्थन देखें क्योंकि वर्तमान IE इसका समर्थन नहीं कर रहा है। हालांकि आप पॉलीफ़िल कर सकते हैं (अधिकांश jQuery- आधारित हैं)। ध्यान दें कि असमर्थित ब्राउज़र बस विस्तारित संस्करण दिखाएगा, ताकि कुछ मामलों में स्वीकार्य हो सके।

/* Optional styling */
summary::-webkit-details-marker {
  color: blue;
}
summary:focus {
  outline-style: none;
}
<details>
  <summary>Summary, caption, or legend for the content</summary>
  Content goes here.
</details>

यह भी देखें कैसे शैली के <details>तत्व (एचटीएमएल 5 डॉक्टर) (थोड़ा मुश्किल सा)।

शुद्ध CSS3

:targetचयनकर्ता एक बहुत अच्छा है ब्राउज़र समर्थन , और यह एक बनाने के लिए इस्तेमाल किया जा सकता एकल सीमा के भीतर सिमटने तत्व।

.details,
.show,
.hide:target {
  display: none;
}
.hide:target + .show,
.hide:target ~ .details {
  display: block;
}
<div>
  <a id="hide1" href="#hide1" class="hide">+ Summary goes here</a>
  <a id="show1" href="#show1" class="show">- Summary goes here</a>
  <div class="details">
    Content goes here.
  </div>
</div>
<div>
  <a id="hide2" href="#hide2" class="hide">+ Summary goes here</a>
  <a id="show2" href="#show2" class="show">- Summary goes here</a>
  <div class="details">
    Content goes here.
  </div>
</div>


1
<summary>और <details>अभी भी सभी प्रमुख ब्राउज़रों में काम नहीं करते हैं।
न्यूरोट्रांसमीटर

4
@TranslucentCloud यही मैंने कहा है। ;)
वर्नट

और यह भी दूसरे उत्तर के लेखक ने कहा था।
न्यूरोट्रांसमीटर

1
वहाँ वैसे भी यह करने के लिए संक्रमण एनीमेशन जोड़ने के लिए है?
अजीज

1
एनिमेटेड संस्करण के लिए जहां पाठ नीचे स्लाइड करता है और CSS
ट्रांस्फ़ॉर्मेशन

25

@ gbtimmon का उत्तर बहुत अच्छा है, लेकिन रास्ता, रास्ता बहुत जटिल है। मैंने उसका कोड उतना ही सरल कर दिया है जितना मैं कर सकता था।

#answer,
#show,
#hide:target {
    display: none; 
}

#hide:target + #show,
#hide:target ~ #answer {
    display: inherit; 
}
<a href="#hide" id="hide">Show</a>
<a href="#/" id="show">Hide</a>
<div id="answer"><p>Answer</p></div>


3
CSS3 के साथ काम करना कभी-कभी बहुत फायदेमंद होता है :-)
mrmut

एक ही पृष्ठ पर एक से अधिक बार उपयोग किए जाने पर यह काम नहीं करता है: छिपाने / दिखाने पर क्लिक करने से सभी divs प्रभावित होते हैं। किसी को भी यह कैसे संशोधित करने के लिए पता है कि यह काम करता है जब एक से अधिक बार इस्तेमाल किया जाता है?
फु

अपडेट: @Wernight का CSS केवल नीचे उत्तर देता है ("शुद्ध CSS3", इसी CSS के समान, लेकिन कक्षाओं का उपयोग करके)। एक ही पृष्ठ पर कई divs के साथ काम करता है।
फहू जूल

1
यदि आप एक ही आईडी का पुन: उपयोग करते हैं, तो @ हाँ, यह काम नहीं करेगा। यदि आप आईडी के दूसरे सेट का परिचय देंगे काम करेंगे ( hide2, show2, answer2उदाहरण के लिए)। या कक्षाएं, इससे कोई फर्क नहीं पड़ता।
न्यूरोट्रांसमीटर

22

आपको केवल दो लिंक में एंकरों को पुनरावृत्त करना होगा।

<a href="#hide2" class="hide" id="hide2">+</a>
<a href="#show2" class="show" id="show2">-</a>

इस jsfiddle http://jsfiddle.net/eJX8z/ को देखें

मैंने प्रारूप में सुधार के लिए एफएक्यू कॉल में कुछ मार्जिन भी जोड़ा।


धन्यवाद! मैंने कोशिश की थी कि, लेकिन किसी कारण से यह मेरे लिए काम नहीं करेगा। मैं कभी नहीं पकड़ा एक बग पड़ा होगा।
dmarvs

18

या किसी भी सीएसएस के साथ एक सुपर सरल संस्करण :)

<style>   
.faq ul li {
    display:block;
    float:left;
    padding:5px;
}

.faq ul li div {
    display:none;
}

.faq ul li div:target {
    display:block;
}


</style>


<div class="faq">
   <ul>
   <li><a href="#question1">Question 1</a>   
   <div id="question1">Answer 1 </div>
   </li>


   <li><a href="#question2">Question 2</a>
   <div id="question2">Answer 2 </div>
   </li>
   <li><a href="#question3">Question 3</a>
   <div id="question3">Answer 3 </div>
   </li>
   <li><a href="#question4">Question 4</a>
   <div id="question4">Answer 4 </div>
   </li>
   <li><a href="#question5">Question 5</a>
   <div id="question5">Answer 5 </div>
   </li>
   <li><a href="#question6">Question 6</a>
   <div id="question6">Answer 6 </div>
   </li>
   </ul>  
</div>

http://jsfiddle.net/ionko22/4sKD3/


वैसे उल्लेख है कि लक्ष्य: IE8 या पुराने में काम नहीं करता है, आश्चर्य आश्चर्य! और सीएसएस पीआईई उस के साथ मदद नहीं करेगा या तो आप एक jQuery विकल्प देखना चाहते हैं यदि ब्राउज़र संगतता आपके लिए रुचि है।
इयोनको ग्युओगुएव

धन्यवाद, यह बहुत क्लीनर है। हमारे संभावित लक्षित दर्शकों का लगभग एक तिहाई IE8 पर होगा। मैं बस कुछ सशर्त CSS जोड़ने के बारे में सोच रहा था जो लोड पर सभी divs खोल देगा।
dmarvs

मुझे लगता है कि एक टैब्ड इंटरफ़ेस आपके लिए सही समाधान हो सकता है। मैंने कुछ समय पहले आपको यहाँ डाउनलोड / जाँच करने के लिए किया था: ionko.com/index.php/work/simple-and-flexible-tabs
इयोनको ग्युओगुएव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.