纯CSS崩溃/扩展div

dma*_*rvs 81 css collapsable css3

我有一个纯CSS可折叠div,它基于使用:target伪造类的其他人的代码.我想要设置的是一个包含12个以上问题的页面,当您单击+按钮时,答案div会在下方展开.我无法弄清楚如何在这个页面上制作多个折叠div元素,而无需编写大量额外的CSS.任何人都有关于如何写这个的建议,所以我的CSS代码被最小化?(即,所以我不必为12个以上的问题输入一堆独特的选择器).

我不能使用Javascript,因为这是在一个不允许JS的wordpress.com网站上.

这是我的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>
Run Code Online (Sandbox Code Playgroud)
/* 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;
}
Run Code Online (Sandbox Code Playgroud)

Thu*_*tan 91

根据您希望支持的浏览器/设备,或者您准备为不兼容的浏览器准备的内容,您可能需要查看<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>
Run Code Online (Sandbox Code Playgroud)

浏览器支持各不相 尝试使用webkit获得最佳结果.其他浏览器可能默认显示所有解决方案.您也许可以回退到上面描述的隐藏/显示方法.

  • 这几乎是2016年中期,对此的支持是不存在的.绝对不要使用这个解决方案. (9认同)
  • 检查浏览器支持[这里](http://www.w3schools.com/tags/tag_summary.asp) (4认同)
  • 我正在为现代浏览器开发,这种技术完全适用于我的用例,并且不需要舔CSS! (3认同)
  • [错误 591737](https://bugzilla.mozilla.org/show_bug.cgi?id=591737) 是跟踪 Firefox 支持的错误。 (2认同)
  • @DigitalSea支持"不存在"是不正确的并且"绝对不使用此解决方案"对于已经稳定了几年并且自2010年以来已经提供了polyfill的标准来说是强有力的话语https://mathiasbynens.be/notes/ HTML5的细节,jQuery的.你的论点的基础是什么?MS很可能很快就实现了这些标签Firefox已经实现了摘要/详细标签(但目前它已经落后于旗帜)Webkit支持它作为默认设置,因为Chrome 12和OS X和iOS上的Safari一样推出了浏览器 - chrome mobile/desktop, opera支持默认 (2认同)

Wer*_*ght 30

使用<summary><details>

使用<summary><details>元素是最简单的但是看到浏览器支持,因为当前的IE不支持它.你可以填充(大多数是基于jQuery的).请注意,不受支持的浏览器只会显示当然的扩展版本,因此在某些情况下可以接受.

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

另请参阅如何设置<details>元素样式(HTML5 Doctor)(有点棘手).

纯CSS3

:target选择有着相当不错的浏览器的支持,并且它可以被用来做单一的框架内收缩元件.

.details,
.show,
.hide:target {
  display: none;
}
.hide:target + .show,
.hide:target ~ .details {
  display: block;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

请参见如何在没有Java的情况下制作折叠列表 eHow.

  • @TranslucentCloud这就是我所说的.;) (3认同)
  • 有没有办法给这个添加过渡动画? (3认同)

gbt*_*mon 21

您只需要在两个链接中迭代锚点.

<a href="#hide2" class="hide" id="hide2">+</a>
<a href="#show2" class="show" id="show2">-</a>
Run Code Online (Sandbox Code Playgroud)

看到这个jsfiddle http://jsfiddle.net/eJX8z/

我还在FAQ调用中添加了一些余地以改进格式.


Tra*_*oud 19

@ gbtimmon的答案很棒,但方式太复杂了.我尽可能地简化了他的代码.

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

#hide:target + #show,
#hide:target ~ #answer {
    display: inherit; 
}
Run Code Online (Sandbox Code Playgroud)
<a href="#hide" id="hide">Show</a>
<a href="#" id="show">Hide</a>
<div id="answer"><p>Answer</p></div>
Run Code Online (Sandbox Code Playgroud)

  • 使用CSS3有时是如此有益:-) (2认同)

Ion*_*iev 17

或者是一个几乎没有任何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>
Run Code Online (Sandbox Code Playgroud)

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