2011-02-11 44 views
0

好的,我知道类似的问题已经被问到,但是我通过谷歌搜索和贯穿几乎所有的stackoverflow问题的groveling还没有帮助我这个。我需要一个容器div,其中包含一个或两个列。内容正在通过CMS进行填充,可能包含也可能不包含这两列。2列流体宽度与100%的高度?

如果存在左栏,则左栏将为导航栏,右栏为主体副本。所以,如果没有包含导航栏,右列应该占据容器宽度的100%。如果导航栏存在,则需要在左侧吃掉200px,并将正确的主要内容推过来占据剩余的宽度。

如果左侧导航栏存在,我遇到的问题是在左侧导航栏上获得高度为100%。

我希望这是有道理的。

期望的结果是在这里:(既然不能发表图片尚未)

http://www.freeimagehosting.net/uploads/60a01995ae.gif

和当左NAV未插入,这里:

http://www.freeimagehosting.net/uploads/be5b69e9ec.gif

我通过指定右边的宽度来消除200px左列留下的剩余宽度。

#container { 
    margin: 0 auto; 
    overflow: hidden; 
    width: 960px; 
} 
#left-col { 
    float: left; 
    width: 188px; 
    background-color: #d7d7d7; 
    padding-bottom: 500em; 
    margin-bottom: -500em; 
} 
#right-col { 
    float: left; 
    width: 722px; 
    margin-right: -1px; /* Thank you IE */ 
    background-color: red; 
    padding-bottom: 500em; 
    margin-bottom: -500em; 
} 

<body> 
<div id="container"> 
    <div id="left-col"> 
     <p>Left Rail Nav</p> 
    </div> 
    <div id="right-col"> 
     <p>Primary content</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
    </div> 
</div> 

的问题出现时,我想保持右栏为100%的宽度的情况下,不包括在左侧导航栏中。当我向右侧的内容添加100%的宽度时,会将其放到底部。

更改右列宽度:

#right-col { 
    float: left; 
    width: 100%; 
    margin-right: -1px; /* Thank you IE */ 
    background-color: red; 
    padding-bottom: 500em; 
    margin-bottom: -500em; 
} 

像这样:http://www.freeimagehosting.net/uploads/fef22741e7.gif

我必须相信有这个造型的纯CSS方式。我知道我可以用一些javascript做,但我真的想找到一个纯粹的解决方案。这不可能吗?

人们会认为浮动divs和应用100%的高度可能有效,但显然不是。

回答

1

问题的一个可能的解决方案是给列display: table-cell和从右列删除宽度(以及从两个边缘和填充...)。

问题是它与旧版本的IE不兼容。

+0

为了确保我能理解你,我做了以下工作:但它没有工作.... – W3bGuy

+0

这工作完美后,我删除了浮动和定位。谢谢!!! – W3bGuy

+0

对,我忘了那部分,很高兴它适合你:-) – jeroen

0

类似于:html, body, #container, #left-col, #right-col { height: 100%; }应该有效。

+0

没有骰子lofto ...这实际上使左侧导航完全到页面高度,并完全删除正确的内容div。 – W3bGuy

1

我以为我会对此进行扩展以精确地回答@jeroen提供的答案。再次感谢@ jeroen。

在IE浏览器以外的所有浏览器中获得所需结果的CSS就是利用@jeroen提到的display: table-cell;

这改变了上面的CSS:

#container { 
    margin: 0 auto; 
    overflow: hidden; 
    width: 960px; 
} 
#left-col { 
    width: 188px; 
    display: table-cell; 
    background-color: #d7d7d7; 
} 
#right-col { 
    display: table-cell; 
    background-color: red; 
} 

的HTML仍然是相同的:

<body> 
<div id="container"> 
    <div id="left-col"> 
     <p>Left Rail Nav</p> 
    </div> 
    <div id="right-col"> 
     <p>Primary content</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
    </div> 
</div> 

为了得到这个播放权,并在所有浏览器看起来是正确的,我不得不在IE异常中添加以下内容:

<!--[if IE]> 
    <style type="text/css"> 
     #left-col { display: block; float: left; width: 188px; } 
     #right-col { display: block; float: left; } 
    </style> 
<![endif]--> 

这对我之后的工作非常有用,并且允许我动态地在内容中进行feed,而不用担心使用JavaScript(jQuery)进行文档加载DOM操作,但我真的很想为这个应用程序提供更清晰的方法。我希望这可以帮助别人。

+0

不错,但我不认为你需要为所有版本的IE做这件事,直到7或甚至6。 – jeroen

+0

@jeroen - 你是对的。然而,由于没有多少人在使用IE9,而且IE8在IE7标准模式下自动“神奇地”自动启动了大量页面,所以这是我需要实现的最安全的选择。我们有很多用户仍然使用IE6浏览器(Puke),所以我很努力平衡需求和需求的负载。 – W3bGuy

+0

哎哟,这使事情变得复杂。祝你好运! – jeroen