【发布时间】:2021-04-16 03:53:42
【问题描述】:
我想用边距设置表单字段集的样式,但删除第一个非隐藏字段集的 margin-top 和最后一个非隐藏字段集的 margin-bottom(任何字段集都可能被脚本动态设置为隐藏)。我尝试了以下 CSS 没有运气(fs2 预计没有 margin-top 但实际上有;fs3 预计没有 margin-bottom 但实际上有)。有没有办法使用 CSS3 做这样的事情?
form > fieldset {
margin: .5em;
}
/* this doesn't work */
form > fieldset:not([hidden]):first-of-type {
margin-top: 0;
}
/* this doesn't work */
form > fieldset:not([hidden]):last-of-type {
margin-bottom: 0;
}
<form>
<fieldset hidden>fs1</fieldset>
<fieldset>fs2</fieldset>
<fieldset>fs3</fieldset>
<fieldset hidden>fs4</fieldset>
</form>
【问题讨论】:
-
您打算启用边框折叠功能吗?
-
你的意思是边距折叠?我确实有这个想法,但想要一个这种情况的通用解决方案,而不必指望保证金崩溃。
-
最后一个这样的元素没有基于选择器的解决方案。对于第一个这样的元素,一个健壮的解决方案涉及多个选择器和多个 CSS 规则,如果不利用边距折叠,它甚至不是完全万无一失的。这应该通过 fieldset:nth-child(1 of :not([hidden])) 和 fieldset:nth-last-child(1 of :not([hidden])) 来解决,但仍然没有得到广泛支持。
-
:last-of-type 伪类根据您的选择器查找其类型的最后一个元素以及是否隐藏该元素。您的最后一个
fieldset元素是隐藏的,因此不会应用任何内容。选择器是全有或全无,而不是以上任何一个。
标签: html css css-selectors