У меня есть сворачиваемый div на чистом CSS, который основан на чужом коде, который использует :target
псевдокласс. Я пытаюсь создать страницу с более чем 12 вопросами, и когда вы нажимаете кнопку +, div ответа раскрывается ниже. Я не могу понять, как сделать на этой странице несколько сворачивающихся элементов div, не написав тонны лишнего CSS. У кого-нибудь есть предложения о том, как это написать, чтобы мой код CSS был минимизирован? (т.е. мне не нужно вводить кучу уникальных селекторов для каждого из 12+ вопросов).
Я не могу использовать Javascript, так как это происходит на сайте 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;
}
css
collapsable
dmarvs
источник
источник
Ответы:
В зависимости от того, что браузеры / устройства вы хотите поддержать, или то , что вы готовы мириться с для несовместимых браузеров вы можете проверить
<summary>
и<detail>
тег. Они предназначены именно для этого. Никакого css не требуется, поскольку сворачивание и отображение являются частью определения / форматирования тегов.Я привел здесь пример :
<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>
Поддержка браузером различается. Попробуйте использовать webkit для достижения наилучших результатов. Другие браузеры могут по умолчанию отображать все решения. Возможно, вы можете вернуться к методу скрытия / показа, описанному выше.
источник
Использование
<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>
элемент (HTML5 Doctor) (немного сложно).Чистый 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>
источник
<summary>
и по-<details>
прежнему не работают во всех основных браузерах.Ответ @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>
источник
hide2
,show2
,answer2
например). Или занятия, неважно.Вам просто нужно перебрать якоря в двух ссылках.
<a href="#hide2" class="hide" id="hide2">+</a> <a href="#show2" class="show" id="show2">-</a>
См. Этот jsfiddle http://jsfiddle.net/eJX8z/
Я также добавил некоторый запас к вызову FAQ, чтобы улучшить формат.
источник
Или супер простая версия с почти любым 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/
источник