强制元素的高度与同级元素相同?

Forcing element be the same height as sibling element?

提问人:Nick 提问时间:9/19/2012 最后编辑:Nick 更新时间:9/19/2012 访问量:8315

问:

我有以下标记:

[HTML全

<div class="container">
    <div class="sidebar">
        info <br/>
        info <br/>
    </div>
    <div class="post">
        post <br/>
        post <br/>
        post <br/>
        post <br/>
    </div>
</div>

CSS的

container {
    float:left;
    width:100%;
}
.sidebar {
    float:left;
    clear:both;
    background-color: #eee;
    width:150px;
}
.post {
    background-color: #ccc;
    margin-left:150px;
}

如何使用 HTML/CSS 强制侧边栏采用帖子的高度? 侧边栏和帖子的高度都可以更改大小,但帖子的高度总是大于侧边栏的高度。

JSFiddle:http://jsfiddle.net/KK4Yc/

html css (英语

评论


答:

0赞 Diodeus - James MacFarlane 9/19/2012 #1

如果容器的高度是固定的,那么是的,否则你需要使用 JavaScript。

   body, html { height:100% }

    .container {
        width:100%;
        height:500px;
        border:1px solid #ff0000
    }

#bg {
    background-color: #eee;
    width:150px;
    height: 100%;
    position: absolute; 
}
.sidebar {
    float:left;
    clear:both;
    background-color: #eee;
    width:150px;
    height: 100%;
    position:relative;
}

评论

0赞 Pebbl 9/19/2012
您的意思是将 body 和 html 设置为?我知道当您将元素捕捉到页面的整个高度时,这是必需的 - 但是对于将兄弟元素捕捉到容器的高度,您可能没有的意思?height:100%;.sidebar, .post { height: 100%; }
0赞 Diodeus - James MacFarlane 9/19/2012
不,你真的需要正文,html在那里,否则这将不起作用。
0赞 Pebbl 9/19/2012
好吧,我想我们会同意不同意这一点,但您仍然缺少将 .sidebar 和 .post 的高度设置为 100%。否则,这些元素将保持其默认高度,而不会按照 Nick 的要求执行。
2赞 j08691 9/19/2012 #2

没有 JavaScript 就无法做到这一点,除非你用假列来伪造它。如果你想使用jQuery,它是一行的:

​$('.sidebar').height($('.post').height());​

jsFiddle 示例

评论

0赞 nclsvh 5/4/2022
如果能包含一个JS版本:)那就太好了
0赞 d.k 9/19/2012 #3

正如 j08691 所说,可以通过 JS 来完成。 但是你可以尝试不同的方法,例如使用纯 css 在 中添加一个灰色的 bg-image,这样它看起来就像侧边栏延伸到底部,或者添加具有相同目的的附加元素 (FIDDLE):.container

.container {
    float:left;
    width:100%;
    overflow:hidden;
    position: relative;
}
#bg {
    background-color: #eee;
    width:150px;
    height: 100%;
    position: absolute; 
}
.sidebar {
    float:left;
    clear:both;
    background-color: #eee;
    width:150px;
    height: 100%;
    position:relative;
}


<div class="container">
    <div id="bg"></div>
-1赞 Pebbl 9/19/2012 #4

好吧,我不太确定为什么其他海报会如此长,您只需要利用 dom 元素自动具有的关系的好处:parent->child

.container {
  overflow: hidden;
  border: 1px solid #ff0000;
}

.sidebar {
  background-color: #eee;
  float: left;
  clear: both;
  width: 150px;
}

.sidebar-wrapper {
  background: #eee;
  overflow: hidden;
}

.post {
  margin-left: 150px;
  background-color: #ccc;
}

以上是您应该需要的所有 css(只要您有“固定颜色”或“重复背景图像”侧边栏),以下是标记:

<div class="container">
  <div class="sidebar-wrapper">
    <div class="sidebar">
      info <br/>
      info <br/>
    </div>
    <div class="post" style="background: green;">
      post <br/>
      post <br/>
      post <br/>
      post <br/>
    </div>
  </div>
</div>

显然(从 HTML/CSS 的角度来看相当烦人),如果你没有“纯色”或“重复背景”区域,那么你将不得不使用 j08691 的 javascript 方法或 Diodeus 的固定高度容器方法(尽管 Diodeus 现在似乎已经更改了代码并包含了 caligula 的部分答案——我猜是偶然的?