2011-06-15 61 views
1

编辑:好的,所以我在这里有点损失。其实,在很多损失。我正在认真考虑增加对CSS的个人仇恨和反直觉。在CSS布局中间列不包装

所以我试图做出3列布局。它曾经基于Holy Grail layout,但后来我决定不需要流动性或相等的柱高,并开始修改CSS以更好地满足我的需求。

首先,中间列中的文本(而不是包裹)不断拉伸中间列,将其移动到左列下。我实现了@ ZincX建议使用固定宽度的列(请参阅下面的文章)。这固定了柱子,但是它们周围的容器并没有与它们一起伸展。如果您打开我的网站(请参阅下面的链接),则标题后面会隐藏一个完整的页脚。

此外,我决定做分级标记 - 我将标题移动到源代码的底部,并将其放在绝对位置的顶部。我可能会尽快与左侧导航栏一起完成此操作。对于那些不熟悉这种做法的人,我前几天也只是了解到这一点 - 将重要内容放在页面的顶部,这使得搜索引擎更加友好。

那么如何解决这个庞大的布局问题?我只想要一个简单的“标题,三列,页脚”布局。以像素为单位提供绝对位置,即使是在大多数浏览器中都能很好地显示的好习惯?

Here's the site I'm working on
And here's my stylesheet

+0

@Egasimus - 你是否想制作一个带有标题,三列的网站(左右各占用足够的宽度,中间占用剩余空间),然后是页脚? – 2011-06-15 15:06:32

+0

嗯,我不知道我是否会这么说 - 但左右两列的宽度是固定的(160px左右),而中间的列确实会占用所有剩余的空间。整个布局将占用视口的90%(最小宽度:600px;最大宽度:900px),并且最好居中。 我感到非常沮丧,无法解决什么应该是一个相当容易的问题... – egasimus 2011-06-15 15:36:03

+0

我想我放弃使用位置:绝对 - 绝对div从流中取出,并且不像浮动,似乎没有办法让容器包围它们...... – egasimus 2011-06-16 06:52:31

回答

0

我已成功将Soh Tanaka's Layout转换为3列。这并不完美 - 看起来,使用CSS,什么都不是 - 但这是一个开始。

My version有点乱,但它可以很容易地成为尝试做这种事情的人的开始。这是一个version with the left/right columns swapped

注意DOCTYPE - 如果它是HTML 4.01,它可能需要更改为XHTML Transitional;否则,布局可能无法在IE中运行。或者也许它可能。

2

你需要的是一个固定宽度的左列和固定宽度的右列和一个左右边距的中间列。

做到这一点的方法如下:

#col_left { 
    display: block; 
    position:absolute; 
    top:0; 
    left:0; 
    bottom:0; 
    width:200px; 
} 

#col_right { 
    display: block; 
    position:absolute; 
    top:0; 
    right:0; 
    bottom:0; 
    width: 200px; 
} 
#col_middle { 
    display: block; 
    position:absolute; 
    top:0; 
    right:0; 
    bottom:0; 
    right:0; 
    margin-left:200px; 
    margin-right:200px; 
} 
+0

谢谢,我会试试这个。看着它,它似乎巧合也会帮助我的另一个问题... – egasimus 2011-06-15 13:42:51

+0

我试过了,它部分工作 - 但容器div不拉伸的列,并且页脚也出现在顶部。 (请查看我原始文章中的第一个链接 - 它目前在那里) – egasimus 2011-06-15 13:56:11

+0

您可能需要将容器div放入col_middle中。页脚也需要绝对位置。如果页脚的高度为X,则每列都需要有底部:X. – 2011-06-15 14:06:32

2

我不知道如果我完全理解你的问题,但测试这个示例代码,看看它是否实现了你的目标是什么做(我用它打了很多,所以有可能是不需要的CSS的部分):

CSS:

* { margin:0; padding:0; border:none; } 
#header { 
    position:absolute; 
    top:0; 
    left:0; 
    right:0; 
    height:75px; 
    background-color:#666666; 
} 

#belowHeader { 
    position:absolute; 
    top:75px; 
    left:0; 
    right:0; 
    height:auto; 
    min-width:604px; 
    text-align:center; 
} 

#colLeft { 
    height:auto; 
    min-height:100px; 
    float:left; 
    width:200px; 
    background-color:#888888; 
} 
#colMiddle { 
    height:auto; 
    min-height:150px; 
    width:200px; 
    display:inline-block; 
    background-color:#999999; 
} 
#colRight { 
    float:right; 
    height:auto; 
    min-height:100px; 
    width:200px; 
    background-color:#888888; 
} 

#footer { 
    position:absolute; 
    bottom:-75px; 
    left:0; 
    right:0; 
    height:75px; 
    background-color:#666666; 
} 

HTML正文:

<div id="header"></div> 
<div id="belowHeader"> 
    <div id="colLeft"></div> 
    <div id="colMiddle"></div> 
    <div id="colRight"></div> 
    <div id="footer"></div> 
</div> 

我敢肯定的最小宽度和最小高度性能上IE6不会工作,但它是一个开始。如果您不害怕打破IE6或7,您可以使用display:table和display:table-cell来代替使用实际表格。

+0

谢谢(你的建议遭受同样的问题,但中心列拉伸,而不是包装。 – egasimus 2011-06-16 10:43:15

+0

@egasimus我不太清楚你的意思是包装。你是说你想要在中心div文本去下面左边和右边的列当它们的高度较小时 – BDawg 2011-06-16 12:26:49

+0

@egasimus啊,我刚刚在IE中测试了一下,它在中间div中没有​​包含文本时出现问题,那是什么意思? – BDawg 2011-06-16 12:45:43