有时需要移除容器中第一个元素的顶部或左侧边距。同样地,也可能需要移除容器中最后一个元素的右侧或底部边距。可以通过手动向HTML添加类来实现。
.first { margin-top: 0 !important; margin-left: 0 !important; }
.last { margin-bottom: 0 !important; margin-right: 0 !important; }
对于垂直排列的元素,将“顶部”/“底部”边距设为零很有用;对于水平排列的元素(一般情况下),将“左侧”/“右侧”边距设为零很有用。但是……这种方法依赖于您自己向HTML添加类。伪选择器可以提供一种更好的、侵入性更低的方式。
* > :first-child { margin-top: 0 !important; margin-left: 0 !important; }
* > :last-child { margin-bottom: 0 !important; margin-right: 0 !important; }
您可能需要根据需要将 * 替换为更具体的选择器。
“每隔三个”,等等。
假设您有 9 个浮动块元素,3x3 排列。您可能经常需要移除第 3、第 6 和第 9 个元素的右侧边距。`nth-child` 伪选择器可以帮助您实现这一点。
* > :nth-child(3n+3) { margin-right: 0; }
那里的等式 3n+3 的工作原理如下
(3×0)+3 = 3
(3×1)+3 = 6
(3×2)+3 = 9
等等。
jQuery
jQuery 使用 CSS3 选择器,包括 `:first-child`、`:last-child` 和 `:nth-child()`。这意味着在不支持或不完全支持这些选择器的浏览器中,它们在 jQuery 中仍然可以工作,因此您可以用 JavaScript 支持替换 CSS 支持。例如
$("* > :nth-child(3n+3)").css("margin-right", 0);
浏览器支持
`:first-child` 和 `:last-child` 在所有主要浏览器的最新版本中都能正常工作,但在 IE 6 中不行。`first-child` 在 IE 7+ 中受支持。`nth-child` 在 Safari 3+、Firefox 3.5+ 和 Chrome 1+ 中工作,但在 IE 8 中仍然无法使用。
另请参阅 David Oliver 的文章。
那么非 JS 浏览器呢?您将 CSS 的职责交给了 JS,我认为这和在 HTML 中嵌入 CSS 一样糟糕。
无论如何,这是一个很酷的技巧,但不适合工作场景。在我的个人项目中我会使用它。
JQuery 是最佳选择。
它在所有浏览器中都能正常工作。
感谢 Chris 提供的提示。
你好 Chris
非常感谢你,jQuery 的效果很好,我喜欢你的博客,它对我的 CSS 和 jQuery 学习非常有帮助。
再次感谢你。
我不确定为什么是
而不是
因为当我使用
它与我预期的结果不符(div 中的第一个 H1)。但是当我使用
它就能正常工作。
有什么想法吗?
H1 > :first-child
表示“找到所有作为 H1 元素的第一个子元素的元素”。
H1:first-child
表示“找到所有作为任何容器元素的第一个子元素的 H1 元素”。
它们之间存在细微的差别。`first-child` 经常会以这种方式误导人们(我知道当我第一次开始使用它时,我发现它有点令人困惑),但如果你仔细思考,就会明白。
事实上,如果在您的 DIV 中 H1 上方还有其他元素,那么 `H1:first-child` 也不会起作用。在这种情况下,您需要使用 `H1:first-of-type`。
`>` 选择器是子选择器。它将匹配前一个选择器的所有直接后代。
这里有一个很好的解释
http://meyerweb.com/eric/articles/webrev/200006b.html
我必须说非常感谢你,因为这帮了我很大的忙!我想在边框而不是边距上使用它,它完美地工作了。
我必须说,在不提及缺点的情况下就建议使用 jQuery 是相当适得其反的,因为它暗示了所有问题都可以用 jQuery 解决。这只是在助长不良实践,因为许多人根本不在乎是否做对事情,他们只是用 jQuery “修复”问题——告别渐进增强。
通过我在 CodingForums.com 上担任版主的长期活动,我看到许多人甚至不完全理解 jQuery 究竟是什么(因为它使所有 JavaScript 变得如此简单,以至于即使是最无知的人也可以使用它——而且许多人甚至会为可以用一两行普通 JS 编写的最简单的事情也使用这个 32KB 的库),并且通过让他们面对未加注释(在教育方面)的 jQuery 代码片段来解决跨浏览器问题,他们最终并没有学到任何东西(正如我们从上面两条评论中看到的那样)。
也许是我读错了,但浏览器支持部分似乎是错误的。
我读到的意思是 `:last-child` 在所有主要浏览器(包括 IE 7 和 IE 8)中都能正常工作,除了 IE 6。我不确定 IE 7,但我个人的经验是 IE 8 不支持 `:last-child`。
这个简单的公式拯救了我的一天!为了以两行或三行显示作品集项目,我迫切需要移除最后一个元素的边距。这个公式简单地完成了这项工作!赞赏。
谢谢!这正是我需要的。
大家好,我想分享一种多年来一直使用的方法,它可以避免移除任何边距的需要。
因此,您所有的浮动块/div/项目都放在一个容器 div 中,该 div 分配了额外的宽度,以便它可以容纳每一行最后一个项目的溢出边距,然后使用负边距右侧将该容器的宽度恢复到您的整体站点宽度内,所有这些都无需将行的最后一个项目推到下一行。
请参见此处:http://jsbin.com/cakayeca/3/edit
非常感谢你的回答。除了你的之外,我找不到其他解决我问题的方案。
上帝保佑你并与你同在:)。
我不得不使用“`> *:first-child`”才能使其工作。
:nth-child(4n+3) { margin-right: 0px;}
用于一行中的第四列
此 CSS 正在工作。