1

上下文:我有三个跨度,ABCD(按此顺序)。根据这些跨度旁边的表格中的内容,我关闭或打开这些跨度的可见性。

A 和 C 中有一个换行符,使显示如下所示:

A
B C
D

但是如果我隐藏 C 这最终是:

A
B D

因为不显示换行符。

我想要做的是添加一些其他元素(C'),如果显示 B 而 C 不显示,则会显示这些元素。因此,如果 C 不存在,我仍然可以换行:

A
B (C')
D

我很确定这可以通过使用基于类的 CSS 切换和:after伪选择器的组合来实现,但我宁愿避免不得不进入并修改 Javascript 以改变当前display:show/none机制。所以我的问题最终是:

是否可以在 CSS 规则中“检查”当前设置的样式(例如“显示”)?我希望能够做一些类似于我可以做的属性机制的事情:

A[display='show']~B[display='none']:after { 
    content : '\a';
}

但是只看选择器,我不明白如何在不声明新类的情况下完成此操作。

4

3 回答 3

2

我不确定您的布局是否允许这样做,但是如果您可以将元素浮动到左侧,则可以clear: left;在 B 和 D 上使用,这样如果 C 消失,D 仍会出现在新行上。检查这里的小提琴并尝试删除 C 并再次运行它:

http://jsfiddle.net/gj6sn/

编辑:忘了提,你需要为父元素添加一个clearfix,否则它的高度为0。更新了 jsfiddle 并在此处阅读更多内容:

http://css-tricks.com/snippets/css/clear-fix/

于 2013-09-12T03:02:02.730 回答
2

查看您想要的每种情况,元素 D 之前总是有一个换行符。那么为什么不以换行符开始元素 D 而不是以换行符结束 C 呢?那么你要么

A
B C
D

或者

A
B
D

永不

A
B D

注意:在写我的答案时,我假设有一些原因不允许做明显的事情,只是用一个不包含在其中任何一个中的换行符来分隔 C 和 D。如果您被允许这样做,那么我希望乔希将他的建议作为答案发布并获得投票。

更新:如果你想让 A 和 C 总是从 B/C 组合中分成不同的行,那么你可以使用display: list-item这似乎非常适合使跨度表现得像一个单行项目:

http://jsfiddle.net/gDYs6/1/

于 2013-09-12T02:57:25.787 回答
0

简单的方法是 jquery -

$("#dom_element").css("display") 

将返回您引用的任何内容的当前显示样式。有一种方法可以在平面 js 中做到这一点,但 jquery 很容易——您在这里要做的是遍历 ABCD 匹配的类元素,直到找到您想要的。

http://api.jquery.com/css/

于 2013-09-12T02:56:59.983 回答