2013-08-06 47 views
6
  • 集装箱#666margin: 20px; overflow: hidden;
  • 节点#333margin: 20px 0 0 20px; float: left;

实施例,http://jsbin.com/owejal/3/edit或图片:使容器中的元素容器具有边缘而不是容器?

double margin

然而,预期的结果是:

  • 与20像素余量容器,
  • 儿童在中间20像素余量,但不是与容器。

enter image description here

这可以使用负填充来实现(即,如果容器具有padding: -20px 0 0 -20px),尽管这样的东西是不存在。

想要的结果可以使用额外的元素(http://jsbin.com/owejal/4/)来实现,尽管我很想知道是否只有CSS解决方案。

+0

是各种宽度的'。集团'容器是你想要解释的吗?例如,总是会有3个以下的元素和4个以上的元素?或者你更喜欢这个在飞行中适应? –

+0

子元素的数量及其维度事先未知。 – Gajus

+2

据我所知,这不能在纯css中完成,因为没有办法让css知道孩子什么时候会换行到新行 – Muleskinner

回答

-1

下面的CSS会得到你想要的结果,其实你仍然有2个限制:

  1. 如果改变身体的背景下,你需要更新元素的边框颜色包含.foo
  2. 内部节点仍然有右边距,这也是您想要的结果屏幕截图(.group可以有5个节点,但在此解决方案中只有4个)。
.group { 
    overflow: hidden; 
    margin: 20px; /* margin is required */ 
    background: #666; 
} 
.node { 
    width: 100px; 
    height: 100px; 
    float: left; 
    background: #333; 
    margin: 0px 20px 20px 0px; 
} 
.foo { 
    height: 20px; 
    background: #00f; 
    margin: 20px; 
} 
.group + .foo { 
    height: 20px; 
    background: #00f; 
    margin: 20px; 
    position: relative; 
    top:-40px; 
    border-top: 20px solid #fff; 
} 

你仍然可以找到解决办法here

+0

此解决方案已经是问题的一部分。见最后一段。此外,它说“没有额外的元素”。 – Gajus

1

因为你没有提到可调整大小的要求,你可以简单的使用n个子声明也喜欢在这里:

http://jsbin.com/owejal/51/

但是,此解决方案针对父容器的固定宽度进行了优化,因此总是应该有4个元素举例来说,尽管如此,它只是CSS。

4

这是一个小黑客,但如何隐藏顶部和左边缘区域与一些战略性放置伪元素? http://jsfiddle.net/SUJtd/

.foo {height:20px; background:#00f; margin:20px 20px 0;} 

.group {overflow:hidden; margin:0 20px 20px 0; background:#666; position:relative;} 
.group:before{content:""; position:absolute; top:0; left:0; right:0; height:20px; background:#fff;} 
.group:after{content:""; position:absolute; top:0; bottom:0; left:0; width:20px; background:#fff;} 

.node {width:100px; height:100px; float:left; background:#333; margin:20px 0 0 20px;} 
5

如果你只关心元素之间的间距,则可以放弃伪元素。这只是背景。

http://codepen.io/cimmanon/pen/mucDv

<div class="foo"></div> 
<div class="group"> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
</div> 
<div class="foo"></div> 

的CSS:

.group { 
    overflow: hidden; 
    margin: -10px 0 -10px 10px; 
    padding-right: 10px; 
    position: relative; 
} 

.group:before { 
    display: block; 
    content: ''; 
    position: absolute; 
    z-index: -1; 
    top: 10px; 
    right: 20px; /* 20px instead of 10px due to padding */ 
    bottom: 10px; 
    left: 10px; 
    background: #666; 
} 

.node { 
    width: 100px; 
    height: 100px; 
    float: left; 
    background: #333; 
    margin: 10px; 
} 

.foo { 
    height: 20px; 
    background: #00f; 
    margin: 20px; 
} 
2

没有多余的HTML标记 - 但一类变化& 无伪元素

一个简单的技巧这可能应该工作为你: http://jsbin.com/owejal/65/edit

截图:

enter image description here

将与节点:)的所有可能的数工作

<div class="foo"></div> 
    <div class="group"> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    <div class="node"></div> 
    </div> 
    <div class="foo2"></div> 

CSS:

.group { overflow: hidden; margin: 20px; margin-bottom:0px; /* margin is required */ background: #666; } 
.node { width: 100px; height: 100px; float: left; background: #333; margin: 0px 20px 20px 0px; /* there must 20px gap between every node, but not the container */ } 
.foo { height: 20px; background: #00f; margin: 20px;} 
.foo2{ 
    height:20px; 
    background:#00f; 
    border-top:20px solid white; 
    margin:20px; 
    margin-top:-20px; 
} 
+0

如果容器大小调整为恰好*适合一定数量的孩子,则右侧有20px的间隔。我不知道这是OP想要避免的事情。另外,模拟祖先背景的白色边框只有在纯色(即没有bg图像)时才会起作用。 – cimmanon

+0

这里没有使用图像..只是说!在右边的差距是没关系,我认为从预期的截图 – AdityaSaxena