2011-04-01 61 views
0

enter image description here如何用html + css做这样的布局?

框是一些对象(按钮,标签,textarea)。格林的大小是动态的。特别是蓝盒子底部有问题。

+2

向我们展示您拥有的代码。 – tster 2011-04-01 23:35:39

+0

可能会更具体吗? – 2011-04-01 23:36:27

+0

@ thirty:fair'nuff – 2011-04-01 23:48:02

回答

0

Here's my solution →

这里的主要问题是,左栏不知道右栏有多高。

您可以将它们放在父项中(这将包装两列),但左侧列不会知道父级的高度,因为如果子元素的子元素只能展开到父元素的高度父元素的高度是明确设置的。

另外,这里有两个截然不同的列,所以我想尝试将它们尽可能接近它们显示的方式。将左栏放在右栏(绿框)内并不能准确地表示这是如何构成的。

HTML:

<div id="container"> 
    <div id="labelDiv"> 
     <label>I'm a label.</label> 
     <p>Text area, whatevs.</p> 
    </div> 

    <button>Hello</button> 

    <div id="greenBox"> 
     <p>Green box text.</p> 
    </div> 
</div> 

CSS:

#container { 
    width: 610px; 
    overflow: hidden; 
    position: relative; 
} 

#labelDiv { 
    width: 300px; 
    float: left; 
} 

button { 
    position: absolute; 
    bottom: 0; 
    left: 0; 
} 

#greenBox { 
    width: 310px; 
    float: left; 
} 

所以左边(除按钮以外)一切都向左浮动,并且还向左浮动的绿色方块。目前为止,但按钮需要知道整个盒子有多高,以便它可以将其自身附着到底部。因此,我们在外容器上设置overflowhidden,这样它就可以环绕浮动元素,并将按钮完全定位到其底部,使其与最高内部元素(绿色框​​)的底部完全对齐。

我还建议在#labelDiv上设置一些margin-bottom,这样它就不会遮住按钮。

+0

haa。是的,这正是我的意思。顺便说一句。我可以在哪里阅读有关CSS文档的HTML大小计算流程? – Clare 2011-04-02 02:30:01

+0

我推荐学习关于CSS浮动。 [NetTuts](http://www.nettuts.com)是一个很好的资源。但总的来说,我会避免需要像这样的技巧的布局。我很好奇这个应用程序在这里。 – clem 2011-04-02 18:54:19

+0

只是一个形式,因为这是我现在写的:) – Clare 2011-04-09 09:02:05

0

See example of the following →

只要指定了蓝色和红色的宽度,你可以使用relativeabsolute位置如下:

<div id="green"> 
    <label id="red">Label</label> 
    <button id="blue">Button</button> 
</div> 

#green { 
    position:relative; 
} 
#red { 
    width:100px; 
    position:absolute; left:-110px; top:0px; 
} 
#blue { 
    width:100px; 
    position:absolute; left:-110px; bottom:0px; 
} 
+0

是的,它们可以被分割。但如果他们不呢? – Clare 2011-04-02 00:05:43

+0

然后,你必须猜测'left'的值 – mVChr 2011-04-02 02:20:43

2

将持有人绕过它,它会采取高度从'绿色',并且只给予它们绝对值和最低值0,那么你给予元素的宽度无关紧要。

编辑:希望这对你有用,漂浮的元素,绿色的一个到右边,剩下的其余部分。

<div id="divHolder"> 
<label id="red">Label</label> 
<button id="blue">Button</button> 
<div id="green"> 
    a 
    </div> 
    <br class="clearFloat" /> 
</div> 

#divHolder { 
    width:300px; 
    position:relative; 

} 
#green { 
    height:300px; 
    background-color: green; 
    float:right; 
} 
#red { 
    background-color:red; 
    float:left; 
    position:absolute; 
} 
#blue { 
    background-color: blue; 
    bottom: 0; 
    position:absolute; 
} 
.clearFloat { 
clear:both; 
} 

看看这里: http://jsfiddle.net/YA9yD/32/

+0

是的。但它与mVChrs'相同。如果我不想放置绿色静态的左边缘怎么办? – Clare 2011-04-02 01:52:35

+0

我更新了小提琴,这是有点不同,可能不是正确的方式,但尝试它:)似乎做你想做什么,或至少我认为你想要的,il更新回答 – Lauw 2011-04-02 09:58:08