খাঁটি সিএসএস পতন / বিস্তৃত বিভাজন


92

আমার কাছে একটি খাঁটি সিএসএস :targetসংযোগযোগ্য ডিভ রয়েছে যা অন্য কারও কোডের উপর ভিত্তি করে যারা পিচিউডক্লাস ব্যবহার করে । আমি যা সেট আপ করার চেষ্টা করছি তা হল 12+ টি প্রশ্নের একটি পৃষ্ঠা এবং আপনি যখন + বোতামটি ক্লিক করেন তখন উত্তর ডিভিটি নীচে প্রসারিত হয়। এক টন অতিরিক্ত সিএসএস না লিখে এই পৃষ্ঠায় কীভাবে একাধিক সংঘাতের ডিভ উপাদান তৈরি করা যায় তা আমি বুঝতে পারি না। আমার সিএসএস কোডটি ন্যূনতম করার জন্য কীভাবে এটি লিখতে হবে সে সম্পর্কে কারও কাছে পরামর্শ রয়েছে? (উদাহরণস্বরূপ, সুতরাং 12+ প্রশ্নের প্রত্যেকটির জন্য আমার একচেটিয়া অনন্য নির্বাচক থাকতে হবে না)।

আমি জাভাস্ক্রিপ্ট ব্যবহার করতে পারি না কারণ এটি একটি ওয়ার্ডপ্রেস ডটকম সাইটে চলছে যা জেএসকে অনুমতি দেয় না।

এখানে আমার জফিল: 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

উত্তর:


106

আপনি কোন ব্রাউজারগুলি / ডিভাইসগুলি সমর্থন করতে চাইছেন বা নন-কমপ্লায়েন্ট ব্রাউজারগুলির জন্য আপনি কী তৈরি করতে প্রস্তুত তার উপর নির্ভর করে আপনি <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>

ব্রাউজার সমর্থন পরিবর্তিত হয়। সেরা ফলাফলের জন্য ওয়েবকিটে চেষ্টা করুন। অন্যান্য ব্রাউজারগুলি সমস্ত সমাধান দেখানোর জন্য ডিফল্ট হতে পারে। আপনি সম্ভবত উপরে বর্ণিত লুকান / শো পদ্ধতিতে ফলব্যাক করতে পারেন।


4
বাগ 591737 বাগটি ফায়ারফক্সে সমর্থন ট্র্যাক করে।
শ্রীভাতসার

9
এটি প্রায় ২০১ mid সালের মাঝামাঝি এবং এর পক্ষে সমর্থন নেই istent অবশ্যই এই সমাধানটি ব্যবহার করবেন না।
ডোয়াইন চারিংটন

4
@ ডিজিটালসিয়া 'অস্তিত্বহীন' হওয়ায় সমর্থন ভুল এবং 'অবশ্যই এই সমাধানটি ব্যবহার করবেন না' এমন স্ট্যান্ডার্ডের জন্য শক্ত শব্দ যা বেশ কয়েক বছর ধরে স্থিতিশীল ছিল এবং ২০১০ সাল থেকে একটি পলিফিল পাওয়া গেছে mathiasbynens.be/notes/html5- বিশদ- jquery । আপনার যুক্তির ভিত্তি কী? এমএস প্রান্তটি শীঘ্রই এই ট্যাগগুলি বাস্তবায়িত করতে পারে ফায়ারফক্স সারাংশ / বিস্তারিত ট্যাগগুলি প্রয়োগ করেছে (তবে এটি বর্তমানে একটি পতাকার পিছনে রয়েছে) ওয়েবকিট এটি ক্রোম 12 সাল থেকে ডিফল্ট হিসাবে সমর্থন করে ওএস এক্স এবং আইওএস ব্লিঙ্ক প্রাপ্ত ব্রাউজারগুলিতে ক্রোম মোবাইল / ডেস্কটপ, অপেরা
ওকে

4
@ থার্স্টান কোনও সমর্থন নেই; আইই 8, আইই 9, আইই 10, আইই 11, এজ 13, ফায়ারফক্সে আগস্ট 2016 পর্যন্ত কোনও সমর্থন নেই So সুতরাং আপনার কাছে আইইয়ের সম্পূর্ণ সমর্থন এবং বর্তমানে এজ এবং ফায়ারফক্সের সমর্থন ব্যয় করার বিলাসিতা না থাকলে হ্যাঁ, ভাল-সমর্থিত নয়। পলিফিলটি মূলত যা আপনাকে ইতিমধ্যে জাভাস্ক্রিপ্ট (jQuery ছাড়াই) করতে এবং বেশ দক্ষতার সাথে করতে পারে তা করে। নিজের বৈশিষ্ট্যটি কার্যকর করার জন্য এটির জন্য একটি পলিফিল হ'ল ওভারকিল। আপনার সংযুক্ত সমাধানটি jQuery ব্যবহার করে যা অপ্রয়োজনীয়। আমরা যদি কোনও দিন এই স্পেকটি থেকে সরানো দেখি তবে অবাক হব না।
ডোয়াইন চারিংটন

4
আমি কেবল আধুনিক ব্রাউজারগুলির জন্য বিকাশ করছি এবং এই কৌশলটি আমার ব্যবহারের ক্ষেত্রে পুরোপুরি কাজ করেছে, এবং সিএসএসের লেট লাগবে না!
জোশ হাবদাস

39

ব্যবহার <summary>এবং<details>

ব্যবহার <summary>এবং <details>উপাদানগুলি সহজতম তবে বর্তমানের আইই এটি সমর্থন করছে না বলে ব্রাউজার সমর্থন দেখুন । আপনি পলিফিল করতে পারেন (বেশিরভাগ 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>


4
<summary>এবং <details>এখনও সমস্ত বড় ব্রাউজারে কাজ করে না।
নিউরোট্রান্সমিটার

4
@ ট্রান্সলুসেন্টক্লাউড এটি আমি যা বলেছিলাম ;)
ওয়ার্নাইট

এবং এটিও উত্তরের অন্য লেখক বলেছেন।
নিউরোট্রান্সমিটার

4
এর মধ্যে ট্রানজিশন অ্যানিমেশন যোগ করার মতো কোনও উপায় আছে কি?
azizj1

4
অ্যানিমেটেড সংস্করণে যেখানে পাঠ্য স্লাইড হয় এবং সিএসএস রূপান্তর ব্যবহারে
বিবর্ণ

25

@ জিবিটিমমনের উত্তর দুর্দান্ত, তবে উপায়, খুব জটিল। আমি তার কোডটি যতটা পারি সহজ করেছি।

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


4
সিএসএস 3 এর সাথে কাজ করা এতটা ফলপ্রসূ হয় :-)
মিঃমূত

একই পৃষ্ঠায় একাধিকবার ব্যবহৃত হলে এটি কাজ করে না: লুকানো / শোতে ক্লিক করা সমস্ত ডিভগুলিকে প্রভাবিত করে। যে কেউ এটিকে কীভাবে সংশোধন করতে জানেন যে একাধিকবার ব্যবহৃত হলে এটি কাজ করে?
ফুহ

আপডেট: @ ওয়ার্নাইটের সিএসএস নীচে কেবল উত্তর দিন ("খাঁটি সিএসএস 3", এটির অনুরূপ সিএসএস, তবে ক্লাসগুলি ব্যবহার করে)। একই পৃষ্ঠায় একাধিক ডিভ নিয়ে কাজ করে।
phhu

4
@ ফাহ হ্যাঁ, আপনি যদি একই আইডি পুনরায় ব্যবহার করেন তবে এটি কাজ করবে না। এটা তোলে যদি আপনি ID- র অন্যান্য সেট পরিচয় করিয়ে দিতে হবে কাজ করবে ( 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/

আমি ফর্ম্যাটটি উন্নত করতে FAQ কলটিতে কিছু মার্জিন যুক্ত করেছি।


ধন্যবাদ! আমি চেষ্টা করেছিলাম, কিন্তু কিছু কারণে এটি আমার পক্ষে কার্যকর হবে না। আমি অবশ্যই কখনও ধরা পড়িনি এমন একটি বাগ অবশ্যই থাকতে হবে।
dmarvs

18

সবেমাত্র যে কোনও CSS সহ একটি দুর্দান্ত সাধারণ সংস্করণ :)

<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 বিকল্পটি দেখতে চাইতে পারেন।
আয়নকো গুয়ের্গুয়েভ

আপনাকে ধন্যবাদ, এটা অনেক পরিষ্কার। আমাদের সম্ভাব্য লক্ষ্য দর্শকদের প্রায় এক তৃতীয়াংশ আইই 8 তে থাকবে on আমি কেবল কিছু শর্তসাপেক্ষ সিএসএস যুক্ত করার কথা ভাবছিলাম যা লোডের উপরের সমস্ত ডিভগুলি খুলবে।
dmarvs

আমি মনে করি একটি ট্যাবড ইন্টারফেস আপনার জন্য সঠিক সমাধান হতে পারে। আমি কিছুক্ষণ আগে করেছি আপনি এখানে এটি ডাউনলোড / চেক করতে পারেন: ionko.com/index.php/work/simple- এবং- নমনীয়- ট্যাবগুলি
আয়নকো গুয়ের্গুয়েভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.