2013-06-21 96 views
2

所以我想创建一个页面,将始终有整个屏幕填充和很好地布局。使用下面的代码工作得很好:css的大小和边距百分比

#posts{ 
    width:100%; 
    height:auto; 
    background:#666; 
} 
.entry{ 
    float:left; 
    margin-left: 4%; 
    margin-top:10px; 
    margin-bottom: 10px; 
    width:20%; 
    height:100px; 
    background:#000; 
} 

有一个问题...它打破了窗口调整大小。我只是好奇,为什么当窗口调整大小时它不起作用,因为由于边界和大小是用百分比完成的,它们应该改为正确的,对吗?

我的问题是:

为什么CSS百分比无法正常工作时,观众改变窗口大小,我能做些什么,这将使它正确调整?

记得在加载后调整窗口大小,以便实际看到我正在谈论的问题。

Here is a jsfiddle

EDIT1:

所以很明显,根据到目前为止的答案,这是一个问题与我想做的事冲突的砌筑给它的元素的绝对定位。所以这将被固定的方式是一些JavaScript/jQuery的行,可以根据正确的百分比重新窗口调整大小的边缘...我怎么能做到这一点?

+0

如果您注释掉的Javascript正常工作(除'#posts'消失,因为它里面没有尺寸影响元件,由于其孩子都被'float'ed) –

+0

+1 @winterblood。没有Javascript,一切正常。 CSS没有任何问题。 –

+0

Javascript对于我的实际网站是100%必需的。我编辑了问题 –

回答

4

嗯,这是因为

position: absolute;财产得到由砖石设置。

是绝对定位取出流动的,因此 放置其他元素

时,如果你删除了这一行不占用空间,只是正常的元素,检查this

通常,如果所有元素的宽度和高度相同,则不需要砌体。

UPDATE:

有一个小的脚本来运行,这将使这项工作与当前的html实现。

$(".entry").each(function(){ 
    var $this = $(this) 
    var currLeft = 0; 
    var containerWidth = 0; 
    var newLeft = 0; 

    currLeft = parseInt($this[0].style.left, 10); 
    containerWidth = parseInt($("#posts").width(), 10); 

    newLeft = currLeft/containerWidth * 100; 

    $this.css({ 
     "left": newLeft + "%" 
    }) 
}); 

那么,什么剧本确实是采取以像素为currLeft并计算百分比newLeft

Test Link

+0

他们并不都是同等高度......我设立了一个简单的例子,并没有打扰具体细节......砌体在这里是必要的。有没有一些JavaScript会使它工作? –

+0

好吧,让我试试:) –

+0

这真的需要在每个div上运行吗?我是否需要在砌石回忆中抛出这个问题? –

1

这是因为你的masonry plugin检查this

plugin自动应用positionleft top positions

移除属性它将很好地工作后的。

更新

更改你的代码像

HTML

<div id="posts"> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div class="entry-content"><div class="entry"></div></div> 
    <div style="clear:both"></div> 
</div> 

CSS

#posts{ 
    width:100%; 
    height:auto !important; 
    background:#666; 
} 
.entry-content{ 
    float:left; 
    margin-left: 4%; 
    margin-top:10px; 
    margin-bottom: 10px; 
    width:20%; 
    height:100px; 
    background:#000; 
} 

小提琴http://jsfiddle.net/Zpbsn/10/

+0

砌体在这里是必要的。有没有一些JavaScript会使它工作? –

+0

你能解释一下为什么这种方法有效吗?因为这对我来说没有意义,为什么包装它会产生影响?......另外,为什么'clear:both'是必要的,因为我之前从未见过这种方法 –

+0

是的,你在'masonry plugin'中使用了'entry class',这个插件会将绝对位置属性应用到入口div,它也设置left和top属性,所以同时你的'css'不起作用。这就是为什么需要对'entry-content'的'entry div'和对''masonry plugin''中使用的'entry div'的css独立**的封装。 –

相关问题