【问题标题】:Manage margins so that the last element(s) have no margin(s)管理边距,使最后一个元素没有边距
【发布时间】:2016-07-19 05:14:21
【问题描述】:

我使用盒子,我想总是给最后一个元素一个“margin-bottom:0”。所以首先我给每个元素一个“margin-bottom: 1em;”。我现在想从我的框中的最后一个元素中删除这个边距底部,但是如果其中有一个元素不起作用,我仍然在底部有一个边距。知道怎么做吗?它可以是一个段落或一个 DIV 或 SPAN 或其他任何东西,所以我并不总是想手动执行此操作。我想用这个做一个mixin。

我试过了:

section *+:last-child {
   margin-bottom: 0;
   border: 3px solid blue;
}

但在最后一个 div 中有一个带有边距的段落,所以它不起作用。

【问题讨论】:

  • 我想你需要一门课。除非每个部分都以 <p> 标记或相同的标记结尾,否则使用 last-child 或 last-of-type 没有足够的特异性。你真的应该尽可能地避免 * 。这是一个巨大的性能冲击。
  • 嗯,是的,我想得越多,我就越需要上课:-(。

标签: css margin


【解决方案1】:

保持简单。把它放在你的样式表的顶部,然后忘记。在过去,它为我省去了很多麻烦:

*:last-child {
  margin-bottom: 0;
}

【讨论】:

  • 不要这样做。使用更具体的东西。并非所有元素都垂直流动。
【解决方案2】:
  section div:last-of-type p {
  margin-bottom: 0;
  border: 3px solid blue;
 }

似乎对它进行排序.... 但是,这假定最后一个元素是 div 内的段落。如果你有不同的最后一个元素,一个类将是一个更有效的解决方案。

【讨论】:

    【解决方案3】:

    您想使用:not()。也就是说,

    section:not(:last-child) { margin-bottom:1em; }

    我的语法可能不适合你正在做的事情,但这是一个开始。

    【讨论】:

    • 我认为 ":not" 并没有真正的帮助,因为我不知道最后一个是什么类型的元素,它可能是 DIV 或 P 或 SPAN。但也许这可能会导致解决方案......嗯。
    • @HenningFischer 然后你可以让它成为父元素的最后一个子元素,这并不重要。只是 :not(:last-child)。再说一次,我现在只是在做准备而不是测试。
    • @HenningFischer 只需添加一个空格。 section :not(:last-child)
    • @abluejelly 我认为他最后的评论可能是正确的。
    • 当我用我的笔做这件事时,它看起来更像是一团糟......。
    【解决方案4】:

    我会亲自为这些使用类名,并专门针对我要修改的类。但是,如果你想避免类名,你可以使用 last-child

    Syntax:
    :last-child
    
    Usage:
    p:last-child {
      font-size: 0.75em;
    }
    

    更多信息here

    【讨论】:

      猜你喜欢
      • 2015-07-28
      • 1970-01-01
      • 2019-11-05
      • 2016-08-28
      • 2013-07-29
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2013-11-02
      相关资源
      最近更新 更多