【问题标题】:Pure CSS HTML Table Cell Expand/Collapse On Click纯 CSS HTML 表格单元格在点击时展开/折叠
【发布时间】:2015-06-15 11:38:58
【问题描述】:

诚然,我对 CSS 一点也不擅长。我知道那里有类似的问题和示例,但是尽管进行了很多尝试,但我仍然无法使用我的示例进行任何操作。非常感谢您的帮助。

请看一下这个小提琴:http://jsfiddle.net/4h75G/2/

如果您将鼠标悬停在底部表格中的“Data1,1”单元格上,它会自动展开以显示整个单元格内容。但是,我希望能够做的而不是让它在悬停时展开而是能够单击一次以展开单元格,然后再次单击以将其收缩/折叠回其原始状态。我想只使用 CSS 而没有 Javascript。

谢谢!

HTML:

        <table>

    <tr>
    <th>Column1</th>
    <th>Column2</th>
    <th>Column3</th>
    </tr>

    <tr>
    <td>Data1,1</td>
    <td>Data2,1</td>
    <td>Data3,1</td>
    </tr>

    <tr>
    <td>Data1,2</td>
    <td>Data2,2</td>
    <td>Data3,2</td>
    </tr>

    <tr>
    <td>Data1,3</td>
    <td>Data2,3</td>
    <td>Data3,3</td>
    </tr>

    </table>
    </br>
    <table>

    <tr>
    <th>Column1</th>
    <th>Column2</th>
    <th>Column3</th>
    </tr>

    <tr>
    <td><div class="content"><span class="hidden">Data1,1 first line - this is a kind-of long line
    <br/>Data1,1 second line - this is a kind-of long line too
    <br/>Data1,1 third line
    <br/>Data1,1 fourth line</span>
    </div>
    </td>
    <td>Data2,1</td>
    <td>Data3,1</td>
    </tr>

    <tr>
    <td>Data1,2</td>
    <td>Data2,2</td>
    <td>Data3,2</td>
    </tr>

    <tr>
    <td>Data1,3</td>
    <td>Data2,3</td>
    <td>Data3,3</td>
    </tr>

    </table>

CSS:

    body,table{
        font-family:verdana,arial,sans-serif;
        font-size:12px;
        border-collapse:collapse;
    }

    td,th{
        padding:3px 3px;
        margin:0px;
        border:1px solid #BBB;
        white-space:nowrap;
    }

    .content{
        height:15px;
        width:100px;
        overflow:hidden;
        text-overflow:ellipsis
    }

    .content:hover{
        height:auto;
        width:auto;
    }

【问题讨论】:

  • 如果你只想将它绑定到点击事件,你可能会被 Javascript 卡住。
  • 纯 CSS 无法做到这一点。可以做到这一点的唯一方法是使用:target 伪类(这只会让您扩展,而不是收缩)或滥用隐藏单选元素的检查状态。使用 JavaScript 是正确的、语义上纯粹的方式。
  • @cimmanon - 我认为如果我只能在不收缩单元格的情况下扩展,那可能没问题。也许你可以展示这将如何工作?谢谢。

标签: html css html-table


【解决方案1】:

您可以通过摆弄可以保持状态的隐藏 css 元素(例如复选框)在没有脚本的情况下实现类似的效果,但我认为您最好通过简单地切换脚本中的类来做到这一点。

如果您将 .content 包装在标签中,请在前面添加一个复选框并将其隐藏,如下所示:

input[type='checkbox'] { visibility: hidden; position: absolute; }
input[type='checkbox']:checked + .content { height: auto; width: auto;}

你可以实现你想要的,但它太丑了。请参阅 http://jsfiddle.net/4h75G/13/ 以了解将这种可疑做法应用于您的示例的示例。

【讨论】:

  • 太棒了!这有什么可疑之处?隐藏复选框?还是只是整个概念不好?您认为这在任何浏览器或电子邮件客户端 HTML 渲染引擎中都会出现问题吗?
  • 这至少是对概念的滥用:) 最好在脚本中执行行为,保持 CSS 中的演示文稿(另外,旧的 IE 不会读取 :checked 伪选择器)并保持标记不含所有与结构/内容无关的元素。如果您在要显示的内容上切换类名称,如 activeexpanded,您将获得更直观的分离。
  • 您能否提供一个解决方案来考虑复选框是整行,而不仅仅是一个单元格,好吗?我一直在努力
【解决方案2】:

我认为你不能没有 javascript。

使用 jQuery 可以像这里一样制作 - http://jsfiddle.net/4h75G/12/

$(".content").click(function(){
    $(this).toggleClass('active');
});

【讨论】:

  • 尽管在我的问题中我说我想用纯 CSS 来做这件事,但我仍然有兴趣看看它是如何用 Javascript 完成的,所以我感谢你提供这个例子。但是,不幸的是,它在 Firefox 或 Chrome 中都不起作用。 :(
  • 只需将 CSS 中的 .content:hover 更改为 .active :)
  • 谢谢 :) 这有点接近,但仍有问题:jsfiddle.net/4h75G/28
  • 是的!很抱歉我没听清楚。当然,这是有道理的并且确实有效。谢谢!
【解决方案3】:

我正在使用这个:

<td><a href='#' onclick="$('#elDiv').slideToggle(200);return false;">+</a></td>

.slideToggle() documentation

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 2019-03-12
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多